Jaka jest różnica między skojarzeniem, agregacją i kompozycją? Proszę wyjaśnić w zakresie realizacji.
oop
uml
associations
aggregation
composition
domyślne ustawienia regionalne
źródło
źródło
Odpowiedzi:
Dla dwóch obiektów,
Foo
aBar
relacje można zdefiniowaćSkojarzenie - mam związek z przedmiotem.
Foo
wykorzystujeBar
Kompozycja - jestem właścicielem obiektu i jestem odpowiedzialny za jego żywotność. Kiedy
Foo
umiera, to samoBar
Agregacja - mam przedmiot, który pożyczyłem od kogoś innego. Kiedy
Foo
umiera,Bar
może żyć.źródło
Bar
obiekt może żyć.Wiem, że to pytanie jest oznaczone jako C #, ale pojęcia to dość ogólne pytania, takie jak przekierowanie tutaj. Przedstawię tutaj mój punkt widzenia (nieco stronniczy z punktu widzenia java, gdzie czuję się bardziej komfortowo).
Kiedy myślimy o obiektowej naturze, zawsze myślimy o przedmiotach, klasie (schemacie obiektów) i relacjach między nimi. Obiekty są powiązane i oddziałują na siebie metodami. Innymi słowy, obiekt jednej klasy może korzystać z usług / metod świadczonych przez obiekt innej klasy. Ten rodzaj relacji określa się jako asocjację. .
Agregacja i kompozycja to podzbiory skojarzenia, co oznacza, że są szczególnymi przypadkami skojarzenia.
Zmieszany?
Przykład składu : Rozważ przykład samochodu i silnika, który jest bardzo specyficzny dla tego samochodu (co oznacza, że nie można go używać w żadnym innym samochodzie). Ten rodzaj relacji między samochodem a konkretnym silnikiem klasą nazywa się Composition. Obiekt klasy Car nie może istnieć bez obiektu klasy SpecificEngine, a obiekt SpecificEngine nie ma znaczenia bez klasy Car. Krótko mówiąc, klasa Car wyłącznie „jest właścicielem” klasy SpecificEngine.
Przykład agregacji : Teraz rozważ klasę Samochód i Koło klasy . Samochód potrzebuje obiektu Wheel do działania. Oznacza to, że obiekt Car posiada obiekt Wheel, ale nie możemy powiedzieć, że obiekt Wheel nie ma znaczenia bez obiektu Car. Może być bardzo dobrze stosowany w rowerze, ciężarówce lub innym obiekcie samochodowym.
Podsumowując -
Podsumowując, asocjacja jest bardzo ogólnym terminem stosowanym do przedstawienia, kiedy klasa korzysta z funkcjonalności dostarczonych przez inną klasę. Mówimy, że jest to kompozycja, jeśli jeden obiekt klasy nadrzędnej jest właścicielem innego obiektu klasy podrzędnej, a ten obiekt klasy podrzędnej nie może istnieć sensownie bez obiektu klasy nadrzędnej. Jeśli tak, to nazywa się Agregacja.
Więcej informacji tutaj. Jestem autorem strony http://opensourceforgeeks.blogspot.in i dodałem link powyżej do odpowiedniego postu, aby uzyskać więcej informacji.
źródło
Stowarzyszenie jest uogólnioną koncepcją relacji. Obejmuje zarówno skład, jak i agregację.
Kompozycja ( mieszanina ) to sposób na zawinięcie prostych obiektów lub typów danych w jedną jednostkę . Kompozycje są kluczowym elementem składowym wielu podstawowych struktur danych
Agregacja ( kolekcja ) różni się od zwykłego składu tym, że nie implikuje własności. W składzie, gdy obiekt będący właścicielem jest niszczony, tak samo jak obiekty zawarte. Podsumowując, niekoniecznie jest to prawda.
Sztuczka, aby zapamiętać różnicę: ma A - A agregacja i O wn - c O mpositoin
Teraz obserwuj następujący obraz
Analogia:
Kompozycja : Poniższe zdjęcie to kompozycja obrazu, tzn. Użycie pojedynczych zdjęć w celu utworzenia jednego obrazu.
Agregacja : zbiór obrazów w jednym miejscu
Na przykład uniwersytet posiada różne wydziały, a każdy wydział ma wielu profesorów. Jeśli uniwersytet zostanie zamknięty, wydziały przestaną istnieć, ale profesorowie na tych wydziałach będą nadal istnieć. Dlatego uniwersytet może być postrzegany jako kompozycja wydziałów, podczas gdy wydziały mają agregację profesorów. Ponadto profesor może pracować na więcej niż jednym wydziale, ale wydział nie może być częścią więcej niż jednego uniwersytetu.
źródło
Zależność (referencje)
Oznacza to, że nie ma koncepcyjnego powiązania między dwoma obiektami. np. referencje do obiektów EnrollmentService Obiekty dla studentów i przedmiotów (jako parametry metody lub typy zwracane)
Skojarzenie (has-a)
Oznacza to, że prawie zawsze istnieje związek między obiektami (są one powiązane). Obiekt zamówienia ma obiekt klienta
Agregacja (has-a + cała część)
Specjalny rodzaj powiązania, w którym istnieje relacja całości między dwoma obiektami. mogą jednak żyć bez siebie.
Uwaga: najtrudniejszą częścią jest odróżnienie agregacji od normalnego skojarzenia. Szczerze mówiąc, myślę, że jest to otwarte na różne interpretacje.
Skład (ma + część + własność)
Specjalny rodzaj agregacji. An
Apartment
składa się z niektórychRoom
s. NieRoom
może istnieć bezApartment
. po usunięciu mieszkania usuwane są również wszystkie powiązane pokoje.źródło
Z postu Roberta Martina w komp. Obiekt :
Skojarzenie oznacza zdolność jednego wystąpienia do wysłania wiadomości do innego wystąpienia. Zwykle jest to implementowane za pomocą zmiennej wskaźnika lub odwołania do instancji, chociaż może być również implementowane jako argument metody lub tworzenie zmiennej lokalnej.
Agregacja [...] jest typową relacją całość / część. Jest to dokładnie to samo, co skojarzenie z wyjątkiem tego, że instancje nie mogą mieć cyklicznych relacji agregacyjnych (tzn. Część nie może zawierać całości).
Fakt, że jest to agregacja, oznacza, że instancje węzła nie mogą tworzyć cyklu. Zatem jest to Drzewo Węzłów, a nie wykres Węzłów.
Skład [...] jest dokładnie taki, jak agregacja, z wyjątkiem tego, że czas życia „części” jest kontrolowany przez „całość”. Ta kontrola może być bezpośrednia lub przechodnia. Oznacza to, że „całość” może wziąć bezpośrednią odpowiedzialność za utworzenie lub zniszczenie „części” lub może zaakceptować już utworzoną część, a następnie przekazać ją innej osobie, która bierze za nią odpowiedzialność.
źródło
Jak powiedzieli inni, powiązanie to związek między obiektami, agregacja i kompozycja to rodzaje powiązań.
Z punktu widzenia implementacji agregację uzyskuje się poprzez posiadanie członka klasy przez odniesienie . Na przykład, jeśli klasa A agreguje obiekt klasy B, będziesz mieć coś takiego (w C ++):
Semantyka agregacji polega na tym, że gdy obiekt A zostanie zniszczony, przechowywany obiekt B nadal będzie istniał. Podczas korzystania z kompozycji istnieje silniejszy związek, zwykle poprzez przechowywanie członka według wartości :
Tutaj, gdy obiekt A zostanie zniszczony, obiekt B, który zawiera, również zostanie zniszczony. Najłatwiejszym sposobem na osiągnięcie tego jest przechowywanie elementu pod względem wartości, ale można również użyć inteligentnego wskaźnika lub usunąć element członkowski w destruktorze:
Ważne jest to, że w kompozycji obiekt kontenerowy jest właścicielem zawartego obiektu , podczas gdy w agregacji odwołuje się do niego.
źródło
To zadziwiające, jak wiele zamieszania wiąże się z rozróżnieniem między powiązaniem , agregacją i kompozycją trzech koncepcji relacji .
Zauważ, że agregacja i skład terminów były używane w społeczności C ++, prawdopodobnie przez pewien czas, zanim zostały zdefiniowane jako specjalne przypadki skojarzenia w diagramach klas UML.
Głównym problemem jest powszechne i ciągłe nieporozumienie (nawet wśród ekspertów programistów), że koncepcja kompozycji zakłada zależność cyklu życia między całością i jej częściami, tak że części nie mogą istnieć bez całości, ignorując fakt, że istnieją również przypadki skojarzeń części-całość z częściami niepodzielnymi, w których części można oddzielić i przetrwać zniszczenie całości.
O ile mi wiadomo, to zamieszanie ma dwa źródła:
W społeczności C ++ termin „agregacja” był używany w znaczeniu klasy definiującej atrybut do odwoływania się do obiektów innej niezależnej klasy (patrz np. [1]), co oznacza poczucie asocjacji w diagramach klas UML. Termin „kompozycja” został użyty dla klas, które definiują obiekty składowe dla swoich obiektów, tak że przy zniszczeniu obiektu złożonego te obiekty składowe są również niszczone.
Na diagramach klas UML zarówno „agregacja”, jak i „kompozycja” zostały zdefiniowane jako specjalne przypadki skojarzeń reprezentujących relacje części-całości (które były omawiane w filozofii od dłuższego czasu). W ich definicjach rozróżnienie między „agregacją” a „kompozycją” opiera się na fakcie, że umożliwia podział części między dwiema lub więcej całościami. Definiują „kompozycje” jako posiadające części, których nie można udostępniać (na wyłączność), podczas gdy „agregacje” mogą udostępniać swoje części. Ponadto mówią coś takiego: bardzo często, ale nie we wszystkich przypadkach, kompozycje cechują się zależnością cyklu życia między całością i jej częściami, tak że części nie mogą istnieć bez całości.
Tak więc, podczas gdy UML umieścił terminy „agregacja” i „kompozycja” we właściwym kontekście (relacji całość-część), nie udało się ich zdefiniować w jasny i jednoznaczny sposób, wychwytując intuicje programistów. Nie jest to jednak zaskakujące, ponieważ istnieje tak wiele różnych właściwości (i niuansów implementacyjnych), jakie mogą mieć te relacje, a programiści nie zgadzają się, jak je wdrożyć.
Zobacz także moją rozszerzoną odpowiedź na pytanie SO z kwietnia 2009 r. Wymienioną poniżej.
A właściwość, która została przyjęta do zdefiniowania „kompozycji” między obiektami OOP w społeczności C ++ (i to przekonanie jest nadal powszechnie utrzymywane): zależność cyklu życia między dwoma powiązanymi obiektami (kompozytem i jego składnikiem), jest niezbyt charakterystyczne dla „kompozycji”, ponieważ możemy mieć takie zależności ze względu na integralność referencyjną również w innych typach skojarzeń.
Na przykład w odpowiedzi SO zaproponowano następujący wzorzec kodu dla „składu” :
Respondent twierdził, że charakterystyczne dla „kompozycji” byłoby to, że żadna inna klasa nie mogła odwoływać się do komponentu / znać go. Jednak z pewnością nie jest to prawdą we wszystkich możliwych przypadkach „składu”. W szczególności, w przypadku silnika samochodu, producent samochodu, być może wdrożony przy pomocy innej klasy, może być zmuszony odwołać się do silnika, aby móc skontaktować się z właścicielem samochodu, ilekroć jest z tym problem.
[1] http://www.learncpp.com/cpp-tutorial/103-aggregation/
Dodatek - Niekompletna lista często zadawanych pytań na temat składu i agregacji w StackOverflow
[ Kwi 2009 ]
Agregacja a kompozycja [zamknięte jako oparte głównie na opiniach]
[ kwi 2009 ]
Jaka jest różnica między kompozycją a związkiem?
[ Maj 2009 ]
Różnica między skojarzeniem, agregacją a składem
[ Maj 2009 ]
Jaka jest różnica między składem a agregacją? [duplikat]
[ paź 2009 ]
Jaka jest różnica między agregacją, składem i zależnością? [oznaczone jako duplikat]
[ lis 2010 ]
Association vs. Aggregation [oznaczone jako duplikat]sie 2012 ]
[
Różnica w implementacji między agregacją a kompozycją w Javie
[ luty 2015 ]
UML - asocjacja lub agregacja (proste fragmenty kodu)
źródło
Stowarzyszenie
Skojarzenie reprezentuje związek między dwiema klasami. Może być jednokierunkowy (w jedną stronę) lub dwukierunkowy (w dwie strony)
na przykład:
Zbiór
Agregacja jest rodzajem skojarzenia, ale z określonymi cechami. Agregacja jest relacją w jednej większej „całej” klasie zawiera jedną lub więcej mniejszych klas „części”. Przeciwnie, mniejsza klasa „części” jest częścią „całej” większej klasy .
na przykład:
Klub („cały”) składa się z kilku członków klubu („części”). Członek ma życie poza klubem. Gdyby klub („cały”) miał umrzeć, członkowie („części”) nie zginęliby razem z nim. Ponieważ członek może należeć do wielu klubów („cały”).
Kompozycja
Jest to silniejsza forma agregacji. „Całość” odpowiada za tworzenie lub niszczenie jej „części”
Na przykład:
W tym przypadku szkoła („cała”) miałaby umrzeć, a wydział („części”) umarłby wraz z nią. Ponieważ każda część może należeć tylko do jednej „całości”.
źródło
class Club(){ _member = new Member }
lub przekazać jako odniesienieclass Club(){ addMember(Member member) { this._member = member } }
Ważne jest, aby zrozumieć, dlaczego powinniśmy zawracać sobie głowę używaniem więcej niż jednej linii relacji. Najbardziej oczywistym powodem jest opisanie relacji rodzic-dziecko między klasami (kiedy rodzic usunął wszystkie swoje dziecko jest w rezultacie usunięte), ale bardziej bezsilnie chcemy rozróżnić proste powiązanie i skład w celu nałożenia ukrytych ograniczeń na widoczność i propagowanie zmian w pokrewnych klasach, co odgrywa istotną rolę w zrozumieniu i zmniejszeniu złożoności systemu.
Najbardziej abstrakcyjnym sposobem opisania statycznego związku między klasami jest użycie łącza asocjacyjnego, które po prostu stwierdza, że istnieje jakiś rodzaj łącza lub zależności między dwiema klasami lub więcej.
Słabe skojarzenie
Klasa A może być powiązana z klasą B, aby pokazać, że jedna z jej metod obejmuje parametr instancji klasy B lub zwraca instancję klasy B.
Silne stowarzyszenie
Klasa A może być również powiązana z klasą B, aby pokazać, że zawiera odwołanie do instancji klasy B.
W przypadkach, w których istnieje część relacji między klasą A (całą) a klasą B (część), możemy być bardziej konkretni i użyć linku agregacyjnego zamiast linku asocjacyjnego, podkreślając, że klasę B można również agregować według innych klas w aplikacji ( dlatego agregacja jest również znana jako asocjacja wspólna).
Ważne jest, aby pamiętać, że link agregacyjny nie wskazuje w żaden sposób, że ClassA jest właścicielem ClassB, ani że istnieje relacja rodzic-dziecko (gdy rodzic usunie wszystkie swoje dziecko jest usuwane) między nimi. Wręcz przeciwnie! Łącze agregacyjne zwykle używane do podkreślenia, że klasa A nie jest wyłącznym kontenerem klasy B, ponieważ w rzeczywistości klasa B ma inny kontener.
Agregacja a asocjacja Link asocjacji może zastąpić link agregacji w każdej sytuacji, podczas gdy agregacja nie może zastąpić asocjacji w sytuacjach, w których istnieje tylko „słabe powiązanie” między klasami, tj. Klasa A ma metody, które zawierają parametr klasy B, ale klasa A nie przytrzymaj odwołanie do wystąpienia klasy B.
Martin Fowler sugeruje, że link agregacyjny nie powinien być w ogóle stosowany, ponieważ nie ma żadnej wartości dodanej i zaburza spójność, cytując Jim Rumbaugh „Pomyśl o tym jak o modelującym placebo”.
Powinniśmy być bardziej konkretni i używać linku kompozycji w przypadkach, gdy oprócz części relacji między klasą A i klasą B - istnieje silna zależność między nimi w cyklu życia, co oznacza, że po usunięciu klasy A, w wyniku tego klasa B również zostaje usunięta
Łącze kompozycji pokazuje, że klasa (kontener, całość) ma wyłączną własność nad innymi klasami (częściami), co oznacza, że obiekt kontenera i jego części stanowią relację rodzic-dziecko.
W przeciwieństwie do asocjacji i agregacji, w przypadku korzystania z relacji kompozycji klasa złożona nie może pojawiać się jako typ zwracany lub typ parametru klasy złożonej. W związku z tym zmiany w klasie złożonej nie mogą rozprzestrzeniać się na resztę systemu. W konsekwencji użycie kompozycji ogranicza wzrost złożoności wraz ze wzrostem systemu.
Złożoność systemu można zmierzyć po prostu patrząc na diagram klasy UML i oceniając linie powiązania, agregacji i składu. Metodą pomiaru złożoności jest określenie, na ile klas wpływ może mieć zmiana określonej klasy. Jeśli klasa A eksponuje klasę B, to teoretycznie wpływ na każdą klasę korzystającą z klasy A mogą mieć zmiany w klasie B. Suma liczby klas potencjalnie dotkniętych przez każdą klasę w systemie stanowi całkowitą złożoność systemu.
Możesz przeczytać więcej na moim blogu: http://aviadezra.blogspot.com/2009/05/uml-association-aggregation-composition.html
źródło
class Person() { private hand = new Hand }
. Agregacja snu Osobaclass Person() { private sleep = new Sleep }
Czy jest poprawna, użyj klucza „nowy” w trybie uśpienia? czy powinienem przekazać go jako odniesienie, ponieważ jest agregacją?class Person() { private Sleep _sleep; public addSleep(Sleep sleep) { this._sleep = sleep} }
Kompozycja (jeśli usuniesz „całość”, „część” zostanie również automatycznie usunięta - „Własność”)
Twórz obiekty swojej istniejącej klasy w nowej klasie. Nazywa się to kompozycją, ponieważ nowa klasa składa się z obiektów istniejących klas.
Zwykle używaj normalnych zmiennych składowych.
Może używać wartości wskaźnika, jeśli klasa kompozycji automatycznie obsługuje alokację / dezalokację odpowiedzialną za tworzenie / niszczenie podklas.
Kompozycja w C ++
Wynik
Agregacja (jeśli usuniesz „całość”, „Część” może istnieć - „Brak własności”)
Agregacja jest szczególnym typem kompozycji, w której nie sugeruje się żadnej własności między złożonym obiektem a podobiektami. Gdy agregat jest niszczony, podobiekty nie są niszczone.
Zazwyczaj używaj zmiennych wskaźnikowych / zmiennych referencyjnych, które wskazują na obiekt, który żyje poza zakresem klasy agregującej
Może używać wartości referencyjnych wskazujących na obiekt, który żyje poza zakresem klasy agregującej
Nie odpowiada za tworzenie / niszczenie podklas
Kod agregacyjny w C ++
Wynik
źródło
Problem z tymi odpowiedziami jest taki, że stanowią one połowę historii: wyjaśniają, że agregacja i kompozycja są formami skojarzeń, ale nie twierdzą, czy możliwe jest, aby żadne z nich nie było.
Na podstawie krótkich odczytów wielu postów na temat SO i niektórych dokumentów UML uznaję, że istnieją 4 główne konkretne formy stowarzyszenia klas:
Kiedy relacja między dwoma bytami nie jest jedną z nich, można ją po prostu nazwać „skojarzeniem” w ogólnym znaczeniu tego słowa i dalej opisywać inne sposoby (uwaga, stereotyp itp.).
Domyślam się, że „ogólne skojarzenie” ma być stosowane przede wszystkim w dwóch okolicznościach:
źródło
Myślę, że ten link odrobi pracę domową: http://ootips.org/uml-hasa.html
Aby zrozumieć warunki, pamiętam przykład z moich wczesnych dni programowania:
Jeśli masz obiekt „szachownicy”, który zawiera obiekty „pudełka” będące kompozycją, ponieważ usunięcie „szachownicy” nie ma już powodu, aby istniały pola.
Jeśli masz obiekt „kwadratowy”, który ma obiekt „kolorowy”, a kwadrat zostanie usunięty, obiekt „kolorowy” może nadal istnieć, czyli agregacja
Oba są skojarzeniami , główna różnica dotyczy pojęć
źródło
Kompozycja : w tym momencie, gdy zniszczysz obiekt (szkołę), inny obiekt (klasy), który jest z nim związany, również zostanie zniszczony. Oba nie mogą istnieć niezależnie.
Agregacja : jest to coś dokładnie przeciwnego do powyższego (
Composition
) powiązania, w którym po zabiciu obiektu (Company
) drugiEmployees
związany z nim obiekt ( ) może istnieć samodzielnie.Stowarzyszenie .
Skład i agregacja to dwie formy asocjacji.
źródło
źródło
W bardzo prostym zdaniu:
Agregacja i Kompozycja są podzbiorami asocjacji.
A używa B -> jest to agregacja
Potrzeba B -> to kompozycja.
Przeczytaj więcej tutaj .
źródło
Chciałbym zilustrować, w jaki sposób te trzy warunki są zaimplementowane w Railsach. ActiveRecord nazywa dowolny rodzaj relacji między dwoma modelami
association
. Bardzo często nie można znaleźć warunków,composition
aaggregation
podczas czytania dokumentacji lub artykułów związanych z ActiveRecord. Powiązanie jest tworzone przez dodanie jednego z makr klasy asocjacji do treści klasy. Niektóre z tych makrbelongs_to
,has_one
,has_many
etc ..Jeśli chcemy uruchamiamy
composition
alboaggregation
musimy dodaćbelongs_to
do posiadanego modelu (zwany także dzieci) ihas_one
czyhas_many
do modelu posiadającego (zwany także dominującej). Wether skonfigurowaliśmycomposition
lubaggregation
zależy od opcji, które przekazujemy dobelongs_to
połączenia w modelu potomnym. Przed Railsami 5, konfigurowaniebelongs_to
bez żadnych opcji stworzonychaggregation
, dziecko mogło istnieć bez rodzica. Jeśli chcieliśmy acomposition
, musieliśmy to wyraźnie zadeklarować, dodając opcjęrequired: true
:W Rails 5 zostało to zmienione. Teraz, zadeklarowanie
belongs_to
powiązania tworzycomposition
domyślnie, że dziecko nie może istnieć bez rodzica. Powyższy przykład może zostać przepisany jako:Jeśli chcemy, aby obiekt potomny istniał bez elementu nadrzędnego, musimy to wyraźnie zadeklarować za pomocą opcji
optional
źródło
Od: książka Remo H. Jansen „Beginning React: Learning TypeScript 2.x - Second Edition”:
Nazywamy stowarzyszeniem relacjami, których obiekty mają niezależny cykl życia, w którym nie ma własności tych obiektów. Spójrzmy na przykład nauczyciela i ucznia. Wielu uczniów można powiązać z jednym nauczycielem, a jednego ucznia można powiązać z wieloma nauczycielami, ale obaj mają niezależne cykle życia (obaj mogą tworzyć i usuwać niezależnie). Kiedy więc nauczyciel opuszcza szkołę, nie musimy usuwać żadnych uczniów, a kiedy uczeń opuszcza szkołę, nie musimy usuwać żadnych nauczycieli.
Nazywamy agregacją relacjami, których obiekty mają niezależny cykl życia, ale istnieje własność, a obiekty potomne nie mogą należeć do innego obiektu nadrzędnego. Weźmy przykład telefonu komórkowego i baterii telefonu komórkowego. Pojedyncza bateria może należeć do telefonu, ale jeśli telefon przestanie działać, a my usuniemy go z naszej bazy danych, bateria telefonu nie zostanie usunięta, ponieważ może nadal działać. Podsumowując, dopóki istnieje własność, obiekty mają swój cykl życia
Używamy terminu „ skład” w odniesieniu do relacji, których obiekty nie mają niezależnego cyklu życia, a jeśli obiekt nadrzędny zostanie usunięty, wszystkie obiekty podrzędne również zostaną usunięte. Weźmy przykład związku między pytaniami a odpowiedziami. Pojedyncze pytania mogą mieć wiele odpowiedzi, a odpowiedzi nie mogą należeć do wielu pytań. Jeśli usuniemy pytania, odpowiedzi zostaną automatycznie usunięte.
źródło
Skojarzenie jest relacją między dwiema odrębnymi klasami, a powiązanie może być dowolnego typu, powiedzmy jeden do jednego, jeden do maja itp. Łączy dwa całkowicie odrębne byty.
Agregacja to specjalna forma asocjacji, która jest jednokierunkową, jednokierunkową relacją między klasami (lub jednostkami), na przykład klasami portfela i pieniędzy. Portfel ma Pieniądze, ale pieniądze niekoniecznie muszą mieć Portfel, więc jest to relacja jednokierunkowa. W tej relacji oba wpisy mogą przetrwać, jeśli inne się zakończą. W naszym przykładzie, jeśli klasa Wallet nie jest obecna, nie oznacza to, że klasa Money nie może istnieć.
Kompozycja jest ograniczoną formą agregacji, w której dwa byty (lub można powiedzieć, że klasy) są od siebie wysoce zależne. Na przykład dla człowieka i serca. Człowiek potrzebuje serca, aby żyć, a serce potrzebuje ciała ludzkiego, aby przetrwać. Innymi słowy, gdy klasy (byty) są od siebie zależne, a ich długość życia jest taka sama (jeśli jedna umiera, to druga też), to jest to skład. Klasa serca nie ma sensu, jeśli nie ma klasy ludzkiej.
źródło
https://www.linkedin.com/pulse/types-relationships-object-oriented-programming-oop-sarah-el-dawody/
Skład: to związek „częściowy”.
na przykład „silnik jest częścią samochodu”, „serce jest częścią ciała”.
Stowarzyszenie: to relacja typu „ma”
Na przykład, załóżmy, że mamy dwie klasy, wtedy te dwie klasy są nazywane relacjami typu „ma-a”, jeśli obie te jednostki współużytkują obiekt dla pewnej pracy, a jednocześnie mogą istnieć bez wzajemnej zależności lub obie mają swoje własne życie.
Powyższy przykład pokazuje relację powiązania z powodu zarówno klasy pracownika, jak i menedżera, które wykorzystują obiekt siebie oraz swój niezależny cykl życia.
Agregacja: opiera się na relacji „ma-a” i jest specjalną formą skojarzenia
na przykład „Student” i „adres”. Każdy uczeń musi mieć adres, aby relacja między klasą ucznia a klasą adresu była relacją typu „Has-A”, ale odwrotnie nie jest prawdą.
źródło