Rozumiem, jaki jest skład OOP, ale nie jestem w stanie jasno zrozumieć, czym jest agregacja. Czy ktoś może wyjaśnić?
Rozumiem, jaki jest skład OOP, ale nie jestem w stanie jasno zrozumieć, czym jest agregacja. Czy ktoś może wyjaśnić?
Odpowiedzi:
Proste zasady:
Przykład 1:
Firma to agregacja Ludzi. Firma to zestawienie kont. Kiedy Firma przestaje prowadzić działalność, jej Konta przestają istnieć, ale Ludzie nadal istnieją.
Przykład 2: (bardzo uproszczony)
Edytor tekstu jest właścicielem bufora (kompozycji). Edytor tekstu używa pliku (agregacji). Gdy edytor tekstu jest zamknięty, bufor jest niszczony, ale sam plik nie jest niszczony.
From http://en.wikipedia.org/wiki/Object_composition
Agregacja 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, podobnie jak zawarte w nim obiekty. Podsumowując, niekoniecznie jest to prawda. Na przykład uniwersytet jest właścicielem różnych wydziałów (np. Chemii), 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.
Tak więc - gdy masz stosunek własności do kompozycji, posiadany obiekt jest również niszczony, gdy właścicielem jest - agregacja (i zawarte w nim obiekty) może istnieć niezależnie.
-
Aktualizacja: Przeprosiny - z perspektywy czasu ta odpowiedź jest zbyt uproszczona.
c.batt podaje doskonałą definicję w swojej odpowiedzi: Agregacja vs Kompozycja
Nie ma jednego wyjaśnienia. Różni autorzy oznaczają różne rzeczy przez agregację. Większość tak naprawdę nie ma na myśli niczego konkretnego.
Skład jest stowarzyszeniem
Agregacja jest stowarzyszeniem
Skład jest mocny Association (Jeśli życie zamkniętego obiektu całkowicie zależy od obiektu kontenera, nazywa się to silny związek)
Agregacja jest słaby Association (Jeśli życie zamkniętego obiektu nie zależy od obiektu kontenera, nazywa się słaby stowarzyszenie)
Przykład:
class Contained {
public void disp() {
System.out.println("disp() of Contained A");
}
}
public class Container {
private Contained c;
//Composition
Container() {
c = new Contained();
}
//Association
public Contained getC() {
return c;
}
public void setC(Contained c) {
this.c = c;
}
public static void main(String[] args) {
Container container = new Container();
Contained contained = new Contained();
container.setC(contained);
}
}
Kompozycja (mieszanina) to sposób łączenia prostych obiektów lub typów danych w bardziej złożone. 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, podobnie jak zawarte w nim obiekty. Podsumowując, niekoniecznie jest to prawda
╔═══════════╦═════════════════════════╦═══════════════════════╗
║ ║ Aggregation ║ Composition ║
╠═══════════╬═════════════════════════╬═══════════════════════╣
║ Life time ║ Have their own lifetime ║ Owner's life time ║
║ Relation ║ Has ║ part-of ║
║ Example ║ Car has driver ║ Engine is part of Car ║
╚═══════════╩═════════════════════════╩═══════════════════════╝
Oba oznaczają relacje między przedmiotem i różnią się jedynie siłą.
Notacje UML dla różnego rodzaju zależności między dwiema klasami
Skład : ponieważ silnik jest częścią samochodu, związek między nimi jest skład. Oto jak są one implementowane pomiędzy klasami Java.
public class Car {
//final will make sure engine is initialized
private final Engine engine;
public Car(){
engine = new Engine();
}
}
class Engine {
private String type;
}
Agregacja : Ponieważ organizacja ma osobę jako pracownika, relacja między nimi jest agregacją. Oto jak wyglądają pod względem klas Java
public class Organization {
private List employees;
}
public class Person {
private String name;
}
agregacja jest prostą kolekcją, jak worek kulek
skład sugeruje zależności wewnętrzne / funkcjonalne, takie jak zawiasy na pudełku
samochody gromadzą pasażerów; wsiadają i wysiadają bez naruszania funkcjonalności samochodu
opony są częściami; usuń jeden, a samochód przestanie działać poprawnie
[uwaga: koło zapasowe jest sumą!]
Zawsze patrzę na kompozycję jako „potrzebuje”, tzn. Samochód potrzebuje silnika, a agregację na „rzeczy powiązane z określonym celem”. Tak więc pozostając przy analogii samochodu, moją agregacją może być przedstawienie podróży, która może obejmować połączenie samochodu i pasażerów. Podróż nie jest właścicielem samochodu ani pasażerów, zbieram dane związane z konkretnym scenariuszem. Po zakończeniu podróży samochód i pasażerowie kontynuują podróż. Kiedy samochód się kończy, samochód i jego silnik są zwykle niszczone razem.
Semantycznie wszystkie zestawy składają się z podzbiorów, prawda? W związku z tym:
Agregacja ma miejsce, gdy te podzbiory istnieją niezależnie od zbioru nadrzędnego. Jako monitor można odłączyć od komputera, aby podłączyć go do innego.
Kompozycja ma miejsce, gdy te podzbiory zależą od istnienia zbioru ojca. Ponieważ liść jest częścią drzewa, a wątroba jest częścią ciała.
Te koncepcje mówią o rodzaju zależności między dwoma obiektami lub klasami, koncepcyjnie. Bezpośrednio w programie, w agregacji, gdy obiekt-ojciec usuwa, obiekty-agregaty również powinny zostać usunięte. W tym samym scenariuszu dla kompozycji złożone obiekty syn pozostaną, a następnie obiekt-ojciec zostanie wydany.
A może ten prosty przykład:
Tablica obiektów jest kompozycją. Tablica wskaźników do obiektów jest agregacją.
Jeśli usunę pierwszy, jego zawartość zniknie wraz z nim. Drugi natomiast może zniknąć bez wpływu na istnienie jego członków, chyba że istnieje specjalna metoda, która usuwa każdy obiekt po usunięciu jego wskaźnika.