Aggregation vs Composition (Svenska)
On februari 12, 2021 by adminJag förstår vad kompositionen är i OOP, men jag kan inte få en klar uppfattning om vad Aggregation är. Kan någon förklara?
Svar
Enkla regler:
- A ”äger” B = Sammansättning: B har ingen mening eller syfte i systemet utan A
- A ”använder” B = Aggregering: B existerar oberoende (konceptuellt) från A
Exempel 1:
Ett företag är en sammanställning av människor. Ett företag är en sammansättning av konton. När ett företag slutar göra affärer upphör sina konton att existera men dess folk fortsätter att existera.
Exempel 2: (mycket förenklat)
En textredigerare äger en buffert (komposition). En textredigerare använder en fil (aggregering). När textredigeraren stängs förstörs bufferten men själva filen förstörs inte.
Kommentarer
- Så är en bil ett aggregat eller en sammansättning av dess delar?
- Och hur skiljer sig aggregeringen från något annat förhållande mellan två slags enheter?
- @reinierpost I verkligheten är en bil en aggregering av delar och delar är helt enkelt en aggregering av molekyler … Men i en modell beror allt på dina krav. Är det viktigt att behandla motorn som en separat enhet så att du kan spåra dess livstid oberoende av bilen? Kan du återanvända exakt samma motor i en annan bil? Om så är fallet vill du antagligen ha aggregering. Annars vill du ha en komposition eftersom du inte ’ bryr sig om motorer som inte är ’ som inte är en del av bilar, och inte bryr dig om att återanvända motorer .
- vad som saknas är ett implementeringsexempel för en fullständig förståelse …
- Vad sägs om anställd när ett företag slutar göra affärer? Anställd och människor är olika enheter, eller hur? Så kan jag säga att företag är sammansättning av anställda?
Svar
Från http://en.wikipedia.org/wiki/Object_composition
Aggregering skiljer sig från vanlig komposition genom att den inte innebär äganderätt. I sammansättning, när det ägande objektet förstörs, så är de innehållna föremålen också. Sammantaget är detta inte nödvändigtvis sant. Till exempel äger ett universitet olika avdelningar (t.ex. kemi) och varje institution har ett antal professorer. Om universitetet stänger kommer institutionerna inte längre att existera, men professorerna på dessa institutioner kommer att fortsätta att existera. Därför kan ett universitet ses som en sammansättning av institutioner, medan institutionerna har en sammanställning av professorer. Dessutom kan en professor arbeta i mer än en institution, men en institution kan inte ingå i mer än ett universitet.
Så – medan du har ett ägarförhållande med komposition det ägda objektet förstörs också när ägaren är – en aggregering (och objekten som finns) kan existera oberoende.
–
Uppdatering: ursäkter – detta svar är alltför förenklad i efterhand.
@Curtis Batt ger en utmärkt definition i sitt svar: Aggregation vs Composition
Kommentarer
- I exemplet du citerar är kompositionen en-till-många och aggregeringen har också en en-till-många-relation, men här kan den också vara en många-till-många-relation för aggregeringen (vi kan anta att en lärare kan undervisa i flera avdelningar). En institution kan inte ingå i flera universitet. Sammansättning innebär ägande medan aggregering inte går utöver förhållandet. Citatet är korrekt men kommentaren är det inte.
- det har ingenting att göra med förstörelse! UML definierar inte sopsamlingssystem.
- Jag tror att wikipedia-länken får reflexiva röster, men det här är en fruktansvärd definition – som @bold påpekade att dessa relationer inte har något att göra med GC. Detta faller också isär när ett föremål är komponenten i två andra föremål, till exempel kulan i en kulled som förenar två artificiella lemmar. Komponentförhållandet handlar om funktionellt beroende.
- Jag håller med om att mitt svar saknas allvarligt – men det är WikiPedia-artikeln också …
- Skillnaden mellan sammansättning och aggregering är tydlig. Problemet med aggregering är att det ’ är oklart hur det skiljer sig från vanlig association.
Svar
-
Sammansättning är en förening
-
Aggregering är en förening
-
Sammansättning är en stark Association (Om innehållet i innehållet helt beror på behållarobjektet är det kallas stark associering)
-
Aggregering är en svag Association (Om livslängden för innehållet föremål inte beror på behållarobjektet kallas det svag association)
Exempel:
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); } }
Kommentarer
- Vad är skillnaden mellan aggregering och associering som varken är sammansättning eller aggregering?
Svar
Det finns ingen enskild förklaring. Olika författare menar olika saker med aggregering. De flesta menar egentligen inte något specifikt med det.
Kommentarer
- Detta är det rätta svaret. Jag ’ har läst det i två böcker, varav en är Martin Fowler ’ s UML destillerad .
- martinfowler.com/bliki/AggregationAndComposition.html
Svar
Sammansättning (blandning) är ett sätt att kombinera enkla objekt eller datatyper till mer komplexa. Kompositioner är en kritisk byggsten för många grundläggande datastrukturer
Aggregation (samling) skiljer sig från vanlig komposition genom att det inte innebär äganderätt. I sammansättning, när det ägande objektet förstörs, så är de innehållna föremålen också. Sammantaget är detta inte nödvändigtvis sant
╔═══════════╦═════════════════════════╦═══════════════════════╗ ║ ║ 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 ║ ╚═══════════╩═════════════════════════╩═══════════════════════╝
Båda betecknar förhållandet mellan objektet och skiljer sig bara i deras styrka.
UML-noteringar för olika typer av beroende mellan två klasser
Sammansättning : Eftersom motorn är en del av bilen är förhållandet mellan dem sammansättning. Så här implementeras de mellan Java-klasser.
public class Car { //final will make sure engine is initialized private final Engine engine; public Car(){ engine = new Engine(); } } class Engine { private String type; }
Aggregation : Eftersom organisationen har en person som anställd är förhållandet mellan dem aggregering. Så här ser de ut när det gäller Java-klasser
public class Organization { private List employees; } public class Person { private String name; }
Kommentarer
- detta verkar inte ’ inte erbjuder något väsentligt över poäng som har gjorts och förklarats i tidigare 12 svar
- Ganska säker på att böcker kan existera utan bibliotek. Dåligt exempel!
- Här är listan över anställda en del av organisationsobjektet. Hur kan detta vara aggregering?
- Hur skiljer sig association från aggregering?
- Jag älskar det här svaret. Det förklarade slutligen för mig ordentligt vad skillnaden mellan aggregering och komposition är.
Svar
aggregering är enkelt samling, som en påse med kulor
komposition innebär interna / funktionella beroenden, som gångjärnen på en låda
bilar aggregerade passagerare; de går in och ut utan att bryta bilens funktionalitet
däcken är komponenter; ta bort en och bilen fungerar inte längre korrekt
[notera: reservdäcket är ett aggregat! ]
Svar
Jag ser alltid på kompositionen som ”behöver a”, dvs. en bil behöver en motor, och jag ser på aggregering som ”saker relaterade till ett syfte”. Så att stanna kvar med bilanalogin, kan min aggregering vara att representera en resa som kan innebära att föra samman en bil och passagerare. passagerarna samlar jag in data som är relaterade till ett specifikt scenario. När resan är klar fortsätter bilen och passagerarna. När en bil avslutas förstörs bilen normalt tillsammans.
Svar
Vad sägs om detta enkla exempel :
En array med objekt är en komposition. En array med pekare till objekt är en sammanställning.
Om jag tar bort den första försvinner dess innehåll. Den andra, å andra sidan kan försvinna utan att påverka medlemmarnas existens såvida det inte finns en specifik metod som tar bort varje objekt när dess pekare raderas.
Kommentarer
- ’ verkar inte lägga till något väsentligt över punkter som har gjorts och förklarats i tidigare 11 svar
- Respektfullt oense, @gnat. Detta är ett bra exempel på hur två kan genomföras. Människor lär sig bättre med exempel.(Jag kom hit för att kontrollera min förståelse att en pekmedlem sannolikt skulle vara en aggregering och en objektmedlem en komposition. Detta är det enda svaret för att direkt ta itu med det.)
Svar
Semantiskt är alla uppsättningar gjorda av underuppsättningar, eller hur? Därför:
-
Aggregeringen är när dessa underuppsättningar existerar oberoende av faderuppsättningen. Eftersom en bildskärm kan kopplas bort från datorn för att anslutas till en annan.
-
Kompositionen är när dessa underuppsättningar beror på faderuppsättningen. Eftersom ett blad är en del av ett träd eller en lever är en del av en kropp.
Dessa begrepp talar om typen av beroende mellan två objekt eller klasser, begreppsmässigt. Direkt i ett program, i en aggregering, när faderobjektet förfogar, bör de samlade föremålen också kastas. I samma scenario för en komposition kommer sammansatta sonobjekt att bestå då faderobjektet dispenserar.
Lämna ett svar