SOFTVERSKO INŽENJERSTVO Vježbe 6: Paketi i njihovo korištenje u analizi Robert Manger Sveučilište u Zagrebu PMF-Matematički odsjek Akademska godina 2019/2020.
SOFTVERSKO INŽENJERSTVO
Vježbe 6: Paketi i njihovo korištenje u analizi
Robert Manger
Sveučilište u Zagrebu
PMF-Matematički odsjek
Akademska godina 2019/2020.
V-06 Softversko inženjerstvo 2
Sadržaj Vježbi 6
Općenito o paketima
Package dijagrami
Ugniježđeni paketi
Vidljivost između paketa
Paketi i prostori imena
Ovisnosti među paketima
Generalizacija paketa
Pronalaženje paketa
V-06 Softversko inženjerstvo 3
Općenito o paketima (1)
Paket (package) je UML-ov mehanizam za grupiranje
“stvari”.
Paket može služiti za:
grupiranje semantički srodnih elemenata,
definiranje “semantičke granice” u modelu,
stvaranje učahurenog prostora imena (encapsulated namespace)
unutar kojeg sva imena moraju biti jedinstvena,
odvajanje dijelova na kojima se može paralelno raditi tijekom
oblikovanja.
Paket je mehanizam za logičko grupiranje. Ne mora
značiti da će stvari unutar paketa zaista i fizički biti
implementirane kao jedna cjelina. Za fizičko grupiranje
služe nam komponente.
V-06 Softversko inženjerstvo 4
Općenito o paketima (2) Svaki element modela može pripadati samo jednom
paketu. Pritom:
paketi mogu činiti hijerarhiju u smislu da mogu biti ugniježđeni
jedan u drugom,
paket na vrhu takve hijerarhije može biti označen stereotipom
<<topLevel>>,
ako drukčije nije zadano, svi elementi modela se po defaultu
smještaju u paket <<topLevel>>,
hijerarhija ugniježđenih paketa također stvara i hijerarhiju za
prostore imena.
Paketi na razini analize mogu sadržavati:
use case-ove,
klase na razini analize,
realizacije use case-ova.
V-06 Softversko inženjerstvo 5
Package dijagram
Prikazuje pakete i veze među njima.
Paket se prikazuje ikonom mape (foldera).
Ime paketa može biti na njegovom tijelu ili na “uhu”.
Piše se u UpperCamelCase.
Sadržaj paketa se ucrtava u tijelo.
Veze između paketa su najčešće:
ovisnosti sa stereotipima (isprekidane strelice),
generalizacije (crtaju se kao kod klasa)
Ugniježđenost.
Ugniježđeni paketi prikazuju se:
tako da jedan paket nacrtamo unutar drugoga,
ili tako da ih nacrtamo odvojeno i povežemo vezom
ugniježđenosti.
V-06 Softversko inženjerstvo 6
Primjeri package dijagrama Ova tri dijagrama predstavljaju različite načine prikaza
istog paketa, s različitim razinama detaljnosti.
V-06 Softversko inženjerstvo 7
Primjeri ugniježđenih paketa Ovdje vidimo dva
načina prikazivanja
istog skupa
ugniježđenih paketa.
V-06 Softversko inženjerstvo 8
Vidljivost elemenata unutar paketa
Vidljivost (visibility) određuje je li neki element koji je
smješten unutar nekog paketa vidljiv izvan tog paketa.
Zadavanjem vidljivosti možemo kontrolirati i smanjiti
povezanost (coupling) između paketa.
Postoje dvije vrste vidljivosti, koje se na dijagramu
označavaju s + i - :
+ ... javni (public). Element je vidljiv unutar svog paketa te
također i iz drugih paketa.
- … privatni (private). Element je vidljiv unutar paketa, ali je
sakriven za druge pakete.
Primjeri korištenja vidljivosti mogu se naći na
prethodnim dijagramima.
V-06 Softversko inženjerstvo 9
Paketi i prostori imena (1) Paket definira učahureni prostor imena (encapsulated
namespace).
To znači da paket definira granicu unutar koje sva imena
moraju biti jedinstvena, to jest ne smiju postojati dva
elementa s istim imenom.
U dva različita prostora imena mogu postojati elementi s
istim imenom.
Ako element iz jednog prostora imena želi pristupiti
elementu iz istog prostora imena, tada on samo treba
navesti ime tog elementa.
Ako element iz jednog prostora imena želi pristupiti
elementu iz drugog prostora imena, tada on treba opisati
način kako da se obavi “navigacija” kroz te prostore.
V-06 Softversko inženjerstvo 10
Paketi i prostori imena (2)
Put navigacije naziva se kvalificirano ime (qualified
name) ili ime puta (pathname) elementa.
Kvalificirano ime gradi se na sljedeći način.
Ispred imena elementa stavljaju se kao prefiksi imena
ugniježđenih paketa u kojima taj element nalazi.
Imena se razdvajaju dvostrukom dvotočkom.
Vanjski paketi se imenuju prije unutrašnjih, u redoslijedu
ugniježđenosti.
Na primjer, kvalificirano ime za klasu Librarian s
prethodnog dijagrama je:
Library::Users::Librarian.
V-06 Softversko inženjerstvo 11
Imena kod ugniježđenih paketa
Iz unutrašnjeg paketa može se pristupiti svim javnim
elementima u vanjskom paketu korištenjem
nekvalificiranih imena.
Da bi se iz vanjskog paketa pristupilo javnim
elementima u unutrašnjem paketu, moraju se koristiti
kvalificirana imena.
Primjerice, na prethodnom dijagramu s ugniježđenim
paketima, element u paketu Library mora koristiti
kvalificirana imena Users::Librarian i Users::Borrower da bi
pristupio klasama unutar paketa Users.
V-06 Softversko inženjerstvo 12
Ovisnosti među paketima Veza ovisnosti među paketima znači da paket-klijent na
neki način ovisi o paketu-dobavljaču.
Postoji više vrsta ovisnosti između paketa, svaka sa
svojim stereotipom i drukčijom semantikom.
Spominjemo najvažnije vrste.
<<use>> - neki element u paketu-klijentu koristi javni element u
paketu-dobavljaču.
<<import>> - javni elementi iz dobavljačevog prostora imena
dodani su kao javni elementi u klijentov prostor imena. Elementi
u klijentu zato mogu pristupiti svim javnim elementima u
dobavljaču koristeći nekvalificirana imena.
<<access>> - javni elementi iz dobavljačevog prostora imena
dodani su kao privatni elementi u klijentov prostor imena. Opet,
elementi u klijentu mogu pristupiti svim javnim elementima u
dobavljaču koristeći nekvalificirana imena.
V-06 Softversko inženjerstvo 13
Primjer ovisnosti među paketima Za bilo koji paket koji je u ovisnosti s prikazanim paketom
Membership vrijedi sljedeće.
On će moći vidjeti sve javne elemente od Membership, na primjer
klase ClubMembership ili Benefits.
On će također moći
vidjeti i klasu
Member, koja je
zbog prikazane
ovisnosti <<import>>
dodana u prostor
imena od
Membership kao
javni element.
On neće moći
vidjeti privatnu
klasu JoiningRules.
V-06 Softversko inženjerstvo 14
Tranzitivnost ovisnosti među paketima Tranzitivna veza je ona koja ima sljedeće svojstvo.
Ako je A u vezi s B, a B u vezi sa C, tada je i A u vezi sa C.
Lako se uvjeriti da je ovisnost <<import>> među paketima
tranzitivna, a <<access>> nije tranzitivna.
Zaista, promatrajmo primjer sa slike. Paket A ima pristup do paketa B, a B ima pristup do paketa C.
Ne-tranzitivnost ovisnosti <<access>> znači da: javni elementi iz C postaju privatni elementi u B.
samo javni elementi iz B (među kojima nema onih importiranih iz C)
postaju privatni elementi u A,
elementi u A zato ne mogu pristupiti elementima iz C.
V-06 Softversko inženjerstvo 15
Generalizacija paketa Riječ je o vezi među paketima koja je analogna
istoimenoj vezi među klasama.
Generalizacija je veza između posebnijeg i općenitijeg
paketa.
Posebni paket nasljeđuje javne elemente iz općenitog
paketa.
Posebni paket može
dodati nove elemente kojih nema u općenitom paketu
redefinirati elemente iz općenitog paketa tako da definira
element s istim imenom.
Na sljedećem dijagramu, paket Product je
generalizacija paketa Hotels i CarHire.
V-06 Softversko inženjerstvo 16
Primjer za generalizaciju paketa Hotels i CarHire
nasljeđuju sve
javne elemente
iz Product, na
primjer klase
Price i Market.
I Hotels i CarHire
redefiniraju klasu
Item nasljeđenu
od Product.
Hotels dodaje
nove klase Hotel i
RoomTipe, a
CarHire dodaje
klasu Car.
V-06 Softversko inženjerstvo 17
Pronalaženje paketa Da bi elemente modela na razini analize što bolje
razvrstali u pakete, radimo sljedeće.
Promatramo klase na razini analize. Tražimo:
koherentne grupe usko povezanih klasa,
generalizacijske hijerarhije klasa,
klase koje su u bliskom odnosu zbog ovisnosti ili asocijacija.
Promatramo use case-ove.
grupe use case-ova koji podržavaju određeni poslovni proces ili određenog
aktera mogu sadržavati klase koje treba zapakirati zajedno.
Podešavamo model paketa u cilju maksimiziranja kohezije unutar
paketa i minimiziranja ovisnosti između paketa. Koristimo zahvate:
prebacivanje klasa između paketa,
dodavanje paketa,
uklanjanje paketa,
spajanje paketa između kojih postoje cikličke ovisnosti
izdvajanje u posebni paket onih klasa koje stvaraju cikličku ovisnost paketa.
V-06 Softversko inženjerstvo 18
Primjer cjelovitog modela paketa Dijagram prikazuje kako se klase iz studijskog primjera
sustava za prodaju preko Interneta mogu na dobar način
podijeliti u pakete.
V-06 Softversko inženjerstvo 19
Primjer uklanjanja cikličke ovisnosti Model sadrži dvije
međusobno ovisne
klase smještene u dva
različita paketa A i B.
Ovisnost među
klasama uzrokuje
ovisnost među
paketima A i B, dakle
cikličku ovisnost.
Jedan način
uklanjanja cikličke
ovisnosti je spajanje A
i B u jedan paket.
Drugi način je
izdvajanje spomenutih
dviju klasa u novi
paket C.