Modelul containerului

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Modelul de container (denumit și Model de conținere) este un model specific de programare orientată pe obiecte care permite, în anumite cazuri, o mai bună gestionare a încapsulării . Mai mult decât o construcție, ca orice model de proiectare, Containerul este o practică bună de urmat pentru a scrie cod mai inteligent și mai presus de toate sigur. A fost definit pentru prima dată de GoF ( Gang of Four ) în cartea „Design Patterns: Elements of Reusable Object Oriented Software” .

Funcționare și utilizare

Modelul propus rezolvă problema „crăpării” (înclinării) Encapsulării în situații de moștenire între clase . Moștenirea este un principiu foarte puternic al programării orientate pe obiecte, dar dacă este utilizat greșit, generează pierderi de securitate. În special, luați în considerare cazul în care doriți să extindeți funcționalitatea unei clase care implementează unele metode . Dacă am dori să creăm un obiect nou care, pe lângă implementarea tuturor metodelor clasei inițiale, modifică minim una dintre aceste metode, adică ar dori să adauge câțiva pași anteriori sau ulteriori algoritmului de bază, practica obișnuită ar fi fie să obțină din clasa părinte o nouă clasă, declarând metoda clasei de bază virtuală și suprascriind metoda ( Override ) în cea nouă. Cu toate acestea, acesta nu este cu siguranță modul corect de a rezolva această problemă, deoarece lasă libertatea oricui folosește clasa părinte pentru a suprascrie metoda virtuală fără discriminare. Nici măcar recurgerea la ascundere prin utilizarea noului cuvânt cheie nu rezolvă situația, de fapt principiile bune ale moștenirii nu ar mai fi respectate. Apoi, răspunsul vine de la Container Pattern, care constă în crearea unei clase noi în care un obiect al clasei noastre inițiale va fi atribuit ca un câmp al clasei, iar ulterior noua clasă creată va implementa o metodă în care vom introduce noi pași ai algoritmului, în plus față de un apel către algoritmul de bază prin instanța clasei părinte. Pentru o mai mare claritate, vă rugăm să consultați exemplul propus.

Exemplu

În exemplul propus, scris în C # , dorim să extindem metoda drinkSomething din clasa Guy. Soluția cu utilizarea unei clase derivate este prezentată mai jos.

 clasa Guy
    {
        // Câmpuri de clasă și constructor
        // ...
        // Metoda declarată virtuală
        băutură publică virtuală nulă Something ()
        {
            // algoritm de bază
            Consolă . WriteLine ( "Îmi place foarte mult! Mulțumesc!" );
        }
        // ...
    }
    // Practică obișnuită: moștenire
    // Sunt derivat din clasa Guy
clasa Gentleman : Guy
    {
        // Apel la constructor (bază)
        // ...
        public override void drinkSomething ()
        {
            // apel la metoda clasei părinte
            // algoritm de bază
            bază . beaCeva ();
            //plus
            Consolă . WriteLine ( „Vrei niște?” );
        }
        // ...
    }

În schimb, aceasta este rezolvarea problemei cu utilizarea modelului de container. Se înțelege că metoda drinkSomething nu mai este declarată virtuală.

 clasa Gentleman
    {
        // Apel la constructor (bază)
        // Domeniul clasei gentleman:
        // instanță a clasei Guy
        Guy johnny = tip nou ();
        // ...
        drinkSomething public void ()
        {
            // apel la metoda clasei părinte
            // algoritm de bază
            Johnny . beaCeva ();
            //plus
            Consolă . WriteLine ( „Vrei niște?” );
        }
        // ...
    }

linkuri externe

Inversiunea containerelor de control și modelul de injecție de dependență de Martin Fowler articol care introduce modelul de control al inversiunii și soluția folosind containere

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT