Aggregasjon vs komposisjon
On februar 12, 2021 by adminJeg forstår hva komposisjon er i OOP, men jeg er ikke i stand til å få en klar ide om hva Aggregation er. Kan noen forklare?
Svar
Enkle regler:
- A «eier» B = Sammensetning: B har ingen mening eller formål i systemet uten A
- A «bruker» B = Aggregering: B eksisterer uavhengig (konseptuelt) fra A
Eksempel 1:
Et selskap er en samling av mennesker. Et selskap er en sammensetning av kontoer. Når et selskap slutter å gjøre forretninger, opphører kontiene sine, men dets folk fortsetter å eksistere.
Eksempel 2: (veldig forenklet)
En tekstredigerer eier en buffer (komposisjon). En tekstredigerer bruker en fil (aggregering). Når teksteditoren lukkes, blir bufferen ødelagt, men selve filen blir ikke ødelagt.
Kommentarer
- Så er en bil en samlet eller en sammensetningen av delene?
- Og hvordan er aggregering forskjellig fra noe annet forhold mellom to slags enheter?
- @reinierpost I virkeligheten er en bil en aggregering av deler, og deler er ganske enkelt en aggregering av molekyler … Imidlertid, i en modell avhenger alt av dine krav. Er det viktig å behandle motoren som en egen enhet slik at du kan spore levetiden uavhengig av bilen? Kan du bruke nøyaktig samme motor i en annen bil? I så fall vil du sannsynligvis ha aggregering. Ellers vil du ha en komposisjon fordi du ikke ‘ ikke bryr seg om motorer som ikke er ‘, og bryr deg ikke om å gjenbruke motorer .
- det som mangler er et implementeringseksempel for en fullstendig forståelse …
- Hva med ansatt når et selskap slutter å gjøre forretninger? Ansatte og mennesker er forskjellige enheter, ikke sant? Så kan jeg si at selskap er sammensetning av ansatte?
Svar
Fra http://en.wikipedia.org/wiki/Object_composition
Aggregering skiller seg fra vanlig sammensetning ved at den ikke innebærer eie. Når det eierobjektet blir ødelagt, er det også de inneholdte gjenstandene i sammensetning. Samlet sett er dette ikke nødvendigvis sant. For eksempel eier et universitet forskjellige avdelinger (f.eks. Kjemi), og hver avdeling har et antall professorer. Hvis universitetet stenger, vil ikke avdelingene lenger eksistere, men professorene i disse avdelingene vil fortsette å eksistere. Derfor kan et universitet sees på som en sammensetning av avdelinger, mens avdelinger har en samling av professorer. I tillegg kunne en professor jobbe i mer enn en avdeling, men en avdeling kunne ikke være en del av mer enn ett universitet.
Så – mens du har et eierforhold med sammensetning det eide objektet ødelegges også når eieren er – en aggregering (og objektene som finnes) kan eksistere uavhengig.
–
Oppdatering: beklager – dette svaret er altfor forenklet i ettertid.
@Curtis Batt gir en utmerket definisjon i svaret: Aggregation vs Composition
Kommentarer
- I eksemplet du siterer er komposisjonen en-til-mange, og aggregeringen har også et en-til-mange-forhold underforstått, men her kan det også være et mange-for-mange forhold for aggregeringen (vi kan anta at en lærer kan undervise i flere avdelinger). Mens en avdeling ikke kan være en del av flere universiteter. Sammensetning innebærer eierskap mens aggregering ikke går utover forholdet. Sitatet er riktig, men kommentaren ikke.
- det har ingenting å gjøre med ødeleggelse! UML definerer ikke søppelsamlingssystem.
- Jeg tror wikipedia-lenken får refleksive oppvoter, men dette er en forferdelig definisjon – som @bold påpekte at disse forholdene ikke har noe med GC å gjøre. Dette faller også fra hverandre når et objekt er komponenten av to andre gjenstander, for eksempel ballen i en kuleledd som forbinder to kunstige lemmer. Komponentforholdet handler om funksjonell avhengighet.
- Jeg er enig i at svaret mitt mangler sterkt – men det er også WikiPedia-artikkelen …
- Forskjellen mellom sammensetning og aggregering er tydelig. Problemet med aggregering er at det ‘ er uklart hvordan det er forskjellig fra vanlig tilknytning.
Svar
-
Composition is an Association
-
Aggregation is an Association
-
Composition is a strong Association (Hvis levetiden til det inneholdte objektet helt avhenger av containerobjektet, er det kalles sterk tilknytning)
-
Aggregasjon er en svak Association (Hvis levetiden til det inneholdte objektet ikke avhenger av containerobjektet, kalles det svak tilknytning)
Eksempel:
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
- Hva er forskjellen mellom aggregering og tilknytning som verken er sammensetning eller aggregering?
Svar
Det er ingen enkel forklaring. Ulike forfattere mener forskjellige ting ved aggregering. De fleste mener egentlig ikke noe spesifikt med det.
Kommentarer
- Dette er det riktige svaret. Jeg ‘ har lest den i to bøker, en av dem er Martin Fowler ‘ s UML Distilled .
- martinfowler.com/bliki/AggregationAndComposition.html
Svar
Sammensetning (blanding) er en måte å kombinere enkle objekter eller datatyper på inn i mer komplekse. Komposisjoner er en kritisk byggestein for mange grunnleggende datastrukturer
Aggregasjon (samling) skiller seg fra vanlig sammensetning ved at det ikke innebærer eierskap. Når det eierobjektet blir ødelagt, er det også de inneholdte gjenstandene i sammensetning. Samlet sett er dette ikke nødvendigvis 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 ║ ╚═══════════╩═════════════════════════╩═══════════════════════╝
Begge betegner forholdet mellom objekt og er bare forskjellige i styrke.
UML-notasjoner for forskjellige typer avhengighet mellom to klasser
Sammensetning : Siden motor er en del av Car, er forholdet mellom dem Composition. Slik implementeres de mellom 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; }
Aggregasjon : Siden Organisasjonen har Person som ansatte, er forholdet mellom dem Aggregasjon. Slik ser de ut når det gjelder Java-klasser
public class Organization { private List employees; } public class Person { private String name; }
Kommentarer
- dette ser ikke ‘ t ut til å tilby noe vesentlig over poeng som er gjort og forklart i tidligere 12 svar
- Ganske sikre på at bøker kan eksistere uten biblioteker. Dårlig eksempel!
- Her er listen over ansatte den delen av organisasjonsobjektet. Hvordan kan dette være aggregering?
- Hvordan er tilknytning forskjellig fra aggregering?
- Jeg elsker dette svaret. Det forklarte meg til slutt ordentlig hva forskjellen mellom aggregering og sammensetning er.
Svar
aggregering er en enkel samling, som en pose med klinkekuler
komposisjon innebærer interne / funksjonelle avhengigheter, som hengslene på en kasse
biler samlet passasjerer; de kommer inn og ut uten å ødelegge bilens funksjonalitet
dekkene er komponenter; fjern en og bilen fungerer ikke lenger riktig
[merk: reservehjulet er et aggregat! ]
Svar
Jeg ser alltid på komposisjonen som «trenger a», dvs. en bil trenger en motor, og jeg ser på aggregering som «ting relatert til et formål.» Så når jeg holder meg med bilanalogien, kan det være at jeg representerer en reise som kan innebære å bringe en bil og passasjerer sammen. Reisen eier ikke bilen eller passasjerene samler jeg data som er relatert til et bestemt scenario. Når reisen er fullført, fortsetter bilen og passasjerene. Når en bil avsluttes, ødelegges bilen og motoren normalt sammen.
Svar
Hva med dette enkle eksemplet :
En rekke objekter er en sammensetning. En rekke pekere til objekter er en sammenstilling.
Hvis jeg sletter den første, forsvinner innholdet med den. Den andre, på den annen side kan forsvinne uten å påvirke medlemmets eksistens med mindre det er en spesifikk metode som sletter hvert objekt når pekeren slettes.
Kommentarer
- dette ser ikke ut til ‘ å legge til noe vesentlig over poengene som er gjort og forklart i tidligere 11 svar
- Respektfullt uenig, @gnat. Dette er et nyttig eksempel på hvordan to kan implementeres. Folk lærer bedre med eksempler.(Jeg kom hit for å sjekke min forståelse av at et pekermedlem sannsynligvis ville være en aggregering, og et objektmedlem en komposisjon. Dette er det eneste svaret som direkte adresserer det.)
Svar
Semantisk sett er alle sett laget av delmengder, ikke sant? Derfor:
-
Aggregasjonen er når disse delmengdene eksisterer uavhengig av farsettet. Da en skjerm kan kobles fra datamaskinen for å kobles til en annen.
-
Sammensetningen er når disse delmengdene avhenger av fadersettets eksistens. Som et blad er en del av et tre eller lever er en del av kroppen.
Disse begrepene snakker om typen avhengighet mellom to objekter eller klasser, konseptuelt. Direkte i et program, i en aggregering, når farobjektet disponerer, bør de samlede objektene også kastes. I det samme scenariet for en komposisjon vil sammensatte sonobjekter vedvare så farobjektet dispenserer.
Legg igjen en kommentar