Agregacja, kompozycja, asocjacja

Odpowiedz Nowy wątek
2019-06-06 22:21
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?

Pozostało 580 znaków

2019-06-06 22:49
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()
}

edytowany 1x, ostatnio: hauleth, 2019-06-06 22:53
Niepoprawne linki. - Silv 2019-06-06 22:50
@lion137: jak masz linki z "niestandardowymi" znakami to najlepiej jest je ubrać w <> i wtedy nie będzie problemów. - hauleth 2019-06-06 22:53
Właśnie studiuję, jak to Zedytowałeś, dzięki:) - lion137 2019-06-06 22:54

Pozostało 580 znaków

2019-06-06 22:55
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.

Pozostało 580 znaków

2019-06-07 00:15
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.

edytowany 1x, ostatnio: leto, 2019-06-07 00:34

Pozostało 580 znaków

2019-06-07 00:26

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.


W takim wypadku czym jest ten przykład? - leto 2019-06-07 00:29
Nie wiadomo, to zależy gdzie jest definicja klasy Punkt, jeśli poza klasą Zdjęcie to będzie to agregacja, jak wewnątrz to kompozycja. - lion137 2019-06-07 00:32
@lion137: zedytowałem, zatem jest to agregacja? - leto 2019-06-07 00:35

Pozostało 580 znaków

2019-06-07 09:17
0

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


Nie pomagam przez PM. Pytania zadaje się na forum.
Ha, ha, może coś w tym jest?:) - lion137 2019-06-07 09:20

Pozostało 580 znaków

2019-06-07 09:17
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.


Unhandled Exception: System.MissingMethodException: Constructor on type 'System.Exception' not found.
edytowany 2x, ostatnio: Gworys, 2019-06-07 12:34

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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