Programmering

Assosiasjon, aggregering og sammensetning i OOP forklart

Unified Modeling Language (UML) er en de facto standard for modellering av objektorienterte systemer. I UML er det fem forskjellige typer relasjoner: tilknytning, aggregering, sammensetning, avhengighet og arv. Denne artikkelen presenterer en diskusjon av de tre første av disse konseptene, og overlater de gjenværende til et annet blogginnlegg.

Assosiasjon i objektorientert programmering

Assosiasjon er et semantisk svakt forhold (en semantisk avhengighet) mellom ellers ikke-relaterte objekter. En assosiasjon er et "brukende" forhold mellom to eller flere objekter der objektene har sin egen levetid og det ikke er noen eier.

Tenk deg som et forhold forholdet mellom en lege og en pasient. En lege kan assosieres med flere pasienter. Samtidig kan en pasient besøke flere leger for behandling eller konsultasjon. Hver av disse objektene har sin egen livssyklus, og det er ingen “eier” eller foreldre. Objektene som er en del av assosiasjonsforholdet kan opprettes og ødelegges uavhengig.

I UML er et assosiasjonsforhold representert med en enkelt pil. Et assosiasjonsforhold kan representeres som en-til-en, en-til-mange eller mange-til-mange (også kjent som kardinalitet). I hovedsak betegner et assosiasjonsforhold mellom to eller flere objekter en kommunikasjonsvei (også kalt en lenke) mellom dem slik at ett objekt kan sende en melding til et annet. Følgende kodebit illustrerer hvordan to klasser, BlogAccount og BlogEntry, er assosiert med hverandre.

offentlig klasse BlogAccount

   {

private BlogEntry [] blogEntries;

// Andre medlemmer av BlogAccount-klassen

   }

offentlig klasse BlogEntry

   {

Int32 blogId;

strengtekst;

strengtekst;

// Andre medlemmer av BlogEntry-klassen

   }

Aggregering i objektorientert programmering

Aggregasjon er en spesialisert form for tilknytning mellom to eller flere objekter der hvert objekt har sin egen livssyklus, men det eksisterer også et eierskap. Aggregering er et typisk hele / del- eller foreldre / barn-forhold, men det kan eller ikke kan betegne fysisk inneslutning. En vesentlig egenskap ved et aggregeringsforhold er at hele eller foreldre (dvs. eieren) kan eksistere uten delen eller barnet og omvendt.

Som et eksempel kan en ansatt tilhøre en eller flere avdelinger i en organisasjon. Imidlertid, hvis en ansattes avdeling blir slettet, ville ikke ansattens objekt bli ødelagt, men ville leve videre. Merk at forholdet mellom objekter som deltar i en aggregering ikke kan være gjensidige - det vil si at en avdeling kan "eie" en ansatt, men den ansatte eier ikke avdelingen. I det følgende kodeeksemplet er det et sammenhengende forhold tydelig mellom BlogAuthor- og BlogAccount-klassene.

offentlig klasse BlogAuthor

   {

privat Int32 authorId;

privat streng fornavn;

privat streng etternavn;

// Andre medlemmer av BlogAuthor-klassen

   }

offentlig klasse BlogAccount

   {

private BlogEntry [] blogEntries;

// Andre medlemmer av BlogAccount-klassen

   }

Aggregering er vanligvis representert i UML ved hjelp av en linje med en hul diamant. I likhet med tilknytning kan aggregering innebære et en-til-en, en-til-mange eller mange-til-mange forhold mellom de deltagende objektene. I tilfelle av en-til-mange eller mange-til-mange forhold, kan vi si at det er et overflødig forhold.

Komposisjon i objektorientert programmering

Komposisjon er en spesialisert form for aggregering. I sammensetning, hvis foreldreobjektet blir ødelagt, så slutter også barnegjenstandene å eksistere. Komposisjon er faktisk en sterk type aggregering og blir noen ganger referert til som et "dødsforhold". Som et eksempel kan et hus bestå av ett eller flere rom. Hvis huset blir ødelagt, blir også alle rommene som er en del av huset ødelagt. Følgende kodebit illustrerer et komposisjonsforhold mellom to klasser, hus og rom.

offentlig klasse hus

{

private rom rom;

offentlig hus()

   {

rom = nytt rom ();

   }

}

I likhet med aggregering er sammensetning også en hel / del eller foreldre / barn-relasjon. Imidlertid styres livssyklusen til delen eller barnet i sammensetningen av hele eller foreldre som eier den. Det skal bemerkes at denne kontrollen enten kan være direkte eller transitiv. Det vil si at foreldrene kan være direkte ansvarlige for opprettelsen eller ødeleggelsen av barnet, eller foreldrene kan bruke et barn som allerede er opprettet. På samme måte kan et overordnet objekt delegere kontrollen til en annen forelder for å ødelegge underordnet objekt. Komposisjon er representert i UML ved hjelp av en linje som forbinder objektene med en solid diamant på slutten av objektet som eier det andre objektet.

Jeg håper denne diskusjonen om assosiasjon, aggregering og komposisjonsforhold har hjulpet deg å forstå hvordan disse tre konseptene er forskjellige. Husk at aggregering og sammensetning begge er undergrupper av tilknytning. I både aggregering og sammensetning kan et objekt i en klasse være eier av et objekt i en annen klasse. Og i både aggregering og sammensetning tilhører underordnede objekter et enslig foreldreobjekt, dvs. de kan bare ha en eier.

Til slutt, i et aggregeringsforhold, er livssyklusene til foreldreobjekter og barneobjekter uavhengige. I et komposisjonsforhold betyr død av et foreldreobjekt også barnas død.

$config[zx-auto] not found$config[zx-overlay] not found