Programmering

Tilknytning, sammenlægning og sammensætning i OOP forklaret

Unified Modelling Language (UML) er en de facto standard til modellering af objektorienterede systemer. I UML er der fem forskellige typer relationer: tilknytning, sammenlægning, sammensætning, afhængighed og arv. Denne artikel præsenterer en diskussion af de tre første af disse begreber og overlader de resterende til et andet blogindlæg.

Association i objektorienteret programmering

Associering er et semantisk svagt forhold (en semantisk afhængighed) mellem ellers ikke-relaterede objekter. En tilknytning er et "brugende" forhold mellem to eller flere objekter, hvor objekterne har deres egen levetid, og der ikke er nogen ejer.

Forestil dig som eksempel forholdet mellem en læge og en patient. En læge kan tilknyttes flere patienter. Samtidig kan en patient besøge flere læger for behandling eller konsultation. Hver af disse objekter har sin egen livscyklus, og der er ingen ”ejer” eller forælder. Objekterne, der er en del af associeringsforholdet, kan oprettes og ødelægges uafhængigt.

I UML er et associeringsforhold repræsenteret af en enkelt pil. Et associeringsforhold kan repræsenteres som en-til-en, en-til-mange eller mange-til-mange (også kendt som kardinalitet). I det væsentlige angiver et associeringsforhold mellem to eller flere objekter en kommunikationsvej (også kaldet et link) mellem dem, så et objekt kan sende en besked til et andet. Følgende kodestykke illustrerer, hvordan to klasser, BlogAccount og BlogEntry, er forbundet med hinanden.

offentlig klasse BlogAccount

   {

private BlogEntry [] blogEntries;

// Andre medlemmer af BlogAccount-klassen

   }

offentlig klasse BlogEntry

   {

Int32 blogId;

streng billedtekst;

strengtekst;

// Andre medlemmer af BlogEntry-klassen

   }

Aggregering i objektorienteret programmering

Aggregation er en specialiseret form for tilknytning mellem to eller flere objekter, hvor hvert objekt har sin egen livscyklus, men der også eksisterer et ejerskab. Aggregering er et typisk forhold mellem hele / del eller forældre / børn, men det betegner måske eller måske ikke fysisk indeslutning. En væsentlig egenskab ved et aggregeringsforhold er, at hele eller forælder (dvs. ejeren) kan eksistere uden del eller barn og omvendt.

Som et eksempel kan en medarbejder tilhøre en eller flere afdelinger i en organisation. Men hvis en medarbejders afdeling slettes, ville medarbejderobjektet ikke blive ødelagt, men ville leve videre. Bemærk, at forholdet mellem objekter, der deltager i en sammenlægning, ikke kan være gensidige - dvs. en afdeling kan "eje" en medarbejder, men medarbejderen ejer ikke afdelingen. I det følgende kodeeksempel er et sammenhængsforhold tydeligt mellem klasserne BlogAuthor og BlogAccount.

offentlig klasse BlogAuthor

   {

privat Int32 authorId;

privat streng fornavn;

privat streng efternavn;

// Andre medlemmer af BlogAuthor-klassen

   }

offentlig klasse BlogAccount

   {

private BlogEntry [] blogEntries;

// Andre medlemmer af BlogAccount-klassen

   }

Aggregering er normalt repræsenteret i UML ved hjælp af en linje med en hul diamant. Ligesom tilknytning kan aggregering involvere et en-til-en, en-til-mange eller mange-til-mange forhold mellem de deltagende objekter. I tilfælde af et forhold mellem en og mange eller mange til mange kan vi sige, at det er et overflødigt forhold.

Komposition i objektorienteret programmering

Komposition er en specialiseret form for sammenlægning. I komposition, hvis den overordnede genstand ødelægges, ophører også de barns genstande med at eksistere. Komposition er faktisk en stærk type aggregering og kaldes undertiden et "dødsforhold". Som et eksempel kan et hus bestå af et eller flere værelser. Hvis huset ødelægges, ødelægges også alle værelserne, der er en del af huset. Følgende kodestykke illustrerer et sammensætningsforhold mellem to klasser, hus og rum.

offentlig klasse hus

{

privat værelse værelse;

Offentligt hus()

   {

værelse = nyt rum ();

   }

}

Ligesom aggregering er sammensætning også en hel / del eller forældre / barn-relation. I kompositionen kontrolleres dog delens eller barnets livscyklus af hele eller forælder, der ejer det. Det skal bemærkes, at denne kontrol enten kan være direkte eller transitiv. Det vil sige, at forældrene kan være direkte ansvarlige for oprettelsen eller ødelæggelsen af ​​barnet, eller forældren kan bruge et barn, der allerede er oprettet. Tilsvarende kan et overordnet objekt delegere kontrollen til en anden forælder for at ødelægge det underordnede objekt. Komposition er repræsenteret i UML ved hjælp af en linje, der forbinder objekterne med en solid diamant i slutningen af ​​objektet, der ejer det andet objekt.

Jeg håber, at denne diskussion af sammenhæng, sammenlægning og sammensætningsforhold har hjulpet dig med at forstå, hvordan disse tre koncepter adskiller sig. Husk at aggregering og sammensætning begge er undergrupper af tilknytning. I både sammenlægning og sammensætning kan et objekt i en klasse være ejer af et objekt i en anden klasse. Og i både sammenlægning og sammensætning tilhører underordnede genstande et enkelt forældreobjekt, dvs. de kan kun have en ejer.

Endelig er livscyklussen for forældreobjekter og underordnede objekter uafhængige i et aggregeringsforhold. I et sammensætningsforhold betyder død af et forældreobjekt også dets børns død.

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