Zawieranie

VarrComodoo

Zawieranie jest jedną z metod budowania nowych klas, polega na składaniu klasy z innych typów. Czyli wynikiem takiego sposobu budowania klasy jest nowa klasa która zawiera w sobie inne typy.

Technikę zawierania dzieli się na dwa rodzaje:

  • Agregację – tego typu zawieranie, charakteryzuje się lekką relacją typu głównego z zawartymi w nim typami. Typy z wnętrza agregatu mogą istnieć w systemie jako niezależne obiekty i podlegać zmianom niezależnie od tych zawartych w agregacie. Agregat nie ma pełnej kontroli nad modyfikacją typów zawartych w nim. Jeżeli obiekt agregatu przestaje istnieć w systemie to zawarte w nim podtypy mogą istnieć w systemie dalej.

Przykład stolika ale w kontekście stolarni albo jakiegoś zakładu odrestaurowującego stare meble. Tam nóżki, blaty śrubki i inne składowe mają sens i mogą istnieć niezależnie bez siebie nawzajem.

  • Kompozycję – tego typu zawieranie, charakteryzuje się silną relacją typu głównego z typami w nim zawartymi, Jego składowe typy nie istnieją w systemie poza typem głównym. Dostać się do składowych typów, można jedynie poprzez typ główny i tylko poprzez typ główny można je modyfikować. Jeżeli obiekt główny przestaje istnieć w systemie to razem z nim przestają istnieć jego podtypy.

Przykład stolika ale w kontekście zwykłego konsumenta, jeżeli w stoliku odpadnie noga to wg konsumenta stolik się zepsuł i idzie jako całość do kosza.

Przykład:

    public class Stolik
    {        
        public Blat Blat { get; private set; }
        public NogaStolowa[] Nogi = new NogaStolowa[4];

        public Stolik(Color kolor, Material material, int wysokosc, int szerokosc, int dlugosc)
        {
            Blat = new Blat(kolor, material, szerokosc, dlugosc);
            Nogi[1] = new NogaStolowa(kolor, material, wysokosc);
            Nogi[2] = new NogaStolowa(kolor, material, wysokosc);
            Nogi[3] = new NogaStolowa(kolor, material, wysokosc);
            Nogi[4] = new NogaStolowa(kolor, material, wysokosc);
        }

        public string StoliczkuNakryjSie()
        {
            return "Nakryto do stolu.";
        }
    }

    public class Blat
    {
        public int Szerokosc { get; private set; }
        public int Dlugsc { get; private set; }

        public Color KolorWykonczenia { get; private set; }
        public Material MaterialWykonczenia { get; private set; }

        public Blat(Color kolor, Material material, int szerokosc, int dlugosc)
        {
            this.Szerokosc = szerokosc;
            this.Dlugsc = dlugosc;
            this.KolorWykonczenia = kolor;
            this.MaterialWykonczenia = material;
        }
    }

    public class NogaStolowa
    {
        public int Wysokosc { get; private set; }

        public Color KolorWykonczenia { get; private set; }
        public Material MaterialWykonczenia { get; private set; }

        public NogaStolowa(Color kolor, Material material, int wysokosc)
        {
            this.Wysokosc = wysokosc;
            this.KolorWykonczenia = kolor;
            this.MaterialWykonczenia = material;
        }
    }

0 komentarzy