Objašnjeno udruživanje, agregacija i sastav u OOP-u

Objedinjeni jezik za modeliranje (UML) de-facto je standard za modeliranje objektno orijentiranih sustava. U UML-u postoji pet različitih vrsta odnosa: udruživanje, agregiranje, sastav, ovisnost i nasljeđivanje. Ovaj članak predstavlja raspravu o prva tri od ovih koncepata, a preostale prepušta drugom postu na blogu.

Asocijacija u objektno orijentiranom programiranju

Asocijacija je semantički slab odnos (semantička ovisnost) između inače nepovezanih objekata. Asocijacija je odnos "korištenja" između dva ili više predmeta u kojem predmeti imaju vlastiti vijek trajanja, a nema vlasnika.

Kao primjer zamislite odnos između liječnika i pacijenta. Liječnik se može povezati s više pacijenata. Istodobno, jedan pacijent može posjetiti više liječnika radi liječenja ili konzultacija. Svaki od tih predmeta ima svoj vlastiti životni ciklus i ne postoji "vlasnik" ili roditelj. Objekti koji su dio odnosa udruživanja mogu se stvarati i uništavati neovisno.

U UML-u odnos pridruživanja predstavljen je jednom strelicom. Odnos asocijacije može se predstaviti kao jedan-prema-jednom, jedan-prema-mnogima ili mnogo prema mnogima (poznat i kao kardinalnost). U osnovi, odnos povezanosti između dva ili više objekata označava put komunikacije (koji se također naziva i poveznica) između njih, tako da jedan objekt može poslati poruku drugom. Sljedeći isječak koda ilustrira kako su dvije klase, BlogAccount i BlogEntry, povezane jedna s drugom.

javni razred BlogAccount

   {

       privatni BlogEntry [] blogEntries;

       // Ostali članovi klase BlogAccount

   }

javna klasa BlogEntry

   {

       Int32 blogId;

       string string;

       tekst niza;

       // Ostali članovi klase BlogEntry

   }

Agregacija u objektno orijentiranom programiranju

Agregacija je specijalizirani oblik povezivanja između dva ili više predmeta u kojima svaki objekt ima svoj vlastiti životni ciklus, ali postoji i vlasništvo. Agregacija je tipičan odnos cjelina / dio ili roditelj / dijete, ali može i ne mora označavati fizičko zadržavanje. Bitno svojstvo odnosa agregacije je da cjelina ili roditelj (tj. Vlasnik) mogu postojati bez dijela ili djeteta i obrnuto.  

Kao primjer, zaposlenik može pripadati jednom ili više odjela u organizaciji. Međutim, ako se odjel zaposlenika izbriše, objekt zaposlenika ne bi bio uništen već bi živio dalje. Imajte na umu da odnosi između objekata koji sudjeluju u agregaciji ne mogu biti uzajamni - tj. Odjel može "posjedovati" zaposlenika, ali zaposlenik ne posjeduje odjel. U sljedećem primjeru koda očit je odnos agregacije između klasa BlogAuthor i BlogAccount.

javna klasa BlogAuthor

   {

       privatni Int32 authorId;

       privatni niz firstName;

       privatni niz lastName;

       // Ostali članovi klase BlogAuthor

   }

javni razred BlogAccount

   {

       privatni BlogEntry [] blogEntries;

       // Ostali članovi klase BlogAccount

   }

Agregacija je obično predstavljena u UML-u pomoću crte sa šupljim dijamantom. Poput povezivanja, i agregacija može uključivati ​​odnos jedan prema jedan, jedan prema više ili mnogo prema mnogima između objekata koji sudjeluju. U slučaju odnosa jedan prema više ili mnogo prema mnogo, možemo reći da je to suvišan odnos.

Sastav u objektno orijentiranom programiranju

Sastav je specijalizirani oblik agregacije. Prema sastavu, ako je nadređeni objekt uništen, tada i podređeni objekti prestaju postojati. Sastav je zapravo jaka vrsta agregacije i ponekad se naziva odnosom "smrti". Kao primjer, kuća se može sastojati od jedne ili više soba. Ako je kuća uništena, tada su uništene i sve prostorije koje su dio kuće. Sljedeći isječak koda ilustrira kompozicijski odnos dvije klase, House i Room.

Kuća javnog staleža

{

   privatna soba Soba;

   javna kuća ()

   {

       soba = nova Soba ();

   }

}

Poput agregacije, sastav je također odnos cjelina / dio ili roditelj / dijete. Međutim, u sastavu životni ciklus dijela ili djeteta kontrolira cjelina ili roditelj koji ih posjeduje. Treba napomenuti da ova kontrola može biti izravna ili prijelazna. Odnosno, roditelj može biti izravno odgovoran za stvaranje ili uništavanje djeteta ili roditelj može koristiti dijete koje je već stvoreno. Slično tome, nadređeni objekt može delegirati kontrolu nekom drugom roditelju da uništi podređeni objekt. Sastav je predstavljen u UML-u pomoću crte koja povezuje objekte s čvrstim dijamantom na kraju predmeta koji posjeduje drugi objekt.

Nadam se da vam je ova rasprava o povezanosti, agregaciji i odnosima sastava pomogla da shvatite kako se razlikuju ova tri koncepta. Imajte na umu da su agregacija i sastav podskupovi udruživanja. I u agregaciji i u sastavu objekt jedne klase može biti vlasnik objekta druge klase. I u agregaciji i u sastavu, podređeni objekti pripadaju jednom nadređenom objektu, tj. Mogu imati samo jednog vlasnika.

Konačno, u agregacijskom odnosu, životni ciklusi nadređenih i podređenih objekata su neovisni. U kompozicijskom odnosu, smrt nadređenog predmeta znači i smrt njegove djece.