W programowaniu zorientowanym obiektowo, jeden obiekt jest związany z innymi, aby korzystać z funkcjonalności i usług świadczonych przez ten obiekt. Ta relacja pomiędzy dwoma obiektami jest znana jako asocjacja w projektowaniu oprogramowania zorientowanego obiektowo i przedstawiona za pomocą strzałki w Unified Modelling Language lub UML. Zarówno Kompozycja jak i Agregacja są formami asocjacji pomiędzy dwoma obiektami, ale istnieje subtelna różnica pomiędzy kompozycją i agregacją, która jest również odzwierciedlona przez ich notację w UML. Odnosimy się do asocjacji pomiędzy dwoma obiektami jako Kompozycja, kiedy jedna klasa posiada inne klasy i inne klasy nie mogą sensownie istnieć, kiedy ich właściciel zostanie zniszczony, na przykład, klasa Człowiek jest kompozycją kilku części ciała, w tym Ręki, Nogi i Serca. Kiedy obiekt ludzki umiera, wszystkie jego część ciała przestała istnieć sensownie, jest to jeden z przykładów Composition.
Programiści często mylą między Stowarzyszenia, Skład i Agregacja w Object-oriented dyskusji projektowych, to zamieszanie również sprawia, że różnica między Stowarzyszenia, Skład i Agregacja jeden z popularnych pytań w Java Wywiady, tylko po różnicy między klasą abstrakcyjną i interfejs.
Innym przykładem Skład jest samochód i jego część np. silniki, koła, itp. Poszczególne części samochodu nie może funkcjonować, gdy samochód jest zniszczony. Podczas gdy w przypadku Agregacji, w tym obiekt, który może istnieć bez bycia częścią głównego obiektu, jak gracz, który jest częścią zespołu, może istnieć bez zespołu i może stać się częścią innych zespołów, jak również.
Innym przykładem Agregacji jest Student w klasie School, gdy szkoła zamknięta, Student nadal istnieje, a następnie może dołączyć do innej szkoły lub tak. W notacji UML, kompozycja jest oznaczona przez wypełniony diament, podczas gdy agregacja jest oznaczona przez pusty diament, który pokazuje ich oczywistą różnicę w zakresie siły relacji.
Skład jest silniejszy niż agregacji. W skrócie, relacja między dwoma obiektami jest określana jako asocjacja, a asocjacja jest znana jako kompozycja, gdy jeden obiekt jest właścicielem innego, podczas gdy asocjacja jest znana jako agregacja, gdy jeden obiekt używa innego obiektu.
W tym samouczku OOPS, zobaczymy kilka więcej przykładów, aby zrozumieć różnicę między stowarzyszenia, składu i agregacji lepiej.
Btw, jeśli jesteś nowy w świecie programowania zorientowanego obiektowo i projektowania to również sugeruję, aby przejść przez praktyczny kurs jak UML i Object-Oriented Design Foundations przez Karloy Neisztor na Udemy. Jest to świetny kurs, aby zrozumieć cały proces analizy zorientowanej obiektowo i projektowania do tworzenia wysokiej jakości oprogramowania.
Przykład asocjacji, kompozycji i agregacji w Javie
Jest to przykład kompozycji i agregacji, w kategoriach kodu Java. Patrząc na ten kod, możesz ocenić różnice między tymi dwoma. Przy okazji, kompozycja jest również bardzo preferowana w projektowaniu zorientowanym obiektowo w stosunku do dziedziczenia, nawet Joshua Bloch stwierdził jej znaczenie w klasycznej książce Effective Java.
1. Kompozycja:
Skoro Engine is-part-of Car, relacją między nimi jest Composition. Oto jak są one zaimplementowane pomiędzy klasami Java.
public class Car {
2. Agregacja:
Ponieważ Organizacja ma Personę jako pracowników, relacja między nimi to Aggregacja. Oto jak wyglądają one w kategoriach klas Java
public class Organization { private List employees;}
public class Person { private String name; }
UML Diagram asocjacji, kompozycji i agregacji
UML ma różne notacje do oznaczania agregacji, kompozycji i asocjacji. Asocjacja jest oznaczana przez prostą strzałkę, podczas gdy agregacja jest oznaczana przez pustą strzałkę w kształcie rombu, a kompozycja jest oznaczana przez wypełnioną strzałkę w kształcie rombu.
Gdy rysujesz diagram UML dla dwóch powiązanych klas A i B, gdzie A jest powiązane z B wtedy jest oznaczane przez A -> B. Podobny sposób jest używany do pokazania agregacji i kompozycji między dwiema klasami.
Oto notacje UML dla innego rodzaju zależności między dwiema klasami.
Jak powiedziałem, wszystkie trzy oznaczają relacje między obiektami i różnią się jedynie siłą, można je również postrzegać jak poniżej, gdzie kompozycja reprezentuje najsilniejszą formę relacji, a asocjacja jest najbardziej ogólną formą.
![](https://3.bp.blogspot.com/-4KAOtX0S5NU/UvJN_w4TCZI/AAAAAAAABCo/SKPKYaci8s0/s280/association+vs+composition+vs+aggregation.jpg)
Asocjacja vs Kompozycja vs Agregacja
Tutaj znajduje się lista różnic pomiędzy Kompozycją i Agregacją w formacie punktowym, dla szybkiego przeglądu. Jak już powiedziałem, kluczowa różnica między nimi pochodzi z punktu, że w przypadku kompozycji, jeden obiekt jest WŁAŚCICIELEM innego obiektu, podczas gdy w przypadku agregacji, jeden obiekt jest po prostu UŻYTKOWNIKIEM lub innego obiektu.
1) Jeśli A i B dwie klasy są powiązane ze sobą tak, że B przestał istnieć, gdy A jest zniszczony, to stowarzyszenie między dwoma obiektami jest znany jako kompozycja. Przykładem jest samochód i silnik. Natomiast jeśli A i B są powiązane ze sobą, tak, że B może istnieć bez powiązania z A, to stowarzyszenie w znany jako Aggregation.
Zobacz Head First Object-Oriented Analysis and Design dla więcej przykładów kompozycji i stowarzyszenia w OOP.
2) W przypadku kompozycji A posiada B np. osoba jest właścicielem swojej ręki, umysłu i serca, podczas gdy w przypadku agregacji, A używa B np. organizacja używa ludzi jako pracowników.
3) Na diagramie UML Asocjacja jest oznaczana przez zwykłą strzałkę, podczas gdy Kompozycja jest reprezentowana przez wypełnioną rombową strzałkę, a Agregacja jest reprezentowana przez pustą rombową strzałkę, jak pokazano na poniższym i załączonym diagramie w trzecim akapicie.
Association A—->B
Composition A—–<filled>B
Agregation A-.—-<>B
4) Agregacja jest lżejszą formą Kompozycji, gdzie obiekt podczęściowy może sensownie istnieć bez obiektów głównych.
5) W Javie, można użyć końcowego słowa kluczowego do reprezentowania kompozycji. Ponieważ w Kompozycji, obiekt Właściciel oczekuje, że obiekt części będzie dostępny i funkcjonuje, czyniąc go ostatecznym, dajesz gwarancję, że kiedy Właściciel zostanie utworzony, ten obiekt części będzie istniał. Jest to właściwie idiom Java do reprezentowania silnej formy stowarzyszenia, tj. kompozycja między dwoma obiektami.
6) Innym ciekawym słowem, które przydaje się do zrozumienia różnicy między kompozycją i agregacji w projektowaniu oprogramowania jest „part-of” i „ma”. Jeśli jeden obiekt jest częścią innego obiektu, np. silnik jest częścią samochodu, to stowarzyszenie lub związek między nimi jest kompozycja. Z drugiej strony, jeśli jeden obiekt po prostu ma inny obiekt, np. Samochód ma kierowcę, to jest Agregacja.
To wszystko na temat różnicy między Stowarzyszenia, Skład i Agregacja w UML, Java i projektowania obiektowego. Ponieważ analiza obiektowa jest bardziej o definiowanie relacji między obiektami, ważne jest, aby wiedzieć, jaki rodzaj relacji istnieje między nimi, kompozycja i agregacja jest dwa sposoby reprezentowania relacji między dwoma obiektami.
Dalsza nauka
SOLIDne zasady projektowania obiektowego
Obsolutne wprowadzenie do programowania obiektowego w Javie
Java – programowanie obiektowe
Kilka innych artykułów, aby poprawić swoje umiejętności w zakresie programowaniai umiejętności projektowania
Top 10 zasad projektowania obiektowego, które programista Java powinien znać
Dlaczego w Javie należy preferować kompozycję zamiast dziedziczenia
Różnica między przeciążaniem a nadpisywaniem w Javie
Top 10 pytań na temat klasy abstrakcyjnej i interfejsu
20 pytań na temat wzorca projektowego i projektowania oprogramowania w Javie
Więcej o