softversko inŽenjerstvo vježbe 10: oblikovanje veza...

32
SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza, agregacije i kompozicije Robert Manger Sveučilište u Zagrebu PMF-Matematički odsjek Akademska godina 2019/2020.

Upload: others

Post on 21-Sep-2019

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

SOFTVERSKO INŽENJERSTVO

Vježbe 10: Oblikovanje veza,agregacije i kompozicije

Robert Manger

Sveučilište u Zagrebu

PMF-Matematički odsjek

Akademska godina 2019/2020.

Page 2: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 2

Sadržaj Vježbi 10

Općenito o oblikovanju veza

Svojstva agregacije i kompozicije

Postupak profinjavanja veza dobivenih u analizi

Profinjavanje asocijacije jedan-naprama-jedan

Profinjavanje asocijacije mnogo-naprama-jedan

Profinjavanje asocijacije jedan-naprama-mnogo

Profinjavanje asocijacije mnogo naprama mnogo

Profinjavanje dvosmjerne asocijacije

Profinjavanje asocijacijske klase

Page 3: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 3

Općenito o oblikovanju veza (1) Veze koje smo uočili u analizi potrebno je profiniti u veze

na razini oblikovanja, dakle takve veze koje se lagano

mogu implementirati.

Najveću pažnju posvećujemo profinjavanju asocijacija

između klasa. U postupku profinjavanja koji vodi do

dobrih imlementacija važnu ulogu imaju veze agregacije

odnosno kompozicije.

Pokazuje se da se asocijacije s multiplicitetima: jedan-naprama-jedan,

mnogo-naprama-jedan,

jedan-naprama-mnogo

mogu relativno jednostavno implementirati nakon što ih

profinimo u agregacije ili kompozicije.

Page 4: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 4

Općenito o oblikovanju veza (2)

Pokazuje se da je znatno teže implementirati: asocijacije s multiplicitetom mnogo-naprama-mnogo,

dvosmjerne asocijacije,

asocijacijske klase.

Takve složenije asocijacije profinjavamo uvođenjem

novih klasa, te svođenjem na nekoliko

jednostavnijih agregacija i kompozicija.

U nastavku ovih vježbi najprije se upoznajemo sa

svojstvima agregacije i kompozicije, zatim ugrubo

opisujemo postupak profinjavanja, te na kraju

detaljno analiziramo načine za profinjavanje

pojedinih vrsta asocijacija.

Page 5: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 5

Agregacija i kompozicija (1) Riječ je o vezama koje opisuju odnos između cjeline i

dijelova. Objekti jedne klase predstavljaju cjelinu, a

objekti druge klase su dijelovi.

Cjelina koristi usluge dijelova; dijelovi obrađuju zahtjeve cjeline.

Cjelina obično ima kontrolu; dijelovi su obično pasivni.

Navigabilnost je jednosmjerna, od cjeline do dijela.

Semantička razlika između agregacije i kompozicije je u

sljedećem.

Agregacija je labava vrsta veze, gdje dijelovi mogu postojati

neovisno o cjelini. Primjer: računalo i njegove periferijske jedinice.

Kompozicija je čvrsta veza, gdje dijelovi ne mogu postojati bez

cjeline. Primjer: stablo i njegovi listovi.

I agregacija i kompozicija su tranzitivne veze:

ako je C dio od B a B dio od A, tada je i C dio od A.

Page 6: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 6

Agregacija i kompozicija (2)

Obje vrste veza crtaju se na class dijagramu kao strelice

od klase-cjeline do klase-dijela s rombom na početku

strelice. Pritom je: Kod agregacije romb prazan,

Kod kompozicije romb ispunjen.

Obje vrste veze su

asimetrične. Cjelina nikad ne

može biti dio same

sebe, ni posredno ni

neposredno.

Niz veza od cjeline

prema dijelu ne smije

zatvarati ciklus.

Page 7: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 7

Detaljnije o agregaciji

Kod agregacije cjelina koji put može postojati

neovisno o dijelovima, koji put ne (ovisno o

aplikaciji).

Dijelovi uvijek mogu postojati neovisno o cjelini.

Cjelina je obično u nekom smislu nepotpuna ako

joj nedostaju dijelovi.

Moguće je da jedan te isti dio bude uključen u

više cjelina.

Page 8: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 8

Jednostavni primjer agregacije

Dijagram prikazuje agregaciju između računala i pisača.

Računalo može imati spojeno 0 ili više pisača.

U jednom trenutku, jedan pisač može biti spojen na 0 ili 1

računalo.

Tijekom vremena, razna računala mogu koristiti jedan te isti pisač.

Pisač može postojati čak i ako nije spojen na računalo.

Page 9: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 9

Složeniji primjer agregacije Dijagram prikazuje stolno računalo.

Ono se sastoji od miša, tipkovnice, središnje jedinice, monitora i dva

zvučnika.

Središnja jedinica je sastavljena od RAM-a, diskova i drugih dijelova.

Page 10: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 10

Primjer refleksivne agregacije (1) Na lijevom dijelu slike vidi se class dijagram s

refleksivnom agregacijom koja klasu Product povezuje

samu sa sobom.

Page 11: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 11

Primjer refleksivne agregacije (2)

Agregacija kaže da jedan složeniji proizvod može

biti sastavljen od više jednostavnijih proizvoda.

Na desnom dijelu prethodne slike vidi se

odgovarajući object dijagram s poveznicama

između objekata.

Object dijagram je korektan ako prikazuje različite

objekte i pritom poveznice ne zatvaraju ciklus.

Naime, mora se čuvati asimetričnost agregacije.

Page 12: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 12

Detaljnije o kompoziciji

Kod kompozicije, dio ne može postojati bez cjeline.

U jednom trenutku jedan dio može pripadati samo

jednoj cjelini. Kompozicije uvijek grade hijerarhiju.

Cjelina je odgovorna za stvaranje i uništavanje svojih

dijelova.

Jedna cjelina može otpustiti svoj dio, ali tako da ga

preda u nadležnost drugoj cjelini.

Ako jedna cjelina mora nestati, ona mora uništiti sve

svoje dijelove, ili ih mora predati u nadležnost drugoj

cjelini.

Page 13: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 13

Jednostavni primjer kompozicije

Dijagram prikazuje da miš kao cjelina uključuje i tipke

kao svoje sastavne dijelove.

Tipka ne može postojati nezavisno od miša. Ako

uništimo miša, uništili smo i sve njegove tipke.

Jedna tipka pripada samo jednom mišu.

Page 14: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 14

Kompozicija i atributi Semantika kompozicije vrlo je slična semantici

atributa. Dio cjeline ekvivalentan je atributu te cjeline.

Postavlja se pitanje da li je u modelima uopće

potrebno koristiti kompoziciju, ili je bolje klase-dijelove

proglasiti atributima klase-cjeline. Odgovor ovisi o

situaciji.

Eksplicitnu kompoziciju treba koristiti onda kad su dijelovi

sami za sebe važni i zanimljivi.

Atribute treba koristiti onda kad su dijelovi sami za sebe

nezanimljivi, ili je riječ o primitivnim tipovima koji nisu klase.

Page 15: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 15

Postupak profinjavanja veza (1) Sad ćemo detaljnije opisati postupak profinjavanja

veza uočenih u analizi, kojim dobivamo veze na razini

oblikovanja.

U analizi se obično pojavljuju asocijacije s nejasno

određenom semantikom i nepoznatim multiplicitetima.

U oblikovanju moramo biti što precizniji i konkretniji.

Kad god je to moguće, asocijaciju nastojimo

interpretirati kao agregaciju ili kompoziciju.

Nakon što smo procijenili da je moguće koristiti

agregaciju ili kompoziciju, daljnji postupak je sljedeći. Dodajemo multiplicitete i imena uloga ukoliko nedostaju.

Odlučujemo koja strana asocijacije predstavlja cjelinu, a koja

dio.

Page 16: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 16

Postupak profinjavanja veza (2) Gledamo multiplicitet na strani cjeline: ukoliko je on 0..1 ili

točno 1, moguće je koristiti kompoziciju, inače moramo

koristiti agregaciju.

Zadajemo jednosmjernu navigabilnost od cjeline prema

dijelovima.

Ovisno o multiplicitetima, predlažemo daljnje profinjavanje

odnosno odgovarajuću implementaciju.

Načini kako se pojedina asocijacija može profiniti i

implementirati bitno ovise o njezinim multiplicitetima.

Ti multipliciteti mogu biti:

jedan-naprama-jedan,

mnogo-naprama-jedan,

jedan-naprama-mnogo,

mnogo-naprama-mnogo.

Page 17: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 17

Asocijacija jedan-naprama-jedan (1) Asocijacija s multiplicitetima jedan-naprama-jedan

predstavlja vrlo čvrst odnos između dviju klasa.

Postoje tri načina kako se ona može profiniti i

dovesti u oblik pogodan za implementaciju:

sažimanje dviju klasa u jednu,

pretvaranje u kompoziciju,

pretvaranje jedne klase u atribut druge klase.

U slučaju pretvaranja u kompoziciju, veza će na

kraju implementirati tako da objekt-cjelina sadrži

referencu na jedinstveni objekt-dio.

Page 18: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 18

Asocijacija jedan-naprama-jedan (2)

Sljedeća slika prikazuje asocijaciju koju smo

interpretirali kao kompoziciju.

Page 19: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 19

Asocijacija jedan-naprama-jedan (3) Sljedeća slika prikazuje drugi način profinjavanja iste

asocijacije, gdje smo jednu klasu pretvorili u atribut druge

klase.

Page 20: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 20

Asocijacija mnogo-naprama-jedan (1) Promatramo asocijaciju za koju nam se čini da bi je

mogli interpretirati kao agregaciju. Pritom je multiplicitet

na strani cjeline “mnogo”, a multiplicitet na strani dijela

je 1.

Budući da isti dio može biti uključen u više cjelina,

jasno je da tu ne može biti riječ o kompoziciji.

Potrebno je provjeriti da li poveznice među objektima

mogu zatvoriti ciklus.

Ako nema ciklusa, tada asocijaciju zaista možemo

profiniti u agregaciju. To znači da će asocijacija na

kraju biti implementirana tako da objekt-cjelina sadrži

referencu na objekt-dio.

Page 21: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 21

Asocijacija mnogo-naprama-jedan (2) Sljedeća slika prikazuje vezu između novčanih iznosa i

valuta u kojoj su ti iznosi. Veza je na opisani način

profinjena u agregaciju.

Page 22: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 22

Asocijacija jedan-naprama-mnogo (1) Promatramo asocijaciju za koju nam opet se čini da bi je

mogli interpretirati kao agregaciju. No sada postoji cijela

kolekcija objekata koji su dijelovi jedne cjeline.

Profinjenje se svodi na uvođenje nove klase koja

predstavlja kolekciju objekata-dijelova. U konačnoj

implementaciji cjelina će imati referencu na kolekciju.

Objektno-orijentirani jezici razlikuju se po tome u kojoj

mjeri podržavaju rad s kolekcijama. Neki nude samo polja, dakle tjeraju nas da kolekciju prikažemo kao

indeksirani niz referenci na objekte-dijelove. To je nefleksibilno

rješenje jer je veličina polja unaprijed ograničena.

Neki imaju implementirane takozvane kolekcijske klase, na primjer

redove, stogove, rječnike, … To je znatno fleksibilnije rješenje gdje

nema ograničenja na veličinu kolekcije, a moguće je i odabrati

razne načine ponašanja kolekcije (sortiranost, duplikati, …)

Page 23: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 23

Asocijacija jedan-naprama-mnogo (2) Općenito, kolekcijska klasa je takva klasa čiji objekti

predstavljaju kolekcije drugih objekata. Kolekcijska

klasa raspolaže operacijama za:

dodavanje ili izbacivanje objekta iz kolekcije,

pronalaženje objekta u kolekciji sa zadanim svojstvima,

prolazak kroz kolekciju i dohvaćanje svih objekata od prvog do

zadnjeg.

Sljedeća slika prikazuje asocijaciju jedan-naprama-

mnogo između narudžbi (Order) i redaka narudžbi

(OrderLine). Ta asocijacija je profinjena korištenjem

kolekcijske klase Vector koja je standardna u Javi.

Umjesto polazne veze, pojavljuju se dvije nove veze:

Page 24: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 24

Asocijacija jedan-naprama-mnogo (3)

Veza između cjeline (Order) i kolekcijske klase (Vector) je svakako

kompozicija.

Veza između kolekcijske klase (Vector) i dijelova (OrderLIne) može

biti ili agregacija ili kompozicija. Odlučili smo se za kompoziciju.

Page 25: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 25

Asoc mnogo-naprama-mnogo (1) Sad promatramo asocijaciju s multiplicitetom mnogo-

naprama-mnogo. Kad bi takvu vezu interpretirali kao

agregaciju, tada bi jedna cjelina imala mnogo dijelova, a

jedan te isti dio bio bi uključen u mnogo cjelina.

Današnji objektno-orijentirani jezici ne daju izravnu

podršku za prikaz odnosa mnogo-naprama-mnogo.

Kolekcijske klase ne pomažu jer bi s njima svaka cjelina

stvorila svoju kolekciju gdje bi se na nekoordinirani način

pojavljivale kopije istih dijelova.

Asocijaciju mnogo-naprama-mnogo profinjavamo

takozvanim postupkom reifikacije (making real). Uvodimo novu klasu za uređene parove povezanih objekata.

Uvodimo dvije nove asocijacije, između nove klase i starih klasa.

Te nove asocijacije imaju jednostavniji multiplicitet, pa se mogu

implementiranti na načine koje smo prethodno opisali.

Page 26: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 26

Asoc mnogo-naprama-mnogo (2) Sljedeća slika prikazuje asocijaciju allocation između

poslova (Task) i resursa (Resource). Jednom poslu može

biti dodijeljeno više resursa, a jedan resurs može biti

dodijeljen raznim poslovima.

Page 27: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 27

Asoc mnogo-naprama-mnogo (3) Asocijacija se profinjuje tako da uvedemo klasu Allocation.

Njeni objekti su uređeni parovi (posao, resurs) takvi da je

dotični resurs dodijeljen dotičnom poslu. Polazna

asocijacija pretvorila se u dvije agregacije.

Odlučili smo da je Resource cjelina a Task dio. To je zato što

se u zahtjevima tražila obrada koja kreće od resursa. U

skladu s usmjerenošću na resurse, odlučili smo da će

objekt tipa Resource imati odgovornost stvaranja i

uništavanja objekata tipa Allocation. Zato smo vezu između

Resource i Allocation proglasili kompozicijom.

Ako bi se u zahtjevima tražila jednaka usmjerenost i na

resurse i na poslove, tada bi morali uvesti još jednu klasu:

AllocationManager. Objekt iz te klase održavao bi kolekciju

objekata tipa Allocation.

Page 28: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 28

Dvosmjerna asocijacija (1)

Česte su situacije kad neki objekt a iz klase A koristi

uslugu nekog objekta b iz klase B, nakon čega b mora

odgovoriti tako da pozove uslugu objekta a. Na

primjer, a može biti GUI prozor, a b gumb unutar tog

prozora.

Takva situacija u analizi bi se opisala kao dvosmjerna

veza između klasa A i B.

No budući da današnji objektno-orijentirani jezici ne

daju pravu podršku za dvosmjernost, dvosmjerna

asocijacija se u oblikovanju mora profiniti u dvije

jednosmjerne. To je ilustrirano na sljedećem

dijagramu.

Page 29: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 29

Dvosmjerna asocijacija (2)

Jedna od jednosmjernih asocijacija može biti proglašena

agregacijom ili čak kompozicijom. No da bi osigurali

asimetričnost, drugi smjer mora ostati neprofinjena

asocijacija, ili čak može biti pretvoren u ovisnost.

Page 30: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 30

Asocijacijske klase (1) Asocijacijske klase se pojavljuju u analizi, no moraju se

ukloniti u oblikovanju budući da ih današnji programski

jezici ne mogu izravno implementirati.

Asocijacijsku klasu uklanjamo postupkom reifikacije koji

je sličan onom kojeg smo koristili za vezu mnogo-

naprama-mnogo. Dakle uvodimo novu klasu koja zamjenjuje asocijacijsku klasu.

Objekt nove klase predstavlja uređeni par povezanih objekata, te

također sadrži i atribute veze.

Uvodimo nove asocijacije između starih klasa i nove klase. Te

nove asocijacije imaju multiplicitet jedan-naprama-mnogo ili

mnogo-naprama-jedan, a mogu se proglasiti agregacijom ili

kompozicijom.

Na gornjem dijelu sljedećeg dijagrama vidi se

asocijacijska klasa Job s atributom salary koja povezuje

klase Company i Person.

Page 31: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 31

Asocijacijske klase (2)

Page 32: SOFTVERSKO INŽENJERSTVO Vježbe 10: Oblikovanje veza ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-10.pdf · V-10 Softversko inženjerstvo 3 Općenito o oblikovanju veza

V-10 Softversko inženjerstvo 32

Asocijacijske klase (3) Ta asocijacijska klasa bilježi da neki ljudi rade poslove za neke

kompanije i za to dobivaju određenu plaću.

Pritom jedan čovjek može raditi za više kompanija, a jedna kompanija

može zapošljavati više ljudi.

Određeni čovjek za određenu kompaniju radi samo jedan posao.

Na donjem dijelu dijagrama vidi se rezultat reifikacije.

Umjesto asocijacijske klase sad imamo pravu klasu Job s

atributom salary i dvije agregacije. Prva agregacija je shvaćena kao kompozicija.

U konačnoj implementaciji poslovi će se pripisivati uz kompaniju.

Pritom će svaki posao imati referencu na odgovarajuću osobu.

Reifikacijom asocijacijske klase gubi se dio njene semantike. U prethodnom primjeru, prelaskom na pravu klasu postalo je moguće

da isti čovjek za istu kompaniju obavlja više poslova.

Ako želimo da polazna semantika i dalje vrijedi, tada to moramo

naglasiti dodavanjem primjedbe (note) s ograničenjem.