Agregace vs složení
On 12 února, 2021 by adminChápu, co je složení v OOP, ale nejsem schopen získat jasnou představu o tom, co je to agregace. Může někdo vysvětlit?
Odpověď
Jednoduchá pravidla:
- A „vlastní“ B = Složení: B nemá v systému žádný význam ani účel bez A
- A „používá“ B = Agregace: B existuje nezávisle (koncepčně) na A
Příklad 1:
Společnost je souhrn lidí. Společnost je složením účtů. Když společnost přestane podnikat, její účty přestanou existovat, ale její lidé budou nadále existovat.
Příklad 2: (velmi zjednodušené)
Textový editor vlastní vyrovnávací paměť (složení). Textový editor používá soubor (agregaci). Když je textový editor zavřený, vyrovnávací paměť je zničena, ale samotný soubor není zničen.
Komentáře
- Takže je to auto agregát nebo složení jeho částí?
- A jak se agregace liší od jakéhokoli jiného vztahu mezi dvěma druhy entit?
- @reinierpost V realitě je auto agregace částí a části jsou jednoduše agregací molekul … V modelu však vše záleží na vašich požadavcích. Je důležité zacházet s motorem jako se samostatnou entitou, abyste mohli sledovat jeho životnost nezávisle na automobilu? Můžete použít stejný motor v jiném autě? Pokud ano, pravděpodobně budete chtít agregaci. Jinak chcete složení, protože vám ‚ nezáleží na motorech, které nejsou součástí automobilů, ani vám nezáleží na opětovném použití motorů .
- Chybí příklad implementace pro úplné pochopení …
- A co zaměstnanec, když společnost přestane podnikat? Zaměstnanec a lidé jsou různé subjekty, že? Mohu tedy říci, že společnost je složením zaměstnanců?
Odpověď
Od http://en.wikipedia.org/wiki/Object_composition
Agregace se liší od běžného složení tím, že neznamená vlastnictví. Ve složení, když je zničen vlastnící objekt, jsou zničeny také obsažené objekty. V souhrnu to nemusí být nutně pravda. Například univerzita vlastní různé katedry (např. Chemii) a každá katedra má několik profesorů. Pokud se univerzita zavře, katedry již nebudou existovat, ale profesoři v těchto katedrách budou nadále existovat. Univerzitu lze proto považovat za složení kateder, zatímco katedry mají souhrn profesorů. Profesor by navíc mohl pracovat na více než jednom katedře, ale katedra nemohla být součástí více než jedné univerzity.
Takže – zatímco vy máte vlastnický vztah se složením vlastněný objekt je také zničen, když je vlastníkem – agregace (a obsažené objekty) může existovat samostatně.
–
Aktualizace: Omlouvám se – tato odpověď je při zpětném pohledu příliš zjednodušující.
@Curtis Batt poskytuje ve své odpovědi vynikající definici: Agregace vs složení
Komentáře
- V příkladu, který citujete, je kompozice jedna k mnoha a agregace má také implikovaný vztah jedna k mnoha, i když zde by také mohla být pro agregaci vztahem mnoho k mnoha (lze předpokládat, že učitel může učit na více odděleních). Zatímco katedra nemůže být součástí několika univerzit. Složení znamená vlastnictví, zatímco agregace nepřekračuje rámec vztahu. Citace je správná, ale komentář nikoli.
- nemá nic společného se zničením! UML nedefinuje systém sběru odpadků.
- Myslím, že odkaz wikipedia získává reflexivní upvotes, ale toto je hrozná definice – jak @bold poukázal na to, že tyto vztahy nemají nic společného s GC. To se také rozpadne, když je předmět součástí dvou dalších předmětů, například koule v kulovém kloubu spojující dvě umělé končetiny. Vztah Komponenta je o funkční závislosti.
- Souhlasím s tím, že moje odpověď vážně chybí – ale stejně tak článek WikiPedia …
- Rozdíl mezi složením a agregací je jasný. Problém agregace spočívá v tom, že ‚ není jasné, jak se liší od běžného přidružení.
Odpověď
-
Složení je sdružení
-
Agregace je asociace
-
Složení je silná asociace (Pokud životnost obsaženého objektu zcela závisí na objektu kontejneru, je se nazývá silná asociace)
-
Agregace je slabá asociace (Pokud životnost obsaženého objektu nezávisí na objektu kontejneru, nazývá se slabé přidružení)
Příklad:
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); } }
Komentáře
- Jaký je rozdíl mezi agregací a asociací, která není ani složením, ani agregací?
Odpověď
Neexistuje jediné vysvětlení. Různí autoři znamenají různé věci agregací. Většina z nich ve skutečnosti neznamená nic konkrétního.
Komentáře
- Toto je správná odpověď. Přečetl jsem to ‚ ve dvou knihách, jednou z nich byl Martin Fowler ‚ s UML destilovaný .
- martinfowler.com/bliki/AggregationAndComposition.html
odpověď
Složení (směs) je způsob, jak kombinovat jednoduché objekty nebo datové typy do složitějších. Skladby jsou důležitým stavebním kamenem mnoha základních datových struktur.
Agregace (kolekce) se liší od běžného složení v tom neznamená vlastnictví. Ve složení, když je zničen vlastnící objekt, jsou zničeny také obsažené objekty. V agregaci to nemusí být nutně pravda.
╔═══════════╦═════════════════════════╦═══════════════════════╗ ║ ║ 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 označují vztah mezi objektem a liší se pouze svou silou.
Notace UML pro různé druhy závislostí mezi dvěma třídami
Složení : Protože Engine je součástí automobilu, vztah mezi nimi je Složení. Takto jsou implementovány mezi třídami 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; }
Agregace : Vzhledem k tomu, že organizace má Personu jako zaměstnance, vztah mezi nimi je agregace. Takto vypadají, co se týče tříd Java
public class Organization { private List employees; } public class Person { private String name; }
Komentáře
- zdá se, že to ‚ nenabízí nic podstatného nad body a vysvětleno v předchozích 12 odpovědích
- Docela jisté, že knihy mohou existovat i bez knihoven. Špatný příklad!
- Zde je seznam zaměstnanců součástí organizačního objektu. Jak to může být agregace?
- Jak se liší asociace od agregace?
- Líbí se mi tato odpověď. Nakonec mi správně vysvětlilo, jaký je rozdíl mezi agregací a složením.
Odpověď
agregace je jednoduchá sbírka, jako pytel kuliček
složení znamená vnitřní / funkční závislosti, jako panty na krabici
auta agregují cestující; nastupují a vystupují bez narušení funkčnosti vozu
pneumatiky jsou komponenty; jednu vyjměte a auto již nefunguje správně
[poznámka: rezervní pneumatika je agregát! ]
Odpověď
Na složení se vždy dívám jako na „potřebuje a“, tj. auto potřebuje motor a na agregaci se dívám jako na „věci související s určitým účelem.“ Takže zůstaneme-li analogicky s autem, moje agregace může spočívat v představení cesty, která může zahrnovat spojení auta a cestujících. Cesta auto nevlastní nebo cestující, já agreguji data, která souvisí s konkrétním scénářem. Po dokončení jízdy auto a cestující pokračují. Když je auto ukončeno, auto a jeho motor jsou normálně zničeny společně.
Odpověď
A co tento jednoduchý příklad :
Pole objektů je kompozice. Pole ukazatelů na objekty je agregace.
Pokud odstraním první, zmizí s ním i jeho obsah. Druhý, na druhou stranu může zmizet, aniž by to ovlivnilo existenci jeho členů, pokud neexistuje konkrétní metoda, která odstraní každý objekt, protože je odstraněn jeho ukazatel.
Komentáře
- Zdá se, že to ‚ nepřidává nic podstatného k bodům uvedeným v předchozích 11 odpovědích.
- S úctou nesouhlasím, @gnat. Toto je užitečný příklad toho, jak dva by mohly být implementovány. Lidé se lépe učí na příkladech.(Přišel jsem sem, abych zkontroloval, že rozumím tomu, že člen ukazatele bude pravděpodobně agregací a člen objektu složením. Toto je jediná odpověď, jak to přímo vyřešit.)
Odpověď
Sémanticky jsou všechny sady tvořeny podmnožinami, že? Proto:
-
Agregace nastává, když tyto podmnožiny existují nezávisle na sadě otců. Jako monitor lze odpojit od počítače a připojit se k jinému.
-
Složení nastává, když tyto podmnožiny závisí na existenci otcovské sady. Protože list je součástí stromu nebo játra jsou součástí těla.
Tyto koncepty hovoří o druhu závislosti mezi dvěma objekty nebo třídami, koncepčně. Přímo v programu, v agregaci, když mateřský objekt vyřazuje, měly by být vyřazeny i agregované objekty. Ve stejném scénáři pro kompozici přetrvají složené objekty sondy, potom se otcovský objekt rozdělí.
Napsat komentář