Programmēšana

Skaidrota asociācija, apvienošana un sastāvs OOP

Vienotā modelēšanas valoda (UML) ir de facto objektorientētu sistēmu modelēšanas standarts. UML ir pieci dažādi attiecību veidi: asociācija, apvienošana, sastāvs, atkarība un mantošana. Šajā rakstā ir apspriesti pirmie trīs no šiem jēdzieniem, bet pārējie tiek atstāti citā emuāra ziņā.

Asociācija objektorientētā programmēšanā

Asociācija ir semantiski vājas attiecības (semantiska atkarība) starp citādi nesaistītiem objektiem. Asociācija ir “izmantojot” attiecības starp diviem vai vairākiem objektiem, kuros objektiem ir savs mūžs un nav īpašnieka.

Kā piemēru iedomājieties ārsta un pacienta attiecības. Ārsts var būt saistīts ar vairākiem pacientiem. Tajā pašā laikā viens pacients var apmeklēt ārstus vai konsultēties pie vairākiem ārstiem. Katram no šiem objektiem ir savs dzīves cikls, un nav “īpašnieka” vai vecāka. Objektus, kas ir asociācijas attiecību daļa, var izveidot un iznīcināt neatkarīgi.

UML asociācijas attiecības attēlo viena bulta. Asociācijas attiecības var attēlot kā viens pret vienu, viens pret daudziem vai daudzi pret daudziem (pazīstams arī kā kardinalitāte). Būtībā asociācijas attiecības starp diviem vai vairākiem objektiem apzīmē saziņas ceļu (sauktu arī par saiti) starp tiem, lai viens objekts varētu nosūtīt ziņojumu otram. Šis koda fragments parāda, kā divas klases, BlogAccount un BlogEntry, ir saistītas viena ar otru.

publiskā klase BlogAccount

   {

privāts BlogEntry [] blogEntries;

// Citi klases BlogAccount dalībnieki

   }

publiskā klase BlogEntry

   {

Int32 blogId;

virknes paraksts;

virknes teksts;

// Citi BlogEntry klases dalībnieki

   }

Apkopošana objektorientētā programmēšanā

Apkopošana ir specializēta divu vai vairāku objektu asociācijas forma, kurā katram objektam ir savs dzīves cikls, bet pastāv arī īpašumtiesības. Apkopošana ir tipiska visu / daļu vai vecāku / bērnu attiecība, taču tā var vai nevar apzīmēt fizisko ierobežojumu. Būtisks apkopošanas attiecību īpašums ir tas, ka viss vai vecāki (t.i., īpašnieks) var pastāvēt bez daļas vai bērna un otrādi.

Piemēram, darbinieks var piederēt vienam vai vairākiem organizācijas departamentiem. Tomēr, ja darbinieka nodaļa tiek izdzēsta, darbinieka objekts netiktu iznīcināts, bet dzīvotu tālāk. Ņemiet vērā, ka attiecības starp objektiem, kas piedalās apkopojumā, nevar būt savstarpējas - t.i., nodaļa var “piederēt” darbiniekam, bet darbinieks nepieder nodaļai. Šajā koda piemērā apkopojuma saistība ir acīmredzama starp BlogAuthor un BlogAccount klasēm.

publiskās klases BlogAuthor

   {

privāts Int32 authorId;

privāta virkne firstName;

privāta virkne lastName;

// Citi BlogAuthor klases dalībnieki

   }

publiskā klase BlogAccount

   {

privāts BlogEntry [] blogEntries;

// Citi klases BlogAccount dalībnieki

   }

Apkopošana parasti tiek attēlota UML, izmantojot līniju ar dobu dimantu. Tāpat kā asociācija, arī apkopošana var ietvert savstarpēju attiecību starp iesaistītajiem objektiem, viens pret daudziem vai viens pret daudziem. Attiecību "viens pret daudziem" vai "daudzi pret daudziem" gadījumā mēs varam teikt, ka tās ir liekas attiecības.

Kompozīcija objektorientētā programmēšanā

Kompozīcija ir specializēta agregācijas forma. Kompozīcijā, ja vecāku objekts tiek iznīcināts, tad arī bērnu objekti pārstāj eksistēt. Kompozīcija faktiski ir spēcīgs agregācijas veids, un to dažkārt dēvē par “nāves” attiecībām. Piemēram, māju var veidot viena vai vairākas istabas. Ja māja tiek sagrauta, tiek iznīcinātas arī visas istabas, kas ir mājas daļa. Šis koda fragments ilustrē kompozīcijas attiecības starp divām klasēm - māju un istabu.

sabiedrības klases nams

{

privāts Istabas numurs;

valsts nams ()

   {

istaba = jauna Istaba ();

   }

}

Tāpat kā apkopojums, arī sastāvs ir veselu / daļu vai vecāku / bērnu attiecības. Tomēr sastāvā vai bērna dzīves ciklu kontrolē viss vai vecāki, kuriem tas pieder. Jāatzīmē, ka šī kontrole var būt tieša vai tranzīta. Tas ir, vecāks var būt tieši atbildīgs par bērna radīšanu vai iznīcināšanu vai arī vecāks var izmantot jau izveidotu bērnu. Līdzīgi vecāku objekts var deleģēt kontroli citiem vecākiem, lai iznīcinātu bērna objektu. Kompozīcija tiek attēlota UML, izmantojot līniju, kas savieno objektus ar cieto dimantu tā objekta galā, kuram pieder otrs objekts.

Es ceru, ka šī diskusija par saistību, apkopošanu un kompozīcijas attiecībām ir palīdzējusi jums saprast, kā šie trīs jēdzieni atšķiras. Atcerieties, ka apvienošana un sastāvs ir abas asociācijas apakškopas. Gan apkopojumā, gan sastāvā vienas klases objekts var būt citas klases objekta īpašnieks. Gan apkopojumā, gan kompozīcijā bērnu objekti pieder vienam vecāka objektam, t.i., tiem var būt tikai viens īpašnieks.

Visbeidzot, summēšanas attiecībās vecāku un bērnu objektu dzīves cikli ir neatkarīgi. Kompozīcijas attiecībās vecāku objekta nāve nozīmē arī tā bērnu nāvi.

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