PROJEKTOVANJE SOFTVERA
|
|
|
- Halvor Christensen
- 8 år siden
- Visninger:
Transkript
1 Elektrotehniči fakultet Univerziteta u Beogradu Katedra za računarsku tehniku i informatiku skripta za predmet PROJEKTOVANJE SOFTVERA Igor Tartalja Beograd, Besplatan primerak This copy is not for sale Ova skripta je objavljena u okviru projekta WUS Austria MSDP 2011 The publishing of this script is part of the project MSDP 2011 finansiranog od strane Austrijske agencije za razvoj financed by Austrian Development Agency through WUS Austria
2
3 Predgovor 3 Predgovor Projektovanje softvera je inženjerska disciplina i ključna faza u razvoju softvera. Ono se zasniva na principima koji se odnose prvenstveno na modeliranje strukture i ponašanja softvera, kao i na primenu projektnih uzoraka u rešavanju problema. Kao i svaki drugi inženjerski proizvod, softver u svome nastajanju prolazi kroz prepoznatljive faze, od specifikacije zahteva, pa do instalacije na ciljne mašine. Instalacijom tek počinje životni vek softvera kao tehničkog proizvoda. Život softverskog proizvoda se sastoji od njegovog korišćenja, popravki i unapređenja. Iskustva stečena u toku životnog veka softverskog proizvoda često dovode do nastanka novih proizvoda, njegovih funkcionalnih naslednika. Ako se ta iskustva formalno dokumentuju kroz model i prepoznate projektne uzorke, mogu se primeniti i mnogo šire. Praktično isti principi projektovanja softvera se primenjuju, kako na razvoj novog proizvoda, tako i na održavanje i unapređivanje postojećeg proizvoda u toku njegovog životnog veka. Predmet Projektovanje softvera, koji se drži na osnovnim i master studijama Softverskog inženjerstva i Računarske tehnike i informatike na Elektrotehničkom fakultetu, Univerziteta u Beogradu se koncentriše na dva centralna aspekta projektovanja softvera. To su modeliranje objektno-orijentisanog softvera i primena projektnih uzoraka u koncipiranju arhitekture softvera. Ova skripta sadrže materijale koji se koriste na predavanjima iz predmeta Projektovanje softvera. Skripta su nastala sa željom da se studentima koji pohađaju ovaj predmet stave na raspolaganje materijali koji se koriste na predavanjima. Predavanja se drže uz korišćenje elektronskih prezentacija sa slajdovima, te je sadržaj skripti praktično jednak sadržaju slajdova koji se koriste na predavanjima. Prvobitni tekst skripti je predstavljao samo podsetnik nastavniku za držanje predavanja. Posle višegodišnjeg iskustva u držanju nastave iz ovog predmeta, te doterivanja materijala kroz više iteracija, autor se odlučio da objavi skripta u ovom obliku i stavi ih na raspolaganje studentima koji pohađaju predmet. Zato se skreće pažnja čitaocima da su skripta namenjena praktično samo onima koji prate predavanja na predmetu. Ona ne predstavljaju samostalan udžbenik iz kojeg se predmet može valjano naučiti. Ona su praktični podsetnik na materiju koja se izlaže na predavanjima. Treba imati u vidu da se na predavanjima daju i mnoga usmena objašnjenja pojmova i principa koji su samo pomenuti u skriptama. Bez praćenja predavanja, takvi pojmovi i principi se teško mogu dobro razumeti samo na osnovu čitanja skripti. Takođe, pretpostavlja se da čitaoci ovih skripti dobro vladaju pojmovima i principima koji se prethodno izučavaju na predmetima iz proceduralnog i objektno-orijentisanog programiranja. U pripremi skripti korišćena je literatura navedena na kraju skripti. Najveći deo teksta na jezgroviti način, kroz teze, izlaže materiju iz te literature. Ujedno, navedeni izvori predstavljaju udžbenike i dopunsku literaturu predmeta Projektovanje softvera. Osim uvoda u projektovanje softvera, skripta sadrže dva dela. Prvi deo je posvećen objektno-orijentisanom modeliranju na jeziku UML (Unified Modeling Language). Drugi deo je posvećen primeni projektnih uzoraka u projektovanju softvera. Iako je materija u skriptama izložena na navedeni način, metodologija držanja predmeta je takva da se teme iz ove dve šire oblasti Projektovanje softvera
4 4 Predgovor kombinuju, tako da se na predmetu simultano napreduje kroz obe oblasti. Na taj način se studentima omogućava da vrlo rano počnu da uvežbavaju metodologiju projektovanja na jeziku UML uz korišćenje projektnih uzoraka. Iz tog razloga su i projektni uzorci izloženi redosledom primerenim blagovremenom uvežbavanju, počeviši od onih koje je lakše razumeti i primeniti, kombinujući ih sa do tada obrađenim dijagramima jezika UML. Autor se zahvaljuje svima koji su na bilo koji način doprineli nastanku ovih skripti. Posebnu zahvalnost autor duguje kolegi mr Laslu Krausu. Dugogodišnja saradnja i plodne diskusije o problematici, kako ovog predmeta, tako i predmeta iz objektno-orijentisanog programiranja, pomogle su autoru da izgradi terminologiju i razvije metodologiju rada na predmetu. Kompletiranje završne verzije ovih skripti pomogla je Austrijska agencija za razvoj, kroz projekat Master Studies Development Program (MSDP 2011), WUS Austrija. Recenzenti izveštaja na projektu MSDP 2011, Johann Höchtl i Sylvia Purgathofer-Müller, dali su korisne savete da skripta dobiju konačni oblik. Konačno, autor se zahvaljuje studentima ranijih generacija koji su ukazali na propuste i greške u ranijim materijalima na osnovu kojih su nastala skripta u ovom obliku. U uverenju da će skripta biti od koristi studentima koji prate predmet Projektovanje softvera, autor se nada da će im izložena materija biti interesantna i podsticajna, kako za pripremu ispita, tako i za buduću inženjersku praksu. Moli ih da čitaju pažljivo, a za sve propuste i greške koje otkriju i prijave mu, biće im veoma zahvalan. Beograd, Autor Elektrotehnički fakultet u Beogradu
5 Sadržaj 5 Sadržaj Predgovor...3 Sadržaj...5 Uvod...13 Osnovni pojmovi Objektno-orijentisana analiza Objektno-orijentisano projektovanje Objektno-orijentisano programiranje Objektno-orijentisani jezik Principi OO modela Apstrakcija i kapsulacija Modularnost i hijerarhija Tipizacija i polimorfizam Konkurentnost i perzistencija Model i modeliranje Ciljevi modeliranja OO model i pogledi na model Dijagrami Logički i fizički aspekti modela Statički i dinamički aspekti modela Notacija za opis modela Alati za modeliranje Pregled jezika UML...18 Standardni jezik za modeliranje UML Korisnici UML-a Praistorija UML-a Istorija UML-a Konceptualni model UML-a Stvari Stvari strukture klase i interfejsi Stvari strukture slučaj korišćenja i saradnja Stvari strukture komponenta i čvor Stvari ponašanja Stvari organizacije i anotacije Relacije Dijagrami Statički dijagrami Projektovanje softvera
6 6 Sadržaj Dinamički dijagrami Pravila UML-a Opšti mehanizmi UML-a Specifikacije Ukrasi Opšte podele Mehanizmi proširivosti Stereotipovi Obeležene vrednosti Ograničenja Prvi primer Uvod Primer na Javi Ključne apstrakcije Grupisanje Ponašanje Komponente Dijagrami klasa Uvod Klasifikator Klasa Simbol klase Atributi i operacije Dodatne mogućnosti Tipovi podataka Osobine klasa Sintaksa atributa Sintaksa operacije Relacije Zavisnost Generalizacija Asocijacija Realizacija Primer osnovnih relacija Ukrasi asocijacije Multiplikativnost Agregacija Elektrotehnički fakultet u Beogradu
7 7 Kompozicija Primer asocijacija Navigacija Pravo pristupa preko asocijacije Ugnežđivanje Dijagrami paketa...36 Uvod Paket Imenovanje paketa i elemenata Vlasništvo i pravo pristupa Notacija Relacije Principi modeliranja Stereotipovi paketa Dijagrami objekata...40 Uvod Namena Objekti Veze Primer uzorak Kompozicija Primer - relacija pohađa Dijagrami interakcije...42 Uvod Kontekst interakcije Poruka Vrste dijagrama interakcije Dijagrami sekvence i komunikcije Uloge i njihove linije života Konektori Slanje i prijem poruke Sekvenciranje poruka Sekvenciranje poruka u nitima Sintaksa poruke Životni vek objekata i veza Događanje izvršenja (fokus kontrole) Primer Bankomat dijagram sekvence Primer Bankomat dijagram komunikacije Projektovanje softvera
8 8 Sadržaj Iteracije i grananje Fragment (okvir) interakcije Operatori kombinovanih fragmenata Primer operatora okvira interakcije Dijagrami slučajeva korišćenja Uvod Slučajevi korišćenja Ponašanje slučaja korišćenja Primer opisa ponašanja Akteri Relacija komunikacije Relacija uključivanja Primer korisnici foruma Relacija proširivanja Tačke proširenja slučaja korišćenja Relacija generalizacije Okvir subjekta Primer Info sistem fakulteta Dijagrami aktivnosti Uvod Odnos prema drugim dijagramima Aktivnosti i akcije Aktivnosti Akcije Elementi dijagrama aktivnosti Pseudočvorovi, tranzicije, konektori Sekvencijalna grananja Primeri grananja i iteracije Konkurentna grananja Tok objekata Primer Plivačke staze Hijerarhijske staze i particije Primer dijagrama aktivnosti Izuzeci Signali i događaji Primer slanja i prihvatanja signala Elektrotehnički fakultet u Beogradu
9 9 Oblast ekspanzije Centralni bafer Skladište podataka Dijagrami stanja...66 Uvod Kontekst primene automata stanja Elementi dijagrama stanja Stanja i podautomati stanja Elementi stanja Primer stanja Pseudostanja i specijalna stanja Prelazi Primer dijagrama stanja Mealy i Moor automati Primer automata Mealy-jevog tipa Složena stanja Sekvencijalna podstanja Primer sekvencijalnih podstanja Stanje sa istorijom Konkurentna podstanja Primer konkurentnih podstanja Slanje signala Dijagrami klasa napredniji pojmovi...73 Aktivne klase Procesi i niti Aktivne klase - notacija Šabloni Šabloni - notacija Izuzeci Klasa asocijacije N-arna asocijacija Kvalifikacija Specifikator interfejsa (UML 1) Generalizacioni skupovi Notacija i primer Metaklasa Powertype Projektovanje softvera
10 10 Sadržaj Konteksti relacije realizacije Parametrizovana kolaboracija Projektni uzorci Standardni stereotipovi klasifikatora Standardni stereotipovi relacije zavisnosti Standardni stereotipovi ostalih relacija Dijagrami složene strukture Uvod Notacija: delovi i portovi Konektori Primer Multiplikativnost Saradnja Događanje saradnje Dijagrami komponenata Uvod Najčešće primene Komponenta Grafička notacija Artefakt Komponente i klase/interfejsi Port Port i interfejsi Vrste artefakata i stereotipovi Paketi i relacije zavisnosti Primer dijagrama komponenata Dijagrami raspoređivanja Uvod Najčešće primene Čvorovi Organizovanje čvorova Čvorovi, komponente i artefakti Uređaji i izvršna okruženja Veze Primer hardverska konfiguracija Primer čvorovi i artefakti Dijagrami interakcije - napredniji pojmovi Elektrotehnički fakultet u Beogradu
11 11 Dijagrami pregleda interakcije Razlike od dijagrama aktivnosti Grafička notacija Primer dijagram pregleda interakcije Vremenski dijagrami Grafička notacija Primer vremenskog dijagrama Arhitektura metamodeliranja...94 Uvod Četvoronivoska arhitektura Opis nivoa arhitekture Primer Meta-metamodel Metamodel Model Korisnički objekti Analogija Uvod...97 Elementi uzorka...97 Naziv uzorka Postavka problema Opis rešenja Posledice Primer primene uzoraka: MVC...98 Model View komunikacija Komponovanje prikaza Model Controller komunikacija Klasifikacija projektnih uzoraka Kriterijum namene Kriterijum domena Karakteristike vrsta uzoraka Drugi odnosi između uzoraka Prostor projektnih uzoraka Katalog projektnih uzoraka UML notacija za opis uzoraka Unikat Kompozicija Projektovanje softvera
12 12 Sadržaj Prototip Posmatrač Iterator Dekorater Strategija Šablonski metod Adapter Stanje Podsetnik Muva Fabrički metod Apstraktna fabrika Fasada Posrednik Zastupnik Most Komanda Lanac odgovornosti Graditelj Posetilac Interpreter Literatura Elektrotehnički fakultet u Beogradu
13 Uvod 13 Uvod Osnovni pojmovi Svaki ozbiljniji projekat prolazi kroz faze: analiza, projektovanje, implementacija, testiranje slično je sa SW projektima, kroz faze se prolazi iterativno Objektno-orijentisana metodologija razvoja dominantna u proizvodnji softvera danas Pojmovi objektno-orijentisana analiza OOA objektno-orijentisano projektovanje OOD objektno-orijentisano programiranje OOP objektno-orijentisani jezik OOL Objektno-orijentisana analiza Tradicionalne tehnike strukturirane analize fokus na toku podataka u sistemu Booch (1994): Objektno-orijentisana analiza je metod analize koji ispituje zahteve iz perspektive klasa i objekata pronađenih u rečniku iz domena problema Proizvod OOA konceptualni model - ulaz u fazu OOD Objektno-orijentisano projektovanje Tradicionalno strukturirano projektovanje fokus na algoritamskim apstrakcijama Booch (1994): Objektno-orijentisano projektovanje je metod projektovanja koji obuhvata proces OO dekompozicije notaciju za predstavljanje logičkih i fizičkih statičkih i dinamičkih aspekata modela sistema koji se projektuje Proizvod OOD model projektovane aplikacije ili sistema ulaz u fazu OOP Objektno-orijentisano programiranje Tradicionalno strukturirano programiranje fokus na implementaciji algoritama Booch (1994): Objektno-orijentisano programiranje je metod implementacije po kojem su: programi organizovani kao kolekcije objekata koji sarađuju svaki objekat predstavlja instancu neke klase i sve klase su članovi neke hijerarhije klasa u kojoj su klase povezane relacijama nasleđivanja Proizvod OOP izvršna aplikacija ili sistem Projektovanje softvera
14 14 Uvod Objektno-orijentisani jezik Cardelli & Wegner (1985): Jezik je objektno-orijentisan ako i samo ako ispunjava: da podržava objekte koji su apstrakcije podataka sa interfejsom preko imenovanih operacija i skrivenim lokalnim stanjem da objekti imaju pridružen tip (klasu) da tipovi (klase) mogu nasleđivati atribute nadtipa (natklase) Ako jezik samo ne podržava nasleđivanje naziva se objektno-baziranim jezikom Objektno-orijentisani jezici su: Simula, Smalltalk, Object Pascal, Eiffel, Python, Ada95, C++, Java, C#, Visual Basic.NET,... Objektno-bazirani jezici Ada83, VisualBasic v6,... Principi OO modela Booch OOA&D (1994): Osnovni (obavezni) Dodatni (neobavezni) apstrakcija tipizacija kapsulacija konkurentnost modularnost perzistencija hijerarhija Modifikacija: Osnovni (obavezni) Dodatni (neobavezni) apstrakcija konkurentnost kapsulacija perzistencija modularnost hijerarhija polimorfizam Apstrakcija i kapsulacija Shaw (1984): Apstrakcija je uprošćeni opis ili specifikacija sistema koja naglašava neke od detalja ili osobina, dok potiskuje druge Booch (1994): Apstrakcija ističe esencijalne karakteristrike objekta koje ga razlikuju od drugih vrsta objekata i tako definiše jasne konceptualne granice iz perspektive posmatrača Kapsulacija je proces sakrivanja onih elemenata apstrakcije koji definišu strukturu i ponašanje Kapsulacija služi da razdvoji konceptualni interfejs od implementacije apstrakcije Modularnost i hijerarhija Modularnost je osobina sistema da se razlaže na skup kohezivnih i slabo spregnutih modula Moduli su fizičke jedinice (nezavisno prevođenje) predstavljaju komponete sistema mogu se održavati nezavisno Elektrotehnički fakultet u Beogradu
15 Uvod 15 Hijerarhija je rangiranje ili uređivanje apstrakcija Nasleđivanje - is a hijerarhija jednostruko/višestruko potpuno (javno)/strukturno (privatno) Sadržanje - part of hijerarhija po vrednosti/po referenci (relevantno u C++, ali ne u Javi) agregacija/kompozicija Tipizacija i polimorfizam Tipizacija je osobina da se objekti različitih klasa ne mogu uopšte ili se mogu zamenjivati na ograničene načine stroga i slaba tipizacija statička i dinamička tipizacija (vezivanje) Dinamička tipizacija i dinamičko vezivanje tenički preduslov za ispoljavanje polomorfizma Polimorfizam je osobina da se objekat kojem se pristupa kao objektu osnovne klase ponaša različito: kao objekat osnovne klase ill kao objekat izvedene klase ponašanje zavisi od dinamičkog tipa objekta, ne statičkog tipa reference Polimorfizam objekta se zasniva na virtuelnim metodama Konkurentnost i perzistencija Principi koji se dobro uklapaju u OO paradigmu Nisu suštinski principi koji određuju da li je softver OO OO softver ih nemora posedovati Softver koji nije OO ih može posedovati Konkurentnost je osobina koja razlikuje aktivne objekte od pasivnih proces - ima vlastiti adresni prostor (tipično njime upravlja OS) nit - deli isti adresni prostor sa drugim nitima Perzistencija je osobina po kojoj se postojanje objekta proteže kroz vreme (obj. nastavlja da živi nakon nestanka njegovog stvaraoca) kroz prostor (obj. se premešta iz adresnog prostora u kojem je stvoren) Model i modeliranje Model je pojednostavljenje realnosti Model nekog sistema je apstrakcija tog realnog sistema iz određenog ugla posmatranja Osnovna namena modela da se sistem koji se razvija bolje razume Modeliranje je važnije što je sistem kompleksniji kompleksnost je odlika današnjih SW sistema Savremena metodologija razvoja softvera Model Driven Development (MDD) Projektovanje softvera
16 16 Uvod Ciljevi modeliranja Model pomaže da se sistem vizuelizuje Model omogućava da se specificira struktura sistema ponašanje sistema Model daje šablon koji usmerava konstrukciju sistema Model dokumentuje projektne odluke koje se donose Model omogućava ispitivanje projektnih odluka po relativno niskoj ceni OO model i pogledi na model Model OO analize i projektovanja obuhvata više pogleda na sistem koji se razvija Dve dimenzije pogleda na sistem: logički/fizički aspekti statički/dinamički aspekti AiP OO sistema se obavlja u terminima klasa, objekata, njihovih relacija i interakcija Tokom AiP koriste se različiti uglovi gledanja na model sistema u datom 2D prostoru Dijagrami Za svaki pogled na model sistema može se definisati adekvatan dijagram Svaki dijagram predstavlja jednu projekciju modela Primer - aplikacija sa 100 klasa: potrebno je više klasnih dijagrama (svaki prikazuje jedan pogled na model) Jedno ime na svakom dijagramu označava isti entitet (sa izuzetkom operacija zbog preklapanja imena) Logički i fizički aspekti modela Logički model sistema opisuje ključne apstrakcije i mehanizme koji obrazuju prostor problema ili definišu arhitekturu sistema definiše strukturu i relacije između klasa relacije i interakcije između objekata Fizički model sistema opisuje konkretnu softversku i hardversku kompoziciju definiše arhitekturu modula i arhitekturu procesa Statički i dinamički aspekti modela Statički aspekti modela se fokusiraju na strukturu sistema Dinamički aspekti modela se fokusiraju na ponašanje sistema Realni sistemi uvek imaju dinamičko ponašanje: objekti se kreiraju i uništavaju objekti šalju poruke drugim objektima nekim redosledom spoljašnji događaji izazivaju reakcije izvesnih objekata Elektrotehnički fakultet u Beogradu
17 Uvod 17 Notacija za opis modela Nekoliko notacija zaslužuju posebnu pažnju: Booch i OMT notacija (iz istorijskih razloga) UML notacija (standard) Pogodnosti standardne formalne grafičke notacije: olakšava se komunikacija između korisnika i članova razvojnog tima projektant se rasterećuje od nebitnih detalja i koncentriše se na bitne omogućava se upotreba automatizovanih alata za proveru konzistencije i korektnosti projekta ili izvršavanje modela Nije neophodno koristiti celu notaciju na primer Booch Lite, UML Basic (UML User Guide) Potrebno je da notacija omogućava različit stepen detaljnosti (ponekad samo grube skice) Notacija treba da bude nezavisna od programskog jezika neki elementi notacije nemaju direktnu podršku u konkretnom jeziku Alati za modeliranje IBM Rational: Software Architect (Rose, Rose XDE Developer, Software Modeler) Borland: Together Gentleware: Poseidon for UML Open Source: StarUML Altova: Umodel Omondo: EclipseUML Sparx Systems: Enterprise Architect Visual Paradigm: Visual Paradigm for UML Embarcadero Technologies: ER/Studio Software Architect Pregled alata: Projektovanje softvera
18 18 UML Pregled jezika Pregled jezika UML Materijal prireman na osnovu: Booch,G., Rumbaugh,J., Jacobson,I., The Unified Modeling Language User Guide, 2 nd Edition, Addison Wesley, May 2005 Rumbaugh,J., Jacobson,I., Booch,G., Unified Modeling Language Reference Manual, 2 nd Edition, Addison-Wesley, 2004 Fowler,M., UML Distilled: A Brief Guide to the Standard Object Modeling Language, 3 rd Edition, Pearson Education, 2004 UML 2 Infrastructure Specification, OMG UML 2 Superstructure Specification, OMG Standardni jezik za modeliranje UML UML (Unified Modeling Language) je grafički jezik za: vizuelizaciju specifikaciju konstruisanje i dokumentovanje softverski-intenzivnih sistema UML omogućava konstruisanje šema koje modeliraju sistem opisujući: konceptualne stvari npr. proces poslovanja i funkcije sistema konkretne stvari npr. klasne tipove, šeme baza podataka, softverske komponente Sajt: Korisnici UML-a Sledeće kategorije korisnika UML-a se uočavaju: sistem-analitičari i krajnji korisnici: specificiraju zahtevanu strukturu i ponašanje sistema arhitekti: projektuju sistem koji zadovoljava zahteve razvojni inženjeri (developers): transformišu arhitekturu u izvršni kod kontrolori kvaliteta (quality assurance personel): proveravaju strukturu i ponašanje sistema bibliotekari (librarians): kreiraju i katalogiziraju komponente rukovodioci projekata (managers): vode i usmeravaju kadrove i upravljaju resursima Praistorija UML-a Jezici za OO modeliranje se pojavljuju još od sredine 70ih uzrok njihove pojave je pojava nove generacije OO jezika i povećana kompleksnost softverskih sistema U periodu : broj OO metoda je porastao sa manje od 10 na više od 50 Metode koje su ostvarile najveći uticaj na oblast OO modeliranja su: Booch metoda OMT (Object Modeling Technique, Rumbaugh) OOSE (Object Oriented Software Engineering, Jacobson) Fusion Shlaer-Mellor Coad-Yourdon Elektrotehnički fakultet u Beogradu
19 UML Pregled jezika 19 Istorija UML-a 1994: početak rada na UML-u - Rumbaugh se pridružio Booch-u u firmi Rational Oktobar 1995: pojavila se verzija 0.8 drafta UM-a (Unified Method) Jesen 1995: Jacobson se pridružio Rational-u rad na objedinjenju UM sa OOSE Jun 1996: pojavila se verzija 0.9 UML-a Važniji partneri (učestvovali u definisanju verzije 1.0): DEC, HP, IBM, Microsoft, Oracle, Rational, TI,... U januaru 1997: OMG-u (Object Management Group) podnet predlog std. UML 1.0 Grupa partnera je proširena drugim podnosiocima predloga: npr. ObjecTime, Ericsson,... Jul 1997: podnet predlog UML 1.1 koji je prihvaćen od OMG Jun 1998: verzija UML 1.2 Jesen 1998: verzija UML 1.3 Septembar 2001: verzija UML 1.4 (v => ISO std :2005) 2002: verzija UML 1.5 (akciona semantika) Jun 2003: v 2.0, februar 2007: v 2.1, februar 2009: v 2.2, maj 2010: v 2.3 Konceptualni model UML-a Tri osnovna elementa UML modela su: Osnovni gradivni blokovi Pravila za povezivanje gradivnih blokova Opšti mehanizmi koji se primenjuju u UML-u Gradivni blokovi UML-a Stvari (things) apstrakcije koje su "građani prvog reda" u modelu Relacije (relationships) povezuju stvari Dijagrami (diagrams) grupišu interesantne skupove povezanih stvari Stvari Stvari strukture - statički delovi modela, reprezentuju konceptualne ili fizičke elemente (imenice) Stvari ponašanja - dinamički delovi modela, reprezentuju ponašanje kroz prostor i vreme (glagoli) Stvari grupisanja - organizacioni delovi modela, kutije u koje model može biti dekomponovan Stvari anotacije - objašnjavajući delovi modela, komentari koji se primenjuju na bilo koji element Projektovanje softvera
20 20 UML Pregled jezika Stvari strukture klase i interfejsi Klasa je opis skupa objekata koji dele zajedničke karakteristike (atribute i operacije), ograničenja i semantiku x y Tacka rastojanje() Aktivna klasa je klasa čiji objekti imaju vlastitu nit kontrole i tako mogu da započnu neku upravljačku aktivnost Alarm postavivreme() ukljuci() iskljuci() Ponašanje objekta aktivne klase je konkurentno sa drugim aktivnim objektima Interfejs je kolekcija operacija koje specificiraju servis klase ili komponente IStek Interfejs opisuje ponašanje elementa koje je spolja vidljivo Interfejs definiše skup specifikacija (prototipova) operacija ali ne i njihove implementacije Klasa i komponenta mogu da implementiraju više interfejsa Stvari strukture slučaj korišćenja i saradnja Slučaj korišćenja (use-case) je opis skupa sekvenci aktivnosti koje obavlja sistem da bi proizveo vidljiv rezultat vredan za pojedinog aktera Prikaz rasporeda casova Jedna sekvenca aktivnosti instanca slučaja korišćenja (scenario) Slučaj korišćenja reprezentuje funkcionalnost sistema (mada se neki autori ne slažu sa tim) Koirsti se da bi se strukturirale stvari ponašanja u modelu Realizuje se kroz saradnju (kolaboraciju) Saradnja (collaboration) definiše zajednicu i interakciju aktera i drugih elemenata koji dejstvuju zajedno Elektrotehnički fakultet u Beogradu
21 UML Pregled jezika 21 da ostvare kooperativno ponašanje koje je kvalitativno novo u odnosu na prostu sumu ponašanja elemenata Posmatrac Saradnja ima strukturalnu, kao i dimenziju ponašanja Projektni uzorci (design patterns) se predstavljaju kao saradnje Stvari strukture komponenta i čvor Komponenta je fizički i zamenjivi deo sistema koji ostvaruje realizaciju skupa interfejsa <<component>> Servis.jar Servis.jar Komponenta je tip koji ima ponuđene i zahtevane interfejse U sistemu mogu postojati razne vrste izvršnih komponenata, npr. ActiveX ili Java Beans, ili fajlovi izvornog koda Komponenta obično predstavlja fizičko pakovanje drugih logičkih elemenata kao što su klase, interfejsi i saradnje Čvor (node) je fizički element koji postoji u vreme izvršenja i reprezentuje resurs obrade Server Čvor poseduje neku memoriju i, često, mogućnost procesiranja Skup komponenata može biti u čvoru, a može i migrirati sa čvora na čvor Prvih pet stvari reprezentuje konceptualne ili logičke stvari, dok poslednje dve (komponenta i čvor) reprezentuju fizičke stvari Sve navedene stvari osim saradnje predstavljaju klasifikatore: mehanizme koji opisuju strukturne i karakteristike ponašanja Stvari ponašanja Interakcija je ponašanje koje obuhvata skup poruka koje se razmenjuju između skupa objekata unutar posebnog konteksta da se ostvari specifična svrha Interakcija uključuje određen broj elemenata: poruke (priložen grafički simbol) prikazi() sekvence akcija (ponašanje izazvano porukom) veze (komunikacione putanje između objekata) Projektovanje softvera
22 22 UML Pregled jezika Automat stanja je ponašanje koje specificira sekvence stanja kroz koje prolazi jedan objekat ili jedna interakcija za vreme svog životnog veka, kao posledice događaja, zajedno sa njegovim odgovorima na te događaje Cekanje Automat stanja uključuje određen broj elemenata: stanja (priložen grafički simbol), tranzicije (prelaze između stanja) događaje (stvari koje izazivaju tranziciju) aktivnosti (odgovore na tranzicije) Stvari organizacije i anotacije Paket je opštenamenski mehanizam za organizovanje elemenata u grupe awt Stvari strukture, ponašanja, pa čak i druge stvari grupisanja mogu biti smeštene u paket Za razliku od komponente, paket je čisto konceptualna stvar (egzistira samo u vreme razvoja) Pored paketa postoje i sledeće stvari grupisanja: radni okviri (frameworks), modeli Napomena je simbol za prikazivanje komentara pridruženih jednom elementu ili kolekciji elemenata FIFO Relacije Zavisnost je semantička relacija između dve stvari u kojoj izmena jedne (nezavisne) stvari može uticati na semantiku druge (zavisne) stvari Asocijacija je strukturna relacija koja opisuje skup veza između objekata +poslodavac 1 +zaposleni 1..* sadržanje je specijalna vrsta asocijacije koja reprezentuje strukturnu relaciju između celine i njenih delova često grafički simbol sadrži ukrase kao što su multiplikativnost i imena uloga Elektrotehnički fakultet u Beogradu
23 UML Pregled jezika 23 Generalizacija je relacija specijalizacije/generalizacije u kojoj su objekti specijalizovanog elementa (deca) zamene za objekte generalizovanog elementa (roditelja) dete deli strukturu i ponašanje roditelja Realizacija je semantička relacija između klasifikatora u kojoj jedan klasifikator specificira ugovor koji drugi klasifikator ostvaruje Sreće se: između interfejsa i klasa ili komponenata koje ga realizuju između slučajeva korišćenja i saradnji koje ih realizuju Dijagrami Dijagram je grafička reprezentacija skupa povezanih elemenata najčešće se pojavljuje u obliku grafa temena (stvari) povezanih granama (relacijama) Dijagrami se crtaju da bi se sistem vizualizovao iz različitih perspektiva Vrste dijagrama u UML-u: dijagrami za prikaz statičkih aspekata sistema dijagrami za prikaz dinamičkih aspekata sistema Statički dijagrami Dijagram klasa (class diagram) prikazuje logičku strukturu apstrakcija: skup klasa, interfejsa, saradnji i njihovih relacija Dijagram objekata (object diagram) prikazuje logičku strukturu instanci: skup objekata (instanci klasa) i njihovih veza Dijagram komponenata (component diagram) prikazuje fizičku organizaciju i zavisnosti između skupa komponenata Dijagram raspoređivanja (deployment diagram) prikazuje konfiguraciju čvorova obrade i komponenata koje žive na njima Dijagram paketa (package diagram) [UML 2] prikazuje statičku strukturu grupisanja elemenata modela u pakete Dijagram složene strukture (composite structure diagram) [UML 2] prikazuje hijerarhijsko razlaganje primerka klase, komponente ili saradnje na delove Dinamički dijagrami Dijagram slučajeva korišćenja (use case diagram) prikazuje skup slučajeva korišćenja, aktera (specijalne vrste klasa) i njihovih relacija Dijagram interakcije (interaction diagram) prikazuje jednu interakciju koju čine skup objekata i njihovih veza sa porukama koje razmenjuju Dijagram sekvence (sequence diagram) je dijagram interakcije koji naglašava vremenski redosled poruka Dijagram komunikacije (communication diagram) je dijagram interakcije koji naglašava strukturnu organizaciju objekata koji šalju i primaju poruke; Dijagram pregleda interakcije (interaction overview diagram) [UML 2] je dijagram interakcije koji definiše interakcije kroz vrstu dijagrama aktivnosti (kombinacija d. aktivnosti i d. sekvence) Projektovanje softvera
24 24 UML Pregled jezika Vremenski dijagram (timing diagram) [UML 2] je dijagram interakcije koji prikazuje promenu stanja objekata u vremenu Dijagram aktivnosti (activity diagram) prikazuje tok od jedne do druge aktivnosti u sistemu (nije specijalna vrsta dijagrama stanja u UML 2) Dijagram stanja (statechart diagram) prikazuje konačni automat koji obuhvata stanja, tranzicije, događaje i aktivnosti Pravila UML-a UML ima pravila koja specificiraju kako izgleda dobro formiran model Dobro formiran model je semantički konzistentan u harmoniji sa korelisanim modelima UML ima semantička pravila za: Imena - kako se nazivaju stvari, relacije i dijagrami Doseg - koji kontekst daje specifično značenje imenu Vidljivost - gde se imena mogu videti i koristiti od strane drugih Integritet - kako se stvari propisno i konzistentno korelišu prema drugim stvarima Izvršenje - šta to znači za izvršenje ili simulaciju dinamičkog modela Tokom razvoja se ne prave samo modeli koji su dobro formirani, već mogu biti i: Skraćeni (elided) - izvesni elementi su sakriveni da se pojednostavi izgled Nekompletni - izvesni elementi nedostaju Nekonzistentni - integritet modela nije garantovan Pravila UML-a vode kroz vreme ovakve modele prema dobro formiranim Opšti mehanizmi UML-a Gradnja je jednostavnija i harmoničnija ako se poštuju opšti uzorci Postoje četiri opšta mehanizma koja se primenjuju konzistentno kroz jezik: specifikacije ukrasi opšte podele mehanizmi proširivosti Specifikacije Iza svakog dela grafičke notacije UML-a leži specifikacija koja obezbeđuje tekstualni iskaz sintakse i semantike tog gradivnog bloka Iza grafičkog simbola (sličice, ikone) klase stoji specifikacija koja navodi: potpun skup atributa potpun skup operacija (uključujući kompletne potpise) ponašanje Grafički simbol može pokazivati samo mali deo potpune specifikacije Može postojati i drugi izgled iste klase koji prikazuje drugi skup delova iste klase konzistentan sa specifikacijom UML grafička notacija se koristi za vizuelizaciju UML specifikacija se koristi da se saopšte detalji sistema Modeli se mogu graditi: Elektrotehnički fakultet u Beogradu
25 UML Pregled jezika 25 najpre pomoću crtanja dijagrama, a zatim dodavanjem semantike u specifikaciju (tipično za direktni inženjering pri kreiranju novog sistema) direktnim kreiranjem specifikacije pa naknadnim kreiranjem dijagrama koji su njene projekcije (tipično za reverzni inženjering postojećeg sistema) Ukrasi Detalji specifikacije se prikazuju kao grafički ili tekstualni ukras osnovnog grafičkog elementa Na primer: za klasu se može naglasiti da je apstraktna tako što se ime piše italic slovima vidljivost (pravo pristupa) atributa i operacija se može naglasiti pomoću simbola: + (javni), # (zaštićeni), (privatni) i ~(paketni) Agregacija se predstavlja dodatnim simbolom na simbolu asocijacije Opšte podele Dve osnovne podele: apstrakcije i instance interfejsi i implementacije Primeri prve podele: klase/objekti (klasa je apstrakcija, a objekat instanca te apstrakcije) slučajevi korišćenja/instance slučajeva korišćenja (scenarija) komponente/instance komponenti Primeri druge podele: interfejsi/komponente slučajevi korišćenja/saradnje operacije/metodi U UML-u se razlika između apstrakcije i instance pravi tako što se imena instanci podvlače Interfejs deklariše ugovor, a implementacija reprezentuje jednu konkretnu realizaciju ugovora Mehanizmi proširivosti UML je otvoren za proširenja jezika na kontrolisani način Mehanizmi proširivosti uključuju: Stereotipove Obeležene vrednosti Ograničenja Projektovanje softvera
26 26 UML Pregled jezika Stereotipovi Stereotip proširuje rečnik UML-a dopuštajući kreiranje novih vrsta gradivnih blokova specifičnih za problem Novi gradivni blokovi su izvedeni iz postojećih Stereotop se prikazuje kao ime uokvireno znacima << i >> smešteno iznad imena odgovarajućeg elementa Na primer, izuzeci su klase čiji se objekti mogu bacati i hvatati <<exception>> Prekoracenje Može se definisati i grafički simbol za određeni stereotip <<interface>> Merljiv +meri() +meri() Merljiv Obeležene vrednosti Obeležene vrednosti proširuju osobine UML gradivnog bloka dopuštajući dodavanje nove informacije Obeležene vrednosti se prikazuju kao string okružen zagradama { i } ispod imena odgovarajućeg elementa String sadrži ime (tag), sepearator (simbol =) i vrednost Na primer, verzija i autor klase nisu primitivni koncepti u UML-u, a mogu se dodati bilo kom gradivnom bloku kao što je klasa Ograničenja Ograničenja proširuju semantiku UML gradivnog bloka dopuštajući da se dodaju nova pravila ili promene postojeća Ograničenja se mogu pisati: kao slobodan tekst na OCL (Object Constraint Language) RedCekanja {verzija=4.0 autor=...} RedCekanja dodaj() ukloni() isprazni() {red uredjen} Elektrotehnički fakultet u Beogradu
27 UML Prvi primer 27 Prvi primer Uvod Najbolji način učenja UML-a je kroz kreiranje modela na UML-u Većina programera kada uči novi jezik prvo napiše program koji ispiše "Hello, World!" Početak učenja modeliranja na jeziku UML model za "Hello, World!" program uz mehanizme Jave koji omogućavaju izvršenje Primer na Javi Primer: trivijalni aplet koji ispisuje: "Hello, World! import java.awt.graphics; class HelloWorld extends java.applet.applet{ public void paint(graphics g){ g.drawstring("hello, World!", 10, 10); } } Iako je primer programa trivijalan, infrastruktura potrebna da bi aplet radio nije trivijalna Ključne apstrakcije Osnovni klasni dijagram: HelloWorld +paint() g.drawstring("hello, World!", 10, 10); Klasa HelloWorld ima jednan metod (operaciju) paint() redefinisni metod klase Component koji "iscrtava" datu komponentu na željeni način metod se poziva iz okruženja (ne poziva ga programer) i to inicijalno kao i pri pomeranju, otkrivanju, promeni veličine komponente Komentar (note) kaže šta radi operacija paint() Osnovne relacije: Applet HelloWorld +paint() Graphics +drawstring() Klasa HelloWorld se izvodi iz klase Applet, a koristi klasu Graphics klasa Graphics se pojavljuje kao tip formalnog argumenta metode paint() (zavisnost) klasa Graphics omogućava crtanje i pisanje na komponentama (grafički kontekst) grafičke operacije menjaju bite samo unutar clipping regiona vezanog za objekat Graphics crtanje i pisanje se obavlja korišćenjem tekućih atributa datog Graphics objekta Projektovanje softvera
28 28 UML Prvi primer Hijerarhija nasleđivanja HelloWorld +paint() Applet Panel Container Componenet Object ImageObserver ImageObserver je interfejs preko kojeg se primaju obaveštenja o konstrukciji slike interfejs sadrži (callback) metod imageupdate() preko kojeg se javlja progres/status konstrukcije slike Grupisanje applet java awt lang Ponašanje Dijagram sekvence (originalni primer je nešto kompleksniji) target : HelloWorld g : Graphics : Korisnik : Browser : JVM otvorihtmlstranu() run() paint() drawstring() Komponente <<artifact>> Hello.htm <<artifact>> HelloWorld.class <<artifact>> Hello.java <<artifact>> Hello.jpg Elektrotehnički fakultet u Beogradu
29 UML Dijagrami klasa 29 Dijagrami klasa Uvod Dijagram klasa prikazuje skup klasa, interfejsa, saradnji i njihovih relacija Dijagram klasa je graf sačinjen od temena (stvari) povezanih granama (relacijama) Specificira logičke i statičke aspekte modela Elementi dijagrama klasa stvari: klase, interfejsi, saradnje, paketi, objekti (izuzetno) relacije: zavisnosti, generalizacije, asocijacije, realizacije Dijagrami klasa su najčešći u objektnom modeliranju Većina alata podržava generisanje skeleta koda iz dijagrama klasa Klasifikator Klasifikator je klasifikacija primeraka (instances) sa zajedničkim karakteristikama mehanizam koji opisuje strukturu i ponašanje (ima atribute i operacije) apstraktna metaklasa prostor imena tip koji je moguća generalizacija ili specijalizacija drugog potencijalno ugnežden u drugi klasifikator Ne pojavljuju se svi klasifikatori na dijagramima klasa Konkretni klasifikatori su: klase, interfejsi, tipovi podataka, komponente, čvorovi, slučajevi korišćenja,... Klasifikator ima odeljke, koji se ne moraju svi prikazati Klasa odeljci mogu imati svoje nazive, da bi se izbegla dvoznačnost kada neki odeljak nedostaje UML 2.0 definicija: klasa je opis skupa objekata koji dele istu specifikaciju karakteristika (features), ograničenja (constraints) i semantike karakteristike: atributi i operacije Klasa implementira jedan ili više interfejsa Klase opisuju apstrakcije iz domena problema kao i apstrakcije iz domena rešenja Koriste se da reprezentuju softverske stvari, hardverske stvari i konceptualne stvari Simbol klase Simbol klase je pravougaonik podeljen horizontalnim linijama u odeljke odeljak može imati i naziv odeljka naveden kao stereotip GeometrijskaFigura -karakteristicnatacka +pomeri() +promenivelicinu() +crtaj() responsibilities -- geometrijska svojstva figura u ravni naziv atributi operacije odgovornosti Projektovanje softvera
30 30 UML Dijagrami klasa Naziv klase jednostavan: <naziv> sa putanjom: <naziv paketa>::<jednostavan naziv> npr: java::awt::rectangle Odgovornosti klase neformalna semantika u zasebnom odeljku slobodan tekst svaka počinje sa -- Svaka dobro strukturirana klasa bi trebalo da ima barem jednu i ne više od nekoliko odgovornosti Atributi i operacije Atributi su imenovana svojstva klase koja opisuju opsege vrednosti koje instance tog svojstva mogu sadržati Drugi nazivi: članovi podaci (C++), polja (Java) Atributi su strukturne karakteristike (features) klase Notacija: ime, opciono sa tipom i podrazumevanom vrednošću Primer: izbor:boolean=false Operacije su servisi koji se mogu zahtevati od nekog objekta klase Notacija: potpis koji sadrži listu argumenata sa eventualnim tipovima i podrazumevanim vrednostima, kao i tipom rezultata Primer: pomeri(novapozicija:pozicija=koordinatnipocetak):pozicija Dodatne mogućnosti Simbol klase može sadržati prazne odeljke, a može biti i bez odeljaka Potrosac Potrosac Prazan odeljak atributa/operacija ne znači da ih klasa nema, već da nisu relevantni za dati pogled (dijagram) Mogu se koristiti i tri tačke (...) da naznače postojanje dodatnih atributa/operacija Atributi/operacije se mogu grupisati, a svakoj grupi može da prethoditi opisni prefiks Apstraktna klasa i apstraktna operacija naziv se piše italicom ili {abstract} Zajednički članovi (atributi i operacije) klase pišu se podvučeno Pravo pristupa članu (vidljivost, visibility): znak se piše ispred atributa/operacije: javni član: + (podrazumevano) zaštićeni član: # paketski član: ~ privatni član: - Elektrotehnički fakultet u Beogradu
31 UML Dijagrami klasa 31 Tipovi podataka Tipovi podataka (datatype) su tipovi čije vrednosti nemaju identitet Vrste tipova podataka: primitivni tipovi postojeći prosti tipovi podataka u jeziku implementacije nabrojivi tipovi uzimaju vrednost iz definisanog skupa simboličkih imena Osobine klasa Multiplikativnost je osobina klase koja ograničava broj njenih instanci Multiplikativnost se navodi u gornjem desnom uglu Specifične vrednosti multiplikativnosti: 0 uslužna klasa, sadrži samo zajedničke (statičke) atribute i operacije 1 unikatna (singleton) klasa Podrazumevani slučaj je proizvoljan broj instanci Koren hijerarhije klasa (root) je klasa koja nema roditelje List hijerarhije klasa (leaf) je klasa koja nema potomke, tj. ona iz koje se ne može izvoditi Osobine {root} i {leaf} se pišu u odeljku naziva klase Sintaksa atributa Sintaksa atrubuta: [pravo_pristupa] [/] ime [:tip] [multiplikativnost] [=inicijalna_vrednost][{osobina}] Simbol / označava da je atribut "izveden" (može se "izračunati" na osnovu drugih) Multiplikativnost se primenjuje na atribute klase specificira se kao interval celih brojeva, gornja granica može biti neograničena piše se u uglastim zagradama, na primer: consoleport:port[2..*] Osobine atributa (neke): readonly vrednost se ne može menjati, dodavati ni uklanjati nakon inicijalizovanja ordered vrednosti su uređene unique vrednosti elemenata (u jednom objektu) su jedinstvene bag dozvoljava ponavljanje elemenata (nije skup) seq ili sequence isto što i ordered bag (uređen niz elemenata sa ponavljanjem) composite atribut složene strukture redefines ime redefiniše ime subsets ime podskup skupa atributa ime Sintaksa operacije Sintaksa operacije: [pravo_pristupa] ime ([lista_argumenata]) [: tip_rezultata] [{osobina}] Sintaksa argumenta u listi: [smer] ime : tip [multiplikativnost] [ = podrazumevana_vrednost] [{osobina}] Projektovanje softvera
32 32 UML Dijagrami klasa Smer može biti: in ulazni argument, ne sme biti modifikovan (podrazumevano) out izlazni argument, mora se inicijalizovati inout ulazno-izlazni argument, može se modifikovati Osobine operacije: query izvršenje ne menja stanje objekta, operacija je čista funkcija bez bočnih efekata exception lista operacija može da baca izuzetke iz liste leaf operacija nije polimorfna i ne može se redefinisati u izvedenoj klasi concurrency = vrednost šta garantuje operacija pri izvršenju u konkurentnoj sredini Relacije sequential pozivaoci moraju obezbediti da je samo jedna nit u jednom trenutku poziva guarded operacija garantuje sekvencijalizaciju svih poziva svih štićenih operacija concurrent operacija se izvršava kao atomska Na klasnim dijagramima se pojavljuju sve četiri (prve tri su češće) vrste relacija: zavisnost (dependency) asocijacija (association) generalizacija (generalization) realizacija (realization) Zavisnost Povezuje stvari kod kojih izmena nezavisne stvari utiče na ponašanje zavisne stvari Zavisna stvar koristi nezavisnu stvar Grafička notacija: klasa A zavisi od klase B A B Često se koristi kad je jedna klasa (B) tip parametra operacije druge klase (A) Generalizacija Povezuje opštije (superklasa ili roditelj) sa specijalizovanim (subklasa ili dete) stvarima Grafička notacija: klasa A je dete, B je roditelj A B Drugi nazivi relacije: vrsta (is-a-kind-of), izvođenje (A se izvodi iz B), nasleđivanje, proširivanje Generalizacija znači da se objekti dece mogu pojaviti gde god se očekuje objekat roditelja Deca nasleđuju osobine svojih roditelja, naročito atribute i operacije Operacija deteta koja ima isti potpis kao operacija roditelja redefiniše operaciju roditelja Redefinicija operacije omogućava njeno polimorfno ponašanje Klasa koja ima samo jednog roditelja koristi jednostruko nasleđivanje Klasa koja ima više roditelja koristi višestruko nasleđivanje Elektrotehnički fakultet u Beogradu
33 UML Dijagrami klasa 33 Asocijacija Specificira da li su instance jedne stvari povezane sa instancama druge stvari Asocijacija je strukturna relacija Asocijacija je (ako se drugačije ne kaže) bidirekcionalna veza (dvosmerna navigabilnost) Dozvoljena je i asocijacija sa samim sobom (postoje veze između objekata iste klase) Uobičajeno je da asocijacija povezuje dve klase (binarna asoc.) Moguće je da asocijacija povezuje i više klasa (n-arna asocijacija) Grafička notacija: klasa A je u asocijaciji sa klasom B A B Realizacija Semantička relacija između klasifikatora od kojih jedan specificira ugovor a drugi garantuje njegovu implementaciju Grafička notacija: kanonička forma: K <<interface>> I skraćena forma: Korišćenje interfejsa (relacija zavisnosti) kanonička forma: K I Kijent skraćena forma (ball & socket): <<interface>> I K Primer osnovnih relacija Kijent I K Prozor +otvori() +zatvori() +pomeri() +prikazi() +obradidogadjaj() Dogadjaj Konzolni prozor Dijalog Komponenta Projektovanje softvera
34 34 UML Dijagrami klasa Ukrasi asocijacije Na asocijaciji se mogu pojaviti sledeći ukrasi: Iime, smer čitanja, uloge, navigabilnost, multiplikativnost, sadržanje (agregacija ili kompozicija), pravo pristupa (vidljivost) kraju preko asocijacije Multiplikativnost Naziv Sadržanje 1..* Radi za 1 Osoba Kompanija Odeljenje -zaposlen -poslodavac 1 * Uloga Asocijacija Multiplikativnost Na jednoj strani asocijacije označava se broj objekata sa te strane koji su u vezi sa tačno jednim objektom sa druge strane relacije Može biti: nijedan (0), tačno jedan (1), proizvoljno mnogo, uključujući nijedan (*), opseg (npr. 2..*) UML 2.0 više ne dozvoljava izraze sa diskontinuitetom npr. 0..1,3..4,6..* - proizvoljan broj osim 2 i 5 Agregacija Vrsta asocijacije kod koje jedna strana igra ulogu celine a druga ulogu dela (whole/part) Celina sadrži delove ("has-a" relacija) Agregacija ne govori ništa o uzajamnom odnosu životnih vekova celine i dela Deo u agregaciji može biti zajednički deo više celina Grafička notacija: Kompozicija Celina Asocijacija kod koje postoji odnos celina/deo, ali je celina odgovorna za životni vek dela Deo Agregacija sa strogim vlasništvom i koincidentnim životnim vekom dela u odnosu na celinu Deo može nastati u toku života celina i može biti uništen pre uništenja celine Deo u kompoziciji može biti deo samo jedne celine Grafički notacija: Celina Deo Elektrotehnički fakultet u Beogradu
35 UML Dijagrami klasa 35 Primer asocijacija Fakultet 1..* studira ima 1 1..* 1..* odgovara za Katedra 0..1 upravlja 1 -jedinca radi pri * * -clan pohadja -kurs -predavac * * * predaje 1..* 1 -sef * Student Predmet Nastavnik Navigacija Strelica označava navigabilnost u naznačenom pravcu Krstić označava da nema navigabilnosti prema označenoj strani Za asocijaciju bez ukrasa navigabilnosti se smatra da je navigabilnost neodređena Grafička notacija: A B A B A B A B Pravo pristupa preko asocijacije Ograničava vidljivost (visibility) objekata u asocijaciji za spoljašnji svet Označava se sa +, #, -, ~ ispred imena uloge odgovarajuće strane relacije + znači da objektima sa te strane mogu pristupati svi objekti preko objekta sa druge strane - znači da objektima klase sa te strane mogu pristupati samo objekti klase sa druge strane # znači da i objekti klasa izvedenih iz klase sa drugog kraja asocijacije imaju pristup ~ znači da i objekti klasa iz istog paketa kao klasa sa drugog kraja asocijacije imaju pristup Primer: +korisnik GrupaKorisnika Korisnik Lozinka * * Podrazumevan je javni vizibilitet uloge u asocijaciji Ugnežđivanje -vlasnik Označava pojam kada je klasa B deklarisana u prostoru imena klase A 1 -kljuc 1..* A + B Projektovanje softvera
36 36 UML Dijagrami paketa Dijagrami paketa Uvod Dijagrami paketa se koriste da prikažu dekompoziciju modela u organizacione jedinice i njihove zavisnosti Dijagrami paketa pomažu: da se uoče zavisnosti između logičkih celina i da se te zavisnosti drže pod kontrolom Primer: P1 <<import>> C P2 PP D P3 B Paket Paket je organizaciona stvar koja se koristi za grupisanje elemenata Paket predstavlja prostor imena i element koji se može pakovati, tako da se može sadržati u drugim paketima Definicija uz UML RM: paket je opšti mehanizam za organizovanje elemenata u grupe, koji uspostavlja vlasništvo nad elementima i obezbeđuje jedinstvenost imena elemenata Paketi se koriste uobičajeno za grupisanje logičkih apstrakcija modela (klasa) mogu se koristiti i za grupisanje fizičkih stvari (komponenata ili čak čvorova) Paket može da obuhvata druge pakete i proste elemente obično postoji jedan paket u korenu hijerarhije paketa koji predstavlja ceo model Koncept paketa odgovara istoimenom konceptu u jeziku Java konceptu prostora imena u jezicima C++ i C# Imenovanje paketa i elemenata Jedno ime elementa mora biti jedinstveno u okviru paketa ali se može koristiti za označavanje drugih elemenata iz drugih paketa Jednoznačnost imena se odnosi na puna (kvalifikovana) imena puna imena sadrže redom imena svih paketa u hijerarhiji od korenog paketa do datog elementa - lista u stablu, razdvojena simbolom :: Primer: klasa Panel koju sadrži potpaket awt paketa java nosi puno ime java::awt::panel Elementi kojima se unutar paketa može obraćati jednostavnim (nekvalifikovanim) imenima su: sopstveni elementi paketa, uvezeni elementi i elementi iz obuhvatajućih (spoljašnjih) prostora imena (paketa) Elektrotehnički fakultet u Beogradu
37 UML Dijagrami paketa 37 Vlasništvo i pravo pristupa Vlasništvo nad sopstvenim elementom implicira ako se paket ukloni iz modela, uklanjaju se i sopstveni elementi paketa svaki element modela mora imati kao vlasnika neki paket ili drugi element modela Sopstveni i uvezeni elementi mogu imati pravo pristupa Pravo pristupa određuje da li su elementi na raspolaganju izvan paketa Pravo pristupa elementa u paketu može biti: javno (+) ili privatno (-) Javni sadržaj paketa je uvek pristupačan izvan paketa preko punih imena Paket "izvozi" svoj javni sadržaj Za "uvoz" imena iz drugih paketa koriste se posebne relacije zavisnosti Notacija Za paket se koristi simbol pravougaonika sa jezičkom Osoblje simbol sugeriše folder koji sadrži: fajlove (jednostavne elemente) i druge foldere (potpakete) Sadržani elementi paketa se mogu predstaviti na više načina: samo tekstualno nabrojani unutar pravougaonika simbola paketa (tada se ime paketa piše unutar jezička) nacrtani unutar pravougaonika simbola paketa (i tada se ime paketa piše unutar jezička) povezani punom linijom sa simbolom + unutar kružića na strani paketa Tipovi Tipovi Tipovi Integer Float Integer Float Tipovi + Integer Float Relacije Zavisnosti i stereotipovi zavisnosti: <<import>>, <<access>>, <<merge>> Zavisnost: označava da barem jedan element u zavisnom paketu zavisi od nekog elementa iz nezavisnog paketa primer: ako je klasa X u paketu P1 izvedena iz klase Y iz paketa P2, paket P1 zavisi od paketa P2 Javno uvoženje (<<import>> ): omogućava u paketu u koji se uvozi (na strani repa strelice) korišćenje javnih imena iz uvezenog paketa (na strani glave strelice) bez kvalifikacije uvezeni elementi se ponašaju kao javni u paketu u koji su uvezeni Projektovanje softvera
38 38 UML Dijagrami paketa Privatno uvoženje (<<access>> ): omogućava u paketu A u koji se uvozi (na strani repa strelice) korišćenje javnih imena iz uvezenog paketa B (na strani glave strelice) bez kvalifikacije, ali se uvezena imena paketa B ne mogu koristiti bez kvalifikacije u paketu C koji (javno) uvozi imena iz paketa A uvezeni elementi paketa B imaju status privatnih elemenata u paketu A u koji su uveženi <<import>> <<access>> C A B Alternativna notacija za uvoz pojedinih imena iz drugog paketa je navođenje unutar paketa u koji se uvozi: {import <kvalifikovano ime>} ili {access <kvalifikovano ime>} Uvoz imena sadržanog paketa se ne podrazumeva, a može se naznačiti na sledeći način: P <<import>> PP Mešanje (<<merge>> ): komplikovana relacija čije korišćenje nije potrebno u modeliranju koristi se u metamodeliranju Elementi paketa unutar paketa ili između paketa mogu biti povezani svim vrstama relacija na primer, unutar paketa se može predstaviti klasni dijagram, koji može da sadrži i druge pakete Principi modeliranja Pri projektovanju sistema se nastoji da se broj zavisnosti između paketa minimizira u paket se smeštaju apstrakcije koje uzajamno imaju veći broj relacija i relativno mali broj relacija prema apstrakcijama izvan paketa Nije dobro da postoje cirkularne zavisnosti između paketa dobro je da se apstrakcije grupišu slojevito tako da jedan paket predstavlja jedan sloj (nivo) apstrakcija, pa se relacije zavisnosti između paketa orijentišu samo u jednom smeru Pravilo zajedničkog zatvaranja (Common Closure Principle [R.C. Martin]): preporučuje da u istom paketu budu klase koje treba menjati iz sličnih razloga Pravilo zajedničkog ponovnog korišćenja (Comon Reuse Principle [R.C. Martin]) preporučuje da u istom paketu budu klase koje će se zajedno ponovo koristiti Tehnika za sužavanje javnog interfejsa paketa svodi se na izvoženje samo malog broja operacija javnih klasa paketa klase paketa se učine privatnim, a uvede se posebna klasa sa javnim operacijama koje pozivaju odgovarajuće javne operacije privatnih klasa paketa (uzorak Fasada) Elektrotehnički fakultet u Beogradu
39 UML Dijagrami paketa 39 Stereotipovi paketa Iznad imena paketa može stajati naznaka stereotipa << >> Standardni stereotipovi paketa: koriste se određene ključne reči da označe vrstu paketa model: <<model>> semantički potpun opis sistema umesto ključne reči može da se koristi mali trougao Bankomat Bankomat radni okvir: <<framework>> generička arhitektura kao proširiv obrazac za apikacije u nekom domenu tipično elementi predstavljaju osnovu za specijalizaciju Podsistem <<subsystem>> nije stereotip paketa, već komponente u UML-u 1 je smatran stereotipom paketa Projektovanje softvera
40 40 UML Dijagrami objekata Dijagrami objekata Uvod Dijagrami objekata prikazuju primerke (objekte) apstrakcija (klasa) i njihove veze preko kojih objekti mogu da komuniciraju Oni predstavljaju snimak pogleda na sistem u jednom trenutku prikazuju se objekti sa trenutnim stanjem i trenutne veze Dijagram objekata opisuje fizički i statički aspekt modela fizički, jer je objekat fizička stvar, nalazi se u memoriji statički, jer se prikazuju samo veze, a ne i interakcija preko njih Elementi dijagrama objekata su: stvari: objekti i paketi relacije: veze Dijagram ima strukturu grafa: objekti su čvorovi, a veze grane Namena Dve osnovne namene: prikaz složene strukture koju čini više objekata prikaz ponašanja kroz vreme preko niza snimaka povezanih objekata Dijagram objekata predstavlja samo primer, a ne specifikaciju (definiciju) modela Ima dokumentacionu svrhu, može da pomogne razumevanju modela Objekti Objekat je nešto (u memoriji) što ima stanje, ponašanje i identitet Objekat je primerak apstrakcije (tipa, klase) UML notacija: pravougaonik sa odeljcima imena i vrednosti atributa ime podvučeno objekat može biti: konkretan, prototipski, anonimni Klasa -atribut1: tipatributa1 -atribut2: tipatributa2 objekat1 : Klasa atribut1 = vrednost1 atribut2 = vrednost2 objekat2 : Klasa : Klasa Veze Veze su komunikacione putanje između objekata Veze su primerci (instance) asocijacija jedna asocijacija između dve klase predstavlja skup veza između objekata tih klasa Na vezama se mogu naći svi ukrasi asocijacije osim multiplikativnosti multiplikativnost je uvek 1 objekat2 : Klasa2 Klasa1 1 * Klasa2 objekat1 : Klasa1 objekat3 : Klasa2 objekat4 : Klasa2 Elektrotehnički fakultet u Beogradu
41 UML Dijagrami objekata 41 Primer uzorak Kompozicija Opis hijerarhije objekata uzorka Kompozicija Sklop je Element koji sadrži druge elemente rekurzivna struktura sadržanja hijerarhija objekata tipa stabla Dijagram klasa Dijagram objekata Element * koren : Sklop 1 list1 : List list2 : List sklop1 : Sklop List Sklop list3 : List list4 : List Primer - relacija pohađa Opis relacije pohađa između studenata i kurseva asocijacija označava veze koje se menjaju u vremenu veze su različite u svakoj školskoj godini Dijagram klasa Student pohadja Kurs -brindeksa: String * * +sifra: String Skolska 2007/08 student1 : Student Dva objektna dijagrama Skolska 2009/10 kurs1 : Kurs student1 : Student kurs3 : Kurs brindeksa = 06/321 sifra = IR2OO1 brindeksa = 06/321 sifra = IR4PS student2 : Student kurs2 : Kurs student2 : Student kurs4 : Kurs brindeksa = 05/123 sifra = IR2XXX brindeksa = 05/123 sifra = IR4XX Projektovanje softvera
42 42 UML Dijagrami interakcije Dijagrami interakcije Uvod Interakcija je ponašanje koje obuhvata skup poruka koje se razmenjuju između skupa objekata u nekom kontekstu sa nekom namenom UML 2.0: interakcija je specifikacija slanja stimulusa između objekata sa ciljem obavljanja nekog zadatka definiše se u kontekstu neke saradnje (kolaboracije) Interakcija se koristi za modeliranje dinamičkih aspekata modela Objektni dijagram je reprezentacija statičkih aspekata komunikacije prezentiraju se samo objekti i veze između objekata u jednom trenutku Interakcija uvodi dinamički aspekat komunikacije prezentira se i sekvenca poruka koje razmenjuju uloge Kontekst interakcije Kontekst interakcije može biti: sistem ili podsistem operacija klasa slučaj korišćenja Kontekst sistem ili podsistem kao celina interakcije su u saradnji objekata koji postoje u sistemu ili podsistemu primer: sistem za e-trgovinu: sarađuju objekti na strani klijenta sa objektima na strani servera Kontekst operacija interakcije su među objektima koji implementiraju operaciju parametri operacije, lokalni i globalni objekti mogu interagovati da izvrše algoritam operacije Kontekst klasa atributi klase mogu sarađivati međusobno kao i sa drugim objektima (globalnim, lokalnim i parametrima operacija) interakcija se koristi da opiše semantiku klase Kontekst slučaj korišćenja interakcija reprezentuje scenario za slučaj korišćenja Poruka Poruka je specifikacija komunikacije između objekata koja prenosi informaciju, iza koje se očekuje da sledi aktivnost Slanje poruke ulozi označava samo stimulus za aktivnost Poruka može biti asinhrona (slanje signala) sinhrona (poziv operacije ) Poruka se prikazuje kao strelica na dijagramu interakcije razne vrste strelica odgovaraju raznim vrstama poruka na dijagramu sekvence poruke su linije između linija života na dijagramu komunikacije poruke su strelice pored konektora Elektrotehnički fakultet u Beogradu
43 UML Dijagrami interakcije 43 Vrste dijagrama interakcije Dijagrami interakcije mogu biti: dijagrami sekvence dijagrami komunikacije (u UML 1: dijagrami saradnje, odnosno kolaboracije) dijagrami pregleda interakcije (UML 2) vremenski dijagrami (UML 2) Dijagrami sekvence naglašavaju vremensko uređenje interakcije Dijagrami komunikacije naglašavaju strukturu veza između učesnika u interakciji Ove dve vrste dijagrama vizuelizuju na različit način praktično iste informacije Dijagrami pregleda interakcije kombinuju dijagram aktivnosti sa dijagramima sekvence u okviru toka kontrole, blokovi (čvorovi) se opisuju interakcijama Vremenski dijagrami prikazuju promenu stanja jednog objekta (ili uloge) u vremenu promena stanja se dešava kao posledica prijema stimulusa i dešavanja događaja Dijagrami sekvence i komunikcije Dijagram sekvence a : A b : B : C d : Klijent m1() m2() m3() m4() r5 r3 r1 r2 Dijagram komunikacije 2 : m2() b : 3 : m3() a : 1 : m1() 8 : r1 7 : r2 : C 6 : r3 5 : r4 4 : m4() d : Klijent Projektovanje softvera
44 44 UML Dijagrami interakcije Uloge i njihove linije života Linija života (lifeline) reprezent jednog učesnika (entiteta, objekta) u interakciji notacija (UML 2): naziv uloge (na liniji života) se ne podvlači UML 1 objekat : Tip2 UML 2 uloga:tip StarUML /uloga:tip alat StarUML dodaje kosu crtu ispred naziva uloge Objekti koji učestvuju u jednoj interakciji mogu biti: konkretne stvari stvari iz realnog sveta na primer, o kao primerak klase Osoba može označavati konkretnu osobu prototipske stvari označavaju proizvoljnu stvar nekog tipa na primer, o kao primerak klase Osoba može predstavljati proizvoljnu osobu U saradnjama objekti su prototipske stvari koje igraju specifične uloge objekti nisu konkretne stvari (primerci) iz realnog sveta U interakciji se mogu pojaviti primerci" apstraktnih klasa i interfejsa ovde primerci ne označavaju konkretne stvari (nemogući su primerci apstraktnih klasa i interfejsa) ovde primerci predstavljaju prototipske stvari (primerci potklasa) Konektori Na d. objekata se prikazuju pojave (objekti), a na d.interakcije uloge Na d. objekata se prikazuju veze, a na d.komunikacije konektori Veza strukturna sprega između objekata primerak asocijacije Konektor komunikaciona putanja između uloga ne mora da bude primerak asocijacije, može biti privremena veza uloga1 : Klasa1 uloga2 : Klasa2 Ukrasi načina pristupa drugoj strani konektora specificiraju način na koji uloga koja šalje poruku vidi drugu stranu tekstualni ukrasi koji se pišu na udaljenom kraju veze (kod primaoca) konkretni ukrasi: {association} objektu se pristupa preko instance asocijacije datih klasa {self} objekat sam sebi šalje poruku {global} objekat je u nekom okružujućem dosegu {local} objekat je u lokalnom dosegu {parameter} objekat je argument operacije Elektrotehnički fakultet u Beogradu
45 UML Dijagrami interakcije 45 Slanje i prijem poruke Prijem jedne poruke se može smatrati pojavom jednog događaja Kada se pošalje i primi poruka, sledi aktivnost na strani prijema izvršenje naredbe koja predstavlja apstrakciju metoda UML predviđa sledeće vrste poruka: poziv (call) pokreće operaciju uloge primaoca (može biti i poziv sebi) operacija() povratak (return) vraća vrednost pozivaocu slanje (send) asinhrono se šalje signal primaocu signal kreiranje (create) kreira se objekat (primerak uloge) <<create>> uništavanje (destroy) uništava se objekat <<destroy>> pronađena poruka (found) poznat primalac, slanje nije opisano izgubljena poruka (lost) poznat pošiljalac, prijem se nije dogodio postajanje (become) objekat menja prirodu (na obe strane je isti objekat) <<become>> Poruke su horizontalne, jer se podrazumeva atomičnost stimulusa (poruke) ako se stimulus ne može smatrati atomičnim poruka može biti crtana i ukoso naniže Kod poruke vrste poziva (call) podrazumeva se "sinhronost": pozivalac ne napreduje dok pozvani objekat ne završi obradu poziva cela sekvenca ugneždenih poziva se završava pre nego što se spoljašnji nivo izvršenja nastavi koristi se za: proceduralne pozive u jednoj niti pozive za randevu (npr. Ada) u višeprocesnom okruženju Projektovanje softvera
46 46 UML Dijagrami interakcije Primer raznih vrsta poruka na dijagramu sekvence: u1 <<create>> u2 : Tip2 Tip2() o1() stvaranje primerka uloge u2 r1 s1 sinhrona poruka, poziv operacije o1 vracanje rezultata r1 <<destroy>> asinhrona poruka, slanje signala s1 uništavanje primerka uloge u2 Sekvenciranje poruka Unutar toka kontrole neke niti poruke su uređene u vremensku sekvencu U dijagramima sekvence sekvenca se modelira implicitno ređanjem poruka odozgo-naniže U dijagramima komunikacije sekvenca se modelira rednim brojem ispred imena Grafička notacija: proceduralni (ugnežđeni) tok kontrole se prikazuje strelicama sa popunjenom glavom redni brojevi poruka imaju hijerarhijsku strukturu (nivoi hijerarhije se razdvajaju tačkom) primer: ravni (flat) tok kontrole se prikazuje običnim strelicama (asinhrone poruke) redni brojevi poruka nemaju hijerarhisku strukturu primer: Primer ravne sekvence 2.1.3:op() 5: s 1 : otvori 2 : aktiviraj : Lopov : Vrata : Alarm Elektrotehnički fakultet u Beogradu
47 UML Dijagrami interakcije 47 Sekvenciranje poruka u nitima Identifikacija niti se piše iza rednog broja poruke u kojoj se vrši konkurentno grananje: primer: 1a.5:dohvati() aktivnost pokrenuta 1. porukom ima konkurentno grananje, pa se posmatra 5. poruka u niti a primer: 3b.5.2:dohvati() aktivnost pokrenuta 3. porukom se konkurentno grana, reč je o 2. poruci u okviru aktivnosti pokrenute 5. porukom u niti b Sintaksa poruke Na poruci se osim imena mogu prikazati i njeni argumenti vraćena vrednost pridruživanje vraćene vrednosti promenljivoj vrednost se može koristiti kao argument neke naredne poruke po pravilu (ne mora biti), promenljiva je atribut klase pošiljaoca primer: 1.2:prosekGod=uspeh(godStud):srednjaOcena Argumenti se mogu pisati i sa imenom primer: 5:trazenaOsoba=trazi(ime="Petar Petrović") Životni vek objekata i veza Po nekad se životni vek objekta ili veze ne poklapa sa trajanjem interakcije Objekti i veze mogu nastajati i nestajati u toku interakcije Sledeća ograničenja se mogu pripisati objektu i/ili vezi (UML 1) {new} objekat/veza se kreira za vreme izvršenja interakcije {destroyed} objekat/veza se uništava pre završetka interakcije {transient} objekat/veza se kreira i uništava za vreme interakcije Promena stanja ili uloge objekta na dijagramu interakcije se naznači njegovom replikacijom (UML 1) na dijagramu sekvence sve varijante jednog objekta se smeštaju na istu vertikalnu liniju na dijagramu komunikacije varijante se povezuju porukom <<become>> Događanje izvršenja (fokus kontrole) Fokus kontrole se može naznačiti samo na dijagramima sekvence uski pravougaonik na liniji života definiše period u kojem uloga obavlja aktivnost izazvanu porukom Moguće je i ugnežđivanje fokusa kontrole iz sledećih razloga: (A) zbog rekurzije ili poziva sopstvene (druge) operacije (B) zbog povratnog poziva (call back) od pozvanog objekta Projektovanje softvera
48 48 UML Dijagrami interakcije Grafička notacija: a b : Klijent o1() o2() o3() r3 povratni poziv r2 o4() rekurzivni poziv r1 Primer Bankomat dijagram sekvence bankomat : Bankomat banka : Banka racun : Racun klijent : Klijent kartica promptpin unospina(pin) OK promptkomanda isplata(iznos) provera(kartica, PIN) OK isplati(kartica, iznos) {transient} /transakcija : Transakcija <<create>> novostanje novac novostanje racun := dohvatiracun(kartica) isplatasaracuna(racun, iznos) novostanje <<destroy>> citajstanje() stanje umanjistanje(iznos) novostanje Primer Bankomat dijagram komunikacije 1 : kartica 3 : unospina(pin) 8 : isplata(iznos) 4 : provera(kartica, PIN) 9 : isplati(iznos) 11 : racun := dohvatiracun(kartica) bankomat : Bankomat banka : Banka 5 : OK 19 : novostanje 10 <<create>> 12 : isplatasaracuna(racun, iznos) 2 : promptpin 18 <<destroy>> 17 : novostanje 6 : OK 7 : promptkomanda 20 : novostanje transakcija : Transakcija {transient} 21 : novac 14 : stanje 13 : citajstanje() 16 : novostanje 15 : umanjistanje(iznos) klijent : Klijent racun : Racun Elektrotehnički fakultet u Beogradu
49 UML Dijagrami interakcije 49 Iteracije i grananje Izrazi za iteracije i grananje se pišu iza broja za sekvenciranje poruke, na bilo kom nivou ugnežđenja Izraz za sekvencijalne iteracije: brojač ponavljanja *[i:=1..n] ili uslov *[a>b] ili samo * poruka se ponavlja u skladu sa izrazom Oznaka za paralelne iteracije: * Izraz za grananje: [x>0] dve ili više poruka u sekvenci mogu imati isti redni broj, ali onda moraju imati disjunktne uslove Fragment (okvir) interakcije Fragment interakcije je najopštija jedinica interakcije Opisuje deo interakcije i konceptualno je isti kao i sama interakcija sd RaznosnjePoste : Postar : Posta : Posiljka : Primalac preuzimanjeposiljki() posiljke *[1..n] : dohvati() posiljka *[1..n] : isporuka Višestruki primerci (multiobjekti) UML1, zastareli u UML2 Operatori kombinovanih fragmenata Opšti sd - dijagram sekvence ili komunikacije (uokviruje ceo dijagram) neg - negativno fragment prikazuje pogrešnu interakciju ref - referenca interakcija je definisana na drugom dijagramu Kontrola sekvencijalnog toka opt - opcioni fragment izvršava se samo ako je ispunjen uslov alt - alternativni izbor između više fragmenata loop - petlja fragment se izvršava više puta break - scenario se izvršava umesto ostatka okružujućeg fragmenta Kontrola paralelnih tokova par - paralelno se izvršavaju fragmenti region - kritični region u fragmentu se ne može istovremeno izvršavati više niti Projektovanje softvera
50 50 UML Dijagrami interakcije Primer operatora okvira interakcije Distribucija porudžbina neka objekat :Porudzbina ima metod slanje procedure slanje foreach (stavka) if (vrednost<=1000) redovnidistributer.isporuci() else specijalnidistributer.isporuci() endif endfor if (potrebnapotvrda) kurir.potvrdi() end procedure neka akter :Prodavac pokreće slanje porudžbina signalom neka je cela komunikacija asinhrona sd DistribucijaPorudzbina : Prodavac slanje : Porudzbina : RedovniDistributer : SpecijalniDistributer : Kurir loop [foreach stavka] alt [vrednost<=1000] isporuci [else] isporuci opt [potrebnapotvrda] potvrdi Elektrotehnički fakultet u Beogradu
51 UML Dijagrami slučajeva korišćenja 51 Dijagrami slučajeva korišćenja Uvod Dijagram slučajeva korišćenja (use-case) prikazuje skup slučajeva korišćenja i aktera Tipično se koristi da specificira neku funkcionalnost i ponašanje nekog subjekta (npr. projektovanog sistema) Dijagram vizuelizuje ponašanje sistema, podsistema ili čak klase i interfejsa Služi korisniku da razume šta sistem radi, a verifikatoru da proveri funkcionisanje Elementi dijagrama su: slučajevi korišćenja akteri relacije: asocijacije (komunikacija), zavisnosti (uključivanje i proširivanje) i generalizacija paketi Slučajevi korišćenja Slučaj korišćenja je opis skupa sekvenci akcija, uključujući varijante, koje subjekat (sistem) obavlja da bi proizveo vidljiv rezultat od vrednosti za pojedinog aktera Sekvenca akcija reprezentuje interakciju aktera sa subjektom i ključnim apstrakcijama subjekta Jedna sekvenca akcija predstavlja jedan mogući scenario slučaja korišćenja jedan scenario je jedna pojava (događanje) slučaja korišćenja Slučaj korišćenja specificira šta subjekat radi, a ne kako radi Gafički simbol i alternativne notacije: imesk1 imesk2 imesk3 Ponašanje slučaja korišćenja Ponašanje slučaja korišćenja se opisuje tokom događaja: kada slučaj korišćenja počinje i kada završava kada slučaj korišćenja interaguje sa akterima kada se razmenjuju poruke i objekti Postoje primarni (osnovni) i alternativni tokovi događaja Tok događaja se može opisati na sledeće načine: neformalan tekst na govornom jeziku strukturirani tekst (sa pred- i post-uslovima) pseudokod dijagrami interakcije jedan za primarni i dodatni za alternativne tokove dijagram stanja subjekta dijagram aktivnosti saradnja (u kojoj učestvuju i akteri) Primer opisa ponašanja Preduslov za sve tokove događaja: platna kartica u bankomatu Projektovanje softvera
52 52 UML Dijagrami slučajeva korišćenja Glavni tok događaja za proveru korisnika pri transakciji sa bankomatom: slučaj korišćnja počinje kada sistem ispiše prompt za PIN broj korisnik unosi PIN broj preko numeričke tastature korisnik potvrđuje unos pritiskom na Enter taster sistem proverava da li PIN broj odgovara karitci provera uspela, završava se slučaj korišćenja postuslov: omogućena promena na računu korisnika Prvi alternativan tok događaja (poništavanje transakcije): korisnik poništava transakciju pritiskajući Cancel taster - slučaj korišćenja se ponavlja postuslov: nije omogućena promena na računu korisnika Drugi alternativan tok događaja (pogrešan PIN): korisnik unosi pogrešan PIN broj - slučaj korišćenja se ponavlja ako se ovo ponovi tri puta za redom sistem poništava celu transakciju i sprečava korisnika da ponovo pokuša 60s postuslov: nije omogućena promena na računu korisnika Akteri Akter predstavlja neki koherentan skup uloga Akter može biti čovek (korisnik) ili neki sistem sa kojim modelirani subjekat interaguje Subjekat interaguje sa jednim ili više aktera Akter je standardni stereotip klase sa posebnim grafičkim simbolom A1 <<actor>> A2 Relacija komunikacije Prikazuje se punom linijom (asocijacija): SK Komunikaciju može inicirati akter ili slučaj korišćenja (bidirekcionalna veza) Relacija dozvoljena između: aktera i slučaja korišćenja dva slučaja korišćenja koja se ne odnose na isti subjekat Multiplikativnost >1 na strani aktera za događanje slučaja korišćenja potrebno više aktera (konkurentno ili sekvencijalno) Relacija uključivanja A Prikazuje se isprekidanom linijom sa strelicom i natpisom <<include>> relacija je stereotip relacije zavisnosti <<include>> A B Elektrotehnički fakultet u Beogradu
53 UML Dijagrami slučajeva korišćenja 53 Relacija uključivanja od slučaja korišćenja A prema slučaju korišćenja B ukazuje da će slučaj korišćenja A uključiti i ponašanje slučaja korišćenja B Ponašanje opisano u B je obavezno za A Koristi se da opiše zajedničko ponašanje između više slučajeva korišćenja na primer: slučajevi korišćenja SK1, SK2 i SK3 uključuju ponašanje SK SK1 <<include>> SK2 <<include>> SK SK3 <<include>> Primer korisnici foruma Dijagram opisuje najavu korisnika na forum Adiministriranje Administartor Moderator Brisanje poruka Manipulacija temama <<include>> <<include>> <<include>> <<include>> Najava Pisac Pisanje komentara Gost Citanje komentara Relacija proširivanja Prikazuje se isprekidanom linijom sa strelicom i natpisom <<extend>> relacija je stereotip relacije zavisnosti A <<extend>> B Relacija proširivanja od slučaja korišćenja A prema slučaju korišćenja B ukazuje da B može obuhvatiti ponašanje specificirano u A Praktično B može da se proširi i ispolji celokupno ponašanje opisano u A Koristi se da se izrazi opciono ponašanje osnovnog slučaja korišćenja ponašanje opisano u A je opciono, a ono u B osnovno Problem sa terminom stereotipa <<extend>> sličnost sa ključnom rečju extends jezika Java sasvim različito značenje Projektovanje softvera
54 54 UML Dijagrami slučajeva korišćenja Tačke proširenja slučaja korišćenja Osnovni slučaj korišćenja se proširuje u određenim tačkama ponašanja tačka se naziva tačkom proširenja (ekstenzije) Alternativne notacije: SK1 SK2 SK2 SK3 extension points tacka1 tacka2 extension points tacka1 tacka2 extension points tacka1 tacka2 extension points tacka1 tacka2 Tačka se navodi po sintaksi: ime [: objašnjenje] Primer: identifikacija pozivaoca je opciona funkcija telefona identifikacija pozivaoca <<extend>> condition: {posle prvog zvona} extension point: prvo zvono prijem poziva extension points prvo zvono Relacija generalizacije Prikazuje se punom linijom sa trougaonom strelicom Relacija je osnovna relacija generalizacija/specijalizacija A B Relacija generalizacije od slučaja korišćenja A prema slučaju korišćenja B ukazuje da je slučaj korišćenja A specifičan slučaj opštijeg slučaja B Primer: Korisnicko ime i lozinka Najava Kartica i PIN Biometrija Otisak prsta Duzica oka Elektrotehnički fakultet u Beogradu
55 UML Dijagrami slučajeva korišćenja 55 Okvir subjekta Slučajevi korišćenja su unutar, a akteri izvan subjekta modeliranja Vizuelizacija okvir subjekta: A System AA B C AB Subjekat nije vlasnik slučajeva korišćenja koji predstavljaju njegove funkcionalnosti Vlasnik može biti klasa, paket ili model Primer Info sistem fakulteta <<subsystem>> Evidencija System <<subsystem>> Finansije System Izbor predmeta Uplata Student <<include>> Odrzana nastava <<include>> Obracun primanja Banka Nastavnik Nastavni plan <<include>> Pregled primanja Referent Info studenti Info nastavnici <<include>> <<include>> <<subsystem>> Najava <<include>> Provera ID System <<extend>> Honorarni nastavnici Ime-lozinka Kartica-PIN Projektovanje softvera
56 56 UML Dijagrami aktivnosti Dijagrami aktivnosti Uvod Dijagrami aktivnosti su namenjeni modeliranju dinamičkih aspekata (ponašanja) sistema Slični konvencionalnim dijagramima kontrole toka (flow-chart) toka podataka (data-flow) Prikazuju sekvencijalne i konkurentne korake u procesu obrade Mogu se koristiti za opis: toka poslovnog procesa toka neke operacije Semantika akcija uvedena u UML1.5 uz definisanje sintakse akcija formalna specifikacija ponašanja podrška za izvršive modele Odnos prema drugim dijagramima Dijagram interakcije prikazuje tok poruka koje se razmenjuju između objekata Dijagram stanja prikazuje tok promene stanja objekta Dijagram aktivnosti prikazuje tok aktivnosti koju izvršavaju objekti eventualno i tok objekata između koraka aktivnosti Dijagram aktivnosti prikazuje ponašanje koristeći modele toka kontrole i toka podataka Aktivnosti i akcije Aktivnost je specifikacija parametrizovanog ponašanja koje se izražava kroz tok izvršenja preko sekvenciranja i konkurisanja podaktivnosti elementarne jedinice podaktivnosti pojedine akcije aktivnost reprezentuje neatomsku obradu koja se dekomponuje na jedinice Simbol aktivnosti: StarUML: ime aktivnosti aktivnost Akcija je osnovna jedinica specifikacije ponašanja koja reprezentuje neku transformaciju ili obradu u modeliranom sistemu akcija je osnovni izvršni element aktivnosti osnovna jedinica izvršne funkcionalnosti akcija predstavlja jedan korak u aktivnosti koji se obično dalje ne dekomponuje aktivnost predstavlja kontekst akcije Elektrotehnički fakultet u Beogradu
57 UML Dijagrami aktivnosti 57 Simbol akcije: StarUML: ime akcije akcija Aktivnosti Svaka aktivnost se može predstaviti posebnim dijagramom ime aktivnosti ime aktivnosti ulazni parametar akcija A akcija B izlazni parametar Aktivnost definiše parametrizovano ponašanje može se ponavljati na više mesta u dijagramu Akcija se dešava samo jednom na datom mestu unutar date aktivnosti Akcije Akcije mogu biti: pokretanje aktivnosti pozivi operacija slanje signala čitanje (vraćanje vrednosti) ili upis (promena stanja) podataka kreiranje ili uništavanje objekata (vrsta upisa) izračunavanje izvršenje primitivnih (npr. aritmetičkih) operacija i funkcija Izvršenje akcije koja pokreće neku aktivnost obuhvata izvršenje te aktivnosti (njenih akcija) - takva akcija nije atomska Akcija se može posmatrati i kao diskretan element i kao složeno ponašanje: kao deo strukture u modelu aktivnosti akcija je diskretan element (aktivnosti) kao specifikacija ponašanja akcija može pokrenuti ponašanje (aktivnost) proizvoljne složenosti Akcija može biti inicirana iz sledećih razloga: završeno izvršavanje prethodnih akcija objekat je postao raspoloživ dogodio se spoljašnji događaj (izvan modeliranog toka kontrole) Akcija može imati skupove ulaznih i izlaznih grana aktivnosti one specificiraju tok kontrole ili tok objekata od i prema drugim čvorovima dijagrama aktivnosti akcija neće početi izvršenje dok: nisu završene sve aktivnosti koje prethode po ulaznim granama nisu svi objekti na ulaznim granama raspoloživi nisu svi ulazni uslovi ispunjeni završetak izvršenja akcije omogućava izvršenje skupa sledećih akcija Projektovanje softvera
58 58 UML Dijagrami aktivnosti UML 1: stanje akcije reprezentuje izvršenje neke atomske operacije atomska operacija ne može biti dekomponovana događaji se mogu dešavati za vreme izvršenja akcije ali ona se neće prekinuti smatra se da traje beznačajno kratko vreme Elementi dijagrama aktivnosti Dijagrami aktivnosti su grafovi koji sadrže: čvorove: akcije i aktivnosti objekti slanja signala (send signal) prihvatanja događaja (accept event) prihvatanja vremenskog događaja (accept time event) kontrolni čvorovi: sekvencijalna grananja i spajanja u toku kontrole (decision i merge) konkurentna grananja i spajanja u toku kontrole (fork i join) pseudočvorovi: početni, završni i kraj toka konektori grane: prelazi (tranzicije) između akcija tok objekata Pseudočvorovi, tranzicije, konektori Grafička notacija pseudočvorova: za početni čvor: za završni čvor (kraj svih tokova): za kraj jednog (konkurentnog) toka: Prelaz (tranzicija) je legalna putanja od jednog do drugog čvora Grafička notacija: poslednji oblik izvorište je objekat (ne konkretni, već prototipski - uloga), a n je broj objekata izvorišta koji se koriste u čvoru aktivnosi (akcije) specijalne vrednosti: all, null primer: formiranje fudbalskog tima Igrač Golman ime {weight=10} {weight=1} Formiranje fudbalskog tima {weight=n} Elektrotehnički fakultet u Beogradu
59 UML Dijagrami aktivnosti 59 Konektori sa istim imenom predstavljaju jednu tranziciju Grafička notacija: A A Sekvencijalna grananja Grananje specificira alternativne putanje kojima će se ići u zavisnosti od uslova Isti simbol se koristi za grananje i spajanje sekvencijalnog toka kontrole: više grana može izlaziti iz simbola sekvencijalnog grananja (decision) uslov se piše u uglastim zagradama na grani [else] grana ako nije ispunjen ni jedan uslov više grana može ulaziti u simbol sekvencijalnog spajanja (merge) Dozvoljeno je kombinovanje grananja i spajanja u jednom kontrolnom čvoru Primeri grananja i iteracije Iteracija se formuliše pomoću grananja Primeri: grananje: iteracija: postavi iterator petlja sa izlazom na vrhu A [ kraj ] Grananje [ uslov ] B radi() [ not kraj ] [ else ] C pomeri iterator Konkurentna grananja Nit kontrole se može u nekoj tački granati na više konkurentnih niti Račvanja (fork) i udruživanja (join) niti se obavljaju u sinhronizacionim tačkama Grafička notacija: Priprema Aktivnost 1 Aktivnost 2 Zavrsetak Projektovanje softvera
60 60 UML Dijagrami aktivnosti Tok objekata Tok objekta se može naznačiti tako što se (prototipski) objekat povezuje simbolima prelaza sa akcijama Akcije mogu kreirati, čitati, modifikovati ili uništavati objekat Grafička notacija: nožice (pinovi) koje predstavljaju objekat A1 K[S] K[S] A2 alternativna sintaksa: A K [S] A tok objekata u UML 1: u pravougaoniku: klasa[stanje] K [S] A1 A2 Primer isprekidanim strelicama poseban tok u odnosu na tok kontrole: paralelno sa granom prelaza između akcija naziv objekta podvučen sekvencijalno grananje poeetak aktivnosti sekvencijalno spajanje A7 [ else ] A1 [ u1 ] uslov A2 akcija konkurentno grananje A3 A4 A5 A8 kraj toka aktivnost [ u2 ] [ else ] završetak aktivnosti A6 [O1] A7 konkurentno spajanje objekat Plivačke staze Plivačke staze (swimlanes) specificiraju odgovornosti za delove celokupne aktivnosti Nemaju neku duboku semantiku Staza reprezentuje neki subjekat odgovoran za sprovođenje akcije objekat aplikacije ili entitet realnog sveta Elektrotehnički fakultet u Beogradu
61 UML Dijagrami aktivnosti 61 Notacija plivačkih staza: subjekat 1 subjekat 2 subjekat 3 A B C D Akcije pripadaju stazama Tranzicije mogu prelaziti iz jedne staze u drugu plivačku stazu Hijerarhijske staze i particije Hijerarhijska plivačka staza: Višedimenzione particije: Particija 1 Dimenzija 1 Particija 1 Particija 2 Particija 1 Particija 2 Particija 3 Particija 4 Dimenzija 2 Projektovanje softvera
62 62 UML Dijagrami aktivnosti Primer dijagrama aktivnosti Kupa Prodava Magaci zahtevanje Narudzbenica prihvatanje naplat Narudzbenica Racun izdavanje placanj Racun Narudzbenica isporuka prijem Narudzbenica Izuzeci Bacanje i obrada izuzetaka: aktivnost koja baca izuzetak tip izuzetka aktivnost koja hvata i obrađuje izuzetak Bacanje Hvatanje Tok aktivnosti sa bacanjem izuzetka, hvatanjem izuzetka i nastavkom aktivnosti bezbedan blok 1 ispitni blok Izuzetak blok obrade bezbedan blok 2 Elektrotehnički fakultet u Beogradu
63 UML Dijagrami aktivnosti 63 Signali i događaji Grafička notacija za signale i događaje: slanje signala slanje signala prihvatanje događaja prijem signala prihvatanje vremenskog događaja npr. čekanje zadato vreme Primer slanja i prihvatanja signala Konkurentno izračunavanje binarne komutativne operacije (1) sinhrona komunikacija inicijalizacija racunanje levog operanda racunanje desnog operanda racunanje rezultata operacije (2) asinhrona komunikacija inicijalizacija racunanje levog operanda racunanje desnog operanda cekanje prvog operanda slanje levog operanda slanje desnog operanda cekanje drugog operanda racunanje rezultata operacije Projektovanje softvera
64 64 UML Dijagrami aktivnosti Oblast ekspanzije Oblast strukturirane aktivnosti koja se izvršava više puta, u skladu sa elementima ulazne kolekcije (ekspanzionog čvora) izvršava se jednom za svaki element u ulaznoj kolekciji Grafička notacija: ulazni ekspanzioni cvor izlazni ekspanzioni cvor Stereotipovi oblasti: <<iterative>>, <<parallel>> Centralni bafer Vrsta čvora objekta Namena: upravljanje tokovima objekata iz više izvora prema više odredišta Simbol: Primer: <<centralbuffer>> K [S] <<instantiate>> Proizvod <<use>> 1 Proizvodjac 1 Magacin 1 Potrosac Proizvodnja Proizvod [proizveden Proizvod [proizveden] Potrosnja <<centralbuffer> Proizvod [proizveden] Proizvodnja Proizvod [proizveden Proizvod [proizveden Potrosnja Elektrotehnički fakultet u Beogradu
65 UML Dijagrami aktivnosti 65 Skladište podataka Vrsta čvora objekata Namena: opis podataka koji su permanentno na raspolaganju Razlika u odnosu na centralni bafer podaci c. bafera su prolazni, a podaci skladišta podataka su stalni Simbol: Primer: <<datastore>> K [S] Upis studenta <<datastore>> BazaStudenata Pohadjanje predmeta <<selection>> student.indeks==xx/yyyy Prikaz podataka o studentu Projektovanje softvera
66 66 UML Dijagrami stanja Dijagrami stanja Uvod Automat stanja (state machine) ponašanje koje specificira sekvence stanja kroz koja prolazi neki objekat ili interakcija, kao odgovor na događaje, proizvodeći akcije modelira ponašanje nekog entiteta ili protokol interakcije Entitet reaguje na događaje promenom stanja promena stanja izaziva nove događaje i akcije Dijagram stanja je graf koji prikazuje automat stanja čvorovi su stanja grane su prelazi Dijagrami stanja se fokusiraju na događajima vođeno ponašanje Dijagrami aktivnosti se fokusiraju na tok aktivnosti Dijagrami stanja se kreiraju za entitete koji pokazuju bitno dinamičko ponašanje Dijagram stanja - formalna specifikacija ponašanja U osnovi se koriste Harelovi dijagrami sa modifikacijama da budu OO Kontekst primene automata stanja Može biti: instanca klase slučaj korišćenja akter podsistem/sistem metod/operacija Automat stanja se primenjuje da specificira ponašanje elemenata modela koji moraju odgovarati na asinhrone događaje elemenata modela čije tekuće ponašanje zavisi od istorije Automat stanja se uspešno koristi za modeliranje ponašanja reaktivnih sistema reaktivni sistem je onaj koji odgovara na signale koje daju akteri iz spoljašnjeg sveta Elementi dijagrama stanja Dijagram stanja prikazuje: stanja i pseudostanja (čvorovi grafa), prelaze (tranzicije) između stanja (grane grafa) događaje koji prouzrokuju promenu stanja i akcije koje rezultuju iz promene stanja Stanja i podautomati stanja Stanje je situacija u toku životnog veka entiteta u kojoj entitet može da postoji U jednom stanju entitet zadovoljava neki uslov, obavlja neku aktivnost ili čeka događaj Elektrotehnički fakultet u Beogradu
67 UML Dijagrami stanja 67 Primeri: uslov student je u stanju upisan ili stanju mirovanja aktivnost program se nalazi u stanju izvršavanja čekanje procesor je zaustavljen (halt) i čeka prekidni signal Grafička notacija: Cekanje Cekanje Podautomat stanja stanje koje reprezentuje automat stanja koji se može pojaviti na više mesta unutar dijagrama stanja referenca na drugi automat stanja unutar nekog autmata stanja s:s s:s Elementi stanja Ime tekst koji razlikuje jedno od drugih stanja upisuje se u odeljak imena (unutar simbola stanja) ili u poseban pravougaoni jezičak iznad gornjeg levog ugla simbola stanja stanje može biti i anonimno (bez imena) Ulazni efekat (akcija) radnja koja se obavi pri ulasku u stanje Izlazni efekat (akcija) radnja koja se obavi pri izlasku iz stanja Aktivnost u stanju radnja koja se izvršava dok je objekat u datom stanju Odloženi događaji lista događaja koji se ne obrađuju u datom stanju već se smeštaju u red čekanja Unutrašnje tranzicije tranzicije koje obrađuju događaj i zadržavaju objekat u istom stanju različite su od samo-tranzicije: ne izazivaju izlaznu pa ulaznu akciju Podstanja stanja koja postoje unutar datog stanja, sekvencijalno ili konkurentno aktivna Primer stanja aktivnost u stanju odloženi događaj Studiranje entry/upis do/ucenje exit/diplomiranje zaposlenje/defer promenamodula/priznavanje ulazni efekat (akcija) izlazni efekat (akcija) Unutrašnji prelaz Projektovanje softvera
68 68 UML Dijagrami stanja Pseudostanja i specijalna stanja Početno (initial) Završno (final) Ulazno (entry) Izlazno (exit) Sinhro (fork/join) Izbor (choice) Spoj (junction) Plitka istorija (shallow h.) H Duboka istorija (deep h.) H* Ulazno/izlazno pseudostanje: ulazna/izlazna tačka podautomata stanja identifikuje odgovarajuće stanje datog podautomata Pseudostanja izbor/spoj se koriste za grane (prelaze) Prelazi Prelaz je relacija između dva stanja Prelaz ukazuje da objekat napušta jedno stanje obavlja akciju i ulazi u drugo stanje kada se dogodi specificirani događaj i kada je ispunjen specificirani uslov Grafička notacija strelica: S1 S2 Elementi prelaza događaj je zbivanje koje nema trajanje i može prouzrokovati prelaz zaštitni uslov je Bulov izraz koji čini prelaz mogućim kada je uslov ispunjen akcija je radnja koja je pridružena prelazu i može biti poziv operacije objekta vlasnika automata stanja ili drugog objekta koji je vidljiv datom objektu slanje signala nekom objektu kreiranje ili uništavanje drugog objekta A dogadjaj [ uslov ] / akcija B Elektrotehnički fakultet u Beogradu
69 UML Dijagrami stanja 69 Primer dijagrama stanja Sistem klima-uređaja pretoplo(zeljenatemp) natemp Neaktivno prehladno(zeljenatemp) natemp Hladjenje pretoplo(zeljenatemp) Grejanje prehladno(zeljenatemp) Mealy i Moor automati Kada se modelira ponašanje objekta akcije se mogu vezivati za: stanja ili prelaze Automat može biti: Moor-ovog tipa - sve akcije vezane za stanja Mealy-jevog tipa - sve akcije vezane za prelaze U praksi dijagrami stanja kombinuju Moor i Mealy automate Primer automata Mealy-jevog tipa Automat stanja za parsiranje poruka - niza znakova koji odgovaraju sintaksi: '<' string '>' string ';' Prvi string predstavlja oznaku (tag), a drugi telo poruke (body) Automat radi beskonačno nema završnog stanja znak( z )[ z!='<' ] / return false Cekanje znak( z )[ z=='<' ] PrijemOznake znak( z )[ z=='>' ] znak( z )[ z!='>' ] / oznaka.dodaj(z); return znak( z )[ z!=';' ] / telo.dodaj(z); return false znak( z )[ z==';' ] / return true PrijemTela Složena stanja Jednostavno stanje stanje koje nema unutrašnju strukturu automata stanja Složeno (kompozitno) stanje stanje koje ima unutrašnja stanja, tj. predstavlja automat stanja Složena stanja se koriste da se smanji grafička kompleksnost Projektovanje softvera
70 70 UML Dijagrami stanja Nadstanje stanje koje obuhvata više unutrašnjih (ugnežđenih) stanja Podstanje je unutrašnje (ugnežđeno) stanje Kada se objekat nalazi u podstanju istovremeno se nalazi i u nadstanju Podstanja mogu biti: sekvencijalna konkurentna Sekvencijalna podstanja Prelazi se mogu događati: između podstanja između podstanja ili nadstanja i stanja izvan nadstanja (spoljašnjeg stanja) Ako je nadstanje cilj tranzicije iz spoljašnjeg stanja nadstanje mora sadržati početno stanje Ako je nadstanje izvor tranzicije najpre se napušta podstanje pa nadstanje Pri tranziciji u/iz nadstanja izvršavaju se ulazne/izlazne akcije i nadstanja i podstanja Nadstanje Nadstanje SpoljasnjeStanje1 Podstanje1 SpoljasnjeStanje1 Podstanje1 SpoljasnjeStanje2 Podstanje2 SpoljasnjeStanje2 Podstanje2 Primer sekvencijalnih podstanja Registracija studenata za kurs Registracija dodajstudenta[ broj<15 ] InicijalizacijaKursa do/ inicijalizujkurs() dodajstudenta / broj=0 Otvorena entry/ registrujstudenta() [ broj=15 ] PonistenKurs do/ slanjeupozorenja() ponistikurs Zatvorena entry/ kompletriajkurs() exit/ spisakstudenata.kreiraj() Elektrotehnički fakultet u Beogradu
71 UML Dijagrami stanja 71 Stanje sa istorijom Kada se uđe u nadstanje obično se kreće od inicijalnog podstanja Ponekad postoji potreba da se krene od podstanja iz kojeg je napušteno nadstanje Simbol H u kružiću ukazuje da nadstanje pamti istoriju Nadstanje H Podstanje1 SpoljasnjeStanje1 Podstanje2 Podstanje3 Simbol H u kružiću označava "plitku" istoriju pamti se istorija samo neposredno ugnežđenog automata stanja Simbol H* u kružiću označava "duboku" istoriju pamti se istorija do najugnežđenijeg automata stanja proizvoljne dubine Konkurentna podstanja Konkurentna podstanja dva ili više automata stanja koja se izvršavaju u paraleli izvršavaju se u kontekstu odgovarajućeg objekta, kao i sekvencijalna Drugi način da se modelira konkurentnost je pomoću aktivnih objekata umesto deljenja jednog automata stanja objekta na dva konkurentna podstanja definišu se dva aktivna objekta od kojih je svaki odgovoran za ponašanje jednog podstanja Od više sekvencijalnih podstanja na jednom nivou objekat može biti samo u jednom Od više konkurentnih podstanja na jednom nivou objekat je u svakom od njih Prelaz u stanje sa konkurentnim podstanjima predstavlja fork prelaz Prelaz iz stanja sa konkurentnim stanjima predstavlja join prelaz sva konkurentna podstanja moraju biti završena da bi se izvršio prelaz join iz nadstanja ako jedno konkurentno podstanje stigne do završnog stanja pre drugog čeka na drugo Sekvencijalna podstanja koja obrazuju svako od konkurentnih podstanja mogu imati početno, završno ili pseudostanja Projektovanje softvera
72 72 UML Dijagrami stanja Primer konkurentnih podstanja Neaktivno fork join odrzavanje Testiranje Testiranje uredjaja Odrzavanje Samodijagnostika Komandovanje Cekanje [ nastavak ] Komanda pritisnuttaster [ kraj ] Slanje signala Kada se iz akcije šalje signal nekom objektu, taj objekt se može prikazati na dijagramu Stanje1 dogadjaj[ uslov ] /cilj.signal(arg) Stanje2 <<send>> cilj Objekat je vezan sa stanjem (izvornim) stereotipom send relacije zavisnosti Elektrotehnički fakultet u Beogradu
73 UML Dijagrami klasa napredni pojmovi 73 Dijagrami klasa napredniji pojmovi Aktivne klase Aktivni objekat je onaj koji poseduje vlastiti tok kontrole koji se odvija paralelno/konkurentno sa drugim tokovima kontrole Aktivna klasa je klasa čije su instance aktivni objekti Aktivni objekti su koreni pojedinih tokova kontrole oni pozivaju svoje ili metode drugih objekata Tok kontrole se pokreće/zaustavlja: kada se aktivni objekat kreira/uništava mogu postojati i posebne operacije za pokretanje i zaustavljanje Mnogi jezici podržavaju aktivne objekte (Ada, Java, Smalltalk) Aktivni objekti i aktivne klase se mogu pojaviti u dijagramima gde i pasivni Procesi i niti Proces (process, task) je "teški" (heavyweight) tok kontrole ima vlastiti adresni prostor Nit (thread) je "laki" (lightweight) tok kontrole deli zajednički adresni prostor sa drugim nitima Jedan proces može sadržati više niti Proces je jedinica konkurentnosti u operativnim sistemima: procesi konkurišu za resurse Primeren mehanizam za komunikaciju: procesi - razmena poruka (message passing) niti - deoba zajedničkih podataka (data sharing) Aktivne klase - notacija Grafički simbol aktivne klase: UML 1: UML2: Kontroler Signals PeriferalSpreman Sabirac poseban odeljak se predviđa za signale koje klasa može primati Nit (thread) UML 1: UML 2: <<thread>> Sabirac Sabirac Proces (process) UML 1: UML 2: <<process>> Kompresor <<process>> Kompresor Projektovanje softvera
74 74 UML Dijagrami klasa napredni pojmovi Šabloni Šablon (template) je parametrizovani element C++, Ada, Java podržavaju šablone (generike) Primer na C++: template <class Element, int Broj> class GenerickiBafer{ public: virtual void stavi(const Element&); virtual Element& uzmi();... }; typedef GenerickiBafer<Predmet,100> Bafer; // eksplicitno generisanje GenerickiBafer<Predmet,100> bafer; // implicitno generisanje Šabloni - notacija Primer generičkog bafera: definicija šablona i eksplicitno generisanje iz njega: implicitno generisanje: Element Broj : Integer = 10 GenerickiBafer +stavi(element) +uzmi(): Element <<bind>> <Element->Predmet,Broj->100> Bafer GenerickiBafer<Element->Predmet, Broj->100> Izuzeci Izuzeci su vrste signala koji se modeliraju stereotipom klase <<exception>> Signal šalje operacija koja izaziva izuzetak modelira se stereotipom <<send>> relacije zavisnosti Primer: Stek <<send>> <<exception>> StekPun +stavi(element) raises StekPun +uzmi(): Element raises StekPrazan <<send>> <<exception>> StekPrazan Klasa asocijacije Sama asocijacija može imati svoje atribute Ti atributi pripadaju klasi koja opisuje asocijaciju (slično veznoj tabeli kod relacionih baza) Elektrotehnički fakultet u Beogradu
75 UML Dijagrami klasa napredni pojmovi 75 Primer: +poslodava Firma c * +zaposleni 1..* Lice Posao +opis +datumzaposlenja +plata N-arna asocijacija Asocijacija može povezivati više od 2 klase takva asocijacija se naziva n-arnom Svaka instanca n-arne asocijacije je n-torka vrednosti odgovarajućih klasa Primer ternarne asocijacije (sa klasom asocijacije): Sezona Tim * * * Igrač Statistika pobeda izgubljenih Kvalifikacija Koristi se da označi ključ (kvalifikator) koji se koristi za selekciju objekta iz neke strukture Objekat strukture za datu vrednost ključa selektuje jedan ili grupu elemenata Učesnici u relaciji su Struktura i njen Element element(i) strukture se izdvaja(ju) uz pomoć ključa Kvalifikator može imati više atributa, oni su atributi asocijacije Atributi kvalifikatora imaju istu sintaksu kao i atributi klasifikatora, sem inicijalne vrednosti Grafička notacija: Struktura kljuc 0..1 Element ukras je deo asocijacije, ne klase Primeri struktura kojima se pristupa pomoću ključa su heš tabela, B-stablo, Multiplikativnost na kraju asocijacije kod klase Element: moguće kardinalnosti skupa selektovanih objekata uparivanjem sa objektom strukture uz zadatu vrednost ključa: 0..1 može da bude selektovan jedinstven objekat, ali postoje i vrednosti ključa za koje se ne selektuje ni jedan objekat Projektovanje softvera
76 76 UML Dijagrami klasa napredni pojmovi 1 * Primeri: svaka moguća vrednost kvalifikatora selektuje jedinstvenu instancu elementa vrednost kvalifikatora deli skup elemenata u podskupove Struktura kljuc 0..1 Element SahTabla red kolona 1 1 Polje Specifikator interfejsa (UML 1) Uloge mogu implementirati samo neke od interfejsa koje realizuju klase u asocijaciji Ime interfejsa koji zadovoljava uloga - iza dvotačke koja sledi naziv uloge Primer 1: Primer 2: Osoba radnik:izaposleni * 1 supervizor:iupravnik Predmet -podsetnik:ipodsetnik Podsetnik -podsetnik:icuvani Cuvar Generalizacioni skupovi Relacija generalizacije/specijalizacije uspostavlja odnos između posebnog i opšteg Ponekad se specijalizacija vrši po nekom klasifikacionom kriterijumu kriterijum klasifikacije određuje podtipove često objekti podtipova ne mogu biti i jedne i druge klase (ograničenje disjoint) Generalizacioni skup definiše poseban skup relacija generalizacije koji opisuje na koji način se natklasa specijalizuje Ograničenja generalizacionog skupa (pišu se u zagradama {}): disjoint/overlaping da li objekti podtipova mogu biti isključivo jednog od podtipova generalizacionog skupa complete/incomplete da li podtipovi predstavljaju potpuni skup mogućih podtipova Notacija i primer Primer generalizacionog skupa pol: Osoba pol {complete, disjoint} zaposlenje {incomplete} Muskarac Zena Zaposleni Osoba pol Muskarac Zena Zaposleni potklase klase Osoba mogu biti Muskarac, Zena i Zaposleni generalizacije prema potklasama Muskarac i Zena pripadaju generalizacionom skupu pol Elektrotehnički fakultet u Beogradu
77 UML Dijagrami klasa napredni pojmovi 77 Metaklasa Metaklasa je klasifikator čije su instance klase Primer: metaklasa Class u metamodelu (metajeziku) UML-a opisuje apstrakciju klase instance ove metaklase su klase u modelu koji kreiramo metamodel je model kojim se specificira jezik za modeliranje Powertype Powertype je klasifikator čije su sve instance deca (potklase) nekog roditelja Powertype je takođe metatip (tip u metamodelu), ali korisnički instance tog metatipa su tipovi (klase) koji su podtipovi nekog drugog tipa u modelu Formalno: ako je A tip, tada je Power(A) tip čije su sve instance podtipovi tipa A ako je tip B instanca tipa Power(A), tada je B podtip A Primer: instance Model (Yugo, Megan,...) su deca klase Automobil Automobil <<powertype>> <<powertype>> Model Automobi * 1 Mode Yugo Megan <<instanceof>> :Mode <<instanceof>> Yug Mega UML 1 UML 2 U gronjem primeru Model je metatip za klase Yugo, Megan UML 1: odredište stereotipa relacije zavisnosti <<powertype>> je powertype klasifikator stereotip zavisnosti <<instanceof>> se koristri za veze klasa-->metaklasa Konteksti relacije realizacije Realizacija se koristi u dva konteksta: kontekst interfejsa (realizuje ga klasa ili komponenta) kontekst slučajeva korišćenja (realizuje ga kolaboracija) Klasni dijagram: <<interface>> IKruzniBafer +stavi() +uzmi() FIFOred IKruzniBafer +stavi() +uzmi() FIFOred Dijagram komponenata: PosloviStampaca IBafer Projektovanje softvera
78 78 UML Dijagrami klasa napredni pojmovi Dijagram slučajeva korišćenja: ProveraLozinke ProveraIdentiteta Parametrizovana kolaboracija Koristi se za opis projektnih uzoraka Definicija uzoraka "posmatrač parametrizovana saradnja: Posmatrac UzorakPosmatrac Subjekat s:subjekat p:posmatrac Konkretna saradnja koja realizuje uzorak "posmatrač": Posmatrac UzorakPosmatrac<Subjekat\Statistika, Posmatrac\Histogram> Projektni uzorci Drugi način za opis konkretne saradnje naziv uzorka uloga1 uloga2 Na prethodnom primeru: Ucesnik1 Ucesnik2 Posmatrac Subjekat Posmatrac Model Histogram Standardni stereotipovi klasifikatora Legenda: naglašeno stereotip specificiran kao standardni i u UML 2 (profili L2 i L3) obično nije naveden kao zastareo, ali nije naveden ni kao std. stereotip UML 2 kurziv stereotip eksplicitno naveden kao zastareo Elektrotehnički fakultet u Beogradu
79 UML Dijagrami klasa napredni pojmovi 79 utility focus auxiliary stereotype metaclass powertype thread process klasa čiji su atributi i operacije zajednički za sve instance klase klasa koja implementira glavnu (poslovnu) logiku klasa koja pomaže focus klasi u implementaciji logike klasifikator je stereotip koji se može primeniti na druge elemente klasifikator čije su instance klase klasifikator čije su instance deca datog roditelja (UML1) klasa čiji su objekti aktivni sa deljenim adresnim prostorom (UML1) komponenta čiji primerci imaju vlastite procese (u UML1 process je bio stereotip klase) Standardni stereotipovi relacije zavisnosti Između klasa i/ili objekata na klasnom dijagramu: instantiate izvor kreira instance odredišta instanceof izvor je objekat koji je instanca odredišnog klasifikatora (UML 1) send izvor (operacija) šalje signal koji je odredište relacije (odredište relacije nije primalac signala) derive izvor se može izračunati na osnovu odredišta; relacija između dva atributa ili dve asocijacije: jedan je konkretan, a drugi konceptualan (npr: DatumRodj i Starost) refine izvor je finiji stepen apstrakcije od odredišta; na primer: klasa u projektu je na finijem stepenu apstrakcije od odgovarajuće klase u analizi permit izvoru se daju posebna prava pristupa odredištu friend izvoru se daju posebna prava pristupa odredištu (samo UML 1) powertype odredište je powertype izvora (samo UML 1) Između paketa: Access izvorni paket ima pravo pristupa elementima odredišnog (privatni uvoz) Import javni sadržaj odredišnog paketa ulazi u prostor imena izvornog paketa (kao da su imena odredišnog paketa deklarisana u izvornom paketu) Standardni stereotipovi ostalih relacija Standardni stereotip relacije generalizacije implementation dete nasleđuje implementaciju roditelja, ali je čini privatnom i ne podržava interfejs roditelja, pa ne može zamenjivati roditelja Standardni stereotip relacije realizacije bind izvor je instanca ciljnog šablona sa datim stvarnim parametrima Projektovanje softvera
80 80 UML Dijagrami složene strukture Dijagrami složene strukture Uvod Dijagrami složene strukture omogućavaju hijerarhijsku dekompoziciju klasifikatora na delove njegove unutrašnje strukture korišćenje saradnji (collaboration) u dešavanjima saradnji (collab. occurence) Struktura kompozicija povezanih elemenata elementi predstavljaju pojave koje sarađuju preko komunikacionih veza da postignu zajedničke ciljeve Unutrašnja struktura struktura unutar pojave klasifikatora Port tačka interakcije klasifikatora sa okruženjem Strukturirana klasa klasa koja ima portove i unutrašnju strukturu Unutrašnju strukturu imaju klase komponente saradnje Notacija: delovi i portovi Delovi klasifikatora se koriste da označe (povezane) osobine (atribute) Portovi se povezuju sa zahtevanim interfejsima (postolja, soketi) realizovanim interfejsima (loptice) unutrašnjim delovima Celina RealizovaniInterfejs p1 deo1 deo2 p2 ZahtevaniInterfejs Delovi mogu imati naznačene: ime tip multiplikativnost Sadržanje dela: kompozicija pravougaonik dela se crta punom linijom agregacija pravougaonik dela se crta isprekidanom linijom Konektori Konektori povezuju delove međusobno delove sa portovima (delegirajući konektor) A b: B[2] A b: B[2] Elektrotehnički fakultet u Beogradu
81 UML Dijagrami složene strukture 81 Konektor koji povezuje delove direktna veza (označava komunikaciju između delova - asocijacija) veza preko lilihipa zahtevanog i realizovanog interfejsa X a: A b: B I X a: A b: B Delegirajući konektor - povezuje delove sa portovima (zavisnost) od porta prema delu za realizovani interfejs od dela prema portu za zahtevani interfejs Primer Definisanje klase Automobil sa unutrašnjom strukturom klasa Motor realizovani interfejs (pogon) zahtevani interfejsi (gorivo,vazduh) portovi (prenos i karburacija) sadrži 4 cilindra i bregastu osovinu klasa Automobil sa unutrašnjom strukturom Automobil pogon prenos gorivo vazduh karburacija prednji: Tocak[2] : Menjac : Motor 2 prenos Motor bregasta: Osovina cilindar: Cilindar[4] Multiplikativnost Multiplikativnost se može naznačiti na svakom delu u zagradama [] ili u gornjem desnom uglu Na krajevima konektora se može naznačiti multiplikativnost veze tumači se kao i multiplikativnost na stranama asocijacije: broj objekata sa date strane konektora koji je u vezi sa tačno jednim objektom na drugoj strani veze (unutar jedne pojave okružujućeg klasifikatora) Primer: y : Y Y a: A[2] 2 b: B[2] 2 /a : A /a : A /b : B /b : B pojave delova: a i b su imena uloga (oznaka /a, odnosno /b) Projektovanje softvera
82 82 UML Dijagrami složene strukture Saradnja Saradnja opisuje strukturu elemenata koji sarađuju (uloga) od kojih svaki obavlja specijalizovanu funkciju da bi zajedno postigli neku funkcionalnost Između uloga postoje komunikacione putanje - konektori Notacija saradnje: u gornjem delu elipse ime saradnje ispod linije uloge u saradnji povezane konektorima mogu biti naznačeni i tipovi uloga Kupoprodaja Kupoprodaja prodavac kupac prodavac:lice kupac:lice Događanje saradnje Notacija događanja saradnje (collaboration occurrence): u isprekidanoj elipsi ime_događanja_saradnje:ime_saradnje Primer: Trgovina je saradnja u kojoj se pojavljuju dva događanja saradnje Kupoprodaja: veleporodaja i maloprodaja uloge u trgovini imaju proizvodjac, trgovac i potrosac Trgovina kupac veleprodaja:kupoprodaja b prodavac proizvodjac trgovac a prodavac maloprodaja:kupoprodaja c kupac potrosac Drugi način prezentacije događanja saradnje stereotip zavisnosti <<occurrence>> Kupoprodaja <<occurence>> prodavac kupac veleprodaja proizvodjac trgovac Elektrotehnički fakultet u Beogradu
83 UML Dijagrami komponenata 83 Dijagrami komponenata Uvod Komponenta je fizički i zamenjivi deo sistema koji realizuje skup interfejsa Dijagram komponenata prikazuje organizaciju i zavisnosti između komponenata Namenjen je prikazu: fizičke organizacije softverskog sistema statičkog pogleda na implementaciju sistema Dijagrami sadrže: stvari: komponente, artefakte, portove, interfejse, klase, pakete relacije: zavisnosti, generalizacije, asocijacije, realizacije Najčešće primene Modeliranje izvornog koda izdanja za isporuku izvršnih izdanja i okruženja fizičkih baza podataka Komponenta Komponenta je modularni deo sistema manifestacija je zamenjiva u okruženju kapsulira neki sadržaj (koji nije vidljiv osim kroz interfejse) definiše svoje ponašanje kroz ponuđene i zahtevane interfejse Komponenta predstavlja tip (apstrakciju fizičke stvari) obuhvata statičku i dinamičku semantiku Primeri komponenata Java Bean, EJB, CORBA, COM+,.NET assembly Razvoj zasnovan na komponentama razvijani sistem se gradi i strukturira od postojećih komponenata bitna osobina reupotreba ranije razvijenih komponenata Grafička notacija UML 1: UML 2: komponenta komponenta <<component>> komponenta Komponenta može da sadrži i odeljak klasa koje realizuje Projektovanje softvera
84 84 UML Dijagrami komponenata geometrija <<realizations>> Tacka Linija geometrija Tacka Linija geometrija Tacka 2 Linija Artefakt Artefakt je fizička informacija koju koristi ili proizvodi razvojni proces ili izvršenje Primeri: modeli, izvorni fajlovi, skriptovi, binarni izvršni fajlovi, arhive, tabele baze podataka, dokumenti Može da predstavlja manifestaciju komponente Notacija: <<artifact>> Cenovnik.jar <<artifact>> Cenovnik.jar Cenovnik <<manifest>> <<artifact>> Cenovnik.jar Komponente i klase/interfejsi Komponente i klase klasa - logička apstrakcija, a komponenta - fizička stvar "u svetu bitova" komponenta predstavlja fizičko pakovanje logičkih apstrakcija klase mogu imati atribute i operacije, a komponente samo operacije servisi klase mogu biti pristupačni direktno, a servisi komponente samo kroz interfejse Komponente i interfejsi interfejs je skup operacija koji specificira servis klase ili komponente komponenta realizuje jedan ili više interfejsa standardi COM, CORBA, EJB (Enterprise Java Beans) koriste interfejse relacija realizacije interfejsa (kanonička i skraćena forma): <<interface>> Interfejs <<component>> Komponenta Interfejs <<component>> Komponenta Port Port reprezentuje tačku interakcije između klasifikatora i njegovog okruženja Interfejsi pridruženi portu specificiraju prirodu interakcija koje se dešavaju preko porta: zahtevani interfejsi karakterizuju zahteve koje može da pravi klasifikator svom okruženju ponuđeni interfejsi karakterizuju zahteve koje okruženje može da pravi klasifikatoru Komponenta potencijalno ispoljava interfejse preko portova Notacija: Elektrotehnički fakultet u Beogradu
85 UML Dijagrami komponenata 85 imeporta:tipport <<component> K Projektovanje softvera
86 86 UML Dijagrami komponenata Port i interfejsi Port sa interfejsima (postolje ili soket-zahtevani, loptica-ponuđeni): Interfejs koji realizuje komponenta izvozni (export) ili ponuđeni interfejs Interfejs koji komponenta koristi uvozni (import) ili zahtevani interfejs <<component>> K p Zahtevani <<interface>> Zahtevani Ponudjeni <<interface>> Ponudjeni Primer interakcije preko interfejsa: <<component>> Exe I <<component>> Dll Konstrukcija postolja i loptice se naziva veznik sklopa (assembly connector) Ako je port na ivici klasifikatora vidljiv je spolja (public), inače je zaštićen (protected) Port može imati i multiplikativnost piše se iza imena u zagradama [] Vrste artefakata i stereotipovi Mogu se uočiti 3 kategorije artefakata: iz razvojnog procesa modeli, izvorni kod, projektni fajlovi, skriptovi, resursi za isporuku exe, dll, jar, dokumenti, tabele izvršni kreirani kao posledica izvršenja, npr. COM objekat kreiran iz DLL-a UML definiše sledeće standardne stereotipove za komponente: executable - komponenta koja se može izvršavati na čvoru library - statička ili dinamička objektna biblioteka file - datoteka (proizvoljan sadržaj) document - dokument script - skript source - datoteka sa izvornim kodom table - tabela baze podataka (UML 1) Paketi i relacije zavisnosti Paketi na dijagramima komponenata: sadrže druge pakete i komponente koriste se da reprezentuju fizičke podsisteme tipično reprezentuju kataloge (foldere) u sistemu datoteka Logički paketi iz dijagrama klasa se često preslikavaju u pakete u dijagramima komponenata Paketi ili komponente se povezuju relacijom zavisnosti koja reprezentuje: Elektrotehnički fakultet u Beogradu
87 UML Dijagrami komponenata 87 zavisnost u vreme prevođenja kada se radi sa fajlovima izvornog koda zavisnost u vreme povezivanja kada se radi sa bibliotečkim i objektnim fajlovima zavisnost u vreme izvršenja kada se radi sa izvršnim fajlovima Primer dijagrama komponenata Softver za administraciju nekog sistema komponenta Administracija.exe za sifrovanje podataka koji se razmenjuju sa administriranim sistemom koristi se dinamička biblioteka Sifrovanje.dll za najavu administratora na sistem koristi se dinamička biblioteka Najava.dll <<component>> Administracija.exe izvrsna komponenta <<component>> Sifrovanje.dll <<component>> Najava.dll dinamicka biblioteka Projektovanje softvera
88 88 UML Dijagrami raspoređivanja Dijagrami raspoređivanja Uvod Dijagram raspoređivanja prikazuje statičke fizičke aspekte sistema hardversku i softversku izvršnu arhitekturu sistema konfiguraciju čvorova i softverskih artefakata koje žive na njima Dijagram raspoređivanja sadrži: stvari: čvorove (node) artefakte podsisteme pakete relacije: zavisnosti (između čvorova i artefakata) asocijacije (veze između čvorova) generalizcije Najčešće primene Modeliranje ugrađenih (embedded) sistema klijent-server sistema troslojnih sistema potpuno distribuiranih sistema Čvorovi Čvor je apstrakcija fizičkog objekta koji reprezentuje resurs obrade Čvor u opštem slučaju ima barem memoriju, a često ima i mogućnost izvršavanja programa Čvorovi mogu biti procesori, uređaji, čak i izvršna okruženja (VM) procesor je čvor koji ima mogućnost izvršavanja programa Grafička notacija: Server Za višeprocesorske sisteme multiplikativnost (u gornjem desnom uglu) Mogu postojati odeljci: atributa (npr. speed i memory) operacija (npr. ukljuci(), iskljuci(), samodijagnostika()) artefakata koji se raspoređuju na čvor Čvor je apstrakcija (tip), pojave čvorova - podvučena imena RTI20:Server Elektrotehnički fakultet u Beogradu
89 UML Dijagrami raspoređivanja 89 Organizovanje čvorova Čvorovi se mogu organizovati u pakete Grupisanje u paket se koristi za logički srodne čvorove Na primer: Serveri Klijenti WebServer <<device>> AplikativniServer ServerBaze Desktop Laptop paket serveri sadrži razne tipove servera koji se koriste u sistemu paket klijenti sadrži razne tipove klijenata koji se koriste u sistemu Grupisanje može biti i fizičko - podsistem u UML 1 se koristio sterotip paketa <<subsystem>> u UML 2 <<subsystem>> je stereotip komponente Čvorovi, komponente i artefakti Odnosi: artefakti mogu biti manifestacije softverskih komponenata čvorovi su stvari koje izvršavaju artefakte komponente reprezentuju fizičko pakovanje logičkih elemenata čvorovi reprezentuju fizičko odredište pri raspoređivanju artefakata Server Server artifacts podaci.mdb skola.exe admin.mde <<deploy>> podaci.mdb <<deploy>> Skola.exe <<deploy>> admin.mde Notacija dozvoljava i da se artefakti koji se isporučuju za neki čvor crtaju u njemu Cvor <<artifact>> Artefakt Uređaji i izvršna okruženja Čvor može biti: fizički uređaj (npr. računar), stereotip <<device>> (podrazumevan) izvršno okruženje (npr. EJB kontejner), stereotip <<container>> Projektovanje softvera
90 90 UML Dijagrami raspoređivanja Čvorovi mogu biti ugnežđeni uređaj može sadržati izvršno okruženje grafička notacija za ugnežđene čvorove: <<device>> AplikativniServer <<container>> J2EEserver Veze Veza između čvorova ukazuje na komunikacioni put između njih Koristi se relacija asocijacije Veza može biti: direktna, kao što je RS232 serijska veza indirektna, kao što je komunikacija satelit-zemlja Veze su obično bidirekcionalne Na asocijaciji se može ukazati na prirodu komunikacionog puta stereotip Booch,..., UML User Guide <<RS232>> naziv Fowler, UML Distilled http/internet Primer hardverska konfiguracija Baza <<Ethernet>> Server <<Internet>> Klijent <<RS232>> Konzola Baza <<Ethernet>> <<RS-232>> <<Internet>> Server Klijent Konzola Primer čvorovi i artefakti Raspoređivanje artefakata na čvorove u lokalnoj mreži Server <<Ethernet>> 1 <<deploy>> <<deploy>> <<deploy>> Klijent <<deploy>> <<artifact>> podaci.mdb <<artifact>> admin.mde <<artifact>> skola.exe Elektrotehnički fakultet u Beogradu
91 UML Dijagrami interakcije napredniji pojmovi 91 Dijagrami interakcije - napredniji pojmovi Dijagrami pregleda interakcije Dijagrami pregleda interakcije (Interaction Overview Diagrams) definišu interakcije kroz jednu varijantu dijagrama aktivnosti na način da se dobije pregled kontrole toka Dijagrami pregleda interakcije su specijalizacija dijagrama aktivnosti da prikazuju interakcije Dijagrami pregleda interakcije se fokusiraju na pregled kontrole toka gde su čvorovi interakcije ili događanja interakcija Interakcije i događanja interakcija predstavljaju izvršenja aktivnosti Na dijagramima se linije života i poruke ređe pojavljuju: u najčistijem obliku sve aktivnosti su događanja interakcije i tada na dijagramu uopšte nema poruka i linija života Razlike od dijagrama aktivnosti Čvorovi na dijagramima pregleda interakcije mogu sadržati (ugrađenu) interakciju ili događanje interakcije događanje interakcije se prikazuje u okviru interakcije sa ključnom rečju ref i imenom interakcije i događanja interakcije se smatraju specijalnim oblicima izvršenja aktivnosti Kombinovani fragmenti alternativnih (alt) tokova interakcije se prikazuju čvorom odluke (decision) i odgovarajućim čvorom spajanja (merge) Kombinovani fragmenti paralelnih (par) tokova interakcije se prikazuju čvorom paralelnog grananja (fork) i udruživanja niti (join) Kombinovani fragmenti petlji (loop) u interakciji se prikazuju preko jednostavnih ciklusa u toku kontrole Dijagrami pregleda interakcije se uokviruju istim vrstama okvira koji zatvaraju druge forme dijagrama interakcije; tekst zaglavlja može da uključuje listu sadržanih linija života (koje ne moraju da se pojavljuju grafički) Grafička notacija Osim simbola sa dijagrama aktivnosti koriste se sledeći: okvir interakcije (oko celog dijagrama) sa eventualnim imenom i nazivima linija života: sd naziv : X : Y sd naziv lifelines :X :Y interakcija kao čvor (pokretanje aktivnosti) može biti imenovana, ili anonimna Projektovanje softvera
92 92 UML Dijagrami interakcije napredniji pojmovi događanje interakcije alatima se prepušta način prikaza: referenca ekspandovana i ugrađena interakcija ref NazivInterakcije Primer dijagram pregleda interakcije Isti primer distribucije pošiljki (videti dijagrame interakcije) [vrednost<=1000] [else] sd RedovnaIsporuka : Porudzbina : RedovniDistributer isporuci() sd SpecijalnaIsporuka : Porudzbina : SpecijalniDistributer isporuci() [nije poslednja stavka] [else] ref PotvrdaKurira [potrebna potvrda] Vremenski dijagrami Vremenski dijagrami se koriste da prikažu interakcije kada je primarna namena dijagrama razmatranje vremena Vremenski dijagrami se fokusiraju na promenu uslova/stanja unutar i između linija života duž linearne vremenske ose Vremenski dijagrami opisuju ponašanje individualnih klasifikatora (strukturalnih elemenata) interakcije klasifikatora Pažnja se fokusira na vremena zbivanja događaja koji uzrokuju promene u modeliranim stanjima/uslovima linija života Elektrotehnički fakultet u Beogradu
93 UML Dijagrami interakcije napredniji pojmovi 93 Grafička notacija Okvir interakcije (oko dijagrama) Vremenska linija stanja/uslova t Vrednosti/stanja linije života Linije života stanje C stanje B stanje A vrednost/stanje vrednost/stanje vrednost/stanje objekat1 objekat2 Poruke (kao na dijagramima sekvence, ali su linije vertikalno orijentisane) Vremenska ograničenja (u {}), na primer: {<5*d}, ili {d..3*d} gde je d interval vremena {t..t+3}, gde je t vremenski trenutak nekog događaja Primer vremenskog dijagrama sd Regulisanje saobracaja u brzini {<2s} {>3s} :Automobil na leru ugašen start stop crveno :Semafor zuto zeleno {2s} {2min} {3s} {3min} Projektovanje softvera
94 94 UML Arhitektura metamodeliranja Arhitektura metamodeliranja Uvod UML je jedan od nivoa 4-nivoske arhitekture metamodeliranja 4-nivoska arhitektura je dokazana infrastruktura za definisanje precizne semantike koju zahtevaju kompleksni modeli Prednosti pristupa 4-nivoske arhitekture: rafinira semantičke konstrukcije njihovom rekurzivnom primenom na sukcesivne metanivoe obezbeđuje arhitektonsku osnovu za: definisanje budućih proširenja UML metamodela nivelaciju UML metamodela sa drugim standardima zasnovanim na 4-nivoskoj arhitekturi metamodeliranja, posebno OMG Meta-Object Facility (MOF) Četvoronivoska arhitektura Odnos između 2 susedna nivoa niži nivo je instanca višeg nivoa Broj meta-nivoa je teorijski neograničen, ali su za praktične primene dovoljna 4 nivoa Opšte prihvaćeni radni okvir za metamodeliranje je zasnovan na arhitekturi sa sledeća četiri nivoa (sloja): meta-metamodel metamodel model korisnički objekti Opis nivoa arhitekture Nivo Opis Primer meta-metamodel Infrastruktura za arhitekturu metamodeliranja. Definiše jezik za specificiranje metamodela. metamodel Jedna instanca meta-metamodela. Definiše jezik za specificiranje modela. model Jedna instanca metamodela. Definiše jezik za opis nekog informacionog domena. korisnički objekti Jedna instanca modela. Definiše neki specifičan informacioni domen. MetaClass MetaAttribute MetaOperation Class Attribute Operation Component Dokument velicina otvaranje() Dokument dokument = new Dokument( Text.rtf ); int i=100; Elektrotehnički fakultet u Beogradu
95 UML Arhitektura metamodeliranja 95 Primer meta-metamodel (M3, MOF) Class <<instanceof>> <<instanceof>> <<instanceof>> metamodel (M2, UML) Classifier Atribute Class Instance model (M1, korisnicki model) <<instanceof>> <<instanceof>> <<instanceof>> Automobil <<snapshot>> -maxbrzina : Automobil objekti (M0, primerci u vreme izvršenja) auto <<instanceof>> Meta-metamodel Nivo meta-metamodeliranja daje temelj za arhitekturu metamodeliranja Primarna odgovornost nivoa meta-metamodela: da definiše jezik za specificiranje metamodela Meta-metamodel definše model na višem stepenu apstrakcije od metamodela i tipično je kompaktniji od metamodela koji opisuje Jedan meta-metamodel može definisati više metamodela, i može biti više meta-metamodela pridruženih svakom metamodelu Generalno je poželjno da povezani metamodeli i meta-metamodeli dele zajedničke projektne filozofije i konstrukte ovo nije striktno pravilo Svaki nivo treba da održava svoj sopstveni projektni integritet Primeri meta-metaobjekata u sloju meta-metamodeliranja su: MetaClass, MetaAttribute i MetaOperation Metamodel Metamodel je jedan primerak meta-metamodela Primarna odgovornost nivoa metamodela: da definiše jezik za specificiranje modela Metamodeli su tipično detaljniji od meta-metamodela koji ih opisuju, specijalno kada definišu dinamičku semantiku Primeri metaobjekata u sloju metamodeliranja su: Class, Attribute, Operation i Component Projektovanje softvera
96 96 UML Arhitektura metamodeliranja Model Model je jedan primerak metamodela Primarna odgovornost nivoa modela: da definiše jezik koji opisuje neki informacioni domen Primeri objekata u sloju modeliranja su: Dokument, velicina, otvaranje() Korisnički objekti Korisnički objekti su jedan primerak modela Primarna odgovornost nivoa korisničkih objekata je da opišu specifičan informacioni domen Primeri objekata u sloju korisničkih objekata su: Dokument dokument = new Dokument( Text.rtf ) i int i=100 Analogija Nije samo arhitektura OO meta-modeliranja 4-nivoska i arhitektura proceduralnog projektovanja i realizacije je 4-nivoska: Metajezik (meta-metamodel): stanje (podaci): primitivni tip, niz, struktura ponašanje (kontrola toka): sekvenca, selekcija, iteracija Jezik (metamodel): podaci: int, [], struct kontrola toka: {nar1; nar2; }, if-else, for, while Program (model): podaci: typedef unsigned int Uint; struct S{int c; float n[2];} kontrola toka: if (a) {b=c; while(d<100){ }} else { } Izvršenje programa (korisnički objekti): podaci: Uint i=5; S s=new S(); kontrola toka: 3. izvršenje ciklusa while Elektrotehnički fakultet u Beogradu
97 Projektni uzorci - Uvod 97 Uvod Materijali pripremljeni pretežno prema knjizi: Gama, Helm, Johnson, Vlissides, Design Patterns Christopher Alexander govori o uzorcima u građevinskoj arhitekturi: Svaki uzorak opisuje neki problem koji se ponavlja u našem okruženju i tada opisuje jezgro rešenja tog problema na takav način da se to rešenje može koristiti milion puta, a da se ne uradi ni dva puta na isti način definicija je primenljiva i na uzorke u objektno-orijentisanim sistemima projektni uzorak predstavlja zabeleženo široko primenljivo iskustvo u projektovanju OO sistema svaki projektni uzorak sistematično imenuje, objašnjava i evaluira neki važan i ponavljajući dizajn u objektno-orijentisanim sistemima termini: projektni uzorak, obrazac, šablon (engl. Design Pattern) Projektni uzorci su opisi komunicirajućih objekata i klasa koji su prilagođeni da reše neki opšti projektni problem u posebnom kontekstu Projektni uzorak identifikuje, apstrahuje i imenuje ključne aspekte neke opšte strukture identifikuje učestvujuće klase i objekte, njihove uloge u saradnji i raspodelu odgovornosti korisan je za kreiranje ponovo upotrebljivog OO projektnog rešenja Elementi uzorka Svaki projektni uzorak ima 4 esencijalna elementa: naziv uzorka postavku problema opis rešenja diskusiju posledica Naziv uzorka Koristi se da opiše projektni problem, njegova rešenja i konsekvence u par reči Imenovanje uzorka proširuje projektni rečnik omogućava projektovanje na višem nivou apstrakcije pojednostavljuje komunikaciju u timu olakšava dokumentovanje projekta Ponekad se u literaturi sreće i više imena za isti uzorak Postavka problema Opisuje kada da se primeni uzorak Objašnjava problem i njegov kontekst Može da opiše specifičan projektni problem, npr. kako reprezentovati algoritme kao objekte strukture klasa ili objekata koje su simptomatične za nefleksibilni dizajn listu uslova koji se moraju ispuniti za primenu uzorka Projektovanje softvera
98 98 Projektni uzorci - Uvod Opis rešenja Opisuje elemente koji predstavljaju dizajn, njihove relacije, odgovornosti i saradnje Rešenje ne opisuje konkretan dizajn ili implementaciju Uzorak treba da posluži kao šablon koji se može primeniti u konkretnim slučajevima Apstraktni opis projektnog problema i načina aranžiranja elemenata (klasa i objekata) u rešenju Posledice Posledice su rezultati primene uzorka Kritične su za razmatranje projektnih alternativa i razumevanje cene i dobiti primenom uzorka Posledice se često odnose na vreme i prostor Ponekad se odnose i na jezik i implementacione stvari Posledice najčešće uključuju uticaj na: fleksibilnost sistema proširivost sistema prenosivost (portabilnost) sistema Primer primene uzoraka: MVC MVC je skraćeni naziv za trijadu klasa Model, View i Controller Koristi se za realizaciju korisničkih interfejsa u Smalltalk jeziku Model konkretan objekat aplikacije View ekranska prezentacija objekta Controller definiše način na koji korisnički interfejs reaguje na korisnički ulaz Komunikacije: Model-View Model-Controller Primeri za 3 projektna uzorka Model View komunikacija Prikaz mora da obezbedi da reflektuje aktuelno stanje modela Kad se podaci modela promene, model signalizira prikazima koji zavise od njega Kao posledica, svaki prikaz dobija priliku da se ažurira kada se model promeni Pristup omogućava više pogleda na model, da se dobiju različite prezentacije Mogu se dodavati novi prikazi, a da se model ne promeni Primer: model sadrži neke statističke podatke postoje tri prikaza: tabelarni, histogram, pita Protokol između View i Model-a je tzv. subscribe-notify prikazi se pretplaćuju kod modela, da bi ih ovaj obaveštavao kada ima promena kada dobiju obaveštenje (signal) prikazi čitaju nove vrednosti modela Generalizacija problema obaveštavanja "pretplatnika" rasprezanje objekata takvo da promene jednog utiču na proizvoljan broj drugih objekata Elektrotehnički fakultet u Beogradu
99 Projektni uzorci - Uvod 99 nema potrebe da menjani objekat zna za detalje drugih Rešenje generalnog problema opisano uzorkom Posmatrač (Observer) Komponovanje prikaza Jedna od mogućnosti MVC koncepta prikazi (Views) mogu biti ugneždeni Primer: kontrolni panel je prikaz koji sadrži ugneždene prikaze dugmadi Klasa CompositeView izvedena iz View predstavlja prikaz koji sadrži (ugneždava) druge vrstu prikaza, pa se može pojaviti gde god se očekuje objekat View Generalizacija problema složenih objekata takvo grupisanje objekata da se grupa može tretirati i kao primerak iste vrste objekata Rešenje generalnog problema opisano uzorkom Kompozicija (Sastav, Sklop, engl. Composite) Sličan je odnos klasa Container i Component u Javi Model Controller komunikacija MVC omogućava promenu načina na koji View reaguje na ulaz korisnika Primer: moguće je redefinisati odgovore na događaje sa tastature ili zameniti komandne tastere pop-up menijem MVC enkapsulira mehanizam odgovora u objekat tipa Controller Postoji hijerarhija klasa kontrolera koja olakšava kreiranje novog novi kontroler se kreira kao varijacija nekog postojećeg View koristi objekat potklase Controller za specifičnu strategiju odgovora Za primenu druge strategije, samo se zamenjuje objekat drugom vrstom kontrolera Izmenu strategije je ovako moguće vršiti i u vreme izvršenja Primer: View može onemogućiti interakciju (disabled stanje) tako što mu se dodeli kontroler koji ignoriše ulaze Generalizacija problema promenljivog algoritma izmena (statička/dinamička) algoritma koji definiše ponašanje objekta Rešenje generalnog problema opisano uzorkom Strategija (Strategy) Strategy je objekat koji apstrahuje i enkapsulira algoritam Projektovanje softvera
100 100 Projektni uzorci - Uvod Klasifikacija projektnih uzoraka Granularnost i nivo apstrakcije varira kod različitih uzoraka Kao i svaka druga klasifikacija, ova klasifikacija doprinosi boljem i bržem snalaženju pri traženju odgovarajućeg uzorka usmerava napore ka otkrivanju novih uzoraka Klasifikacija koristi dva kriterijuma za razvrstavanje uzoraka kriterijum namene kriterijum domena Kriterijum namene Prvi kriterijum deli uzorke prema nameni, odražava čime se uzorak bavi (šta opisuje) Namena uzorka može biti da opiše kreiranje (creational patterns) uzorci tretiraju kreiranje objekata strukturu (structural patterns) uzorci tretiraju kompoziciju klasa ili objekata ponašanje (behavioral patterns) uzorci tretiraju načine na koje objekti ili klase interaguju Kriterijum domena Drugi kriterijum specificira da li se uzorak primarno primenjuje na klase ili na objekte Klasni uzorci (class patterns) se fokusiraju na relacije između klasa i potklasa relacije se uspostavljaju kroz nasleđivanje one su statičke fiksirane u vreme prevođenja Objektni uzorci (object patterns) se fokusiraju na relacije između objekata ove relacije se mogu menjati u vreme izvršenja, pa su dinamičnije Većina uzoraka je u objektnom domenu Karakteristike vrsta uzoraka Klasni uzorci kreiranja odlažu neke delove kreiranja objekata da budu implementirani u potklasama Objektni uzorci kreiranja delegiraju neke delove kreiranja objekata drugim objektima Klasni uzorci strukturiranja koriste nasleđivanje da komponuju klase Objektni uzorci strukturiranja opisuju načine asembliranja (sklapanja celina od nekih) objekata Klasni uzorci ponašanja koriste nasleđivanje da opišu algoritme i tok kontrole Objektni uzorci ponašanja opisuju kako grupa objekata kooperiše da obavi neki zadatak koji samostalno ne bi mogli Elektrotehnički fakultet u Beogradu
101 Projektni uzorci - Uvod 101 Drugi odnosi između uzoraka Postoje i drugi načini za organizovanje uzoraka: neki uzorci se često koriste zajedno npr. Kompozicija (Composite) i Iterator (Iterator) ili Posetilac (Visitor) neki uzorci su alternative jedni drugima npr. Prototip (Prototype) i Apstraktna fabrika (Abstract Factory) neki uzorci različitih namena rezultuju u sličnoj implementaciji npr. Kompozicija (Composite) i Dekorater (Decorator) Prostor projektnih uzoraka Tabela reflektuje klasifikaciju uzoraka po dva kriterijuma kolone sadrže vrste uzoraka po nameni vrste sadrže vrste uzoraka po domenu Domen klasni uzorci objektni uzorci Katalog projektnih uzoraka Namena uzorci kreiranja uzorci strukture uzorci ponašanja Fabrički metod Adapter (klasni) Interpreter Šablonski metod Apstraktna fabrika Graditelj Prototip Unikat Adapter (objektni) Most Sastav Dekorater Fasada Muva Zastupnik Katalog sadrži za svaki uzorak sledeće stavke: ime uzorka i klasifikacija Lanac odgovornosti Komanda Iterator Posrednik Podsetnik Posmatrač Stanje Strategija Posetilac namena odgovori na pitanja "šta radi? čemu služi? koji problem rešava?" drugi nazivi isti uzorak može imati više naziva motivacija scenario koji ilustruje projektni problem primenljivost situacije u kojima se uzorak može primeniti (da se izbegne loš dizajn) struktura klasni/objektni i/ili dijagrami interakcije koji opisuju uzorak učesnici klase i objekti koji učestvuju u uzorku i njihove odgovornosti saradnje kako učesnici sarađuju da ispolje svoje odgovornosti posledice diskusija dobrih i loših strana primene uzorka implementacija zamke, preporuke i tehnike kojih treba biti svesan pri implementaciji primer koda fragment koda koji ilustruje kako se uzorak može implementirati poznate primene primeri primene uzorka u realnim sistemima (barem po dva) povezani uzorci koji uzorci su bliski sa datim, koje su razlike, sa kojima se često koristi UML notacija grafički simbol za saradnju koja realizuje uzorak Projektovanje softvera
102 102 Projektni uzorci - Uvod UML notacija za opis uzoraka UML 1: grafički simbol predstavlja parametrizovanu saradnju Uzorak uloga1 uloga2 uloga3 uloga 1 uloga3 Ucesnik1 uloga2 Ucesnik3 Ucesnik2 Formalni parametri saradnje su uloge učesnika Stvarni parametri su učesnici konkretne klase Relacija između parametrizovane kolaboracije i participanata je "binding" UML 2: ne koristi se parametrizovana saradnja Prvi način: uloge učesnika se crtaju u okviru saradnje Uzorak uloga1:ucesnik1 uloga2:ucesnik2 Drugi način: uloge učesnika se crtaju izvan saradnje Ucesnik1 uloga1 Uzorak uloga2 Ucesnik2 Elektrotehnički fakultet u Beogradu
103 Projektni uzorci - Unikat 103 Unikat Ime i klasifikacija: Unikat (Singleton) objektni uzorak kreiranja Namena: obezbeđuje da klasa ima samo jedan objekat i daje globalni pristup tom objektu Motivacija: za neke klase je važno obezbediti da imaju samo po jedan objekat na primer, u sistemu treba da postoji samo jedan dispečer štampe (spooler) globalna promenljiva obezbeđuje da je objekat pristupačan, ali ne brani više objekta bolje rešenje je da klasa sama bude odgovorna za jedinstvenost njenog objekta Primenljivost: Unikat uzorak treba koristiti kada: mora postojati tačno jedan objekat klase i ona mora biti pristupačna klijentima preko svima poznate tačke pristupa klasa treba da bude proširiva izvođenjem, a da klijenti mogu da koriste objekat izvedene klase bez potrebe da modifikuju svoj kod Struktura: Unikat -jediniprimerak: Unikat -podaci <<create>>#unikat() +primerak(): Unikat +dohvatipodatke() +operacija() primerak():unikat{ if (jediniprimerak==null) jediniprimerak=<<create>>unikat(); return jediniprimerak; } Učesnici: Unikat definiše operaciju primerak() kao operaciju klase (statički metod) koja daje klijentima pristup do jedinstvenog objekta može biti odgovorna za kreiranje vlastitog jedinstvenog objekta Saradnja: klijenti pristupaju objektu klase Unikat isključivo kroz njenu operaciju primerak() Posledice: dobre strane kontrolisani pristup do jedinog objekta pošto klasa kapsulira jedini objekat, ona može imati striktnu kontrolu nad tim kako i kada klijenti pristupaju objektu rasterećenje prostora imena uzorak Unikat je bolji koncept od globalne promenljive, jer izbegava opterećivanje prostora imena globalnom promenljivom koja čuva jedini objekat dozvoljeno doterivanje operacija i reprezentacije iz klase Unikat se može izvoditi aplikaciju je lako konfigurisati objektom izvedene klase, čak i u vreme izvršenja dozvoljava kontrolisano povećanje broja objekata uzorak omogućava projektantu da se po maloj ceni predomisli i poveća broj dozvoljenih objekata fleksibilnost u odnosu na operacije klase drugi način za realizaciju funkcionalnosti Unikata je uslužna (utility) klasa sa uslužnom klasom je komplikovano promeniti broj objekata Projektovanje softvera
104 104 Projektni uzorci - Unikat statičke funkcije na C++ nisu virtuelne, pa potklase ne mogu da ih polimorfno redefinišu Implementacija C++: class Unikat { public: static Unikat* primerak(); virtual void operacija(); protected: Unikat(); private: static Unikat* jediniprimerak; } // implementacija: Unikat* Unikat::jediniPrimerak=0; Unikat* Unikat::primerak(){ if (jediniprimerak == 0) jediniprimerak = new Unikat; return jediniprimerak; } // koriscenje: Unikat::primerak()->operacija(); Implementacija Java: class Unikat{ public static Unikat primerak(){ if (jediniprimerak == null) jediniprimerak = new Unikat(); return jediniprimerak; } public void operacija(){/*...*/}; protected Unikat(){} private static Unikat jediniprimerak=null; }; // koriscenje: Unikat.primerak().operacija(); Poznate primene: u aplikacijama sa jednim dokumentom (single-document) klasa Dokument je unikat u Smalltalk jeziku svaka metaklasa (klasa čiji su primerci klase) ima samo jedan objekat Povezani uzorci: mnogi uzorci koriste Unikat (Apstraktna fabrika, Graditelj, Prototip, Fasada) Notacija UML 1 unikat Unikat unikat Dokument UML 2 Uzorak Unikat unikat: Dokument ili Uzorak Unikat unikat Dokument Elektrotehnički fakultet u Beogradu
105 Projektni uzorci - Kompozicija 105 Kompozicija Ime i klasifikacija: Kompozicija (Sklop, Sastav, engl. Composite) objektni uzorak strukture Namena: komponuje objekte u strukturu stabla (hijerarhija celina-deo) omogućava klijentima da uniformno tretiraju individualne objekte njihove kompozicije Motivacija: grafičke aplikacije kao što su editori crteža i sistemi za unos šema: omogućavaju crtanje kompleksnih slika (dijagrama) sastavljenih od jednostavnih grafičkih elemenata (komponenata) elementi se mogu grupisati da se formiraju složeni elementi (kompozicije) složeni element je potrebno tretirati i kao vrstu grafičkog elementa ključno: apstraktna klasa koja predstavlja i proste i složene elemente klasni dijagram Grafik Editor konkretne metode imaju prazna tela +crtaj() +dodaj(g: Grafik) +ukloni(g: Grafik) +dohvatielement(i: int) * -elementi crtaj(){ foreach g in elementi g.crtaj(); } Linija Pravougaonik Slika +crtaj() +crtaj() +crtaj() +dodaj(g: Grafik) +ukloni(g: Grafik) +dohvatielement(i: int) objektni dijagram struktura rekurzivno komponovanih grafičkih objekata: s1 : Slika l1 : Linija l2 : Linija s2 : Slika p1 : Pravougaonik l3 : Linija Primenljivost: uzorak treba koristiti kada se želi da postoje hijerarhije objekata celina-deo takve da su celina i deo iste vrste klijenti mogu da ignorišu razlike između kompozicija i pojedinih objekata Projektovanje softvera
106 106 Projektni uzorci - Kompozicija Struktura: Element Klijent konkretne metode imaju prazna tela +operacija() +dodaj(e: Element) +ukloni(e: Element) +dohvati(i: int) -deca * operacija(){ foreach d in deca d.operacija(); } List +operacija() Kompozicija +operacija() +dodaj(e: Element) +ukloni(e: Element) +dohvato(i: int) Učesnici: Element (klasa Grafik) deklariše zajednički interfejs za sve objekte u kompoziciji implementira podrazumevano ponašanje zajedničko za sve klase deklariše interfejs za pristupanje i upravljanje decom implementira prazne metode za pristup i upravljanje decom (zbog listova) opciono deklariše i implementira interfejs za pristup roditelju List (klase Linija, Pravougaonik) reprezentuje individualne objekte listove u stablu definiše ponašanje za primitivne objekte u kompoziciji Kompozicija (klasa Slika) definiše ponašanje za objekte koji imaju decu sadrži komponente decu implementira operacije za pristup i upravljanje decom Klijent (klasa Editor) manipuliše objektima u kompoziciji kroz interfejs klase Element Saradnja: klijenti koriste interfejs apstraktne klase Element da interaguju sa objektima složene strukture ako je primalac zahteva List, zahtev se neposredno izvršava ako je primalac zahteva Kompozicija obično se zahtev prosleđuje komponentama deci UML notacija: na primeru grafičkog editora Editor Klijent Element Grafik Kompozicija List Linija Kompozicija List Pravougaonik Slika Elektrotehnički fakultet u Beogradu
107 Projektni uzorci - Kompozicija 107 Posledice: čini jedostavnim klijente oni tretiraju na jedinstven način sve objekte u hijerarhiji čini jednostavnim dodavanje nove vrste elemenata nije jednostavno ograničiti vrste elemenata koje neke kompozicije sadrže Povezani uzorci: Često se veza element-roditelj koristi za uzorak Lanac odgovornosti ako element ne može da odgovori na zahtev prosleđuje ga roditeljskom objektu Dekorater (Dopuna) ima sličnu strukturu klasa i često se koristi sa Kompozicijom kada se koriste zajedno obično imaju zajedničku natklasu Muva dozvoljava deljenje elemenata, ali oni ne mogu da pristupaju svojim roditeljima Iterator se koristi često za obilazak strukture Kompozicije Posetilac lokalizuje operacije i ponašanje koje bi inače bilo distribuirano između klasa Kompozicija i List Projektovanje softvera
108 108 Projektni uzorci - Prototip Prototip Ime i klasifikacija: Prototip (polimorfna kopija, engl. Prototype) objektni uzorak kreiranja Namena: specificira vrste objekata koje se kreiraju korišćenjem prototipske instance kreira nove objekte kopiranjem prototipa Motivacija: editor za muzičke partiture bi se mogao realizovati: prilagođenjem opšteg radnog okvira za grafičke editore dodavanjem novih objekata koji predstavljaju note, pauze i druge muzičke simbole radni okvir editora može imati paletu alata za dodavanje muzičkih objekata partituri paleta bi takođe uključila i alate za selektovanje, pomeranje i druge radnje nad objektima korisnik bi kliknuo na alat "četvrtinka" i dodao ovu u partituru korisnik bi mogao da koristi alat za pomeranje da premesti notu na drugu notnu liniju radni okvir nudi apstraktnu klasu Simbol za grafičke komponente (npr. note, linije) apstraktnu klasu Alat za definisanje alata kakvi su u paleti klasu AlatZaSimbole, potklasu klase Alat, za kreiranje i dodavanje objekata u dokument Alat +primeni() -prototip Simbol +crtaj() +kopija() AlatZaRotaciju +primeni() AlatZaSimbole +primeni() Nota NotnaLinija +crtaj() primeni(){ +kopija() p=prototip.kopija(); CelaNota Polovina while (korisnik pomera p) { crtaj p na tekucoj poziciji +crtaj() +crtaj() } +kopija() +kopija() umetni p u sliku; } kopija() { return kopija CelaNota; } problem za projektanta radnog okvira je klasa AlatZaSimbole klase za note i notne linije su specifične za aplikaciju, nepoznate radnom okviru mogla bi se praviti potklasa AlatZaSimbole za svaki muzički objekat, ali ima ih mnogo potklase bi se razlikovale samo po vrsti muzičkog objekta koje stvaraju kompozicija objekata je česta fleksibilna alternativa izvođenju i nasleđivanju radni okvir parametrizuje primerke AlatZaSimbole objektima klase Simbol rešenje: AlatZaSimbole kreira novi Simbol kopiranjem objekta potklase Simbol dotični objekat (primerak potklase Simbol) se naziva prototipom objekat AlatZaSimble je parametrizovan prototipom koji klonira i dodaje u dokument potrebno da sve potklase Simbol imaju operaciju kopija() u muzičkom editoru, alati za kreiranje muzičkih obj. su objekti AlatZaSimbole dotičan objekat AlatZaSimbole se inicijalizuje različitim prototipom svaki objekat AlatZaSimbole proizvodi muzički objekat kloniranjem njegovog prototipa Primenljivost: uzorak treba koristiti Elektrotehnički fakultet u Beogradu
109 Projektni uzorci - Prototip 109 kada sistem treba da bude nezavisan od toga kako se njegovi proizvodi kreiraju i predstavljaju kada se klase specificiraju u vreme izvršenja, npr. dinamičkim učitavanjem kada treba izbeći izgradnju hijerarhije fabrika paralelno sa hijerarhijom proizvoda Struktura: operacija(){... prototip.kopija();... } Klijent +operacija() -prototip Prototip +kopija() KonkretanPrototip1 +kopija() KonkretanPrototip2 +kopija() kopija(){ vraca kopiju KonkretanPrototip1; } kopija(){ vraca kopiju KonkretanPrototip2; } Učesnici: Prototip (klasa Simbol) deklariše interfejs za sopstveno kloniranje KonkretanProtorip (klase CelaNota, Polovina, NotnaLinija) implementira operaciju za sopstveno kloniranje Klijent (klasa AlatZaSimbole) kreira novi objekat zahtevom prototipu da se klonira Saradnja: klijent zahteva od prototipa da se klonira UML notacija: AlatZaSimbole Klijent Uzorak ide iza Prototip KonkretanPrototip CelaNota Prototip Simbol Posledice: Prototip ima sledeće dobre strane: redukuje broj imena koje klijent treba da poznaje dodavanje i uklanjanje proizvoda u vreme izvršenja (registracija prototipske instance) smanjivanje potrebe izvođenja dinamičko konfigurisanje aplikacije klasama loša strana uzorka Prototip: svaka potklasa mora implementirati operaciju kopija() to je komplikovano ako klasa već postoji ili ako sadrži objekte koji ne podržavaju kopiranje Povezani uzorci: Apstraktna Fabrika je alternativan uzorak, ali se može i dopuniti sa Prototipom: fabrika može sadržati skup prototipova na osnovu kojih klonira i vraća proizvode projekti koji intenzivno koriste uzorci Kompozicija (Sklop) i Dekorater (Dopuna) mogu imati koristi i od uzorka Prototip Projektovanje softvera
110 110 Projektni uzorci - Posmatrač Posmatrač Ime i klasifikacija: Posmatrač (engl. Observer) objektni uzorak ponašanja Namena: definiše 1:n zavisnost između objekata takvu da kada jedan objekat promeni stanje svi zavisni se obaveste i modifikuju automatski Druga imena: Zavisni objekti, Objavljivanje-Pretplata (Dependents, Publish-Subscribe) Motivacija: nije dobro da su klase sistema čvrsto-spregnute (smanjuje se reupotrebljivost) na primer, GUI toolkits razdvajaju prezentacione aspekte od aplikativnih podataka klase aplikativnih podataka i one za prezentaciju se mogu reupotrebiti nezavisno objekat za tabelarni prikaz i objekat za histogram mogu prikazati iste podatke objekat za tabelarni prikaz i objekat za histogram ne znaju jedan za drugog zbog toga dopuštaju nezavisnu reupotrebu, a ponašaju se kao da su spregnuti kada se podaci promene kroz tabelu promeni se i histogram tabela posmatraci histogram 4 : citajstanje() 3 : osvezi() 5 : osvezi() pita 1 : promenistanje() subjekat model 6 : citajstanje() 2 : obavesti() tabela i histogram su zavisni od modela: treba ih obavestiti kad model promeni stanje nema ograničenja u broju zavisnih objekata koje treba obaveštavati ključni objekti u uzorku su subjekat (subject) i posmatrač (observer) posmatrač zavisi od subjekta subjekat obaveštava posmatrača kad promeni stanje posmatrač zatim šalje upit subjektu o njegovom stanju da bi ažurirao svoje stanje uzorak se naziva i Publish-Subscribe posmatrači se "pretplaćuju" kod subjekta za obaveštenja (notifikaciju) subjekat šalje signal posmatraču (notifikacija) siganali se šalju svim posmatračima i ne znajući ko su sve posmatrači Primenljivost: uzorak treba koristiti u sledećim situacijama: kada jedna apstrakcija ima barem dva međusobno zavisna apsekta takva da promena bilo kog utiče na promenu drugih kada izmena jednog objekta zahteva izmenu nepoznatog broja drugih objekata kada jedan objekat treba da signalizira promenu drugim objektima ne znajući ko su ti objekti Elektrotehnički fakultet u Beogradu
111 Projektni uzorci - Posmatrač 111 Struktura: obavesti(){ for all p in posmatraci p.osvezi() } Subjekat +pridruzi() +razdruzi() +obavesti() 1 -posmatraci * Posmatrac +osvezi() KonkretanSubjekat -stanjesubjekta +citajstanje() +menjajstanje() -subjekat 1 * KonkretanPosmatrac -stanjeposmatraca +osvezi() osvezi(){ stanjeposmatraca:=subjekat.citajstanje() } Učesnici: Subjekat (klasa Model) zna svoje posmatrače; proizvoljan broj posmatrača može da nadgleda subjekat obezbeđuje interfejs za pridruživanje i razdruživanje posmatrača Posmatrac (klasa Komponenta) definiše interfejs za signaliziranje promena subjekta KonkretanSubjekat (klasa Statistika) čuva stanje od interesa za konkretne posmatrače omogućava čitanje stanja šalje signal posmatračima kada se promeni stanje KonkretanPosmatrac (klase Tabela, Histogram, Pita) poseduje referencu na konkretan subjekat (subjekat može da bude i parametar) čuva stanje koje treba da bude u konzistenciji sa stanjem konkretnog subjekta implementira operaciju za signaliziranje promene subjekta čita stanje konkretnog subjekta da bi ažurirao sopstveno stanje Saradnja: sd uzorak Posmatrac s : KonkretanSubjekat p1 : KonkretanPosmatrac p2 : KonkretanPosmatrac 1 : menjajstanje() 2 : obavesti() 3 : osvezi() 4 : citajstanje() 5 : osvezi() 6 : citajstanje() konkretan subjekat signalizira svojim posmatračima svaku promenu svog stanja nakon poziva osvezi, konkretan posmatrač traži od subjekta informaciju o stanju posmatrač koristi informaciju o stanju subjekta da ažurira svoje stanje UML notacija Projektovanje softvera
112 112 Projektni uzorci - Posmatrač Model Subjekat Uzorak Posmatrac Posmatrac Prikaz KonkretanSubjekat Statistika KonkretanPosmatrac Tabela Histogram Pita Posledice: dobre strane apstraktno vezivanje između subjekata i posmatrača; tako se omogućava da subjekat i posmatrač budu u različitim slojevima aplikacije podrška sa broadcast komunikaciju; subjekat ne zna identitet posmatrača kojem šalje signal nedostatak: nepoznata cena promene: pošto posmatrači ne znaju ko će sve dobiti signal, oni nisu svesni cene promene subjekta Povezani uzorci: za kapsuliranje kompleksne semantike ažuriranja Mediator može da posreduje između subjekata i posmatrača Elektrotehnički fakultet u Beogradu
113 Projektni uzorci - Iterator 113 Iterator Ime i klasifikacija: Iterator (engl. Iterator) objektni uzorak ponašanja Namena: obezbeđuje pristup elementima zbirke (agregata) redom, bez eksponiranja interne strukture te zbirke Drugo ime: Kurzor (engl. Cursor), za specifičnu vrstu iteratora Motivacija: lista (agregat) treba da omogući pristup njenim elementima interna struktura liste ne treba da bude eksponirana klijentima može postojati više načina za obilazak liste klasu liste ne treba opteretiti operacijama za razne načine obilazaka ni klijenta ne treba opteretiti specifičnostima načina obilaska liste potrebno je da više klijenata simultano obilazi listu ključna ideja uzorka Iterator: prenošenje odgovornosti za obilazak liste na poseban objekat - iterator klasa iteratora definiše interfejs za pristup elementima liste objekat iteratora zna način obilaska liste i to: od kog elementa početi obilazak koji su elementi liste već posećeni, odnosno koji je naredni na redu kada je obilazak završen (nema neobiđenih elemenata) objekat iteratora čuva informaciju o tekućem elementu obilaska relacija između klasa Lista i IteratorListe: Lista +brojelemenata() +dodajelement() +uklonielement() -lista 1 * IteratorListe -indeks +prvielement() +sledecielement() +kraj() +tekucielement() prvielement()- inicijalizuje pokazivač tekućeg elementa postavljanjem na prvi element sledecielement()- proglašava naredni element tekućim kraj() - testira da li je obilazak završen tekucielement()- vraća tekući element liste razdvajanje mehanizma obilaska od objekta liste omogućava definisanje posebnih iteratora za različite politike obilaska na primer: IteratorFiltriraneListe može pružiti pristup samo onim elementima koji zadovoljavaju uslove filtra interfejs klase Lista nije opterećen raznim politikama obilaska nedostatak: klijent mora biti svesan da se obilazi baš lista, a ne neka druga struktura ukoliko bi se menjala struktura koja se obilazi morao bi se menjati kod klijenta generalizacija koncepta iteratora: polimorfni iterator primer: klijent treba da radi sa klasom Lista ali i sa klasom FIFOLista Projektovanje softvera
114 114 Projektni uzorci - Iterator definiše se interfejs ApstraktnaLista za manipulisanje proizvoljnom listom definiše se interfejs Iterator za objekte iteratora svih vrsta lista potklase koje implementiraju interfejs Iterator biće iteratori za odgovarajuće liste mehanizam iteratora je postao nezavisan od konkretnih klasa lista klijent ne mora da vodi računa o vrsti liste, odnosno iteratora da bi se klijent učinio nezavisnim od konkretne liste/iteratora: definiše se operacija liste kreirajiterator() kojom ova treba da kreira svoj iterator klijenti koriste apstraktnu operaciju i tako su nezavisni od konkretnih klasa liste operacija kreirajiterator() je primer Fabirčkog metoda ApstraktnaLista Iterator +kreirajiterator() +brojelemenata() +dodajelement() +uklonielement() -struktura 1 * Klijent 1 -iterator 1 +prvielement() +sledecielement() +kraj() +tekucielement() <<instantiate>> FIFOLista Lista 1 * <<instantiate>> IteratorListe IteratorFIFOListe 1 * Primenljivost: uzorak treba koristiti da se podrže višestruki simultani obilasci agregata da se obezbedi uniformni interfejs za obilazak različitih agregata da se ni klijent ni agregat ne opterete politikom obilaska Struktura: Agregat +dodajelement() +izbacielement() +napraviiterator() Klijent 1 * 1 1 Iterator +prvielement() +sledecielement() +kraj() +tekucielement() KonkretanAgregat +napraviiterator() <<instantiate>> 1 * KonkretanIterator napraviiterator(){ return <<create>> KonkretanIterator(this); } Učesnici: Agregat (klasa ApstraktnaLista) definiše interfejs za kreiranje objekta iteratora Iterator (klasa Iterator) definiše interfejs za obilazak elemenata agregata i pristup elementu KonkretanAgregat (klase Lista, FIFOLista ) implementira interfejs za kreiranje iteratora tako što vraća odgovarajući konkretan iterator KonkretanIterator (klase IteratorListe, IteratorFIFOListe) Elektrotehnički fakultet u Beogradu
115 Projektni uzorci - Iterator 115 implementira interfejs Iterator čuva informaciju o tekućoj poziciji pri obilasku agregata Saradnja: konkretan iterator vodi računa o tekućem objektu u agregatu i može da odredi sledeći objekat u obilasku agregata UML notacija: Klijent Klijent Uzorak Iterator KonkretanIterator IteratorListe Agregat ApstraktnaLista KonkretanAgregat Lista Iterator Iterator Posledice: Iterator ima sledeće dobre strane: pojednostavljuje interfejs agregata: interfejs za obilazak je u klasi iteratora više od jednog obilaska se može simultano sprovoditi nad agregatom podržava varijacije u obilasku agregata: lako se kreira nova klasa konkretnog iteratora za novi način obilaska Implementacija: ko upravlja iterativnim procesom? Spoljašnji (external) iterator klijent kontroliše iteraciju na klijentu je odgovornost za progres obilaska eksplicitno zahteva od iteratora sledeći element Unutrašnji (internal) iterator iterator kontroliše iteraciju klijent samo zahteva od iteratora da izvrši neku operaciju sam iterator primenjuje operaciju na svaki element agregata spoljašnji iterator je fleksibilniji od unutrašnjeg ko definiše algoritam obilaska? po pravilu iterator, ali ne i obavezno agregat može definisati algoritam obilaska iterator se koristi samo da čuva stanje iteracije - samo ukazuje na tekuću poziciju u agregatu ovakav iterator se naziva Kurzor (Cursor) agregat ima operacije za obilazak i dohvatanje: prvielement(), klijent poziva operaciju sledecielement() sa kurzorom kao argumentom operacija sledecielement() promeni stanje kurzor-objekta ako se algoritam obilasaka definiše u klasi agregata gube se povoljnosti: lakog variranja iterativnih algoritama nad istim agregatom reupotrebe algoritma za obilazak sličnih agregata koliko je robustan iterator? opasno je modifikovati agregat dok se on obilazi moguće je ukloniti tekući element (iterator postaje viseći ) moguće je umetnuti ili ukloniti naredni element (problem ako je iterator već zapamtio adresu narednog) robusno implementiran uzorak iteratora obezbeđuje da umetanje/uklanjanje elemenata agregata ne interferira sa obilaskom sprečavanje interferencije ne treba raditi kopiranjem agregata agregat treba da registruje iteratore koje je kreirao pri umetanju i uklanjanju elementa agregat prilagođava stanje registrovanih iteratora Dodatne operacije iteratora za uređene/indeksirane agregate prethodnielement() pozicionira iterator na prethodni element Projektovanje softvera
116 116 Projektni uzorci - Iterator skocina() pozicionira iterator na objekat koji odgovara specifičnim kriterijumima Polimorfni iteratori u C++ polimorfni iteraratori imaju svoju cenu objekat iteratora se alocira dinamički drugi nedostatak je što je klijent odgovoran za dealokaciju objekta iteratora Iteratori mogu imati privilegovani pristup iteratori se mogu posmatrati kao ekstenzije agregata sa kojima su čvrsto spregnuti na C++ se čvrsta sprega može iskazati tako što su iteratori prijatelji agregata ako su iteratori prijatelji, agregat ne mora da implementira operacije za efikasni pristup loša strana rešenja je što pri definisanju novih iteratora mora da se menja agregat (da bi se proglasio novi prijatelj) klasa Iterator može da uključi neke zaštićene operacije za direktan pristup agregatu date operacije koriste samo izvedene klase iz klase Iterator Iteratori za objekte Sastava objekti sastava (u hijerarhiji stabla) se često obilaze na razne načine: prefiksnim/infiksnim/postfiksnim redosledom, po širini/dubini stabla nije jednostavno spolja pamtiti poziciju ona treba da uključi putanju od korena zato su spoljašnji iteratori komplikovaniji za agregate tipa sastava unutrašnji iteratori implicitno čuvaju putanju na steku rekurzivno se izvršava zadata operacija NullIterator degenerisani iterator pogodan za obradu graničnih uslova po definiciji, njegova operacija kraj() uvek vraća true pogodan je za obilazak agregata tipa stabla (kao što je Sastav) u svakom koraku obilaska od čvora se traži iterator za obilazak njegove dece svi čvorovi osim listova vraćaju konkretni iterator, a list vraća NullIterator ovim se dobija uniformnost u obilasku strukture stabla Povezani uzorci: Iterator se često primenjuje na rekurzivne strukture kao što je Sastav Polimorfni iteratori se zasnivaju na Fabričkom metodu apstraktna operacija agregata (fabrike) za kreiranje iteratora konkretizuje se u potklasi konkretnog agregata objekat konkretnog agregata stvara objekat konkretne potklase iteratora Iterator interno može da koristi Podsetnik za čuvanje stanja iteracije Elektrotehnički fakultet u Beogradu
117 Projektni uzorci - Dekorater 117 Dekorater Ime i klasifikacija: Dekorater (engl. Decorator) objektni uzorak strukture Namena: dinamički dodaje odgovornosti (mogućnosti) nekom objektu predstavlja fleksibilnu alternativu izvođenju za proširivanje funkcionalnosti Druga imena: Dopuna, Omotač (engl. Wrapper) Motivacija: alati za GUI podržavaju dodavanje ukrasa na razne komponente klizači, okviri sa raznim efektima, jedan način za dodavanje mogućnosti nasleđivanje sa proširivanjem nasleđivanje je nefleksibilno, jer bi se ukrasi birali statički klijent ne može da bira kada da se iscrtava okvir, na primer opasnost od eksplozije broja izvedenih klasa kada se kombinuju ukrasi fleksibilniji pristup je da se komponenta obuhvati drugom komponentom komponenta koja obuhvata osnovnu dodaje ukras (okvir, klizače) proširenja mogu biti specifična stanja ili ponašanja odgovornosti se dodaju pojedinom objektu, a ne celoj klasi komponenta koja obuhvata osnovnu se naziva dekoraterom, omotačem ili dopunom dekorater prosleđuje zahteve klijenta obuhvaćenoj komponenti i može da obavi dodatne akcije kao što je crtanje okvira ili dodavanje klizača za pomeranje dekorater nasleđuje interfejs komponente koju ukrašava prisustvo dekoratera je transparentno za klijente komponente transparentnost omogućava neograničen broj dodataka uvedenih posebnim dekoraterima primer: TekstKomponenta prikazuje tekst u prozoru i nema klizače za H/V pomeranje sadržaja, ni okvir ako su potrebni klizači dodajemo objekat klase DopunaKlizacem koji ih dodaje ako se želi i okvir dodajemo i objekat klase DopunaOkvirom koji crta okvir sledeći dijagram prikazuje objektnu kompoziciju i interakciju: di : DopunaOkvirom 1 : crtaj() 2 : crtaj() dk : DopunaKlizacem tk : TekstKomponenta Projektovanje softvera
118 118 Projektni uzorci - Dekorater sledeći dijagram prikazuje opisanu klasnu strukturu: VizuelnaKomponenta +crtaj() -komponenta 1 1 TekstKomponenta +crtaj() Dopuna +crtaj() crtaj(){komponenta->crtaj();} DopunaKlizacem -pozicijaklizaca +crtaj() +crtajklizac() +pomeriklizac() DopunaOkvirom -debljinaokvira +crtaj() +crtajokvir() crtaj(){ Dopuna::crtaj(); crtajokvir(); } Primenljivost: kada je potrebno dinamički dodavati odgovornosti objektima na transparentan način kada proširenje izvođenjem nije praktično (kada je moguć veliki broj nezavisnih proširenja, pri čemu se ona mogu kombinovati, što vodi eksploziji broja klasa) Struktura: Komponenta +operacija() -komponenta 1 Subjekat +operacija() Dopuna +operacija() KonkretnaDopuna1 -dodatnostanje +operacija() KonkretnaDopuna2 +operacija() +dodatnoponasanje() Učesnici: Komponenta (klasa VizuelnaKomponenta) definiše interfejs za objekte kojima se mogu dinamički dodavati odgovornosti Subjekat (klasa TekstKomponenta) definiše objekat kojem se dodaju odgovornosti Dopuna (klasa Dopuna) održava referencu na objekat klase Komponenta i nasleđuje interfejs klase Komponenta KonkretnaDopunaX (klase DopunaKlizacem, DopunaOkvirom ) dodaje odgovornost objektu klase Komponenta Elektrotehnički fakultet u Beogradu
119 Projektni uzorci - Dekorater 119 Saradnja: objekat KonkretnaDopunaX prosleđuje zahteve obuhvaćenom objektu (klase Komponenta) izvršava dodatne operacije pre i/ili posle prosleđivanja zahteva Posledice prednosti veća fleksibilnost od statičkog nasleđivanja dinamičko dodavanje odgovornosti izbegavanje bogato parametrizovanih klasa visoko u hijerarhiji izbegavanje eksplozije potklasa koje kombinuju ukrase mane identitet dekoratera i dekorisanog objekta su različiti objekti se ne razlikuju po klasi već po načinu povezivanja potencijalan problem kod razumevanja i održavanja sistema nasleđeni atributi komponente, ako postoje (duplikat) dobro je da apstraktna komponenta nema atribute UML notacija: Komponenta VizuelnaKomponenta Uzorak Dekorater Dopuna Dopuna Subjekat TekstKomponenta DopunaKlizacem KonkretnaDopuna DopunaOkvirom Povezani uzorci: Dekorater zadržava interfejs, a Adapter menja interfejs Kompozicija ima sličnu strukturu Dekorater je po strukturi degenerisana Kompozicija (Sastav, Sklop) objekat Dopuna sadrži samo jednu komponentu, a objekat Kompozicija više po nameni je Dekorater sasvim različit, jer dodaje odgovornosti i nije namenjen grupisanju Dekorater i Strategija su alternative za promenu ponašanja objekta Dekorater menja spoljašnjost objekta, a Strategija unutrašnjost Projektovanje softvera
120 120 Projektni uzorci - Strategija Strategija Ime i klasifikacija: Strategija (engl. Strategy) objektni uzorak ponašanja Namena: definiše familiju algoritama, kapsulirajući svaki, i čini ih međusobno zamenjivim omogućava jednostavnu promenu algoritma u vreme izvršenja Drugo ime: Politika (Policy) Motivacija: postoji više algoritama za prelom teksta u linije ugrađivanje tih algoritama u klase koje ih zahtevaju nije dobro iz više razloga: klijenti kojima je potreban prelom postaju kompleksniji i teži za održavanje različiti algoritmi su odgovarajući u različitim trenucima, a teško ih je menjati teško je dodati novi algoritam i varirati postojeći kapsulirani algoritam u klasu se naziva strategija (strategy) Tekst +popravi() +prikazi() -prelamac Prelom +prelomi() prikazi(){ prelamac->prelomi(); } JednostavanPrelom +prelomi() TeXPrelom +prelomi() klasa Tekst je odgovorna za održavanje i ažuriranje preloma prikazanog teksta strategije preloma nisu implementirane u klasi Tekst, već u potklasama Prelom klasa Tekst sadrži referencu na objekat tipa Prelom kada Tekst reformatira tekst on prosleđuje tu odgovornost objektu klase Prelom klijent klase Tekst specificira objekat Prelom instalirajući ga u Tekst Primenljivost: kada se više srodnih klasa razlikuju samo po ponašanju uzorak omogućava konfigurisanje klase jednim od više ponašanja kada su potrebne različite varijante nekog algoritma kada algoritam koristi podatke o kojima klijenti ne treba ništa da znaju izbegava se eksponiranje kompleksnih struktura podataka specifičnih za algoritam potrebno kapsuliranje algoritma i podataka kada klasa konteksta definiše više ponašanja koja se pojavljuju kao grane uslovne naredbe u raznim operacijama grane uslovne naredbe treba kapsulirati u njima odgovarajuće klase strategije Elektrotehnički fakultet u Beogradu
121 Projektni uzorci - Strategija 121 Struktura: Kontekst -strategija Strategija +operacija() KonkretnaStartegija1 +operacija() KonkretnaStrategija2 +operacija() Učesnici: Strategija (klasa Prelom) deklariše zajednički interfejs za sve podržane algoritme KonkretnaStrategijaX (klase JednostavanPrelom, TeXPrelom) implementira konkretan algoritam tako da odgovara interfejsu klase Strategija Konktekst (klasa Tekst) konfigurisan je objektom KonkretnaStrategijaX poseduje referencu na objekat tipa Strategija može da pruži interfejs koji omogućava objektu strategije da pristupi njegovim podacima Saradnja: KonkretnaStrategijaX i Kontekst interaguju da implementiraju izabrani algoritam Kontekst može da pošalje sve podatke koje zahteva algoritam pri pozivu objekta Strategija, ili da pošalje referencu na sebe i tako omogući povratni poziv (callback) Kontekst prosleđuje zahteve svojih klijenata svom objektu Strategija klijenti obično kreiraju i prosleđuju objekte KonkretnaStrategijaX objektu Kontekst kasnije klijenti interaguju samo sa objektom Kontekst UML notacija: Tekst Kontekst Uzorak Strategija Strategija Prelom JednostavanPrelom KonkretnaStrategija TeXPrelom Posledice: Familije srodnih algoritama hijerarhija Strategija klasa definiše familiju algoritama Alternativa izvođenju iz klase Kontekst (kad bi Kontekst implementirao algoritam) Strategije eliminišu potrebu za uslovnim naredbama u klijentskom kodu Izbor implementacija klijent bira da postigne performanse u vremenu/prostoru Klijenti moraju biti svesni različitih strategija - nedostatak Kontekst kreira nepotrebne parametre za neke objekte KonkretnaStrategijaX Povećava se broj objekata u aplikaciji zbog objekata KonkretnaStrategijaX Povezani uzorci: Objekti Strategije često predstavljaju dobre objekte Muve Projektovanje softvera
122 122 Projektni uzorci Šablonski metod Šablonski metod Ime i klasifikacija: Šablonski metod (engl. Template Method) - klasni uzorak ponašanja Namena: definiše skelet nekog algoritma operacije, delegirajući pojedine korake potklasama omogućava potklasama da redefinišu neke korake algoritma bez izmene njegove strukture Motivacija: razmatra se radni okvir za razvoj aplikacije koji obezbeđuje klase Aplikacija i Dokument Dokument RadniOkvir Aplikacija +sacuvaj() +otvori() +zatvori() +citaj() -dokumenti * 1 +dodajdokument() +otvoridokument() +postojilidokument() +napravidokument() +preotvaranja() +citaj() Crtez <<instantiate>> Editor +napravidokument() +preotvaranja() napravidokument(){ return new Crtez(); } klasa Aplikacija je odgovorna za otvaranje postojećih dokumenata dokumenti se čuvaju u nekom eksternom formatu (fajlu) objekt klase Dokument reprezentuje informaciju u dokumentu nakon što je učitana iz fajla aplikacije koje se grade iz radnog okvira mogu da naslede klase Aplikacija i Dokument npr. aplikacija za crtanje definiše potklase Editor i Crtež apstraktna klasa Aplikacija definiše algoritam za otvaranje dokumenta algoritam je implementiran u otvoridokument() operaciji void Aplikacija::otvoriDokument(const char* ime){ if (!postojilidokument(ime))return; Dokument * dokument=napravidokument(); if (dokument){ dodajdokument(dokument); preotvaranja(dokument); dokument->otvori(); dokument->citaj(); } } otvoridokument() definiše korake za otvaranje dokumenta metod otvoridokument() se naziva Šablonski metod šablonski metod definiše algoritam sastavljen od apstraktnih operacija potklase definišu operacije da obezbede konkretno ponašanje definisanjem koraka algoritma šablonski metod fiksira njihov redosled potklase prilagođavaju korake algoritma svojim potrebama Primenljivost: uzorak treba koristiti da se implementiraju invarijantni delovi algoritma jednom, a da se ostave potklasama za implementaciju delovi koji mogu varirati Elektrotehnički fakultet u Beogradu
123 Projektni uzorci Šablonski metod 123 kada zajedničko ponašanje među potklasama treba lokalizovati da se izbegne dupliranje Struktura: ApstraktnaKlasa +operacija1() +operacija2() +operacija3() +sablonskimetod() sablonskimetod(){... operacija1();... operacija2();... operacija3();... } KonkretnaKlasa +operacija1() +operacija2() +operacija3() Učesnici: ApstraktnaKlasa (klasa Aplikacija) implementira šablon (skelet) algoritma koji poziva primitivne operacije deklariše apstraktne primitivne operacije za korake algoritma koje će potklase definisati KonkretnaKlasa (klasa Editor) implementira primitivne operacije koje obavljaju delove algoritma specifične za potklase Saradnja: KonkretnaKlasa implementira varijantne korake algoritma za klasu ApstraktnaKlasa UML notacija: ApstraktnaKlasa Aplikacija Uzorak Sablonski Metod KonkretnaKlasa Editor Posledice: fundamentalna tehnika za reupotrebu koda (zajedničko ponašanje u klasama radnog okvira) vodi invertovanoj kontrolnoj strukturi (holivudski princip: "Ne zovite nas, mi ćemo zvati Vas" roditeljska klasa zove operacije dece) izbegava se rizik da izvedena klasa iz redefinisane operacije ne pozove potrebnu operaciju roditeljske klase mogu se neke primitivne operacije realizovati u apstraktnoj klasi kao rudimentarne hook operacije koje obezbeđuju podrazumevano ponašanje Povezani uzorci: Fabrički Metod (npr. napravidokument) se često poziva iz Šablonskog Metoda Šablonski Metod statički varira deo algoritma, a Strategija dinamički varira ceo algoritam Projektovanje softvera
124 124 Projektni uzorci Adapter Adapter Ime i klasifikacija: Adapter klasni i objektni uzorak strukture (različite realizacije) Namena: konvertuje interfejs klase u drugi interfejs koji klijenti očekuju omogućava da rade zajedno klase koje inače to ne bi mogle, zbog različitog interfejsa Drugo ime: Omotač (engl. Wrapper) dvoznačno, koristi se i za Dekorater Motivacija: ponekad neka korisna klasa iz biblioteke nije upotrebljiva razlog: njen interfejs ne odgovara domenski specifičnom interfejsu kakav očekuje aplikacija razmatra se primer grafičkog editora editor omogućava crtanje i aranžiranje grafičkih elemenata grafički elementi su linije, poligoni, tekst oni se nalaze na slikama i dijagramima ključna apstrakcija grafičkog editora je grafički objekat grafički objekat ima editabilan oblik i može sam da se nacrta interfejs za grafičke objekte je definisan apstraktnom klasom (Grafik) editor definiše potklase klase Grafik za svaki tip grafičkog objekta: Linija, Poligon, Tekst,... klasu Tekst je značajno kompleksnije implementirati od drugih klasa postojeća klasna biblioteka nudi klasu TextView za prikaz i editovanje teksta problem: klasna biblioteka nije imala u vidu klasu Grafik kada je definisan TextView ne mogu se koristiti naslednici Grafik i TextView polimorfno (različiti interfejsi) rešenje: definisati Tekst na način da adaptira interfejs TextView prema Grafik implementirati Tekst pomoću TextView ovo se može uraditi na jedan od dva načina: implementacijom interfejsa Grafik i nasleđivanjem TextView ili agregacijom TextView u Tekst ova dva pristupa odgovaraju klasnoj i objektnoj verziji uzorka Adapter Editor <<interface>> Grafik +dimenzije() TextView +width() +height() Linija +dimenzije() Poligon +dimenzije() Tekst +dimenzije() dimenzije(){ return new Dimenzije(width(), height()); } Elektrotehnički fakultet u Beogradu
125 Projektni uzorci Adapter 125 Editor <<interface>> Grafik +dimenzije() TextView +width() +height() -t Linija +dimenzije() Poligon +dimenzije() Tekst +dimenzije() dimenzije(){ return new Dimenzije(t->width(),t->height()); } Primenljivost: generalno, uzorak treba koristiti kada: želimo da koristimo neku raspoloživu klasu koja nema interfejs kakav nam odgovara želimo da kreiramo reupotrebljivu klasu koja sarađuje sa nepovezanim i nepredviđenim klasama, t.j. klasama čiji interfejsi nisu neophodno kompatibilni objektni adapter treba koristiti kada: treba koristiti nekoliko postojećih potklasa, ali je nepraktično adaptirati njihove interfejse višestrukim izvođenjem iz svake od tih klasa Struktura: klasni adapter: Klijent Cilj +operacija() Adaptirani +specificnaoperacija() operacija(){... specificnaoperacija();... } Adapter +opearacija() objektni adapter: Klijent Cilj +operacija() Adaptirani +specificnaoperacija() operacija(){... adaptirani->specificnaoperacija();... } Adapter +opearacija() 1 -adaptirani Učesnici: Cilj (klasa Grafik) definiše domenski-specifičan interfejs koji koristi klijent Klijent (klasa Editor) sarađuje sa objektima koji poštuju interfejs Cilj Adaptirani (klasa TextView) definiše neki postojeći interfejs koji zahteva adaptiranje Adapter (klasa Tekst) Projektovanje softvera
126 126 Projektni uzorci Adapter adaptira interfejs Adaptirani na interfejs Cilj Saradnja: klijenti pozivaju operacije objekta adaptera, a adapter poziva operacije adaptiranog podobjekta (nasleđivanjem ili agragacijom) da izvrše zahtev UML notacija: Editor Klijent Uzorak Adapter Cilj <<interface>> Grafik Adapter Tekst Adaptirani TextView Posledice: klasni Adapter ima sledeće karakteristike: ne odgovara kada se želi adaptiranje neke klase i svih njenih potklasa dopušta adapteru kao potklasi da redefiniše metode adaptirane natklase, uvodi samo jedan objekat i nema potrebe za dodatnom indirekcijom (pokazivačem) da se stigne do adaptiranog objekta objektni Adapter ima sledeće karakteristike: dopušta jednom adapteru da radi sa hijerarhijom adaptiranih klasa (adapter može da doda funkcionalnost za sve adaptirane klase odjednom) identitet ciljnog objekta i adaptiranog objekta se razlikuje dvosmerni Adapter zadržava i interfejs Adaptirani objekat se može koristiti i kao Cilj i kao Adaptirani postiže se transparentnost za različite klijente Implementacija: u C++ se klasni uzorak reallizuje javnim izvođenjem iz Cilj i privatnim iz Adaptirani ukoliko se ne želi dvosmerni adapter Povezani uzorci: I Dekorater i objektni Adapter prave omotače nekog objekta Dekorater dopunjuje drugi objekat ne menjajući mu interfejs, a Adapter upravo menja interfejs adaptiranog objekta posledica: Dekorater podržava rekurzivne kompozicije, koje nisu moguće sa adapterima Most ima sličnu strukturu objektnom adapteru namena je drugačija Elektrotehnički fakultet u Beogradu
127 Projektni uzorci Stanje 127 Stanje Ime i klasifikacija: Stanje (engl. State) objektni uzorak ponašanja Namena: omogućava objektu da pouzdano menja svoje ponašanje kada se menja njegovo unutrašnje stanje izgleda kao da objekat menja svoju klasu Drugo ime: Objekti za stanja (engl. Objects for States) Motivacija - primer vezan za mrežni TCP protokol TCPConnection +open() +close() +acknowledge() -state TCPState +open() +close() +acknowledge() TCPEstablished +open() +close() +acknowledge() TCPListen +open() +close() +acknowledge() TCPClosed +open() +close() +acknowledge() vezu opisuje TCPConnection klasa moguća stanja veze: Established, Listening, Closed TCPConnection objekat odgovara na zahteve u zavisnosti od stanja npr. efekat open() zahteva se razlikuje u stanju Closed i Established uzorak Stanje opisuje kako ponašanje TCPConnection objekta zavisi od stanja ključna ideja: uvođenje apstraktne klase TCPState klasa predstavlja stanja veze klasa TCPState deklariše zajednički interfejs za klase stanja potklase TCPState realizuju specifično ponašanje pojedinih stanja klasa TCPConnection održava objekat stanja (objekat potklase TCPState) koji reprezentuje tekuće stanje veze klasa TCPConnection prosleđuje objektu stanja zahteve koji su zavisni od tekućeg stanja kada konekcija menja stanje TCPConnection objekat zamenjuje objekat stanja koji koristi Primenljivost: kada ponašanje objekta zavisi od stanja i mora se menjati u vreme izvršavanja kada operacije imaju velike uslovne naredbe sa više grana, čije izvršenje zavisi od stanja objekta često više operacija sadrži istu uslovnu naredbu uzorak Stanje pravi od svake grane posebnu klasu koja određuje ponašanje operacije u datom stanju Projektovanje softvera
128 128 Projektni uzorci Stanje Struktura: Kontekst +zahtev() -stanje -stanje Stanje +obradi() KonkretnoStanjeA +obradi() KonkretnoStanjeB +obradi() Učesnici: Kontekst (klasa TCPConnection) definiše interfejs od interesa za klijente održava primerak KonkretnoStanjeX Stanje (klasa TCPState) definiše interfejs za pojedina stanja kapsulacija ponašanja pridruženog stanju objekta klase Kontekst KonkretnoStanjeX (klase TCPEstablished, TCPListen, TCPClosed) implementira interfejs stanja Posledice: lokalizacija ponašanja specifičnog za stanje i razdvajanje ponašanja u različitim stanjima nova stanja se lako dodaju definisanjem novih potklasa stanja nefleksibilna alternativa su uslovni iskazi rasuti svuda po kodu konteksta veliki uslovni iskazi komplikuju održavanje koda i treba ih izbegavati prelazi između stanja su eksplicitni kada objekat konteksta definiše samostalno svoje stanje vrednostima atributa, onda prelazi između stanja nemaju eksplicitnu reprezentaciju: predstavljaju se dodelama vrednosti atributima objekti stanja štite objekat konteksta od nekonzistentnih stanja prelazi su atomski iz perspektive konteksta prelaz se svodi na prevezivanje jednog pokazivača objekti stanja mogu biti deljeni ako objekti stanja nemaju atribute, već je stanje koje reprezentuju kodirano u njegovom tipu konteksti mogu da dele isti objekat stanja tada su objekti stanja muve bez unutrašnjeg stanja, poseduju samo ponašanje UML notacija: TCPConnection Kontekst Uzorak Stanje Stanje TCPState KonkretnaStanja TCPEstablished TCPListen TCPClosed Povezani uzorci: Muva objašnjava kada se objekti stanja mogu deliti Objekti stanja se često realizuju kao Unikati Elektrotehnički fakultet u Beogradu
129 Projektni uzorci Podsetnik 129 Podsetnik Ime i klasifikacija: Podsetnik (engl. Memento) objektni uzorak ponašanja Namena: bez narušavanja kapsulacije, snima i eksternalizuje unutrašnje stanje nekog objekta omogućava da se objekat kasnije može vratiti u dato stanje Drugo ime: Oznaka (engl. Token) Motivacija: podrška za poništavanje operacija (undo) potrebno je sačuvati unutrašnje stanje objekta, kako bi ga kasnije vratili u to stanje problem: objekat kapsulira svoje stanje i nije dobro da ga eksponira zato menjani objekat treba sam da snimi svoje stanje podsetnik objekat podsetnika ne mora da čuva objekat koji ga je snimio primer: crtanje olovkom u editoru ikona editor obezbeđuje da se nakon iscrtavanja traga isti može restaurirati klasa Editor pokreće operacije klase Olovka i poseduje operaciju ponisti() klasa Olovka poseduje operacije: spusti() otpočinje crtanje pamti se prethodna bitmapa ikone pomeri() pomera olovku ako je olovka spuštena, pikseli na tragu se menjaju pamte se min/max X i Y koordinata podigni() završava crtanje odseca se deo bitmape izvan min/max X i Y koordinata preostali deo bitmape (podsetnik) se daje editoru na čuvanje operacija ponisti() olovci se dostavlja podsetnik da restaurira sliku Olovka Bitmapa -podsetnik Editor Primenljivost: uzorak treba koristiti kada treba napraviti snimak stanja nekog objekta da bi se stanje kasnije restauriralo stanje direktan interfejs za dobijanje stanja bi eksponirao implementacione detalje Projektovanje softvera
130 130 Projektni uzorci Podsetnik Struktura: napravipodsetnik(){ return new Podsetnik(stanje); } restaurirajstanje(p:podsetnik){ stanje=p.dohvatistanje(); } -stanje Subjekat +napravipodsetnik() +restaurirajstanje(p: Podsetnik) Cuvar -podsetnik Podsetnik -stanje +dohvatistanje() +postavistanje() Učesnici: Podsetnik (klasa Bitmapa) čuva unutrašnje stanje Subjekat objekta ne dozvoljava pristup stanju drugim objektima osim objektu Subjekat ima dva interfejsa: Cuvar vidi uski, Subjekat vidi široki Subjekat (klasa Olovka) kreira Podsetnik objekat koji sadrži snimak njegovog tekućeg stanja ima diskreciono pravo da odluči koji deo stanja se čuva koristi Podsetnik objekat da restaurira stanje Cuvar (klasa Editor) odgovoran za bezbedno čuvanje Podsetnik objekta ne ispituje i ne koristi stanje Podsetnik objekta Saradnja: objekti podsetnika su pasivni : Cuvar : Subjekat napravipodsetnik() <<create>> Podsetnik() : Podsetnik postavistanje() restaurirajstanje() dohvatistanje() UML notacija: Olovka Subjekat Uzorak Podsetnik Cuvar Editor Podsetnik Bitmapa Povezani uzorci: u uzorku Komanda - Podsetnik se može koristiti za čuvanje stanja poništivih operacija u uzorku Iterator- Podsetnik se može koristiti za čuvanje podatka o tekućem elementu Elektrotehnički fakultet u Beogradu
131 Projektni uzorci Muva 131 Muva Ime i klasifikacija: Flyweight objektni uzorak strukture Namena: deljenje lakih objekata sa ciljem da se izbegne hiperprodukcija objekata laki objekti su objekti bez stanja ili objekti čije unutrašnje stanje ne zavisi od stanja konteksta stanje konteksta definiše spoljašnje stanje lakog objekta Motivacija: editor teksta organizuje dokument kao hijerarhiju kolona, redova, znakova : Kolona : Red : Red : Red : Znak : Znak : Znak : Znak : Znak : Znak : Znak problem: hiperprodukcija objekata znakova rešenje: svaki objekat znaka reprezentuje pojedini znak, a red u kojem se znak nalazi određuje kontekst pojave znaka red izračunava poziciju pojave znaka u dokumentu znak pamti samo svoj specifični kod : Kolona : Red : Red : Red : Znak : Znak : Znak : Znak Alfabetski skup Primenljivost: ako su ispunjeni svi uslovi aplikacija koristi veliki broj objekata koji troše značajan memorijski prostor veći deo stanja objekta može da se prebaci u spoljašnje stanje kada se ukloni spoljašnje stanje mnoge grupe objekata mogu da se zamene deljenim objektima sa unutrašnjim stanjem identitet objekta nije bitan - testovi identiteta vraćaju true za sve njegove pojave u kontekstu Struktura: dohvatimuvu(kljuc){ if (muva=muve[kljuc]){ return muva; } else { muva=new KonkretnaMuva(); muve.dodaj(muva); return muva; } } FabrikaMuva +dohvatimuvu(kljuc) Klijent Muva -muve +operacija(spoljasnjestanje) KonkretnaMuva NedeljenaKonkretnaMuva -unutrasnjestanje -stanjezavisnoodkonteksta +operacija(spoljasnjestanje) +operacija(spoljasnjestanje) Učesnici: Muva (klasa GrafičkiElement) deklariše interfejs kroz koji muva prima spoljašnje stanje Projektovanje softvera
132 132 Projektni uzorci Muva KonkretnaMuva (klasa Znak) implementira interfejs muve i dodaje atribute unutrašnjeg stanja objekti moraju biti deljivi, ne smeju da zavise od stanja konteksta NedeljenaKonkretnaMuva (klase Kolona, Red) interfejs muve dozvoljava deljenje, ali ga ne zahteva u hijerarhiji objekata muva neki objekti mogu biti nedeljivi oni čuvaju i atribute spoljašnjeg stanja (zavisnog od konteksta) oni nisu listovi u objektnoj hijerarhiji (deljive muve su listovi) FabrikaMuva (klasa FabrikaZnakova) kreira i upravlja muvama obezbeđuje propisno deljenje muva kada klijent zahteva muvu, fabrika dohvata postojeću ili kreira novu, ako data ne postoji Klijent (klasa Editor) održava reference na dodeljene muve smešta ili izračunava spoljašnje stanje objekata muva Saradnja: klijenti pri pozivu operacija prenose spoljašnje stanje muvi klijenti ne smeju da prave objekte muve direktno, već preko fabrike muva UML notacija: Editor Klijent Uzorak Muva KonkretnaMuva Znak FabrikaMuva Muva NedeljeneKonkretneMuve FabrikaZnakova GrafickiElement Kolona Red Posledice: potencijalni troškovi pronaženja i izračunavanja spoljašnjeg stanja ušteda u prostoru zavisi od: smanjenja broja objekata odnosa unutrašnjeg i spoljašnjeg stanja po objektu da li se spoljašnje stanje čuva ili izračunava Povezani uzorci: često se kombinuje sa uzorkom Kompozicija (Sastav, Sklop) za formiranje acikličnog grafa sa deljenim čvorovima u listovima često se objekti uzoraka Stanje i Strategija prave kao muve Elektrotehnički fakultet u Beogradu
133 Projektni uzorci Fabrički metod 133 Fabrički metod Ime i klasifikacija: Fabrički (proizvodni) Metod (Factory Method) klasni uzorak kreiranja Namena: uzorak dopušta klasi da delegira stvaranje objekata potklasi definiše interfejs za kreiranje objekata, ali ostavlja potklasama da odluče čije objekte kreiraju Drugo ime: Virtuelni Konstruktor (Virtual Constructor) Motivacija: razmatra se radni okvir (framework) za aplikacije koje mogu da rade sa više dokumenata ključne apstrakcije su Aplikacija i Dokument obe klase su apstraktne i klijenti treba da naprave potklase da ostvare specifične realizacije Dokument +otvori() +sacuvaj() +zatvori() -dokumenti * 1 Aplikacija +novidokument() +otvoridokument() +napravidokument() novidokument(){ Dokument dokument=napravidokument; dokumenti.dodaj(dokument); dokument.otvori(); } MojDokument <<instantiate>> MojaAplikacija +npravidokument() napravidokument(){ return new MojDokument(); } klasa aplikacije je odgovorna za upravljanje dokumentima ona kreira dokumente kada korisnik zahteva Otvori ili Novi iz menija ona zna samo kada će kreirati dokument ona ne zna konkretan tip dokumenta koji treba kreirati radni okvir (framework) skup opštih klijentskih klasa korisnik projektuje serverske (klijentske pozivaju serverske) radni okvir mora da stvara objekat klase dokumenta on poznaje samo apstraktnu klasu dokumenta konkretna potklasa aplikacije redefiniše apstraktni metod klase aplikacije iz radnog okvira za kreiranje specifičnih dokumenta za datu aplikaciju metod za kreiranje dokumenata je fabrički metod (odgovoran je za proizvodnju objekata konkretnog dokumenata) Primenljivost: uzorak treba koristiti kada: klasa ne može da anticipira klasu objekata koje mora da kreira klasa želi da njene potklase odrede objekte koje će ona kreirati Projektovanje softvera
134 134 Projektni uzorci Fabrički metod Struktura: Proizvod KonkretniProizvod <<instantiate>> Fabrika +operacija() +fabrickimetod() KonkretnaFabrika +fabrickimetod() operacija(){... fabrickimetod();... } fabrickimetod(){ return new KonkretniProizvod(); } Učesnici: Proizvod (klasa Dokument) definiše interfejs objekata koje fabrickimetod() kreira KonkretanProizvod (klasa MojDokument) implemetira interfejs Proizvod Fabrika (klasa Aplikacija) deklariše fabrickimetod() koji vraća objekat tipa Proizvod može da definiše podrazumevanu implementaciju za fabrickimetod(), koji vraća podrazumevani objekat tipa KonkretniProizvod iz neke operacije poziva fabrickimetod() da kreira objekat Proizvod KonkretnaFabrika (klasa MojaAplikacija) redefiniše fabrickimetod() tako da vrati objekat KonkretanProizvod Saradnja: Fabrika zavisi od svojih potklasa koje definišu fabrickimetod() tako da on vraća odgovarajući objekat KonkretanProizvod UML notacija: Uzorak Fabricki Metod Proizvod KonkretanProizvod Fabrika KonkretnaFabrika Dokument MojDokument Aplikacija MojaAplikacija Posledice: uzorak eliminiše potrebu da se klijentski kod vezuje za aplikativno-specifične klase klijent radi preko interfejsa Proizvod, pa može da radi sa bilo kakvim klasama KonkretanProizvod Fabrički metod daje potklasama mogućnost da obezbede proširenu verziju nekog objekta Povezani uzorci: Fabrički Metod se obično poziva iz Šablonskog Metoda Prototip ne zahteva izvođenje potklase iz klase Fabrika on zahteva klon() operaciju u klasi Proizvod (Prototip), koju poziva Fabrika Fabrički Metod ne zahteva takvu operaciju Apstraktna Fabrika se često implementira pomoću Fabričkog metoda Elektrotehnički fakultet u Beogradu
135 Projektni uzorci Apstraktna fabrika 135 Apstraktna fabrika Ime i klasifikacija: Apstraktna fabrika (eng. Abstract Factory) objektni uzorak kreiranja Namena: obezbeđuje interfejs za kreiranje familija povezanih ili zavisnih objekata (proizvoda) bez specificiranja konkretnih klasa te familije Drugo ime: Kit Motivacija: razmatra se klasna biblioteka za realizaciju korisničkog interfejsa biblioteka podržava više standarda izgleda-i-osećaja (look-and-feel) primeri su Motif i Presentation Manager (PM) različit izgled i osećaj definiše različite pojave komponenata (widget) primeri su prozori (windows), klizači (scroll bars) i dugmad (buttons) aplikacija treba da bude portabilna između standarda izgleda i osećaja ne smeju se fiksno kodirati stvari izgleda i osećaja ne treba kreirati objekte specifičnog izgleda svuda po aplikaciji rešenje problema - definiše se apstraktna klasa FabrikaKomponenata klasa predstavlja apstrakciju fabrike familije komponenata klasa definiše interfejs za kreiranje svih vrsta komponenata od interesa za svaku vrstu komponente postoji apstraktan metod za kreiranje FabrikaKomponenata +napraviprozor() +napravidugme() 1 -fabrika Prozor * GUIKlijent <<instantiate>> MotifProzor PMProzor PMFabrika MotifFabrika +napraviprozor() +napravidugme() +napraviprozor() +napravidugme() <<instantiate>> Dugme <<instantiate>> <<instantiate>> MotifDugme PMDugme potrebna je po jedna izvedena klasa stvarne fabrike za svaki standard izgleda i osećaja one implementiraju operacije kreiranja koje je propisala apstraktna fabrika operacije kreiranja poštuju specifičan standard izgleda i osećaja potrebna je po jedna apstraktna klasa za svaku vrstu komponenata konkretne potklase implementiraju komponentu za jedan standard izgleda Projektovanje softvera
136 136 Projektni uzorci Apstraktna fabrika klijenti metodima apstraktne fabrike proizvode objekte komponenata klijenti nisu svesni konkretne fabrike koju koriste za proizvodnju komponenata ostaju nezavisni od izgleda i osećaja klijenti moraju da poštuju interfejs koji definiše apstraktna fabrika samo pri kreiranju objekta konkretne fabrike klijent je svesan njegovog tipa osim apstraktne fabrike klijenti vide i apstraktne komponente (neopterećene specifičnostima izgleda i osećaja) Primenljivost: uzorak treba koristiti kada sistem treba da bude konfigurisan jednom od više familija proizvoda sistem treba da bude nezavisan od načina kreiranja proizvoda predstavljanja proizvoda potrebno je forsirati da proizvodi iz familije budu korišćeni zajedno potrebno je ponuditi klasnu biblioteku proizvoda otkrivajući samo interfejse, ne implementacije Struktura: 1 ApstraktnaFabrika +napraviproizvoda() +napraviproizvodb() ApstraktniProizvodA Klijent KonkretnaFabrika1 +napravi ProizvodA() +napraviproizvodb() <<instantiate>> KonkretniProizvodA1 <<instantiate>> KonkretniiProizvodA2 <<instantiate>> KonkretnaFabrika2 +napraviproizvoda() +napraviproizvodb() ApstraktniProizvodB KonkretniProizvodB1 KonkretniProizvodB2 <<instantiate>> Učesnici: ApstraktnaFabrika (klasa FabrikaKomponenata) deklariše interfejs za operacije koje kreiraju objekte apstraktnih proizvoda KonkretnaFabrika (klase PMFabrika i MotifFabrika) implementira operacije koje kreiraju objekte konkretnih proizvoda ApstraktniProizvodX (klase Prozor i Dugme) deklariše interfejs za određeni tip objekta proizvoda KonkretanProizvod (klase PMProzor, PMDugme, MotifProzor, MotifDugme) implementira interfejs apstraktnog proizvoda definiše objekat proizvoda koji će biti kreiran pomoću odgovarajuće konkretne fabrike Klijent (klasa GUIKlijent) koristi samo interfejse deklarisane pomoću apstraktne fabrike i apstraktnog proizvoda Saradnja: apstraktna fabrika odlaže kreiranje proizvoda do njenih potklasa konkretnih fabrika normalno treba kreirati samo po jednu instancu konkretne fabrike Elektrotehnički fakultet u Beogradu
137 Projektni uzorci Apstraktna fabrika 137 UML notacija: MotifProzor MotifDugme PMProzor PMDugme FabrikaKomponenata ApstraktnaFabrika KonkretanProizvod Uzorak Apstraktna Fabrika Klijent GUIKlijent MotifFabrika KonkretnaFabrika Proizvod PMFabrika Prozor Dugme Posledice: Izolacija konkretnih klasa proizvoda klijent manipuliše proizvodima kroz njihove apstraktne interfejse klijent ne koristi imena konkretnih klasa proizvoda (čak ni za njihovo stvaranje) Olakšava izmenu familije proizvoda klasa konkretne fabrike se pojavljuje samo jednom u aplikaciji tamo gde se pravi njen objekat aplikacija može koristiti različite konfiguracije proizvoda menjanjem konkretne fabrike pošto apstraktna fabrika kreira kompletnu familiju, cela familija se menja odjednom Unapređuje konzistenciju među proizvodima aplikacija koristi objekte proizvoda samo iz jedne familije u jednom trenutku Problem: podrška novoj vrsti proizvoda nije jednostavna razlog je taj što apstraktna fabrika fiksira skup proizvoda koji se mogu kreirati podrška novog proizvoda zahteva proširenje apstraktne fabrike i svih potklasa Povezani uzorci: Apstraktna fabrika se često implementira sa Proizvodnim metodom ili koristeći Prototip konkretne fabrike mogu realizovati proizvodne metode (uobičajeno), ali mogu se i paramerizovati prototipskim objektima proizvoda i praviti njihove kolonove konkretna fabrika je često Unikat konkretna fabrika predstavlja konkretnu Strategiju kreiranja familije proizvoda Projektovanje softvera
138 138 Projektni uzorci Fasada Fasada Ime i klasifikacija: Fasada (engl. Facade) objektni uzorak strukture Namena: pružanje jednistvenog interfejsa podsistema definisanje interfejsa višeg nivoa da bi se podsistem lakše koristio Motivacija: strukturiranje sistema u podsisteme pojednostavljuje proces projektvanja (i održavanja) cilj je da se međuzavisnosti podsistema svedu na minimum uvođenje objekta fasada ide u pravcu ovog cilja fasada nudi uprošćeni interfejs za opšte upotrebe podsistema fasada ne brani direktan pristup klasama unutar podsistema primer: podsistem prevodioca: klase: Scanner, Parser, ProgramNode, BytecodeStream, klasa Compiler ostvaruje opštenamenski interfejs podsistemu ona predstavlja fasadu podsistema prevodioca ona većini klijenata pruža dovoljan servis (kompletno prevođenje) - olakšava se posao većini programera ona ne skriva ostale klase koje pružaju servise nižeg nivoa ne sprečava se pristup pojedinim klasama unutar podsistema pristup drugim klasama potreban je samo specijalnim aplikacijama Prevodilac klase podsistema +compile() prevodioca <<instantiate>> Stream Scanner <<instantiate>> Token BytecodeStream CodeGenerator <<instantiate>> <<instantiate>> Parser <<instantiate>> Symbol <<instantiate>> ProgramNodeBuilder ProgramNode StackMachineCodeGenerator RISCCodeGenerator StatementNode ExpressionNode VariableNode Primenljivost: uzorak treba koristiti kada potrebno je dati jednostavan interfejs složenom podsistemu složenost podsistema raste tokom razvoja primena uzoraka pospešuje porast broja manjih klasa podsistem postaje teži za upotrebu klijentima većini klijenata je dovoljan interfejs podsistemu preko fasade postoje brojne zavisnosti između klijenata i klasa podsistema fasada razdvaja podsistem od klijenata i drugih podsistema postoji potreba da se rasloje podsistemi fasada se može koristiti za ulaznu tačku svakog nivoa podsistema Elektrotehnički fakultet u Beogradu
139 Projektni uzorci Fasada 139 Struktura: Podsistem Fasada Učesnici: Fasada (klasa Compiler) zna koje klase podsistema su odgovorne za koji zahtev delegira zahteve klijenata odgovarajućim objektima podsistema klase podsistema implementiraju funkcionalnosti izvršavaju zahteve fasade ne znaju ništa o fasadi Saradnja: klijenti šalju zahteve fasadi fasada prosleđuje zahteve objektima podistema Posledice: smanjivanje broja objekata od kojih klijenti zavise olakšava korišćenje podsistema slabo vezivanje između podistema i klijenata variranje komponenata podsistema bez uticaja na klijenta smanjivanje potrebe ponovnog prevođenja klijenta kada se promeni nešto u podsistemu povećavanje portabilnosti (pod)sistema izmene u podsistemu zbog prenosa ne utiču na druge podsisteme uzorak ne sprečava korišćenje ostalih klasa podsistema UML notacija: Prevodilac Fasada Uzorak Fasada Podsistem ImplementacijaPrevodioca Povezani uzorci: Apstraktna fabrika se koristi uz Fasadu kao interfejs za kreiranje objekata podsistema potreban je samo jedan objekat Fasade, pa se relizuje kao Singleton Posrednik je sličan Fasadi samo što on apstrahuje proizvoljne komunikacije između objekata (podsistema), a Fasada apstrahuje interfejs podsistema objekat Posrednik može da dodaje funkcionalnost objekti podsistema znaju za objekat Posrednik objekti podsistema ne znaju za objekat Fasada Projektovanje softvera
140 140 Projektni uzorci Posrednik Posrednik Ime i klasifikacija: Posrednik (engl. Mediator) objektni uzorak ponašanja Namena: definiše objekat koji kapsulira interakciju skupa objekata omogućava slabo sprezanje skupa objekata uklanja potrebu uzajamnog referisanja omogućava da im se interakcija menja nezavisno Motivacija: OO projektovanje podstiče distribuciju odgovornosti među objektima posledica je da raste broj objekata koji se lakše održavaju međutim, raste i broj veza među objektima što otežava održavanje ako postoji mnogo zavisnosti među objektima sistem deluje kao monolitan da bi se promenilo ponašanje sistema mora da se menja više klasa primer: implementacija dijaloga u GUI (dugmad, polja za unos, liste,...) međuzavisnost komponenti (npr. onemogućeno dugme dok je polje prazno) rešenje: posrednik (medijator) kapsulira ponašanje skupa objekata odgovoran za kontrolu i koordinaciju interakcije između objekata objekti se ne poznaju uzajamno poznaju samo objekat posrednika smanjuje se broj veza Motivacija (nastavak): kada se selektuje stavka u listi potrebno je upisati je u tekst-polje brigu preuzima sam dijalog na kojem su lista i tekst-polje klijent lista upravljacfontdijaloga dugme tekstpolje klijent upravljacfontdijaloga lista tekstpolje prikazidijalog() promenjena() dohvatiselekciju() postavitekst() klasni dijagram Elektrotehnički fakultet u Beogradu
141 Projektni uzorci Posrednik 141 UpravljacDijaloga upravljac->promenjenakomponenta(this) +prikazidijalog() +kreirajkomponente() 1 * +promenjenakomponenta(: Komponenta) -upravljac Komponenta +promenjena() UpravljacFontDijaloga +kreirajkomponente() +promenjenakomponenta() 1 1 -lista Lista TekstPolje -tekstpolje Primenljivost: kada skup objekata komunicira na dobro definisan ali složen način; međuzavisnosti nisu strukturirane i teško se shvataju kada je reupotreba objekata teška zato što referišu i komuniciraju sa mnogim drugim objektima kada treba omogućiti prilagođavanje ponašanja distribuiranog na više klasa, a da se izbegne mnogo potklasa Struktura: Posrednik 1 * +posrednik Kolega KonkretanPosrednik 1 KonkretanKolega1 KonkretanKolega2 1 Učesnici: Posrednik (klasa UpravljacDijaloga) definiše interfejs za komunikaciju sa objektima kolega KonkretanPosrednik (klasa UpravljacFontDijalog) implementira spregnuto ponašanje koordiniranjem objekata kolega poznaje i održava kolege Kolega (klasa Komponenta) interfejs za konkretne kolege poznaje samo klasu Posrednik KonkretanKolegaX (klase Lista i TekstPolje) nasleđuje poznavanje klase Posrednik Saradnja: kolege šalju i primaju zahteve od objekta posrednika Posrednik implementira kooperativno ponašanje rutirajući zahteve između odgovarajućih kolega Projektovanje softvera
142 142 Projektni uzorci Posrednik UML notacija: Posrednik UpravljacDijaloga Uzorak Posrednik KonkretanKolega Lista KonkretanPosrednik UpravljacFontDijaloga Kolega Komponenta Povezani uzorci: Fasada ima sličnosti sa Posrednikom (jedna klasa prema podsistemu) ali se razlikuje od uzorka Posrednik, jer ona: apstrahuje podsistem objekata da obezbedi pogodniji interfejs pri tome koristi jednosmeran protokol samo se objekat fasade obraća objektima podsistema posrednik koristi dvosmerni protokol u komunikaciji sa kolegama Kolege mogu da komuniciraju sa posrednikom korišćenjem Posmatrača Elektrotehnički fakultet u Beogradu
143 Projektni uzorci Zastupnik 143 Zastupnik Ime i klasifikacija: Zastupnik (engl. Proxy) - objektni uzorak strukture Namena: realizuje zamenu (surogat) drugog objekta koji: kontroliše pristup originalnom objektu odlaže punu cene kreiranja i inicijalizacije originala do trenutka kada je ovaj zaista potreban Drugo ime: Predstavnik, Zamena, Surogat (engl. Surogate) Motivacija: problem: editor dokumenata koji mogu da sadrže grafičke objekte u sebi neki grafički objekti kakve su velike rasterske slike su skupi za kreiranje sa druge strane, otvaranje dokumenta treba da bude brzo pri otvaranju dokumenta treba izbeći kreiranje svih slika koje dokument sadrži sliku treba otvarati tek kad postaje vidljiva (stvarno potrebna), na zahtev činjenicu da se slika kreira tek na zahtev sakrivamo, da se ne bi komplikovao editor ova optimizacija ne treba da utiče npr. na kod za prikazivanje ili formatiranje dokumenta rešenje: u dokument stavljamo umesto realne slike poseban proksi-objekat koji je zamenjuje proksi se ponaša kao slika i vodi brigu o stvaranju objekta slike kad je baš on potreban u slučaju da su slike u posebnim fajlovima, proksi čuva ime fajla kao referencu na sliku proksi slike takođe čuva dimenzije slike svest o dimenzijama čini da proksi daje taj podatak formateru i bez učitavanja slike proksi slike stvara objekat slike tek kada editor od njega zahteva da se slika prikaže naredne zahteve proksi prosleđuje slici, t.j. proksi čuva referencu na objekat slike GrafickiObjekat EditorDokumenata Slika -implementacijaslike -visina -sirina +crtaj() +dimenzije() +ucitaj() +sacuvaj() 1 * +crtaj() +dimenzije() +ucitaj() +sacuvaj() <<instantiate>> ZastupnikSlike -slika 1 1 -imefajla -visina -sirina +crtaj() +dimenzije() +ucitaj() +sacuvaj() crtaj(){ if (slika==null) slika=ucitaj(imefajla); slika.crtaj(); } dimenzije(){ if (slika==null) return Dimenzije(visina, sirina); else return slika.dimenzije(); } EditorDokumenata pristupa ugrađenim slikama kroz interfejs apstraktne klase GrafickiObjekat ZastupnikSlike je klasa za slike koje se kreiraju na zahtev ona održava ime fajla kao referencu na sliku koja je na disku ime fajla se prosleđuje kao argument konstruktora ona čuva i dimenzije slike i referencu na objekat stvarne slike referenca na objekat stvarne slike nije valjana dok se objekat slike ne kreira operacija crtaj() proverava da li je objekat slike kreiran pre nego što mu prosledi zahtev Projektovanje softvera
144 144 Projektni uzorci Zastupnik operacija dimenzije() prosleđuje zahtev objektu slike, ako je ovaj postoji ako slika nije kreirana dimenzije() vraća sačuvane dimenzije slike Primenljivost: uzorak je primenljiv kada postoji potreba za sofističnom referencom na objekat Vrste zastupnika prema primeni: udaljeni zastupnik (remote proxy) obezbeđuje lokalnog predstavnika objekta koji se nalazi u drugom adresnom prostoru Colpien ovu vrstu zastupnika naziva "ambasadorom" virtuelni zastupnik (virtual proxy) kreira relativno skup objekat na zahtev (ZastupnikSlike je primer) zaštitni zastupnik (protection proxy) kontroliše pravo pristupa originalnom objektu pametni pokazivač (smart reference) zamena za obični pokazivač, obavlja dodatne akcije prilikom pristupa tipične primene: brojanje referenci na objekat, da bi se ovaj dealocirao automatski kad je broj 0 punjenje perzistentnog objekta u memoriju pri prvom referisanju provera da li je objekat zaključan, t.j. da ga neko drugi tada ne menja Struktura: Klijent -sub Subjekat +zahtev() Original 1 1 Zastupnik +zahtev() -original +zahtev() zahtev(){ if (! potrebanoriginal) {... } else{ if (original == null) original=new Original(); original.zahtev() } } Učesnici: Subjekat (klasa GrafickiObjekat) zajednički interfejs za Original i Zastupnik, da se Zastupnik može koristiti kao Original Zastupnik (klasa ZastupnikSlike) čuva referencu za pristup originalu realizuje interfejs subjekta tako da može predstavljati zamenu za original kontroliše pristup originalu, može biti odgovoran za njegovo kreiranje/uništavanje u zavisnosti od tipa zastupnika: Udaljeni je odgovoran za slanje zahteva i argumenata u drugi adresni prostor Virtuelni može keširati dodatne informacije o originalu da odloži pristup Zaštitni proverava da li pozivalac ima pristupnu dozvolu za dati zahtev Original (klasa Slika) realni subjekat koji je reprezentovan zastupnikom Elektrotehnički fakultet u Beogradu
145 Projektni uzorci Zastupnik 145 Posledice: uzorak Zastupnik uvodi jedan nivo indirekcije u pristupu objektu optimizacija koju zastupnik može da sakrije od klijenta je copy-on-write kopiranje velikih i komplikovanih objekata može biti skupa operacija ako se kopija nikad ne modifikuje, nije neophodno platiti cenu korišćenjem zastupnika da odloži kopiranje, cena se plaća samo ako se objekat modifikuje zahtev za kopiranje rezultuje samo u inkrementiranju broja referenci na subjekat kada klijent zahteva operaciju koja modifikuje original, tada zastupnik stvarno kopira original dekrementira broj referenci na original kada broj referenci padne na 0 original se uništava UML notacija: EditorDokumenata Klijent Uzorak Zastupnik Zastupnik ZastupnikSlike Subjekat Original GrafickiObjekat Slika Povezani uzorci: Adapter obezbeđuje različit interfejs objektu koji adaptira, dok Zastupnik obezbeđuje isti interfejs, kao i Dekorater Dekorater može imati sličnu implementaciju kao Zastupnik, ali ima različitu namenu: Dekorater dodaje jednu ili više odgovornosti objektu, a Zastupnik kontroliše pristup objektu Zaštitni zastupnik može biti implementiran baš kao Dekorater Projektovanje softvera
146 146 Projektni uzorci Most Most Ime i klasifikacija: Most (eng. Bridge) objektni uzorak strukture Namena: razdvaja apstrakciju od njene implementacije da bi se mogle nezavisno menjati Drugo ime: Ručka/Telo (Handle/Body) Motivacija: problem: postoji više implementacija za jednu apstrakciju tradicionalno OO rešenje: apstraktna klasa i izvedene klase rešenje nije dovoljno fleksibilno nasleđivanje čvrsto vezuje implementaciju za apstrakciju teško se nezavisno menjaju, proširuju i ponovo koriste primer: apstrakcija Prozor u alatima za GUI potrebno pisati aplikacije za razne prozorske sisteme npr. X Window System i IBM Presentation Manager tradicionalno rešenje: Prozor XWProzor PMProzor problem (1): uvodi se nova apstrakcija - prozor za dijalog Dijalog da bi se apstrakcija implementirala na obe platforme dobija se: Prozor XWProzor PMProzor Dijalog XWDijalog PMDijalog za svaku novu vrstu prozora moraju se definisati po dve klase podrška za novu platformu po jedna klasa za svaku vrstu prozora problem (2): klijentski kod postaje zavisan od platforme kad god klijent pravi prozor pravi primerak konkretne klase sa specifičnom implementacijom za datu platformu otežano prenošenje klijentskog koda na druge platforme klijenti ne bi trebalo da se vezuju za konkretne implementacije oni treba da vode računa samo o različitim apstrakcijama prozora samo bi implementacija prozora smela da zavisi od platforme rešenje problema: uzorak Most apstrakcija prozora i njegova implementacija su dva odvojena korena odgovarajućih hijerarhija klasa uspostavlja se most između apstrakcije i implementacije tako da se one mogu nezavisno menjati Elektrotehnički fakultet u Beogradu
147 Projektni uzorci Most 147 crtajpravougaonik(){ imp.crtajliniju(); imp.crtajliniju(); imp.crtajliniju(); imp.ctajliniju(); } Prozor +crtajtekst() +crtajprvougaonik() most ProzorImp 1 1 -imp +crtajtekst() +crtajliniju() crtajtekst(){ imp.crtajtekst(); } Dijalog +crtajokvir() GlavniProzor +crtajtrakumenija() XWProzorImp +crtajtekst() +crtajliniju() PMProzorImp +crtajtekst() +crtajliniju() crtajpravougaonik(); crtajpravougaonik(); crtajtekst(){ xcrtajtekst(); } crtajliniju(){ xcrtajliniju(); } sve operacije klase Prozor se implementiraju primenom apstraktnih operacija klase ProzorImp Primenljivost: uzorak treba koristiti kada treba izbeći trajno vezivanje apstrakcije i njene implementacije npr., ako je potrebno implementaciju menjati u vreme izvršenja i apstrakciji i implementaciji je potrebno proširivanje kroz potklase most omogućava kombinovanje različitih apstrakcija i implementacija promena u implementaciji apstrakcije ne sme da utiče na klijente u jeziku C++: potpuno sakrivanje implementacije klase od klijenta definicije klasa su u h fajlovima delimično se otkriva implementacija postoji opasnost od prevelikog broja klasa npr. u primeru se vidi kvadratni rast (broj sistema x broj tipova prozora) kada se želi da istu implementaciju deli više objekata a da to bude sakriveno od klijenta (eventualno uz brojanje referenci) Struktura: Klijent Apstrakcija +operacija() 1 1 Implementacija -imp +operacijaimp() imp.operacijaimp(); FinijaApstrakcija KonkretnaImpA +operacijaimp() KonkretnaImpB +operacijaimp() Projektovanje softvera
148 148 Projektni uzorci Most Učesnici: Apstrakcija (klasa Prozor) definiše interfejs apstrakcije održava referencu na objekat implementacije FinijaApstrakcija (klasa Dijalog) proširuje interfejs apstrakcije Implementacija (klasa ProzorImp) definiše interfejs klasa implement. interfejs ne mora da liči na interfejs apstrakcije KonkretnaImpX (klase XWProzorImp, PMProzorImp) implementira interfejs implement. definiše konkretnu implementaciju Saradnja: Apstrakcija prosleđuje klijentske zahteve objektu Implementacija Posledice: razdvajanje interfejsa od implementacije implementacija nije trajno vezana za apstrakciju, može da se konfiguriše dinamički eliminisane su zavisnosti apstrakcije od implementacije u vreme prevođenja prevođenje klasa implementacije ne zahteva prevođenje klasa apstrakcije bitno kada se mora obezbediti kompatibilnost verzija biblioteke klasa bolje mogućnosti proširivanja hijerarhije apstrakcija i implementacija se mogu nezavisno proširivati skrivanje detalja implementacije od klijenta klijent ne vidi niša od implementacije, vidi samo apstrakciju UML notacija: Prozor Apstrakcija Most Implementacija ProzorImp FinijaApstrakcija KonkretnaImp Dijalog XWProzor Povezani uzorci: Apstraktna fabrika može da kreira i konfiguriše Most Adapter i Most prilagođavaju klijentu interfejs neke implementacije Adapter se obično projektuje retroaktivno Most se obično projektuje unapred Elektrotehnički fakultet u Beogradu
149 Projektni uzorci Komanda 149 Komanda Ime i klasifikacija: Komanda (engl. Command) objektni uzorak ponašanja Namena: kapsulira zahtev u jedan objekat, omogućavajući: da se klijenti parametrizuju različitim zahtevima, da se zahtevi isporučuju kroz red čekanja, da se pravi dnevnik (log) zahteva i da se efekti izvršenog zahteva ponište (undo) Drugo ime: Akcija, Transakcija (engl. Action, Transaction) Motivacija: nekad je potrebno izdati zahtev da se izvrši neka operacija bez znanja o samoj zahtevanoj operaciji i izvršiocu (primaocu zahteva) npr. GUI biblioteke sadrže objekte kao što su dugmad ili meniji ovi objekti izvršavaju zahteve koji su posledica akcije korisnika biblioteka klasa ne može da realizuje adekvatne operacije u ovim objektima samo ciljna aplikacija zna šta je specifična operacija za neko dugme projektant biblioteke ne zna ništa o operaciji ni o primaocu zahteva uzorak Komanda: dopušta objektima biblioteke da zahtevaju da nepoznate operacije budu izvršene od nepoznatih objekata aplikacije to postiže smeštajući zahteve za operacijama u posebne objekte objekat sa zahtevom se može zapamtiti ili proslediti drugom objektu -aplikacija Aplikacija +dodajdok() +tekucidok() -aplikacija Meni 1 * MeniStavka +aktivacija() Komanda -komanda 1 1 +izvrsi() -dokumenti * Dokument +otvori() +zatvori() +kopiraj() KomandaOtvori +izvrsi() +pitajime() izvrsi(){ ime=pitajime(); dok=new Dokument(ime); aplikacija.dodajdok(dok); dok.otvori(); } KomandaKopiraj +izvrsi() izvrsi(){ dok=aplikacija.tekucidok(); dok.kopiraj(); } ključna apstrakcija uzorka je klasa Komanda deklariše interfejs za izvršenje operacija u najjednostavnijoj formi, interfejs se sastoji od apstraktne operacije izvrsi() potklase klase Komanda specificiraju par (primalac komande, operacija) primalac zna kako da izvrši akcije koje su potrebne za ispunjenje zahteva meniji se lako mogu implementirati koristeći objekte potklasa klase Komanda Projektovanje softvera
150 150 Projektni uzorci Komanda uzorak raspreže objekat pozivaoca operacije od onog ko zna kako da je izvrši objekat koji izdaje komandu treba da zna samo kako se ona izdaje on ne treba da zna ništa o tome kako se izvršava i ko je izvršava komande se mogu menjati dinamički u konkretnom primeru menija, ovo omogućava kontekstno zavisne menije jednostavna je implementacija skriptova (složenih komandi - sekvenci operacija) Primenljivost: kada treba parametrizovati objekte akcijom koju treba da obave zamena za funkciju povratnog poziva (callback) u tradicionalnim jezicima kada treba specificirati, stavljaiti u red čekanja i izvršavati zahteve u različitim trenucima objekat komande može imati različit životni vek od onog ko izdaje zahtev objekat komande se može prepustiti drugom procesu (promena adresnog prostora), ako se primalac može adresirati univerzalno kada treba podržati undo izvrsi() operacija može sačuvati u samom objektu stanje za rastauraciju interfejs treba da sadrži i ponisti() operaciju koja restaurira stanje neograničen nivo undo i redo se postiže smeštanjem objekata izvršenih komandi u listu, odnosno prolaskom kroz listu unazad i unapred kada treba podržati recovery potrebno je snimati promene da bi se one mogle ponovo uraditi u interfejs klase Komanda se dodaju operacije za perzistenciju dnevnika promena oporavak se postiže učitavanjem dnevnika sa diska i ponovnim izvršavanjem izvrsi() kada treba podržati transakcije transakcije su složene operacije sastavljene od primitivnih transakcije kapsuliraju skup promena podataka Struktura: Pokretac Komanda -komanda +izvrsi() Klijent KonkretnaKomanda Primalac -izvrsilac -stanje +akcija() -komanda +izvrsi() <<instantiate>> izvrsi(){ izvrsilac.akcija(); } Elektrotehnički fakultet u Beogradu
151 Projektni uzorci Komanda 151 Učesnici: Komanda (klasa Komanda) deklariše interfejs za izvršenje neke operacije KonkretnaKomanda (klase KomandaOtvori, KomandaKopiraj) definiše vezu između jednog objekta Primalac i akcije Kijent (klasa Aplikacija) kreira objekat KonkretnaKomanda i postavlja njen objekat Primalac Pokretac (klasa MeniStavka) traži od komande da izvrši zahtev Primalac (klasa Dokument) zna kako da izvrši operacije pridružene ispunjavanju zahteva Saradnja: : KonkretnaKomanda : Pokretac : Primalac : Klijent <<create>> sacuvaj() izvrsi() akcija() UML notacija: Klijent Aplikacija Uzorak Komanda Komanda Komanda Pokretac MeniStavka Primalac Dokument KonkretnaKomanda KomandaOtvori KomandaKopiraj Posledice: raspreže objekat koji pokreće operaciju od onog koji zna kako da je izvrši komande su objekti kao i svi drugi i njima se može manipulisati komande se mogu asemblirati u kompozitne komande (makrokomande) jednostavno je dodavanje novih komandi, ne treba menjati postojeće klase Povezani uzorci: Kompozicija se koristi za kreiranje makrokomandi (skriptova) Podsetnik može da čuva stanje pre izvršenja komande potrebno za Undo komanda čija se kopija stavlja u listu istorije se ponaša kao Prototip Projektovanje softvera
152 152 Projektni uzorci Lanac odgovornosti Lanac odgovornosti Ime i klasifikacija: Lanac odgovornosti (engl. Chain of Responsibility) - objektni uzorak ponašanja Namena: povezuje objekte primaoce zahteva u lanac i prosleđuje zahtev niz lanac, dok ga neki objekat ne obradi izbegava neposredno vezivanje pošiljaoca zahteva sa primaocem, dajući šansu većem broju objekata da obrade zahtev Motivacija: sistem pomoći zavisne od konteksta u grafičkom korisničkom interfejsu svaka komponenta treba da pruža pomoć na komandu preko miša ako za konkretnu komponentu ne postoji pomoć, treba da se prikaže pomoć za dijalog koji sadrži komponentu ako ni za dijalog ne postoji pomoć treba da se prikaže pomoć za program informacije pomoći se organizuju prema opštosti od specifičnijih (u komponentama) prema opštijim (dijalog, aplikacija) zahtev za pomoć treba da obrađuje nekoliko objekata od specifičnijih ka opštijim, dok neko ne obradi u celini problem: objekat koji pruža pomoć nije unapred poznat onome ko zahteva pomoć potrebno je razdvojiti onoga ko inicira zahtev za pomoć (dugme) od objekta koji će na kraju da prikaže pomoć rešenje: lanac odgovornosti: zahtev se predaje duž lanca dok ga neko ne obradi dijalogsacuvaj dugmestampaj aplikacija dijalogstampaj dugmeodustajem dugmestampaj : Dugme dijalogstampaj : Dijalog aplikacija : Aplikacija pruzipomoc() pruzipomoc() prikazipomoc() da bi se obezbedilo prosleđivanje kroz lanac a da primaoci ostanu implicitni, svi objekti u lancu moraju imati isti interfejs Elektrotehnički fakultet u Beogradu
153 Projektni uzorci Lanac odgovornosti 153 pruzipomoc(){ roditelj->pruzipomoc() } DavalacPomoci +pruzipomoc() -roditelj Aplikacija Komponenta pruzipomoc(){ if (moze) { prikazipomoc() } else roditelj -> Pomoc::pruziPomoc() } Dugme +pruzipomoc() -prikazipomoc() Dijalog Primenljivost: kada više objekata može da obradi zahtev, ali se ne zna unapred koji će obraditi kad se hoće izdati zahtev jednom od nekoliko objekata, a da se ne odredi eksplicitno primalac kada skup objekata koji obrađuju zahtev treba da se odredi dinamički Struktura: Klijent -obradjivac Obradjivac obradazahteva(){ sledeci->obradazahteva() } +obradazahteva() -sledeci KonkretanObradjivac1 +obradazahteva() KonkretanObradjivac2 +obradazahteva() klijent -obradjivac -sledeci obradjivac1 obradjivac2 Učesnici: Obradjivac (klasa DavalacPomoci) definiše interfejs obrade zahteva implementira vezu prema sledećem u lancu opciono, svi osim poslednjeg KonkretanObradjivacX (klase Dugme, Dijalog) obrađuje zahteve koje ume može da pristupi naslednicima u lancu ako može da obradi zahtev to i čini, u suprotnom ga prosleđuje nasledniku Projektovanje softvera
154 154 Projektni uzorci Lanac odgovornosti Saradnja: kada klijent izda zahtev on putuje po lancu odgovornosti dok konkretni obrađivač ne preuzme odgovornost za obradu Posledice: rasprezanje pošiljaoca i primaoca pošiljalac i primalac ne treba da znaju ništa jedan o drugom objekat u lancu ne treba da poznaje strukturu lanca smanjuje se broj veza među objektima objekat ne mora pristupati svima, dovoljno je sledbeniku dodatna fleksibilnost u pridruživanju odgovornosti objektima odgovornosti za obradu zahteva se mogu dodavati i menjati u vreme izvršenja prijem nije garantovan moguća je situacija da zahtev stigne do kraja lanca, a da nije obrađen UML notacija: DavalacPomoci Obradjivac Lanac odgovornosti Klijent Klijent KonkretanObradjivac1 Dugme KonkretanObradjivac2 Aplikacija Povezani uzorci: često se primenjuje sa uzorkom Kompozicija; roditelj komponente može da igra ulogu sledećeg u lancu Elektrotehnički fakultet u Beogradu
155 Projektni uzorci Graditelj 155 Graditelj Ime i klasifikacija: Graditelj (engl. Builder) objektni uzorak kreiranja Namena: razdvaja proces konstrukcije kompleksnog objekta od njegove reprezentacije posledica je da isti proces konstrukcije može da kreira različite reprezentacije Motivacija: posmatra se aplikacja za čitanje RTF dokumenata (čitač) potrebno je da učitane dokumente može da konvertuje u: čisti ASCII tekst TeX dokument tekstualnu komponentu koja može da se interaktivno edituje... (broj mogućih konverzija je neograničen) potrebno je da se lako dodaje nova konverzija, bez izmene čitača rešenje je primena uzorka Graditelj: konfigurisanje RTFCitac klase objektom TekstKonvertor RTFCitac čita RTF tekst i parsira ga TekstKonvertor konvertuje RTF u drugu tekstualnu reprezentaciju kad RTFCitac prepozna RTF element on izdaje zahtev TekstKonvertor objektu TekstKonvertor konvertuje i reprezentuje element u ciljnom formatu potklase TekstKonvertor specijalizuju korake u konverziji TekstKonvertor RTFCitac +parsirajrtf() -graditelj +konvertujznak() +konvertujpromenufonta() +konvertujparagraf() Podrazumevane (prazne) implementacije parsirajrtf(){ while (t=sledecitoken()){ switch t.tip { ZNAK: graditelj.konvertujznak(t); FONT: graditelj.konvertujpromenufonta(t); PARAGRAF: graditelj.konvertujparagraf(t); } } } ASCIIKonvertor +konvertujznak() +dohvatiasciitekst() ASCIITekst <<instantiate>> TeXKonvertor +konvertujznak() +konvertujpromenufonta() +konvertujparagraf() +dohvatitextekst() TeXTekst <<instantiate>> KonvertorKomponente +konvertujznak() +konvertujpromenufonta() +konvertujparagraf() +dohvatitekstkomponente() <<instantiate>> TekstKomponenta svaka vrsta konvertora, iza apstraktnog interfejsa, ima mehanizam za kreiranje i sastavljanje složenog objekta konvertor je razdvojen od čitača čitač je odgovoran samo za parsiranje ulaznog RTF dokumenta svaka klasa konvertora u uzorku se naziva graditeljem (builder) klasa čitača se naziva upravljačem (director) u ovom primeru uzorak graditelja je razdvojio algoritam interpretacije tekstualnog formata (parser za RTF dokumente) način kako se konvertovani format stvara i reprezentuje posledica je reupotreba algoritma parsiranja pri kreiranju različitih tekstualnih reprezentacija od RTF dokumenata Projektovanje softvera
156 156 Projektni uzorci Graditelj RTFCitac se samo konfiguriše objektom neke od potklasa TekstKonvertor Primenljivost: uzorak treba koristiti kada algoritam za kreiranje složenog objekta treba da bude nezavisan od delova koji čine objekat od načina na koji se delovi sklapaju u celinu proces konstrukcije mora da dopusti različite reprezentacije za objekat koji se konstruiše Struktura: Upravljac +konstruisi() graditelj->izgradideoa(); graditelj->izgradideob(); graditelj->izgradideoc(); Proizvod -graditelj Graditelj +izgradideoa() +izgradideob() +izgradideoc() KonkretanGraditelj <<instantiate>> +izgradideoa() +izgradideob() +izgradideoc() +dajrezultat() Učesnici: Graditelj (klasa TekstKonvertor) specificira apstraktan interfejs za kreiranje delova objekta Proizvod KonkretanGraditelj (klase ASCIIKonvertor, TeXKonvertor) konstruiše i sastavlja delove proizvoda implementiranjem interfejsa Graditelj definiše i čuva proizvod koji kreira obezbeđuje interfejs za dohvatanje proizvoda Upravljac (klasa RTFCitac) konstruiše objekat koristeći interfejs Graditelj Proizvod (klase ASCIITekst, TeXTekst) predstavlja složeni objekat koji se konstruiše uključuje klase koje definišu sastavne delove uključujući interfejse za sastavljanje delova u finalan rezultat Elektrotehnički fakultet u Beogradu
157 Projektni uzorci Graditelj 157 Saradnja: klijent upravljac konkretangraditelj <<create>> <<create>> konstruisi() izgradideoa() izgradideob() izgradideoc() dajrezultat() Posledice: dopušta izmene interne reprezentacije i načina sklapanja složenog proizvoda graditelj pruža upravljaču apstraktan interfejs za konstrukciju proizvoda reprezentacija i interna struktura, kao i način sklapanja su sakriveni za promenu interne reprezentacije potrebna je samo nova vrsta graditelja izolovanje koda za konstrukciju i reprezentaciju bolja modularnost kroz kapsuliranje načina konstrukcije složenog objekta klijenti ne treba da znaju ništa o klasama koje definišu unutrašnju strukturu proizvoda te klase se ne pojavljuju u interfejsu graditelja daje finiju kontrolu nad procesom konstrukcije od drugih fabrika drugi uzorci kreiranja konstruišu proizvod u jednom potezu graditelj konstruiše proizvod korak-po-korak, pod kontrolom upravljača UML notacija: RTFCitac Upravljac Uzorak Graditelj Proizvod TeXTekst Graditelj TekstKonvertor KonkretanGraditelj TeXKonvertor Povezani uzorci: Druge fabrike (npr. Apstraktna fabrika) takođe mogu da konstruiše kompleksne objekte Graditelj vrši konstrukciju kompleksnog objekta korak-po-korak, druge fabrike u jednom koraku Graditelj vraća proizvod kao finalni korak, druge fabrike vraćaju proizvod odmah Graditelj često gradi objekat Kompozicije Upravljac uzorka Graditelja se parametrizuje objektom klase Graditelj, kao što se Kontekst parametrizuje objektom Strategija u odgovarajućem uzorku osim u nameni, razlika je što se Strategija najčešće implementira u jednoj metodi dok su kod Graditelja implementirani pojedini koraci gradnje kao posebne metode Šablonska metoda poziva apstraktne metode sopstvene klase, dok kod uzorka Graditelj, Upravljac sadrži konkretnu metodu koja poziva apstraktne metode klase Graditelj Projektovanje softvera
158 158 Projektni uzorci Posetilac Posetilac Ime i klasifikacija: Posetilac (engl. Visitor) objektni uzorak ponašanja Namena: skup različitih operacija koje treba primenjivati na elemente jedne objektne strukture omogućava definisanje nove operacije bez izmene klasa elemenata nad kojima se izvršava Motivacija: razmatra se prevodilac koji reprezentuje programe kao stabla apstraktne sintakse (SAS) potrebno je obezbediti operacije nad SAS za: statičku proveru tipova generisanje koda većina operacija će na različit način tretirati čvorove SAS za: naredbu dodele vrednosti referisanje promenljive hijerarhija čvorova SAS zavisi od jezika, ali je za dati jezik stabilna nefleksibilan dizajn: OperacijaZaCvor +proveratipa() +generisanjekoda() OpZaCvorReference +proveratipa() +generisanjekoda() OpZaCvorDodele +proveratipa() +generisanjekoda() problem: prisustvo svih operacija u različitim klasama čvorova vodi do sistema koji je teško razumeti, održavati i menjati mešanje koda za proveru tipova i koda za generisanje koda kvari razumljivost dodavanje nove operacije zahteva ponovno prevođenje svih klasa čvorova cilj: razdvajanje hijerarhije čvorova od operacija koje se vrše nad njima rešenje: pakovanje operacija u objekte posetilaca koji se prosleđuju čvorovima SAS kada se struktura obilazi posetilac kapsulira jednu operaciju za različite čvorove SAS kada čvor primi posetioca on šalje zahtev posetiocu koji odgovara klasi čvora i kao parametar dostavlja referencu na sebe posetilac tada izvršava operaciju za dotični čvor (koja je ranije bila u okviru samog čvora) Elektrotehnički fakultet u Beogradu
159 Projektni uzorci Posetilac 159 PosetilacCvora +posetidodelu(cvordodele) +posetireferencu(cvorreference) Program * Cvor +prihvati(posetilaccvora) CvorDodele CvorReference PosetilacProveraTipa PosetilacGeneratorKoda +prihvati(posetilaccvora p) +prihvati(posetilaccvora p) +posetidodelu(cvordodele) +posetireferencu(cvorreference) +posetidodelu(cvordodele) +posetireferencu(cvorreference) p.posetidodelu(this) p.posetireferencu(this) u uzorku Posetilac se definišu dve hijerarhije klasa za elemente nad kojima se vrše operacije (h. čvorova) za posetioce koji definišu operacije nad elementima (h. posetilaca) nova operacija se dodaje kao nova potklasa u h. posetilaca ako bi aplikacija trebalo da računa metriku programa samo bi se definisala nova potklasa klase PosetilacCvora a ne bi se dodavao aplikativno zavisan kod u klase čvorova SAS Primenljivost: uzorak treba koristiti kada jedna objektna struktura sadrži objekte raznih klasa, a potrebno je nad tim objektima izvršiti operacije koje zavise od njihovih konkretnih klasa više nepovezanih operacija se izvršava nad objektima strukture, a ne želimo da zagadimo njihove klase tim operacijama posetilac omogućava grupisanje povezanih operacija (koje odgovaraju jednoj primeni) u jednoj klasi klase koje definišu strukturu objekata se retko menjaju, a često se definišu nove operacije nad elementima strukture promena klasa objektne strukture zahteva promenu svih posetilaca može mnogo da košta, pa ako je ovo često, bolje je definisati operacije u tim klasama Struktura: Klijent Posetilac +posetielementa(elementa) +posetielementb(elementb) KonkretanPosetilac1 +posetielementa(elementa) +posetielementb(elementb) KonretanPosetilac2 +visitelementa(elementa) +visitelementb(elementb) ObjektnaStruktura Element * +prihvati(posetilac) p->posetielementa(this) ElementA +prihvati(posetilac p) +operacijaa() ElementB +pihvati(posetilac p) +operacijab() p->posetielementb(this) Učesnici: Posetilac (klasa PosetilacCvora) po jedna operacija poseti() za svaku potklasu Element potpis operacije identifikuje odgovarajući potklasu Element Projektovanje softvera
160 160 Projektni uzorci Posetilac KonkretanPosetilacX (klase PosetilacProveraTipa,...) implementira sve operacije koje deklariše Posetilac predstavlja kontekst algoritma i čuva njegovo stanje koje često akumulira rezultate obilaska strukture objekata svaka operacija implementira deo algoritma za odgovarajuću klasu objekata u strukturi Element (klasa Cvor) deklariše operaciju prihvati() - posetilac je argument ElementX (klase CvorDodele, CvorReference) implementira operaciju prihvati() ObjektnaStruktura (klasa Program) pruža interfejs visokog nivoa koji omogućava klijentu da obiđe elemente dostavljajući im posetioca može da bude objekat Sastav (stablo) ili kolekcija (lista) Saradnja: : Klijent : ObjektnaStruktura : ElementA : ElementB sledecielement() <<create>> p : KonkretanPosetilac1 prihvati() posetielementa() sledecielement() operacijaa() pihvati() posetielementb() operacijab() Klijent: stvara objekat konkretnog posetioca obilazi objektnu strukturu posećujući svaki njen element svakom elementu prosledi posetioca Element poziva operaciju posetioca kojom mu traži da ga poseti Elektrotehnički fakultet u Beogradu
161 Projektni uzorci Posetilac 161 Posledice: olakšava dodavanje novih operacija dodavanje novih klasa konkretnih elemenata nije lako grupiše srodne i razdvaja različite operacije mogućnost obilaska objekata iz različitih hijerarhija klasa mogućnost akumuliranja stanja za vreme posećivanja elemenata bez posetioca, stanje bi se predavalo operacijama kao dodatni argument probijanje kapsuliranja elemenata često su potrebne javne operacije za pristup unutrašnjem stanju elemenata strukture UML notacija: Posetilac PosetilacCvora Posetilac ObjektnaStruktura Program KonkretanPosetilac ElementX Element PosetilacProveraTipa CvorReference Cvor Povezani uzorci: Kompozicija posetilac može da se koristi da bi se neka operacija primenila na strukturu objekata definisanu kao kompozicija Iterator se često koristi zajedno sa Posetiocem, služi za sistematičan obilazak objekata strukture kojima se šalju posetioci Interpreter posetilac se može koristiti da obavi interpretaciju Projektovanje softvera
162 162 Projektni uzorci - Interpreter Interpreter Ime i klasifikacija: Interpreter klasni uzorak ponašanja Namena: za dati jezik, definiše: reprezentaciju njegove gramatike interpreter koji koristi tu reprezentaciju da interpretira iskaze jezika Motivacija: u nekim aplikacijama: pojedini zahtevi se mogu predstaviti iskazima jednostavnog jezika može se napraviti interpreter koji rešava probleme interpretirajući iskaze primer: problem (zahtev) - traženje stringova koji odgovaraju uzorku regularni izrazi su standardan jezik za specificiranje uzoraka stringova algoritam pretrage može da interpretira regularan izraz koji specificira skup stringova za uparivanje uzorak Interpreter opisuje: kako definisati gramatiku za jednostavne jezike, kako predstaviti iskaze u jeziku i kako interpretirati te iskaze sledeća gramatika definiše regularne izraze: izraz ::= literal redjanje izbor ponavljanje '(' izraz ')' redjanje ::= izraz '&' izraz izbor ::= izraz ' ' izraz ponavljanje ::= izraz '*' literal ::= 'a' 'b' 'c'... { 'a' 'b' 'c'... }* na primer - zadavanje uzorka za pretragu: projektni & uzorci & (kreiranja strukture ponašanja) uzorak Interpreter koristi po klasu da reprezentuje gramatičko pravilo simboli na levoj strani pravila određuju klase interpretera data gramatika se opisuje sa 5 klasa: RegularniIzraz +interpretiraj() -izraz -izraz2 -izraz1 -izraz2 -izraz1 Literal -literal +interpretiraj() Ponavljanje Redjanje +interpretiraj() Izbor +interpretiraj() +interpretiraj() desna strana pravila određuje sastavljanje objektne strukture svaki regularan izraz definisan na datoj gramatici se predstavlja pomoću jednog stabla apstraktne sintakse (SAS) sastavljenog od objekata datih klasa primer: Elektrotehnički fakultet u Beogradu
163 Projektni uzorci Interpreter 163 regularni izraz: pada & (kisa sneg)* odgovarajuće SAS: redjanje -izraz1 literal 'pada' literal -izraz1 'kisa' ponavljanje -izraz2 izbor -izraz2 literal 'sneg' može se napraviti interpreter za ovakve regularne izraze definiše se interpretiraj()operacija za svaku potklasu RegularniIzraz interpretiraj() dobija kao argument kontekst u kojem interpretira izraz kontekst sadrži ulazni tekst i informaciju o tome koji njegov deo je već obrađen svaka potklasa RegularniIzraz implementira interpretiraj() da upari sledeći deo ulaznog teksta u datom kontekstu na primer: Literal proverava da li ulaz odgovara literalu koji definiše Redjanje proverava da li ulaz odgovara sledu njegovih izraza Izbor proverava da li ulaz odgovara jednom od njegovih izraza Ponavljanje proverava da li ulaz ima ponavljanja njegovog izraza Primenljivost: uzorak treba primeniti kada postoji jezik koji treba interpretirati i iskazi jezika se mogu predstaviti kao stabla apstraktne sintakse najbolji rezultati se dobijaju pod sledećim uslovima gramatika je jednostavna za kompleksne gramatike broj klasa u hijerarhiji postaje preveliki za održavanje efikasnost nije kritična najefikasniji interpreteri se obično ne implementiraju interpretiranjem stabala parsiranja direktno, već se najpre ona transformišu u neku drugu formu na primer regularni izrazi se često transformišu u automate stanja, ali i tada se translator može implementirati pomoću uzorka Interpreter Projektovanje softvera
164 164 Projektni uzorci - Interpreter Struktura: Kontekst Klijent ApstraktniIzraz +interpretiraj(kontekst) * TerminalniIzraz +interpretiraj(kontekst) NeterminalniIzraz +interpretiraj(kontekst) Učesnici: ApstraktniIzraz (klasa RegularniIzraz) deklariše apstraktnu operaciju interpretiraj() koja je zajednička za sve čvorove u SAS TerminalniIzraz (klasa Literal) implementira interpretiraj() operaciju za terminalne simbole u gramatici po primerak se zahteva za svaki terminalni simbol u iskazu NeterminalniIzraz (klase Redjanje, Izbor, Ponavljanje ) zahteva se po jedna klasa za svako gramatičko pravilo R::=R1 R2... Rn sadrži objekte tipa ApstraktniIzraz za svaki od simbola R1...Rn implementira op. interpretiraj() za neterminalne simbole tako što se ova poziva rekurzivno za objekte simbola R1...Rn Kontekst (klasa Tekst) sadrži informaciju koja je globalna za interpreter Klijent gradi (ili je već dato) SAS koje predstavlja pojedini iskaz na jeziku koji definiše gramatika SAS je sastavljeno od objekata klasa NeterminalniIzraz i TerminalniIzraz poziva interpretiraj() operaciju korena SAS Saradnja: klijent gradi (ili je već dat) iskaz kao SAS od objekata terminalnih i neterminalnih izraza zatim klijent inicijalizuje kontekst i pokreće operaciju interpretiraj() svaki čvor neterminalnog izraza definiše operaciju interpretiraj() tako što poziva operaciju interpretiraj() svojih podizraza operacija interpretiraj() svakog terminalnog izraza definiše krajnju tačku u rekurziji operacija interpretiraj() u svakom čvoru koristi kontekst da smesti stanje i pristupi stanju interpretacije Posledice: lako je menjati i proširivati gramatiku klase reprezentuju pravila ova se mogu menjati i dodavati nova kroz izvođenje lako je implementirati gramatiku klase koje definišu čvorove SAS imaju slične implementacije generisanje ovih klasa može čak da bude automatizovano kompleksne gramatike je teško održavati za svako gramatičko pravilo se defiiše barem jedna klasa gramatike sa mnogo pravila rezultuju u velikom broju klasa Elektrotehnički fakultet u Beogradu
165 Projektni uzorci Interpreter 165 treba primenjivati druge tehnike (generatori parsera/prevodioca) dodavanje novih načina za interpretaciju izraza dodavanje novog načina za interpretaciju izraza (npr. proveratipa()) zahteva dodavanje nove operacije u sve klase izraza ako se ovo radi više puta, treba razmotriti uzorak Posetilac UML notacija: Klijent Klijent Uzorak Interpreter Kontekst Tekst ApstraktniIzraz RegularniIzraz TerminalniIzraz Literal NeterminalniIzraz Redjanje Povezani uzorci: SAS je primerak projektnog uzorka Kompozicija Muva omogućava da se efikasno dele terminalni simboli u SAS Interpreter može da koristi Iterator za obilazak SAS ako se operacija interpretiraj() realizuje u posebnoj klasi, onda je moguće lako dodavati druge načine interpretacije - Posetilac Projektovanje softvera
166 166 Literatura Literatura Booch, G., Rumbaugh, J., Jacobson., I., The Unified Modeling Language User Guide, 2 nd edition, Addison-Wesley, Rumbaugh, J., Jacobson, I., Booch, G., The Unified Modeling Language Reference Manual, 2 nd edition, Addison-Wesley, 2005 Fowler, M., UML distilled, 3 rd ed., Addison-Wesley Professional, 2003., prevod na srpski jezik: UML ukratko, Mikro knjiga, Gamma, E., Helm, R., Johnson, R., Vlissides, J., Design Patterns, Addison-Wesley, 1998., prevod na srpski jezik: Gotova Rešenja, CET, Kraus, L., Tartalja, I., Zbirka zadataka iz projektovanja softvera, Akademska misao, Elektrotehnički fakultet u Beogradu
167
Objektno orijentisano programiranje 2. Tipovi podataka u C#
Objektno orijentisano programiranje 2 Klasifikacija tipova Osnovna podela na: vrednosne (value) tipove ukazane (reference) tipove Vrednosni tipovi: jednostavni tipovi (kao što su npr. byte, int, long,
Strukture. Strukturirani (složeni) tip podataka koji definiše korisnik. Razlike u odnosu na niz
Strukture Strukture Strukturirani (složeni) tip podataka koji definiše korisnik sastoji se od više komponenti komponente imaju identifikatore ne moraju biti istog tipa struktura se smatra jednim objektom
Uvod u Veb i Internet tehnologije HTML
Uvod u Veb i Internet tehnologije Filip Marić Vesna Marinković Filip Marić, Vesna Marinković Uvod u Veb i Internet tehnologije 1 / 49 Jezici za obeležavanje Pristupi kreiranju dokumenata Dva osnovna pristupa
Programiranje 1 grupno spremanje (zadaci) datoteke
Programiranje 1 grupno spremanje (zadaci) datoteke Tipovi datoteka Datoteke se mogu podeliti na binarne i tekstualne. Iako su na prvi pogled ova dva tipa veoma slična oni se suštinski razlikuju. Binarne
do minimalno 8 kreativnih objava mjesečno Povlaštena cijena nakon završetka akcije: 900,00 kn
do 30.09.2015. 9 2 Društvene mreže izrada nove ili redizajn postojeće fan stranice minimalno 4 kreativnih objava mjesečno 1.200,00 kn 50% 600,00 kn Povlaštena cijena nakon završetka akcije: 900,00 kn Yellow:
Izmena i dopuna konkursne dokumentacije
SPECIJALNA BOLNICA ZA LEČENјE I REHABILITACIJU 36210 Vrnjačka Banja, Bul. Srpskih ratnika br. 18 Telefon i telefaks: 036/515-514-5 Broj: 01-3114/4 Datum: 25.07.2017.godine Izmena i dopuna konkursne dokumentacije
Zadatak 1 strukture (C110) P2: Jedanaesta nedelja Strukture i liste. Strukture na jeziku C (2) Strukture na jeziku C (1)
Zadatak 1 strukture (C110) P2: Jedanaesta nedelja Strukture i liste Date su sledeće deklaracije: typedef int CeoBroj; typedef int *PokazivacNaCeoBroj; typedef int NizCelihBrojeva[100]; CeoBroj *pokaza;
1. DHB-E 18/21/24 Sli art ELEKTRONIČKI PROTOČNI GRIJAČ VODE
ZAGREB, SRPANJ, 2017. VELEPRODAJNI CIJENIK STIEBEL ELTRON ZA 2017 G. PROTOČNI BOJLERI 1. DHB-E 18/21/24 Sli art.232016 - ELEKTRONIČKI PROTOČNI GRIJAČ VODE Protočni grijač vode za trenutno zagrijavanje
1 REALNE FUNKCIJE REALNE VARIJABLE
REALNE FUNKCIJE REALNE VARIJABLE. Neka je f() = ln 4e 3 e. Odredite a) f b) D(f) i R(f) c) Odredite min f, inf f, ma f, sup f. 2. Odredite prirodnu domenu funkcije f() = ln (3e e 3 ) + 5 log 5 +3 + ( cos
ALUMINIJSKE VODILICE ZA ODJELJIVANJE PROSTORA
ALUMINIJSKE VODILICE ZA ODJELJIVANJE PROSTORA ALU. VODILICE ZA ODJELJIVANJE PROSTORA AV 04.01-04.10...jer o tome mnogo ovisi... S C H W O L L E R - L U Č I Ć AL 400 AV 04.01 minijska vodilica za odjeljivanje
MINIMARK stampac za industrijsko obelezavanje
MINIMARK stampac za industrijsko obelezavanje SISTEM 710141 MINIMARK + Markware (evropska verzija) 800975 Markware softver PRIBOR 710118 Kofer za transport stampaca 710257 Kofer za transport potrosnog
Ord og begreper. Norsk Morsmål: Tegning (hvis aktuelt)
Ord og begreper Norsk Morsmål: Tegning (hvis aktuelt) Få Dobiti Mange Mnogo Venstre Lijevo Høyre Desno Øverst Iznad Nederst Niže Lite Malo Mye Mnogo Flest Vecina Færrest Najmanje Oppe Gore Nede Dole Mellom
Eksamen FSP5822/PSP5514 Bosnisk nivå II Elevar og privatistar / Elever og privatister. Nynorsk/Bokmål
Eksamen 20.11.13 FSP5822/PSP5514 Bosnisk nivå II Elevar og privatistar / Elever og privatister Nynorsk/Bokmål Oppgåve 1 Skriv ein kort tekst på 4 5 setningar der du svarer på spørsmåla nedanfor. Skriv
Univerzitet u Novom Sadu. Fakultet tehničkih nauka PC MAGISTRALE LPRS2
Univerzitet u Novom Sadu Fakultet tehničkih nauka PC MAGISTRALE LPRS2 UVOD Procesor klase Pentium Grafički port AGP/PCI Express x16 MCH Memorijski text kontroler DDR2 Memorija DDR2 Memorija PCI USB 2.0
Primena računara u fizičkoj hemiji. Profesor: Miloš Mojović Asistent: Aleksandar Ignjatović
Primena računara u fizičkoj hemiji Profesor: Miloš Mojović Asistent: Aleksandar Ignjatović Literatura i ispit: Literatura: 1. Predavanja 2. Internet 3. Knjige Ocenjivanje 1. aktivnost u toku predavanja
TERMINSKI PLAN RADNO VREME VOJVOĐANSKE BANKE ZA PRIJEM I IZVRŠENJE NALOGA PLATNOG PROMETA
1. DOMAĆE PLATNE TRANSAKCIJE U DINARIMA (Ne obuhvataju transakcije plaćanja, naplate i prenosa u dinarima izmeďu rezidenata i nerezidenata, koje se izvršavaju u skladu sa Zakonom o deviznom poslovanju
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA Interaktivna manipulacija oblikom igra glavnu ulogu u CAD/CAM/CAE sistemima. Programiranje koje kreira
Interaktivna manipulacija oblikom igra glavnu ulogu u CAD/CAM/CAE sistemima. Programiranje koje kreira grafički displej na displej monitoru je dakle bitan dio CAD/CAM/CAE softvera. Dakle, mi treba da analiziramo
Neprekidne funkcije nestandardni pristup
nestandardni pristup Predavanje u sklopu Teorije, metodike i povijesti infinitezimalnih računa [email protected] PMF Matematički odsjek Sveučilište u Zagrebu 10. veljače 2011. Ciljevi predavanja Ciljevi
Složeni tipovi podataka
Složeni tipovi podataka Složeni tipovi? C raspolaže sljedećim složenim tipovima podataka: polja (indeksirane promjenljive) jednodimenzionalno = NIZ, dvodimenzionalno = MATRICA, višedimenzionalno strukture
Kartlegging av leseferdighet Trinn 2 og 3 på bosnisk
Lærerveiledning Bosnisk, 2. og 3. trinn Lærerveiledning Kartlegging av leseferdighet Trinn 2 og 3 på bosnisk Priručnik za učitelje Ispitivanje sposobnosti čitanja 2. i 3. razred na bosanskom jeziku 2013
Kako dostaviti logo. USBnet. Powered by
Kako dostaviti logo USBnet Powered by Sadržaj Sadržaj Upute za dostavljanje loga Vektorski dokumenti Bitmap dokumenti Tekst i fontovi Boje Dimenzije i površina loga 2 3 4 5 6 7 8 2 Upute za dostavu loga
Tru64: Uvod - alati i naredbe. Dinko Korunić, InfoMAR d.o.o. v1.2, travanj 2006.
Tru64: Uvod - alati i naredbe Dinko Korunić, InfoMAR d.o.o. v1.2, travanj 2006. O predavaču višegodišnji vanjski suradnik časopisa Mrež@, vlastita kolumna "Digitalna radionica - Linux", itd. vanjski suradnik
Univerzitet u Nišu Elektronski fakultet Katedra za Elektroniku SEMINARSKI RAD
Univerzitet u Nišu Elektronski fakultet Katedra za Elektroniku SEMINARSKI RAD iz predmeta Sistemi za rad u realnom vremenu i Sistemi za akviziciju podataka NAZIV TEME: Opis razvojnog sistema Hitex Starter
Projekat EUROWEB+ Ovo je program namenjem isključivo razmeni, a ne celokupnim studijama.
Projekat EUROWEB+ 1. Otvoren je Konkurs za novi program mobilnosti studenata i osoblja na Univerzitetu u Nišu EUROWEB+ Konkurs je otvoren do 15.02.2015. 2. Ko može da se prijavi? Ovim programom biće omogućen
4. Grafič ke funkčije
4. Grafič ke funkčije Svaki grafik možemo posmatrati kao prikaz numeričkih vrednosti. Poreklo ovih vrednosti, međutim, diktira način na koji se one koriste ili generišu. U vedini slučajeva, izvor podataka
ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU PROGRAMIRANJE 2 MATERIJALI ZA PRIPREMU ISPITA. verzija:
ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU PROGRAMIRANJE 2 MATERIJALI ZA PRIPREMU ISPITA verzija: 06.07.2018. Studentima se savetuje da programski kod ne uče napamet. Za pisanje i testiranje rešenja
/* Adresu promenjive x zapamticemo u novoj promeljivoj. Nova promenljiva je tipa pokazivaca na int (int*) */ int* px;
1. 0B 2. PODSEĆANJE 1. /* Pokazivaci - osnovni pojam */ #include main() { int x = 3; /* Adresu promenjive x zapamticemo u novoj promeljivoj. Nova promenljiva je tipa pokazivaca na int (int*)
Topografske karte. Dr. sc. Aleksandar Toskić, izv. prof.
Topografske karte Dr. sc. Aleksandar Toskić, izv. prof. Topografske karte u RH Izradba topografskih karata srednjih i sitnijih mjerila bila je prije osamostaljenja Republike Hrvatske u nadležnosti saveznih
ZADACI ZA KVALIFIKACIONI ISPIT IZ HEMIJE. 1. Napišite elektronsku konfiguraciju broma, čiji je atomski broj Z= 35.
ZADACI ZA KVALIFIKACIONI ISPIT IZ HEMIJE 1. Napišite elektronsku konfiguraciju broma, čiji je atomski broj Z= 35. 1s 2 2s 2 2p 6 3s 2 3p 6 4s 2 3d 10 4p 5 2. Utvrdite koji od navedenih parova hemijskih
VOLKSWAGEN Golf V (1K) V TDi (AZV) Motor -> Priručnik za popravak -> Remen razvodnog mehanizma: uklanjanje/postavljanje
VOLKSWAGEN Golf V (1K) 2.0 16V TDi (AZV) 01.2004-01.2009 Motor -> Priručnik za popravak -> Remen razvodnog mehanizma: uklanjanje/postavljanje 4.2.2016. Upozorenja i preporuke Osim ako nije drugačije savjetovano
BAŠTENSKI PROGRAM. SMM RODA COMPANY d.o.o.
SMM RODA COMPANY d.o.o. BAŠTENSKI PROGRAM Proizvodnja creva obuhvata širok asortian proizvoda od plastike sa prieno u poljoprivredi / hortikulturi. Visok kvalitet creva po veoa konkurentni cenaa nas čini
A Study of Industrial, Component-Based Development, Ericsson
A Study of Industrial, Component-Based Development, Ericsson SIF8094 Fordypningsprosjekt Ole Morten Killi Henrik Schwarz Stein-Roar Skånhaug NTNU, 12. des. 2002 Oppgaven Studie av state-of-the-art : utviklingsprosesser
Informasjonsarkitektens rolle i smidige prosjekter
Informasjonsarkitektur Informasjonsarkitektens rolle i smidige prosjekter -en del av Erik Gustavsen Erik Gustavsen - Informasjonsarkitekt 5 års erfaring gjennom to store offentlige utviklingsprosjekter:
21. Objektorientert Analyse (OOA) Kap. 21 Objektorientert Analyse (OOA)
21. Objektorientert Analyse (OOA) Kap. 21 Objektorientert Analyse (OOA) Når vi skal lage en OO analysemodell, bruker vi 5 hovedprinsipper: 1. Lag en modell av informasjonsdomenet. 2. Beskriv modul-funksjonene
Likovna umjetnost umjetnost, matematika i algoritmi
Likovna umjetnost, matematika i algoritmi Vlatko Čerić Sadržaj Kratak pregled povijesti veze umjetnosti i matematike Matematika i računalna tehnologija u likovnoj umjetnosti Algoritamska umjetnost Neki
Uvod u web dizajn i obrada slike
Uvod u web dizajn i obrada slike Tomislav Keščec Dragana Savić Zagreb, 2016. Autor: Tomislav Keščec Dragana Savić Urednica: Ana Belin, prof. Naslov: Uvod u web dizajn i obrada slike Izdanje: 1. izdanje
Sustavi za rad u stvarnom vremenu
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA Zavod za elektroniku, mikroelektroniku, računalne i inteligentne sustave Skripta iz predmeta Sustavi za rad u stvarnom vremenu Leonardo Jelenković
1 - Prvi deo upitnika
Copyright! All rights reserved www.anestesi.no 2010- Serbo-Kroatisk side 1 av 6 Serbia Kroatia osnia Språk: Serbo-Kroatisk Oversatt av: Ivan uljovcic to: Juni 2010 1 - Prvi deo upitnika Del 1 Spørreskjema:
Sveučilište u Zagrebu PMF Matematički odsjek. Mreže računala. Vježbe 04. Zvonimir Bujanović Slaven Kožić Vinko Petričević
Sveučilište u Zagrebu PMF Matematički odsjek Mreže računala Vježbe 04 Zvonimir Bujanović Slaven Kožić Vinko Petričević Klijent / Server paradigma internet daje infrastrukturu koja omogućava komunikaciju
1. 0BLINEARNE STRUKTURE PODATAKA
1. 0BLINEARNE STRUKTURE PODATAKA 1.1. 1BPOLJE 1.1.1. 5BDEFINICIJE I STRUKTURA Polje (array) predstavlja linearnu homogenu statičku strukturu podataka i sastoji se od fiksnog broja komponenata istog tipa.
OPŠTE INFORMACIJE ZA PREDMET: SISTEMATIKA I FILOGENIJA HORDATA
OPŠTE INFORMACIJE ZA PREDMET: SISTEMATIKA I FILOGENIJA HORDATA Teorijska nastava 1. Termini predavanja iz predmeta Sistematika i filogenija hordata su: Utorak 08 00-10 00 Fizički fakultet (sala 61), ili
OLE for Process Control
OPC OLE for Process Control OPC novi koncept sustava automatizacije Nove tehnologije pridonose progresu u automatizaciji i upravljanja u industrijskim procesima koji se iz godine u godinu ubrzava. Zahtjevi
det offentlige kartgrunnlaget (DOK)
geografiske data som er tilrettelagt for plan- og byggesaksarbeid = det offentlige kartgrunnlaget (DOK) Terje Nuland, geodataavdelingen Det offentlige kartgrunnlaget ØK FKB DOK Lover forskrifter veiledning
PC i multimedija 3. deo: Audio
S P E C I J A L N I D O D A T A K #141 februar 2008 PC i multimedija 3. deo: Audio Zvezdan Dimitrijević PC SPECIJALNI DODATAK Organizacija audio/video fajlova Postoji mnoštvo programa za katalogizaciju
M-BOX INTELIGHT Inteligentno osvetljenje
INTELIGHT Inteligentno osvetljenje Regulatori osvetljenja UVOD Zašto koristiti regulatore osvetljenja? Smanjenje potrošnje električne energije kako u javnim tako i u privatnim zgradama postalo je tema
SETNINGER OG SETNINGSLEDD REČENICE I DELOVI REČENICE
Kragujevac, 2003. SETNINGER OG SETNINGSLEDD REČENICE I DELOVI REČENICE 1. Helsetninger - samostalne (nezavisne) rečenice Jens sover. Jens spava. Samostalna rečenica je nezavisna rečenica koja ima smisao.
Poštovani poslovni partneri,
April 2017 2 Poštovani poslovni partneri, pred vama je cenovnik proizvoda programa dekorativnih premaza robnih marki Belinka, Helios, Zvezda, Duga, Chromoden, Kemostik, kao i autoreparaturnih premaza robnih
SINUS M -VARIABLE FREQUENCY DRIVE- UPUTSTVO ZA INSTALIRANJE I PROGRAMIRANJE
SINUS M -VARIABLE FREQUENCY DRIVE- UPUTSTVO ZA INSTALIRANJE I PROGRAMIRANJE SRPSKI JEZIK Ovo korisničko uputstvo je osnovno uputstvo za uređaj. Pažljivo pročitati instrukcije koje se nalaze u njemu, jer
Obtočne črpalke s tremi hitrostmi
Obtočne črpalke s tremi hitrostmi TENIČNE LASTNOSTI / ӀӀ Velikost priključka / DN ( ) Izvedba priključka /.. Pretok max. /..... Tlak max. / Nazivni tlak / Moč max. / Električna napetost / Stopnja zaščite
NORSK ALFABET (Norveška azbuka)
NORSK ALFABET (Norveška azbuka) 1. A a /a/ 16. P p /pe/ 2. B b /be/ 17. Q q /ku/ 3. C c /se/ 18. R r /er/ 4. D d /de/ 19. S s /es/ 5. E e /e/ 20. T t /te/ 6. F f /ef/ 21. U u /u/ 7. G g /ge/ 22. V v /ve/
Bluetooth autoradio MEX-BT3800U. Uputstvo za upotrebu (1) Za isključenje demonstracionog (DEMO) prikaza, pogledajte str. 7.
4-158-429-31(1) Bluetooth autoradio Uputstvo za upotrebu Za isključenje demonstracionog (DEMO) prikaza, pogledajte str. 7. MEX-BT3800U 2009 Sony Corporation Iz sigurnosnih razloga, ugradite ovaj uređaj
INF 1050 BRUK AV MODELLERINGSVERKTØYET RATIONAL ROSE
INF 1050 BRUK AV MODELLERINGSVERKTØYET RATIONAL ROSE Datamodeller og andre UML diagrammer kan selvsagt tegnes for hånd, men vi kan også bruke alt fra enkle tegneprogrammer til komplette utviklingsmiljøer.
1. Mikrokontroleri. Sl.1.1 Detaljni blok dijagram mikroracunarskog sistema
UVOD Sistem oplemenjen mikrokontrolerom u potpunosti zamenjuje coveka, malih je dimenzija i mala je potrosnja energije. Mikrokontroleri sve vise zalaze u svaki segment covecanstva. Uredjaji novije generacije
FIL FILOZOFIJA. Ispitna knjižica 2 FIL.25.HR.R.K2.12 FIL IK-2 D-S025. FIL IK-2 D-S025.indd :31:00
FIL FILOZOFIJA Ispitna knjižica 2 FIL.25.HR.R.K2.12 12 1.indd 1 20.4.2016. 13:31:00 Prazna stranica 99 2.indd 2 20.4.2016. 13:31:00 OPĆE UPUTE Pozorno pročitajte sve upute i slijedite ih. Ne okrećite stranicu
Mašina za sušenje Priručnik za korisnika Tørretumbler Brugermanualen Tørketrommel Brukerhåndboken DCY 7202 YW3 2960310952_SB/300715.
Mašina za sušenje Priručnik za korisnika Tørretumbler Brugermanualen Tørketrommel Brukerhåndboken DY 7202 YW3 2960310952_SB/300715.1119 Molimo da prvo pročitate ovo uputstva za upotrebu! Poštovani kupče,
DO ŽIV LJA JI HAK L BE RI JA FI NA
Mark Tven DO ŽIV LJA JI HAK L BE RI JA FI NA Nas lov ori gi na la Mark Twa in Adven tu res of Huc k le ber ry Finn 1884 Pre vod Je li sa ve ta Mar ko vić Beleška Ko po ku ša da na đe ne ku po bu du u ovom
Rasim_1:knjiga B5 8.7.2011 10:54 Page 1
Rasim_1:knjiga B5 8.7.2011 10:54 Page 1 Rasim_1:knjiga B5 8.7.2011 10:54 Page 2 IZDAVAČ: ZA IZDAVAČA: UREDNIK: RECENZENTI: LEKTOR I KOREKTOR: NASLOVNA STRANA: SLOG I PRELOM: ŠTAMPA: ZA ŠTAMPARIJU: TIRAŽ:
MODIFIKACIJE METODA MATEMATIČKOG PROGRAMIRANJA I PRIMENE
Univerzitet u Nišu Prirodno-matematički fakultet MODIFIKACIJE METODA MATEMATIČKOG PROGRAMIRANJA I PRIMENE Mentor: Dr. Predrag S. Stanimirović, redovni profesor Kandidat:, [email protected] Modifikacije
VERTIKALNA POLARIZACIJA
VERTIKALNA POLARIZACIJA Driver 433 MHz Driver 145 MHz AKTIVNI ELEMENTI U JEDNOJ RAVNI Aluminijumska zica precnika 4mm(obelezena crnom bojom)savija se u U oblik,zatim provuce kroz letvicu 20 x 20x600mm(obelezenu
MONTAŽA I SERVISIRANJE RAUNARA
VIŠA ELEKTROTEHNIKA ŠKOLA BEOGRAD M. MILOSAVLJEVI, M. MILI MONTAŽA I SERVISIRANJE RAUNARA SKRIPTA BEOGRAD, SEPTEMBAR 2004.GOD. 2 SADRŽAJ: UVOD.. 5 MATINE PLOE. 7 MEMORIJA 15 MIKROPROCESORI.. 21 HARD DISKOVI
Poslovanje Centri izvrsnosti za poslovnu podrπku
PriruËnik za Centri izvrsnosti za poslovnu podrπku Projekt je sufinancirala Europska unija iz Europskog fonda za regionalni razvoj Ulaganje u buduênost PriruËnik za trenere Predgovor E-poslovanje se u
Korisnički priručnik. Modena E501
Korisnički priručnik Modena E501 RS PORUKA OD COOLPAD Hvala na kupovini vašeg Modena E501 mobilnog telefona! Sledite jednostavna ali važna uputstva za optimalnu upotrebu vašeg novog telefona: Pre prve
Neko kao ti. Sara Desen. Prevela Sandra Nešović
Neko kao ti Sara Desen Prevela Sandra Nešović 4 5 Naslov originala Sa rah Des sen So me o ne Li ke You Copyright Sarah Dessen, 1998 All rights reserved including the right of reproduction in whole or in
MATLAB matrični laboratorij Interaktivni alat (kalkulator), programski jezik, grafički procesor
M. Essert: Matlab interaktivno 1 MATLAB matrični laboratorij Interaktivni alat (kalkulator), programski jezik, grafički procesor Program = algoritam + strukture podataka Tipovi podataka temeljni tip -
KONKURSNA DOKUMENTACIJA JAVNA NABAVKA MALE VREDNOSTI
Broj: 0601 52/16 6 KONKURSNA DOKUMENTACIJA JAVNA NABAVKA MALE VREDNOSTI NABAVKA USLUGA SERVISIRANJE I ODRŽAVANJE BIROTEHNIČKE OPREME, SA TONERIMA ZA POTREBE PRIRODNO MATEMATIČKOG FAKULTETA U NOVOM SADU
FRACTAL d.o.o. Elektrotehnički i informatički inžinjering i konzalting Kupreška 37, SPLIT. PowerCAD 4.1
FRACTAL d.o.o. Elektrotehnički i informatički inžinjering i konzalting Kupreška 37, 21000 SPLIT Fax: 021-455113 Gsm: 098-286314 URL:www.fractal.hr E-mail:[email protected] Žiro račun: 2360000-1101402645
Introduksjon til Eclipse
Introduksjon til Eclipse Andreas Limyr 18-Jan-05 INF2120 Prosjekt i modellering 1 Oversikt over denne forelesningen Generell introduksjon til Eclipse Bruk av Eclipse ved Java-programmering Plug-ins til
Riješeni zadaci: Funkcije
Riješeni zadaci: Funkcije Domena funkcije, kompozicija funkcija, invertiranje funkcije, parnost funkcije Domene nekih funkcija: f(x) = x D f = [0, f(x) = x D f = R \ {0} f(x) = log a x, a > 0, a D f =
UPUTSTVO MSV-F2 DN DN DN Slika 2. Slika 3. Slika 1. Slika 5 Slika 6. Slika 4 Slika 7. VI.B1.B4.45 Danfoss 02/2007 1
UPUTSTVO MSV-F2 DN 50 300 DN 50-150 DN 200-300 Slika 2 Slika 1 Slika 3 5D 2D Slika 5 Slika 6 Slika 4 Slika 7 VI.B1.B4.45 Danfoss 02/2007 1 DN 50 DN 65 DN 80 DN 100 2 VI.B1.B4.45 Danfoss 02/2007 DN 125
PRIRUČNIK O UPOTREBI SLOBODNOG SOFTVERA U UMETNIČKOM MUZIČKOM RADU
PRIRUČNIK O UPOTREBI SLOBODNOG SOFTVERA U UMETNIČKOM MUZIČKOM RADU Autor: Vedran Vučić 1 Sadržaj: Predgovor Zahvale Tipografske konvencije Slobodan softver nastanak i značaj Upotreba GNU/Linuxa za audio
SECURIT table za pisanje kredom TABLE STONE ZA PISANJE KREDOM ILI KREDA MARKEROM...
2 SECURIT table za pisanje kredom TABLE STONE ZA PISANJE KREDOM ILI KREDA MARKEROM... Table za pisanje sa kredom su najbolji način da ostavite željenu poruku Vašim posetiocima i gostima. Područja primene
ZP120N Online UPS VISOKA GUSTOĆA ENERGIJE ODLIČNE PERFORMANSE FLEKSIBILNOST VISOKA EFIKASNOST, NISKA TEMPERATURNA DISIPACIJA DUGE AUTONOMIJE
Online UPS 1,2,3,6,10,20 kva jednofazni/jednofazni i trofazno/jednofazni UPS VISOKA GUSTOĆA ENERGIJE ODLIČNE PERFORMANSE FLEKSIBILNOST VISOKA EFIKASNOST, NISKA TEMPERATURNA DISIPACIJA DUGE AUTONOMIJE Smart
Činjenice o hepatitisu A, B i C i o tome kako izbjeći zarazu
Činjenice o hepatitisu A, B i C i o tome kako izbjeći zarazu Fakta om hepatitt A, B og C og om hvordan du unngår smitte Bosnisk/kroatisk/serbisk/norsk Hva er hepatitt? Hepatitt betyr betennelse i leveren.
INF1000: Forelesning 7
INF1000: Forelesning 7 Klasser og objekter del 2 Konstruktører Static UML REPETISJON 2 Repetisjon Repetisjon forts. Verden består av objekter av ulike typer (klasser). Ofte er det mange objekter av en
FIZIČKO-TEHNIČKA MERENJA: MERENJE POLOŽAJA, POMERAJA I NIVOA
: MERENJE POLOŽAJA, POMERAJA I NIVOA UVOD Položaj koordinate posmatranog objekta u odnosu na zadatu referentnu tačku. Pomeraj meren uglom ili rastojanjem. Može se posmatrati kao merenje položaja u odnosu
Hilja du ču de snih sunac a
3 2 Ha led Ho se i ni Hilja du ču de snih sunac a Preveo Ni ko la Paj van čić 5 4 Naslov originala Kha led Hos se i ni A Tho u sand Splen did Suns Copyright 2007 by ATSS Publications, LLC First published
STRATEGIJA I STRATEŠKO PLANIRANJE
STRATEGIJA I STRATEŠKO PLANIRANJE prof.dr.sc. Zdenko Klepić 2.5.2015. 1 STRATEGIJA Strategus starogrčki jezik osoba sa visokim vojnim činom Do sredine 18. St. riječ strategija odnosila se na vojnu i političku
Server-Side Eclipse. Martin Lippert akquinet agile GmbH
Server-Side Eclipse Martin Lippert akquinet agile GmbH [email protected] 2006 by Martin Lippert, [email protected]; made available under the EPL v1.0 Outline Introduction Why Eclipse?
KONKURSNA DOKUMENTACIJA
1 JP "VOJVODINAŠUME"Petrovaradin ŠG Banat Pančevo Maksima Gorkog 24 Broj: 01-103/3 Dana: 06.12.2018. godine stranica:http://www.vojvodinasume.rs KONKURSNA DOKUMENTACIJA ZA JAVNU NABAVKU MALE VREDNOSTI
BESPREKIDNA NAPAJANJA: TIPOVI, TOPOLOGIJE i KOMPONENTE
VISOKA ŠKOLA ELEKTROTEHNIKE I RAČUNARSTVA STRUKOVNIH STUDIJA-VIŠER, BEOGRAD STUDIJSKI PROGRAM: NOVE ENERGETSKE TEHNOLOGIJE SPECIALISTIČKE STUDIJE PREDMET: SPECIJALNE ELEKTRIČNE INSTALACIJE BESPREKIDNA
verktøyskrin Grafisk profil ved Norges teknisk-naturvitenskapelige universitet
1 Services and Systems Development Grafisk verktøyskrin Grafisk profil ved Norges teknisk-naturvitenskapelige universitet Selvhjelpspakken for informasjon og formidling ved NTNU: www.ntnu.no/info/selvhjelp
INF1000: Forelesning 7. Konstruktører Static
INF1000: Forelesning 7 Klasser og objekter del 2 Konstruktører Static UML REPETISJON 2 Repetisjon Verden består av objekter av ulike typer (klasser). Ofte er det mange objekter av en bestemt type. Objekter
Forelesning IMT Mars 2011
Forelesning IMT2243 31. Mars 2011 Tema: forts. arkitektur og OOD (ObjektOrientert Design) Eksempler på arkitekturvurderinger Yummy Inc., BUSTA, Tidligere studentprosjekter Prosjekt del 3 Designfasen Forventninger
Čujte naše glasove: Građani prije svega!
Čujte naše glasove: Građani prije svega! Europska konferencija samozastupnika 4. - 6.10.2013., Zagreb, Hrvatska Hotel Dubrovnik, Ljudevita Gaja 1, PP 246, 10000 Zagreb Program konferencije Uz podršku:
verktøyskrin Grafisk profil ved Norges teknisk-naturvitenskapelige universitet
1 Services and Systems Development Grafisk verktøyskrin Grafisk profil ved Norges teknisk-naturvitenskapelige universitet Selvhjelpspakken for informasjon og formidling ved NTNU: www.ntnu.no/info/selvhjelp
BOSANSKI LCD TV UPUTSTVA 0516MTH-VT-VT
BOSANSKI LCD TV UPUTSTVA 0516MTH-VT-VT Poštovani kupče, Ovaj aparat u skladu je sa važećim europskim direktivama i standardima o elektromagnetnoj kompatibilnosti i električnoj bezbjednosti. Europski predstavnik
Činjenice o HIV u i aidsu
Činjenice o HIV u i aidsu Bosnisk/kroatisk/serbisk/norsk Fakta om hiv og aids Aids er en alvorlig sykdom som siden begynnelsen av 1980-tallet har spredd seg over hele verden. Aids skyldes et virus, hiv,
Distributed object architecture
Forelesning IMT2243 6. April 2010 Tema: forts. arkitektur og design av programvare Prosjektstatus Programvarearkitektur Oppsummering fra før påske Distribuerte objektarkitektur MDA - Model Driven Architecture
TOPLINSKA CRPKA ZRAK-VODA
UPUTE ZA KORIŠTENJE I UPRAVLJANJE KORISNIČKI TOPLINSKA CRPKA ZRAK-VODA UNUTARNJA JEDINICA - HYDROBOX GSH-IRAD H E A T P U M P S Prijevod originalnih uputa za korištenje BRZI VODIČ Opis upravljačke ploče
ISC Bind9. Pripremio: Dinko Korunić Verzija: 1.0, ožujak Bind9 / str. 1
ISC Bind9 Pripremio: Dinko Korunić Verzija: 1.0, ožujak 2002. Bind9 / str. 1 Tijekom prezentacije ako što nije jasno - pitajte! ako što nije točno - ispravite! diskusija je poželjna i produktivna ako je
BRZA, PROFESIONALNA REŠENJA
BRZA, PROFESIONALNA REŠENJA u Radio komunikacijama & Informacionim tehnologijama Projektovanje I Konsalting I Inženjering I Održavanje O Kompaniji KONSING GROUP čine: KONSING GROUP DOO BEOGRAD, Srbija,
Den europeiske byggenæringen blir digital. hva skjer i Europa? Steen Sunesen Oslo,
Den europeiske byggenæringen blir digital hva skjer i Europa? Steen Sunesen Oslo, 30.04.2019 Agenda 1. 2. CEN-veileder til ISO 19650 del 1 og 2 3. EFCA Guide Oppdragsgivers krav til BIMleveranser og prosess.
KONKURSNA DOKUMENTACIJA
ZAVOD ZA ZDRAVSTVENU ZAŠTITU RADNIKA ŽELEZNICE SRBIJE Broj: 15-7/14-2 Dana: 21.05.2014. godine Beograd, Ul. Savska br. 23 KONKURSNA DOKUMENTACIJA JAVNA NABAVKA DOBARA POTROŠNOG MATERIJALA ZA APOTEKU I
Øystein Haugen, Professor, Computer Science MASTER THESES Professor Øystein Haugen, room D
Øystein Haugen, Professor, Computer Science MASTER THESES 2015 Professor Øystein Haugen, room D1-011 1 Hvem er jeg? Øystein Haugen, nytilsatt professor i anvendt informatikk på Høyskolen i Østfold, avdeling
