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;
}
}