Witam, mam pewien problem odnośnie relacji jakie mamy pomiędzy klasami, czyli asocjacja, agregacja, itd. W teorii w miarę to rozumiem, większej filozofii z tym nie ma. Problem pojawia się w praktyce, tzn. kiedy jakiego związku należy użyć oraz co nurtuje mnie jeszcze bardziej jak wygląda realizacja tego w kodzie programu. Czy mógłby ktoś na jakimś konkretnych przykładach (dobrze by było z jakimś krótkim kodem) wyjaśnić co z czym się je?
Wez sobie dowolne narzedzie do modelowania UML, utworz diagram klas i wybierz opcje wygenerowania kodu dla diagramu to bedziesz widzial.
Skoro tak to w drugą stronę, po napisaniu jakiegoś kodu i wygenerowaniu diagramu też będę to mieć. Ale okazuje się, że diagram przedstawiony przez Visual Studio jakoś tego nie wyjaśnia. Chcę mieć po prostu krótkie wyjasnienie w paru linijkach. Np. jak mam klasę A z polami X, Y oraz klasę B, która dziedziczy po A i ma jeszcze pole Z to wygląda to tak:
class A
{
protected int X;
protected int Y;
public A(int X, int Y)
{
this.X=X;
this.Y=Y;
}
}
class B:A
{
private int Z;
public B(int X, int Y, int Z):base(X,Y)
{
this.Z=Z;
}
}
Do tego oczywiście dochodzą właściwości i metody, ale chodzi mi o sam fakt przedstawienia mechanizmu dziedziczenia w tym wypadku. Jak wygląda taki przykład dla zależności, asocjacji, agregacji i kompozycji?
Czy taka linijka kodu w klasie B:
private List<A> punkty = new List<A>();
świadczyłaby o agregacji? Jak powinien wtedy wyglądać poprawnie napisany konstruktor?
MalinowaMamba napisał(a):
Jak powinien wtedy wyglądać poprawnie napisany konstruktor?
To zależy od tego, co ten konstruktor ma robić.
Asocjacja to pole innego typu w klasie.
Agregacja i kompozycja to kolekcje danego typu w klasie.
Ok, ale jak np. dostaniesz pytanie na lekcji czy tam na zajęciach: Proszę zrobić dwie klasy, wymyślić jakieś pola do nich i przedstawić przykład kodu pokazujący że związek pomiędzy klasami jest np. asocjacją czy tam agregacją, itp. to co w takiej sytuacji napisać? Jak pokazać na kodzie tą różnicę?
No asocjacja to jeden obiekt, agregacja to kolekcja, różnica chyba zasadnicza nawet dla nauczyciela czy wykładowcy...
Jak opowiadasz o swoim programie i klasach w nim zawartych, to jeśli korzystasz z przymiotnika "jest" (Kwadrat jest figurą) to jest dziedziczenie.
Jeśli korzystasz z "ma" (Kwadrat ma 4 wierzchołki) to jest to kompozycja.
Chyba, że źle opowiadasz to może tak nie być ;)