Mógłby mi ktoś przedstawić na czym polega kompozycja, agregacja i asocjacja.
Czy jeżeli klasa zdjęcie tworzy punkty np. Punkt punkty[200][200]; to jest to kompozycja?
Agregacja, kompozycja, asocjacja
- Rejestracja: dni
- Ostatnio: dni
- Postów: 41
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5023
Co do części pierwszej, to po co się powtarzać:
- https://pl.wikipedia.org/wiki/Agregacja_(programowanie_obiektowe)
- https://pl.wikipedia.org/wiki/Asocjacja_(programowanie_obiektowe)
- https://www.geeksforgeeks.org/association-composition-aggregation-java/
A drugie, nie, raczej niekoniecznie; kompozycją byłoby wtedy gdyby klasa Punkt była wewnąrz klasy Zdjęcie. Np.:
class List {
class Node {
}
head = Node()
}
- Rejestracja: dni
- Ostatnio: dni
Ja to zawsze upraszczałem do
- Asocjacja - klasa przyjmuje coś jako parametr metody.
- Agregacja - klasa przyjmuje coś w konstruktorze/setterze i zapisuje do pola.
- Kompozycja - klasa sama tworzy obiekt i zarządza jego czasem życia.
Nie jest to w 100% zgodne z definicjami, ale po wyjściu z uniwersytetu wystarczy do szczęścia.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5023
Z Wikipedii: "Szczególnym przypadkiem agregacji jest kompozycja, która oznacza składanie się obiektu z obiektów składowych, które nie mogą istnieć bez obiektu głównego". W ogóle jeszcze nie Stworzyłeś obiektu, ale załóżmy, że tak, to kompozycja będzie wtedy, jeśli obiekt należy do klasy i zniknie wraz ze zniknięciem obiektu go posiadającego. Żeby to zaszło, to definicja klasy Punkt musi być w środku klasy Zdjecie, albo go usuwać w destruktorze.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 3573
Czyli w takim przypadku powinnno się mówić agregacja ponad dzieczenie a nie kompozycja ponad dziedziczenie :D
- Rejestracja: dni
- Ostatnio: dni
- Postów: 139
To co jest, w jakiej klasie i jak nie ma większego znaczenia . Tu chodzi o związek logiczny pomiędzy przedmiotami - aktorami a nie techniczną implementacje. Bardziej podoba mi się określenie agregacja całkowita i częściowa, niż kompozycja i aggregacja - lepiej obrazuje, o co chodzi.
Dla przykładu:
Makrek ma bilet. <--- agregacja częściowa (Bilet może istnieć bez Marka)
Kino posiada ograniczoną ilość biletów <--- agregacja całkowita (Jeśli nie ma kina to nie ma biletu)
scibi92 napisał(a):
Czyli w takim przypadku powinnno się mówić agregacja ponad dzieczenie a nie kompozycja ponad dziedziczenie :D
Dziedziczenie to bardziej "uogólnienie"
Afish napisał(a):
Ja to zawsze upraszczałem do
- Asocjacja - klasa przyjmuje coś jako parametr metody.
- Agregacja - klasa przyjmuje coś w konstruktorze/setterze i zapisuje do pola.
- Kompozycja - klasa sama tworzy obiekt i zarządza jego czasem życia.
Nie jest to w 100% zgodne z definicjami, ale po wyjściu z uniwersytetu wystarczy do szczęścia.
Ja bym powiedział, że jest to definicja uniwersytecka, czyli regułka, która akurat najbardziej odpowiadała wykładowcy, który nie ma pojęcia o programowaniu i w ogóle o niczym, po prostu wygrzebał to gdzieś z Google. Zwłaszcza punkt pierwszy jest typowo uniwersytecki.