Agregacja, kompozycja, asocjacja

0

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?

1

Co do części pierwszej, to po co się powtarzać:

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()
}
2

Ja to zawsze upraszczałem do

  1. Asocjacja - klasa przyjmuje coś jako parametr metody.
  2. Agregacja - klasa przyjmuje coś w konstruktorze/setterze i zapisuje do pola.
  3. 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.

0

@lion137: To miałem na myśli

class Punkt{
int x;
int y;
Punkt(x,y)
};
class Zdjecie{
Punkt punkty[200][200];
};

Chyba, że mówimy o czymś innym.

1

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.

0

Czyli w takim przypadku powinnno się mówić agregacja ponad dzieczenie a nie kompozycja ponad dziedziczenie :D

2

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

  1. Asocjacja - klasa przyjmuje coś jako parametr metody.
  2. Agregacja - klasa przyjmuje coś w konstruktorze/setterze i zapisuje do pola.
  3. 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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1