softversko inŽenjerstvo vježbe 5: veze, nasljeđivanje...

36
SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje, polimorfizam Robert Manger Sveučilište u Zagrebu PMF-Matematički odsjek Akademska godina 2019/2020.

Upload: others

Post on 18-Jan-2020

11 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

SOFTVERSKO INŽENJERSTVO

Vježbe 5: Veze, nasljeđivanje, polimorfizam

Robert Manger

Sveučilište u Zagrebu

PMF-Matematički odsjek

Akademska godina 2019/2020.

Page 2: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 2

Sadržaj Vježbi 5 Općenito o vezama, vrste veza

Poveznice među objektima, object dijagram

Asocijacije među klasama, class dijagram

Imena asocijacije i uloga, multiplicitet, navigabilnost

Asocijacija i atributi, asocijacijske klase

Ovisnosti, stereotipi

Generalizacija i specijalizacija

Nasljeđivanje, polimorfizam

Generalizacijski skupovi

Page 3: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 3

Općenito o vezama

Veze služe za povezivanje elemenata u UML modelu.

Veza između dva elementa znači da su ti elementi u

nekom semantičkom odnosu.

Na dijagramu se veze crtaju kao spojnice ili strelice.

U prethodnim poglavljima već smo vidjeli neke vrste

veza.

Interakcija između aktera i use case-ova.

Generalizacija aktera ili use case-ova.

Uključivanje jednog use case-a u drugi pomoću <<include>>.

Ovisnost <<instantiate>> objekta o pripadnoj klasi.

U ovim vježbama uglavnom se bavimo vezama

između objekata te vezama između klasa.

Page 4: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 4

Vrste veza Poveznica (link) je veza između objekata koja nastaje kad

jedan objekt ima referencu (pointer) na drugi objekt.

Asocijacija (association) je veza između klasa koja kaže

da između objekata iz dotičnih klasa postoje poveznice.

Ovisnost (dependency) između klijenta i dobavljača znači

da klijent na neki način ovisi o dobavljaču.

Generalizacija (generalization) je vrsta ovisnosti koja se

uspostavlja između pod-klase i nad-klase.

Agregacija (aggregation) i kompozicija (composition) su

vrste asocijacije koje kažu da objekti jedne klase

predstavljaju cjelinu, a objekti druge klase se pojavljuju

kao dijelovi u toj cjelini.

U ovim vježbama obradit ćemo prve četiri vrste veza

budući da se one koriste u analizi. Ostale veze ćemo

obraditi kad budemo govorili o oblikovanju.

Page 5: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 5

Poveznice među objektima Poveznica (link) nastaje onda kad jedan objekt ima

referencu (pointer) na drugi objekt.

Poveznica omogućuje suradnju objekata:

jedan objekt šalje poruku drugom objektu,

taj drugi objekt reagira na poruku tako da izvrši odgovarajuću

operaciju.

Poveznica može biti dvosmjerna i jednosmjerna,

ovisno o tome mogu li oba objekta slati poruku

drugom, ili to može raditi samo jedan od njih.

Jedna poveznica obično povezuje točno dva objekta.

Postoje (no rijetko se koriste) višestruke poveznice

koje povezuju tri ili više objekata.

Page 6: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 6

Object dijagram Pokazuje objekte i poveznice među njima.

Jednostruka dvosmjerna poveznica se na dijagramu se

crta kao spojnica, a višestruka kao romb sa zrakastim

spojnicama. Jednostruka jednosmjerna spojnica crta se

kao strelica.

Uz spojnicu mogu biti označene uloge koje objekti igraju

jedan prema drugom.

U objektnom sustavu objekti mogu nastajati i nestajati, a

isto tako i poveznice među njima.

Zato dijagram treba shvaćati kao “fotografiju” koja bilježi

stanje sustava u jednom trenutku.

Page 7: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 7

Primjeri object dijagrama (1) Na dijagramu je prikazan klub i njegovi članovi. Trenutno

ila igra ulogu predsjednice, erica je tajnica itd. Ako se

kasnije te uloge promijene, morali bi crtati novi dijagram.

Na sljedećem dijagramu komunikacija između objekata

dozvoljena samo u jednom smjeru.

Page 8: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 8

Primjeri object dijagrama (2) Ako na dijagramu ima više spojnica, tada postoji nekoliko

načina njihovog crtanja: ortogonalni stil: horizontalni i vertikalni segmenti,

kosi stil: kosi segmenti,

zakrivljeni stil: krivulje.

Prethodni dijagram o klubu bio je nacrtan u kosom stilu.

Isti dijagram može se ovako preraditi tako da bude u

ortogonalnom stilu.

Page 9: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 9

Asocijacije među klasama Asocijacija je veza između klasa, koja kaže da između

objekata iz tih klasa mogu postojati poveznice.

Ako postoji poveznica između dva objekta, tada mora

postojati asocijacija između odgovarajućih klasa.

Poveznice se mogu shvatiti kao primjerci (instance)

asocijacije, slično kao što su objekti instance klasa:

Za svaku asocijaciju može se zadati njeno ime, imena

uloga za klase, multiplicitet za klase, te navigabilnost.

Page 10: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 10

Class dijagram Pokazuje klase i veze među njima.

Te veze mogu biti asocijacije, ali i razne druge vrste

veza poput ovisnosti, generalizacije, …

Sama klasa (pravokutnik) može biti prikazana na

više ili manje opširan način. Obavezno je jedino ime

klase.

Ovisno o navigabilnosti, asocijacija se crta kao

spojnica ili kao strelica. Na toj crti može biti

označeno ime asocijacije, imena uloga i multiplicitet.

Page 11: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 11

Primjeri class dijagrama Dijagrami prikazuju samo klase i asocijacije. Označena su

imena asocijacija ili uloga, multiplicitet, navigabilnost.

Page 12: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 12

Refleksivna asocijacija kaže da objekti iz dotične klase mogu imati

poveznice prema drugim objektima iz iste klase.

Na slici je class dijagram koji opisuje odnos direktorija i datoteki, te

odgovarajući object dijagram.

Primjer class i pripadnog object dijag

Page 13: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 13

Imena asocijacija i uloga Ime asocijacije pobliže određuje smisao same asocijacije.

Treba biti glagol, piše se u lowerCamelCase.

Ime asocijacije se na dijagramu stavlja na sredinu crte

koja predstavlja tu asocijaciju. Može kao prefiks ili

postfiks imati crnu strelicu koja pokazuje smjer čitanja.

Ime uloge odnosi se na jednu od klasa u asocijaciji, te

određuje ulogu koju odgovarajući objekti igraju u

poveznicama. Treba biti imenica, piše se u

lowerCamelCase.

Ime uloge se na dijagramu stavlja na jedan kraj crte koja

predstavlja asocijaciju, uz odgovarajuću klasu.

Treba koristiti ili ime asocijacije ili imena uloga, oboje bi

bilo previše.

Page 14: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 14

Multiplicitet za asocijacije Multiplicitet se odnosi na jednu od klasa u asocijaciji. On

određuje broj objekata te klase koji mogu na osnovi

asocijacije biti povezani s jednim te istim objektom druge

klase.

Objekti i poveznice mogu se pojavljivati i nestajati, no

ograničenja zadana multiplicitetom stalno moraju biti

zadovoljena.

Multiplicitet se zadaje kao lista pojedinačnih cjelobrojnih

vrijednosti ili intervala odvojenih zarezima. Jedan interval

zadaje se donjom i gornjom ogradom koje su odijeljene s

dvije točke. Primjer multipliciteta: 0..1,3..5,8

Multiplicitet se na dijagramu stavlja na jedan kraj crte

koja predstavlja asocijaciju, uz odgovarajuću klasu.

Ako multiplicitet nije prikazan smatra se da on nije ni

određen (ne postoji default).

Page 15: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 15

Primjeri za multiplicitet Neki tipični primjeri vide se u tablici.

Daljnji primjeri nalaze se na prethodnim class dijagramima.

Page 16: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 16

Navigabilnost za asocijacije Navigabilnost određuje može li se od objekta iz jedne klase

pristupiti povezanim objektima iz druge klase.

Navigabilnost zapravo znači da objekt prve klase sadrži

reference na povezane objekte iz druge klase. Ovisno o

multiplicitetu, to može biti jedna referenca ili cijela kolekcija.

Postoji više dogovora kako da se navigabilnost pročita s

dijagrama. Mi prihvaćamo uobičajeni način: asocijacija u obliku spojnice bez strelica se smatra navigabilnom u

oba smjera,

asocijacija sa strelicom je navigabilna samo u smjeru strelice.

Navigabilnost se nastoji ograničiti zato da bi se postigla što

manja povezanost (low coupling) između klasa.

Ako asocijacija nije navigabilna u nekom smjeru, tada je

pristup u tom smjeru otežan i moguć samo uz veliku

računsku cijenu.

Page 17: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 17

Ako ipak za zadani proizvod želimo pronaći odgovarajuće

narudžbe, to možemo učiniti jedino tako da pretražimo

sve postojeće narudžbe, što može dugo trajati.

Narudžba sadrži listu

proizvoda. Iz zadane

narudžbe možemo

lako doći do svakog

od naručenih

proizvoda. No iz

odabranog proizvoda

ne možemo lako doći

do svih narudžbi gdje

je taj proizvod

naručen.

Primjer za navigabilnost

Page 18: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 18

Asocijacije i atributi (1)

Kod automatskog generiranja koda iz UML modela,

mnogi alati pretvorit će 1-1 asocijaciju u pravi atribut. Na

primjer za dijagram s prethodne slike dobili bi ovakav kod.

Jednosmjerna asocijacija između polazne i dolazne klase

zapravo znači da objekti polazne klase imaju reference

na objekte dolazne klase.

Te reference mogu se ovako tumačiti kao pseudo-atributi:

Page 19: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 19

Ako je multiplicitet na dolaznoj strani >1, tada se asocijacija

može shvatiti kao atribut čiji tip je kolekcija ili polje.

Što je bolje imati u modelu: asocijaciju ili atribut? Odgovor: Asocijaciju koristimo onda kad je dolazna klasa važan dio modela.

Inače treba koristiti atribut.

Asocijacije i atributi (2)

Page 20: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 20

Asocijacijske klase (1) Kod asocijacija s multiplicitetom mnogo-mnogo pojavljuju

se atributi koji se ne mogu uklopiti ni u jednu od klasa.

Npr, pretpostavimo sa svaka osoba može raditi za više

kompanija, a svaka kompanija može zaposliti više osoba.

No kako zapisati plaću koju osoba dobiva od kompanije? Plaća ne može biti atribut od Person jer ista osoba može raditi za

više kompanija i od svake dobivati drukčiji iznos.

Plaća također ne može biti atribut od Company, jer ista kompanija

zapošljava mnogo osoba i svakoj daje drukčiji iznos.

Jedini ispravni način je da se plaća shvati kao atribut same

asocijacije. Za svaki par objekata koji su u vezi pamti se

posebna vrijednost atributa.

Page 21: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 21

Asocijacijske klase (2)

Opisano rješenje s asocijacijskom klasom je bilo

izvedivo zato što je jedna osoba mogla imati samo jedan

posao kod jedne kompanije.

Odgovarajuća tvorevina se u UML-u naziva asocijacijska

klasa. To je asocijacija koja je također i klasa. Ona

povezuje dvije klase poput obične asocijacije, no također

ima i svoje atribute i operacije.

Asocijacijska klasa se na dijagramu prikazuje ovako.

Page 22: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 22

Asocijacijske klase (3) Ako sad dopustimo da jedna osoba može imati više

poslova za istu kompaniju, tada umjesto asocijacijske

klase moramo uvesti novu (pravu) klasu, a mnogo-

mnogo asocijaciju razbiti na dvije jedan-mnogo

asocijacije. To izgleda ovako.

Pretvorba mnogo-mnogo asocijacije u posebnu klasu

naziva se reificiranje (reifying, making real) asocijacije.

Page 23: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 23

Ovisnosti (1) Ovisnost je veza između dva elementa u UML modelu koja

kaže da prvi element – klijent (client) na neki način ovisi o

drugom elementu – dobavljaču (supplier).

Točnije rečeno, promjena u dobavljaču može utjecati na

informacije koje su potrebne klijentu.

Ovisnost se crta kao isprekidana strelica od klijenta do

dobavljača.

Klijenti i dobavljači ne moraju biti isključivo klase. Na

primjer, postoje ovisnosti između: paketa i paketa,

objekata i klase,

klase i klase.

Sljedeća slika prikazuje različite vrste ovisnosti između

raznih tipova elemenata.

Page 24: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 24

Ovisnost između dviju klasa ne mora biti asocijacija,

jer se ne mora svoditi na poveznice između objekata

u sustavu.

Ovisnosti (2)

Page 25: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 25

Ovisnosti (3) Na primjer, ovisnost između klasa može se svoditi na to

da objekt iz klase-klijenta poziva operaciju iz klase-

dobavljača, i to na internom privremenom objektu.

Sljedeća slika prikazuje takvu ovisnost između klasa.

Ovisnost je svakako općenitija vrsta veze od asocijacije.

Page 26: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 26

Stereotipi za ovisnost Budući da je ovisnost vrlo općenita tvorevina koja može

značiti svašta, njena semantika se nastoji pobliže odrediti

korištenjem stereotipa.

Stereotip se prikazuje na dijagramu kao riječ unutar <<…>>

priljubljena uz isprekidanu strelicu.

Postoji velik broj standardnih stereotipa od kojih ćemo

spomenuti samo neke. <<use>> - klijent na neki način koristi dobavljača, nismo odredili

kako. Ovo je default ako ništa ne piše.

<<call>> - klijentova operacija poziva dobavljačevu operaciju.

<<parameter>> - dobavljač je parametar ili povratna vrijednost u

klijentovoj operaciji.

<<instantiate>> - klijent je instanca dobavljača.

<<substitute>> - klijent može u run-time-u služiti kao zamjena za

dobavljača.

<<refine>> - klijent je profinjena verzija dobavljača.

Page 27: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 27

Generalizacija i specijalizacija Generalizacija je veza između posebnije i općenitije stvari.

Specijalizacija je ista veza pročitana u suprotnom smjeru.

Posebna stvar je konzistentna u svakom pogledu s

općenitom stvari.

Posebna stvar može se podmetnuti tamo gdje se očekuje

općenita stvar (substitutability principle).

Generalizacija se obično primjenjuje na klase, no moguće

ju je primijeniti i na druge klasifikatore, te na još neke

elemente za modeliranje (npr na aktere ili use case-ove).

Generalizacijsku hijerarhiju gradimo tako da

generaliziramo posebne stvari, ili da specijaliziramo

općenite stvari.

Stvari na istoj razini u hijerarhiji trebale bi biti na istoj razini

apstrakcije.

Page 28: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 28

Primjer generalizacije/specijalizacije Class dijagram prikazuje generalizacijsku hijerarhiju koja

se sastoji od klasa Shape, Square, Circle i Triangle.

Veze generalizacije nacrtane su u ortogonalnom stilu.

Page 29: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 29

Nasljeđivanje među klasama Nasljeđivanje se događa onda kad među klasama postoji

veza generalizacije.

Pod-klasa nasljeđuje sljedeće osobine od nad-klase: atribute,operacije, veze, ograničenja.

Pod-klasa može: Dodati nove osobine,

Redefinirati naslijeđenu operaciju tako da definira novu operaciju

s istom signaturom.

U nad-klasi mogu postojati apstraktne operacije koje

nemaju implementaciju. One služe kao obrasci.

Svaka konkretna pod-klasa ih mora implementirati (redefinirati).

Apstraktna klasa je ona koja sadrži apstraktnu operaciju. Takva klasa se ne može instancirati.

Takva klasa definira skup apstraktnih operacija koje svaka

konkretna pod-klasa mora implementirati.

Page 30: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 30

Na ovom

dijagramu

pod-klase

Square i

Circle

nasljeđuju

sve

atribute,

operacije i

ograničenja

od nad-

klase Shape.

Primjer nasljeđivanja

Page 31: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 31

Primjer apstraktne klase i operacija Na sljedećem dijagramu operacije draw() i getArea() u nad-

klasi Shape su apstraktne, što se označava pisanjem u

kurzivu (italics). Klasa Shape je isto apstraktna, pa je i njeno

ime u kurzivu. Konkretne pod-klase Square i Circle moraju

implementirati apstraktne operacije, svaka na svoj način.

Page 32: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 32

Polimorfizam Polimorfizam (više oblika) je važan princip u objektnom

modeliranju. Uz enkapsulaciju i nasljeđivanje to je

jedan od tri glavna stupa objektnog pristupa.

Polimorfizam se ostvarujemo tako da najprije

definiramo apstraktnu klasu, a zatim dodamo više

konkretnih pod-klasa. Tako građeni sustavi su vrlo

fleksibilni i lako se proširuju dodavanjem novih

konkretnih pod-klasa.

Polimorfizam se zasniva na pojavi polimorfnih

operacija. Polimorfna operacija je ona koja ima više

implementacija. Različite klase implementiraju istu

polimorfnu operaciju na različite načine.

Polimorfizam dozvoljava da objekti iz različitih klasa

odgovaraju na istu poruku na različite načine.

Page 33: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 33

Dijagram

prikazuje

klasu

Canvas

koja

održava

kolekciju

objekata

iz klase

Shape.

Budući da je Shape apstraktna klasa, za nju se ne mogu

stvoriti instance. No mogu se stvoriti instance njenih

konkretnih pod-klasa, pa se prema substitutability principu

te instance mogu umetnuti tamo gdje se očekuje Shape.

Primjer za polimorfizam (1)

Page 34: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 34

Ovaj object

dijagram

odgovara

prethodnom

class dijagramu.

Makar objekt tipa Canvas sadrži

kolekciju objekata tipa Shape, jedini

objekti koje tu zaista možemo

staviti su oni tipa Square ili Circle.

Ako objekt :Canvas svim objektima u kolekciji pošalje poruku

draw(), tada svaki od njih drukčije odgovara na poruku

pozivajući svoju implementaciju za draw(). Objekti iz klase

Square crtaju kvadrate, a oni iz Circle crtaju krugove.

Primjer za polimorfizam (2)

Page 35: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 35

Generalizacijski skupovi

Generalizacijski skup je skup pod-klasa koji je

organiziran u skladu s određenim pravilom ili načinom

specijalizacije.

Na generalizacijski skup mogu se primijeniti sljedeća

ograničenja. {complete} – generalizacijski skup sadrži sve moguće pod-klase.

{incomplete} – generalizacijski skup ne sadrži sve moguće pod-

klase.

{disjoint} – objekt može biti instanca od najviše jedne pod-klase.

{overlapping} – objekt može biti instanca od dvije ili više pod-

klasa.

Default je {incomplete,disjoint}.

Page 36: SOFTVERSKO INŽENJERSTVO Vježbe 5: Veze, nasljeđivanje ...web.studenti.math.pmf.unizg.hr/~manger/si/SI-vjezbe-05.pdf · Generalizacija (generalization) je vrsta ovisnosti koja se

V-05 Softversko inženjerstvo 36

Primjer za generalizacijske skupove

Vidimo da se imena generalizacijskih skupova pišu u

lowerCamelCase. Također je vidljiv način zadavanja

ograničenja.

Za klasu Shape promatramo šest pod-klasa, koje su

grupirane u dva generalizacijska skupa. Prvi skup threeDShape sadrži pod-klase za 3-dimenzionalne oblike.

Drugi skup twoDShape sadrži pod-klase za 2-dimenzionalne oblike.