Aggregatie versus compositie
Geplaatst op februari 12, 2021 door adminIk begrijp wat compositie is in OOP, maar ik kan geen duidelijk idee krijgen van wat Aggregatie is. Kan iemand het uitleggen?
Antwoord
Eenvoudige regels:
- A “bezit” B = Samenstelling: B heeft geen betekenis of doel in het systeem zonder A
- A “gebruikt” B = aggregatie: B bestaat onafhankelijk (conceptueel) uit A
Voorbeeld 1:
Een bedrijf is een verzameling mensen. Een bedrijf is een samenstelling van rekeningen. Wanneer een bedrijf ophoudt zaken te doen, houden zijn accounts op te bestaan, maar zijn mensen blijven bestaan.
Voorbeeld 2: (zeer vereenvoudigd)
Een teksteditor bezit een buffer (compositie). Een teksteditor gebruikt een bestand (aggregatie). Wanneer de teksteditor wordt gesloten, wordt de buffer vernietigd, maar het bestand zelf wordt niet vernietigd.
Opmerkingen
- Zo is een auto een aggregaat of een samenstelling van de onderdelen?
- En hoe verschilt aggregatie van enige andere relatie tussen twee soorten entiteiten?
- @reinierpost In realiteit is een auto een aggregatie van onderdelen, en onderdelen zijn gewoon een aggregatie van moleculen … In een model hangt het echter allemaal af van uw vereisten. Is het belangrijk om de motor als een aparte entiteit te behandelen, zodat u de levensduur onafhankelijk van de auto kunt volgen? Kun je exact dezelfde motor hergebruiken in een andere auto? Als dat zo is, dan wilt u waarschijnlijk aggregatie. Anders wil je een compositie omdat je ‘ niet om motoren geeft die geen ‘ deel uitmaken van autos, noch om het hergebruik van motoren .
- wat ontbreekt is een implementatievoorbeeld voor een volledig begrip …
- Hoe zit het met de werknemer als een bedrijf stopt met zaken doen? Werknemer en mensen zijn verschillende entiteiten, toch? Dus kan ik zeggen dat het bedrijf de samenstelling van de werknemers is?
Antwoord
Van http://en.wikipedia.org/wiki/Object_composition
Aggregatie verschilt van gewone compositie doordat het niet impliceert eigendom. In de compositie, wanneer het bezittende object wordt vernietigd, zijn de objecten dat ook. Samengevat is dit niet noodzakelijk waar. Een universiteit heeft bijvoorbeeld verschillende afdelingen (bijvoorbeeld scheikunde) en elke afdeling heeft een aantal professoren. Als de universiteit sluit, bestaan de afdelingen niet meer, maar de hoogleraren in die afdelingen blijven bestaan. Daarom kan een universiteit worden gezien als een samenstelling van afdelingen, terwijl afdelingen een samenvoeging van professoren hebben. Bovendien kan een professor op meer dan één afdeling werken, maar een afdeling kan niet deel uitmaken van meer dan één universiteit.
Dus – terwijl u een eigendomsrelatie met samenstelling het object dat eigendom is, wordt ook vernietigd wanneer de eigenaar is – een aggregatie (en de objecten erin) kunnen onafhankelijk bestaan.
–
Update: excuses – dit antwoord is achteraf gezien veel te simplistisch.
@Curtis Batt geeft een uitstekende definitie in zijn antwoord: Aggregatie versus compositie
Opmerkingen
- In het voorbeeld dat u citeert, is de compositie een een-op-veel en heeft de aggregatie ook een een-op-veel-relatie, maar hier kan het ook een veel-op-veel-relatie zijn voor de aggregatie (we kunnen veronderstellen dat een docent les kan geven in meerdere afdelingen). Terwijl een afdeling geen deel kan uitmaken van meerdere universiteiten. Compositie impliceert eigendom, terwijl aggregatie niet verder gaat dan relatie. Het citaat is correct, maar de opmerking is het niet.
- het heeft niets te maken met vernietiging! UML definieert geen garbage collection-systeem.
- Ik denk dat de Wikipedia-link reflexieve upvotes krijgt, maar dit is een vreselijke definitie – zoals @bold opmerkte, hebben deze relaties niets te maken met GC. Dit valt ook uit elkaar wanneer een object het onderdeel is van twee andere objecten, zoals de bal in een kogelgewricht die twee kunstmatige ledematen verbindt. De Component-relatie gaat over functionele afhankelijkheid.
- Ik ben het ermee eens dat mijn antwoord ernstig ontbreekt – maar dat geldt ook voor het WikiPedia-artikel …
- Het verschil tussen compositie en aggregatie is duidelijk. Het probleem met aggregatie is dat het ‘ s onduidelijk is hoe het verschilt van gewone associatie.
Antwoord
-
Compositie is een vereniging
-
Aggregatie is een associatie
-
Compositie is een sterke associatie (als de levensduur van het ingesloten object volledig afhangt van het containerobject, wordt een sterke associatie genoemd)
-
Aggregatie is een zwakke associatie (als de levensduur van het ingesloten object niet afhangt van het containerobject, wordt het zwakke associatie)
Voorbeeld:
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); } }
Reacties
- Wat is het verschil tussen aggregatie en associatie dat noch compositie noch aggregatie is?
Antwoord
Er is geen eenduidige verklaring. Verschillende auteurs bedoelen verschillende dingen door samenvoeging. De meeste bedoelen er eigenlijk niets specifieks mee.
Opmerkingen
- Dit is het juiste antwoord. Ik ‘ heb het in twee boeken gelezen, waaronder Martin Fowler ‘ s UML Gedistilleerd .
- martinfowler.com/bliki/AggregationAndComposition.html
Antwoord
Compositie (mengsel) is een manier om eenvoudige objecten of gegevenstypen te combineren in meer complexe. Composities zijn een cruciale bouwsteen van veel basisgegevensstructuren
Aggregatie (collectie) verschilt van een gewone compositie in die zin dat het geen eigendom impliceert. In de compositie, wanneer het bezittende object wordt vernietigd, zijn de objecten dat ook. Samengevat is dit niet noodzakelijk waar.
╔═══════════╦═════════════════════════╦═══════════════════════╗ ║ ║ 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 ║ ╚═══════════╩═════════════════════════╩═══════════════════════╝
Beide geven de relatie tussen objecten aan en verschillen alleen in hun sterkte.
UML-notaties voor verschillende soorten afhankelijkheid tussen twee klassen
Samenstelling : aangezien de motor een onderdeel is van de auto, is de relatie tussen hen de samenstelling. Hier is hoe ze worden geïmplementeerd tussen Java-klassen.
public class Car { //final will make sure engine is initialized private final Engine engine; public Car(){ engine = new Engine(); } } class Engine { private String type; }
Aggregatie : Aangezien de organisatie Persoon als werknemers heeft, is de relatie tussen hen Aggregatie. Hier is hoe ze eruit zien in termen van Java-klassen
public class Organization { private List employees; } public class Person { private String name; }
Reacties
- dit lijkt ‘ niet iets wezenlijks te bieden over de punten die zijn gemaakt en uitgelegd in eerdere 12 antwoorden
- Vrij zeker dat boeken kunnen bestaan zonder bibliotheken. Slecht voorbeeld!
- Hier is de lijst met medewerkers het onderdeel van Organization Object. Hoe kan dit aggregatie zijn?
- Waarin verschilt associatie van aggregatie?
- Ik vind dit een geweldig antwoord. Het heeft me uiteindelijk goed uitgelegd wat het verschil is tussen aggregatie en compositie.
Antwoord
aggregatie is eenvoudig verzameling, zoals een zak met knikkers
samenstelling impliceert interne / functionele afhankelijkheden, zoals de scharnieren op een doos
autos verzamelen passagiers; ze stappen in en uit zonder de functionaliteit van de auto te verstoren.
de banden zijn componenten; verwijder er een en de auto functioneert niet meer correct
[let op: het reservewiel is een aggregaat! ]
Antwoord
Ik beschouw compositie altijd als “nodig heeft”, dwz een auto heeft een motor, en ik beschouw aggregatie als dingen die met een bepaald doel te maken hebben. Dus als ik bij de auto-analogie blijf, kan mijn aggregatie zijn om een reis weer te geven waarbij een auto en passagiers samen worden gebracht. De reis is niet de eigenaar van de auto of de passagiers, ik verzamel gegevens die gerelateerd zijn aan een specifiek scenario. Als de reis is voltooid, gaan de auto en de passagiers verder. Wanneer een auto wordt beëindigd, worden de auto en zijn motor normaal samen vernietigd.
Answer
Hoe zit het met dit eenvoudige voorbeeld? :
Een array van objecten is een compositie. Een array van verwijzingen naar objecten is een aggregatie.
Als ik de eerste verwijder, verdwijnt de inhoud ervan. De tweede, aan de andere kant kan het verdwijnen zonder het bestaan van zijn leden te beïnvloeden, tenzij er een specifieke methode is die elk object verwijdert wanneer zijn pointer wordt verwijderd.
Opmerkingen
- dit lijkt niet ‘ iets substantieel toe te voegen aan de punten die in de vorige 11 antwoorden zijn gemaakt en uitgelegd.
- Eerbiedig oneens, @gnat. Dit is een handig voorbeeld van hoe de twee zouden kunnen worden geïmplementeerd.Mensen leren beter met voorbeelden.(Ik kwam hier om na te gaan of ik begrijp dat een pointerlid waarschijnlijk een aggregatie was en een objectlid een compositie. Dit is het enige antwoord dat daar rechtstreeks op ingaat.)
Answer
Semantisch gezien zijn alle sets gemaakt van subsets, toch? Daarom:
-
De aggregatie is wanneer die subsets onafhankelijk van de vaderreeks bestaan. Zoals een monitor kan worden losgekoppeld van de computer om te worden aangesloten op een andere.
-
De compositie is wanneer die subsets afhangen van het bestaan van de vaderreeks. Zoals een blad deel uitmaakt van een boom of lever is een deel van een lichaam.
Deze concepten spreken conceptueel over het soort afhankelijkheid tussen twee objecten of klassen. Direct in een programma, in een aggregatie, wanneer het vaderobject beschikt, moeten de geaggregeerde objecten ook worden verwijderd. In hetzelfde scenario voor een compositie, zullen samengestelde zoonobjecten blijven bestaan en dan geeft het vaderobject af.
Geef een reactie