Różnica między asocjacją a agregacją?

0

Na przykładzie najlepiej poprosiłbym.
Z asocjacją mamy do czynienia jak mamy w klasie wskaźnik bądź referencję do obiektu innej klasy przy założeniu, że nie tworzony jest obiekt w klasie np.

class Klasa
{
   Klasa2 *wsk;
   void metoda_jakas(Klasa2 &obKl2);
   void metoda_jakas2(Klasa2 *obKl2);
};

Kompozycja to wiadomo, np.:

class Klasa
{
   Klasa2 *wsk;
   void metoda()
   {
      wsk=new Klasa2();
   }
};

no a agregacja??

0

Asocjacje dziela sie na agregacje i kompozycje. Agregacja to zwykle polaczenie sie dwoch klas (np przez referencje) a kompozycja to taka asocjacja, ze jesli obiekt "nadrzedny" zostanie usuniety, to i wszystkie "podrzedne" zostana usuniete.

0

Tu jest to chyba dość jasno wytłumaczone: http://pl.wikipedia.org/wiki/Agregacja_%28programowanie_obiektowe%29

0

Niestety nie jest to takie hop siup. Bo istnieje asocjacja jako taka czyli linia ciągła bez strzałek albo z jedną strzałką. Mamy:
zależność (linia przerywana)
asocjacje (linia ciągła z strzałką lub bez żadnych strzałek co oznacza, że oba obiekty mogą naprzemiennie z siebie korzystać)
agregacje (jedna klasa zawiera wskaźnik bądź referencję do drugiej klasy, z tym że jej nie tworzy) romb biały
kompozycja (to samo co agregacja tylko że obiekt 1 klasy tworzy i usuwa obiekt drugiej, który nie może bez niej istnieć) romb czarny

Nic, muszę pobrać rhapsody to tam na podstawie Object Model DIagram jest generowany kod C++ to sobie sprawdzę.

0

Agregacja i kompozycja to są szczególne przypadki asocjacji - uszczegóławiają relację.
Asocjacja sama w sobie jest bardziej luźnym związkiem od dwóch pozostałych.

http://www.digipedia.pl/def/doc/id/532701572/name/association/
http://4programmers.net/Forum/viewtopic.php?id=155975

0

Zgodzę się z Tobą, ale za taką odpowiedź to byś otrzymał z 6 punktów na 10. Oto przykłady:
1.) Asocjacja:

class Klasa2;
class Klasa1{
public: //w zasadzie nieważne jaka tu hermetyzacja jest
void posuwanie_laski_na_tapczanie(Klasa2 *x);
void posuwanie_laski_na_sianie(Klasa2 &x);
void posuwanie_laski_na_parkingu(Klasa2 x);
Klasa *posuwanie_laski_na_lozku(void);
Klasa &posuwanie_laski_w_lesie(void);
Klasa posuwanie_laski_na_masce_samochodu(void);
//watpliwości wzbudzają metody w których zwracany jest jakiś typ Klasy2
}

//powyżej wszystkie możliwe typy asocjacji jaka może być
2.) Agregacja

class Klasa3{
//public: //hermetyzacja nieistotna
Klasa2 *prezerwatywa;
Klasa2 &dziurawa_prezerwatywa;
//założenie dodatkowe - żadnego z powyższych pól Klasa3 nie tworzy w swoich metodach operatorem new, malloc, nieco wątpliwości wzbudza czy aby na pewno pole z dziurawą prezerwatywą jest typem agregacji.
};

3.) Kompozycja
to samo co Klasa3+warunek, że pola tworzone i usuwane w metodach Klasy3
Dodatkowo do Kompozycji należy pole np.
Klasa2 seksik;

Kto może rozwiaż powyższe wątpliwosci to zapraszam do wypowiedzenia się. Przykłade troche hardkorowe ale za to szybko w pamięci zostają. Pozdrawiam

0
byku_guzio napisał(a)

Agregacja i kompozycja to są szczególne przypadki asocjacji - uszczegóławiają relację.
Asocjacja sama w sobie jest bardziej luźnym związkiem od dwóch pozostałych.

Tak więc o konkretny przykład mi chodzi jak powyżej aby wychwycić różnicę, bo takie lanie wody to wszedzie w książkach i pdfach jest i potem wykładowcy się dziwią, że studenci nie rozumieją różnić i również wodę wykładowcom na egzaminie leją:)

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