Aggregation vs Composition
On februar 12, 2021 by adminJeg forstår, hvad komposition er i OOP, men jeg er ikke i stand til at få en klar idé om, hvad Aggregation er. Kan nogen forklare?
Svar
Enkle regler:
- A “ejer” B = Sammensætning: B har ingen mening eller formål i systemet uden A
- A “bruger” B = Aggregering: B eksisterer uafhængigt (konceptuelt) fra A
Eksempel 1:
En virksomhed er en samling af mennesker. Et selskab er en sammensætning af konti. Når et firma holder op med at drive forretning, ophører dets konti med at eksistere, men dets folk fortsætter med at eksistere.
Eksempel 2: (meget forenklet)
En teksteditor ejer en buffer (komposition). En teksteditor bruger en fil (sammenlægning). Når teksteditoren lukkes, destrueres bufferen, men selve filen ødelægges ikke.
Kommentarer
- Så er en bil en samlet eller en sammensætning af dets dele?
- Og hvordan adskiller sig aggregering fra ethvert andet forhold mellem to slags enheder?
- @reinierpost I virkeligheden er en bil en sammenlægning af dele, og dele er simpelthen en sammenlægning af molekyler … Men i en model afhænger det hele af dine krav. Er det vigtigt at behandle motoren som en separat enhed, så du kan spore dens levetid uafhængigt af bilen? Kan du genbruge nøjagtig den samme motor i en anden bil? I så fald vil du sandsynligvis have sammenlægning. Ellers vil du have en komposition, fordi du ikke ‘ ikke bryr sig om motorer, der ikke er ‘, og er ligeglad med genbrug af motorer .
- hvad der mangler er et implementeringseksempel for en fuldstændig forståelse …
- Hvad med medarbejder, når en virksomhed holder op med at drive forretning? Medarbejder og mennesker er forskellige enheder, ikke? Så kan jeg sige, at virksomheden er medarbejdernes sammensætning?
Svar
Fra http://en.wikipedia.org/wiki/Object_composition
Aggregering adskiller sig fra almindelig sammensætning, da den ikke indebærer ejendomsret. Når sammensætningen ødelægges, så er de indeholdte objekter også. Samlet set er dette ikke nødvendigvis sandt. For eksempel ejer et universitet forskellige afdelinger (f.eks. Kemi), og hver afdeling har et antal professorer. Hvis universitetet lukker, vil afdelingerne ikke længere eksistere, men professorerne i disse afdelinger vil fortsat eksistere. Derfor kan et universitet ses som en sammensætning af afdelinger, mens afdelinger har en samling af professorer. Derudover kunne en professor arbejde i mere end en afdeling, men en afdeling kunne ikke være en del af mere end et universitet.
Så – mens du har et ejerskabsforhold med sammensætning det ejede objekt ødelægges også, når ejeren er – en sammenlægning (og objekterne indeholdt) kan eksistere uafhængigt.
–
Opdatering: undskyld – dette svar er alt for forenklet i bakspejlet.
@Curtis Batt giver en fremragende definition i sit svar: Aggregation vs Composition
Kommentarer
- I det eksempel, du citerer, er kompositionen en-til-mange, og aggregeringen har også en en-til-mange-forhold, men det kunne her også være et forhold mellem mange og mange for sammenlægningen (vi kan antage, at en lærer kan undervise i flere afdelinger). Mens en afdeling ikke kan være en del af flere universiteter. Komposition indebærer ejerskab, mens aggregering ikke går ud over forhold. Citatet er korrekt, men kommentaren ikke.
- det har intet at gøre med ødelæggelse! UML definerer ikke skraldopsamlingssystem.
- Jeg synes, at wikipedia-linket får refleksive opvoter, men dette er en forfærdelig definition – som @bold påpegede, at disse forhold ikke har noget at gøre med GC. Dette falder også fra hinanden, når et objekt er komponenten af to andre objekter, såsom kuglen i et kugleled, der forbinder to kunstige lemmer. Komponentforholdet handler om funktionel afhængighed.
- Jeg er enig i, at mit svar mangler stærkt – men det er WikiPedia-artiklen også …
- Forskellen mellem sammensætning og aggregering er klar. Problemet med aggregering er, at det ‘ er uklart, hvordan det adskiller sig fra almindelig tilknytning.
Svar
-
Sammensætning er en sammenslutning
-
Aggregation is an Association
-
Composition is a strong Association (Hvis levetiden for det indeholdte objekt helt afhænger af containerobjektet, er det kaldes stærk tilknytning)
-
Aggregation er en svag Association (Hvis levetiden for det indeholdte objekt ikke afhænger af containerobjektet, kaldes det svag 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
- Hvad er forskellen mellem sammenlægning og tilknytning, der hverken er sammensætning eller sammenlægning?
Svar
Der er ingen enkelt forklaring. Forskellige forfattere mener forskellige ting ved aggregering. De fleste betyder egentlig ikke noget specifikt ved det.
Kommentarer
- Dette er det rigtige svar. Jeg ‘ har læst det i to bøger, hvoraf den ene er Martin Fowler ‘ s UML destilleret .
- martinfowler.com/bliki/AggregationAndComposition.html
Svar
Sammensætning (blanding) er en måde at kombinere enkle objekter eller datatyper på ind i mere komplekse. Kompositioner er en kritisk byggesten for mange grundlæggende datastrukturer
Aggregation (samling) adskiller sig fra almindelig sammensætning ved at det ikke indebærer ejerskab. Når sammensætningen ødelægges, så er de indeholdte objekter også. Samlet set er dette ikke nødvendigvis sandt
╔═══════════╦═════════════════════════╦═══════════════════════╗ ║ ║ 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 mellem objektet og adskiller sig kun i deres styrke.
UML-notationer for forskellige slags afhængighed mellem to klasser
Sammensætning : Da motor er en del af bil, er forholdet mellem dem sammensætning. Sådan implementeres de mellem 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 : Da Organisationen har Person som medarbejder, er forholdet mellem dem Aggregation. Sådan ser de ud med hensyn til Java-klasser
public class Organization { private List employees; } public class Person { private String name; }
Kommentarer
- dette ser ikke ‘ ud til at tilbyde noget væsentligt over punkter, der er fremsat og forklaret i tidligere 12 svar
- Ret bøger kan eksistere uden biblioteker. Dårligt eksempel!
- Her er listen over medarbejdere den del af organisationsobjektet. Hvordan kan dette være aggregering?
- Hvordan adskiller associationen sig fra aggregering?
- Jeg elsker dette svar. Det forklarede mig endelig ordentligt, hvad forskellen mellem aggregering og sammensætning er.
Svar
aggregering er en simpel samling, ligesom en pose kugler
sammensætning indebærer interne / funktionelle afhængigheder, som hængslerne på en kasse
biler samlede passagerer; de kommer ind og ud uden at bryde bilens funktionalitet
dækkene er komponenter; fjern en, og bilen fungerer ikke længere korrekt
[bemærk: reservehjulet er samlet! ]
Svar
Jeg ser altid på kompositionen som “har brug for en”, dvs. en bil har brug for en motor, og jeg ser på aggregering som “ting relateret til et formål”. Så at forblive med bilanalogien, kan min aggregering være at repræsentere en rejse, der kan omfatte at bringe en bil og passagerer sammen. Rejsen ejer ikke bilen eller passagererne samler jeg data, der er relateret til et specifikt scenario. Når rejsen er afsluttet, fortsætter bilen og passagererne. Når en bil er afsluttet, ødelægges bilen og dens motor normalt sammen.
Svar
Hvad med dette enkle eksempel :
En matrix med objekter er en sammensætning. En matrix med markører til objekter er en sammenlægning.
Hvis jeg sletter den første, forsvinder dens indhold med den. Den anden, på den anden side kan forsvinde uden at påvirke dets medlemmers eksistens, medmindre der er en bestemt metode, der sletter hvert objekt, når markøren slettes.
Kommentarer
- dette ser ikke ud til ‘ at tilføje noget væsentligt over punkter, der er fremsat og forklaret i tidligere 11 svar
- Respektfuldt uenig, @gnat. Dette er et nyttigt eksempel på, hvordan to kunne implementeres. Folk lærer bedre med eksempler.(Jeg kom her for at kontrollere min forståelse af, at et pointermedlem sandsynligvis ville være en sammenlægning, og et objektmedlem en komposition. Dette er det eneste svar, der direkte adresserer det.)
Svar
Semantisk er alle sæt lavet af undersæt, ikke? Derfor:
-
Aggregeringen sker, når disse undergrupper eksisterer uafhængigt af farsættet. Da en skærm kan frakobles computeren for at blive tilsluttet en anden.
-
Sammensætningen er, når disse undergrupper afhænger af eksistensen af farsættet. Da et blad er en del af et træ, eller leveren er en del af en krop.
Disse begreber taler om typen af afhængighed mellem to objekter eller klasser, begrebsmæssigt. Direkte i et program, i en sammenlægning, når faderobjektet bortskaffer, skal de samlede genstande også bortskaffes. I samme scenarie for en komposition fortsætter sammensatte sønobjekter, så farobjektet dispenserer.
Skriv et svar