Uvod u dizajn paterne Prof dr Angelina Njegu

  • Slides: 29
Download presentation
Uvod u dizajn paterne Prof. dr Angelina Njeguš Redovni profesor na Univerzitetu Singidunum anjegus@singidunum.

Uvod u dizajn paterne Prof. dr Angelina Njeguš Redovni profesor na Univerzitetu Singidunum anjegus@singidunum. ac. rs Beograd, 2019/2020.

Razlika između obrazaca arhitekture i obrazaca projektovanja sofvera § Pre nego što se upustimo

Razlika između obrazaca arhitekture i obrazaca projektovanja sofvera § Pre nego što se upustimo u razvoj aplikacije, sa svojim razvojnim timom se dogovaramo o arhitekturi softvera, oko koje ćemo svi razvijati aplikaciju. § Obrasci projektovanja se odnose na sam razvoj sofvera, posebno kada tokom razvoja recimo uočimo da nam je dijagram klasa mnogo složen i da ima tendenciju rasta, ne samo sa obimom klasa već i veza tj. odnosa između njih, kako se zahtevi korisnika budu uvećavali.

Obrasci arhitekture

Obrasci arhitekture

Obrasci projektovanja

Obrasci projektovanja

Šta su šabloni ili obrasci (Patterns)? § Nakon određenog perioda projektovanja, počeće te da

Šta su šabloni ili obrasci (Patterns)? § Nakon određenog perioda projektovanja, počeće te da uočavate da se iste strukture ponavljaju na vašim dijagramima § § Uočićete i šablone u načinu rešavanja definisanog problema Design patterns su primeri najbolje prakse programiranja koji pomažu da kôd bude: čitljiv ponovo upotrebljiv da se bolje izvršava da bude lak za održavanje …

Šta je dizajn patern? § § § Dizajn paterni (design patterns) su u osnovi

Šta je dizajn patern? § § § Dizajn paterni (design patterns) su u osnovi “inženjerski priručnik” za dizajniranje softverskih sistema Dizajn patern je opšte rešenje za učestale probleme projektovanja Dizajn paterni su naročito postali popularni izlaskom knjige: § E. Gamma, R. Helm, R. Johanson i J. Vlissides (1995) Design Patterns: Elements of Reusable Object-Oriented Software, Addison Wesley. Dodatni izvori: Cooper, J. W. (2000) Java Design Patterns: A Tutorial, Addison Wesley. Swithinbank, P. et al. (2005) “Patterns: Model-Driven Development Using IBM Rational Software Architect”, IBM Redbooks, http: //www. redbooks. ibm. com/redbooks/pdfs/sg 247105. pdf. Erl, T. (2008) SOA Design Patterns, Prentice Hall.

Neki tipovi paterna § Kreacioni paterni (creational patterns) – koriste se za instanciranje klase.

Neki tipovi paterna § Kreacioni paterni (creational patterns) – koriste se za instanciranje klase. Neki primeri: § Strukturalni paterni (structural patterns) – kontroliše kako su objekti i klase struktuirani kako bi formirali veće strukture. Primeri: § Singleton Prototype Factory Method Builder … Adapter Composite Proxy Façade … Paterni ponašanja (behavioral patterns) – odnosi se na zadatke odgovornosti, paterne komunikacije i tok kontrola. Primeri: Observer Mediator Chain of Responsibility Strategy …

Razumevanje dizajn paterna § Ukoliko kažemo reč kuhinja, šta vam prvo pada na pamet?

Razumevanje dizajn paterna § Ukoliko kažemo reč kuhinja, šta vam prvo pada na pamet? - Verovatno frižider, šporet, sudopera, kredenac, možda i mikrotalasna pećnica, različite vrste hrane itd. § Sada kada svako zna šta je kuhinja, da li to znači da su sve kuhinje identične? - Ne, koncept kuhinje se može implementirati na hiljade različitih načina. § Kuhinja je samo patern, ideja koja omogućava ljudima da dele zajedničku viziju bez ograničenja kako implementirati tu viziju. Kako se definiše patern? Elementi paterna Primeri elemenata za kuhinju Problem koji rešava Potrebno nam je mesto gde ćemo čuvati i pripremati hranu Resursi koji su potrebni za rešavanje problema Možemo koristiti uređaje, hranu, posuđe … Pravila kako treba koristiti resurse za rešavanje problema Frižider skladišti hranu, rerna služi za prženje ili podgrevanje hrane… Smernice gde treba koristiti patern Ovaj patern dobro funkcioniše kada se koristi u kući, dok nije preporuka da se koristi van kuće (npr. kod kampovanja)

State design pattern § Da li ste ikada pisali metode u kojima treba da

State design pattern § Da li ste ikada pisali metode u kojima treba da koristite mnogo uslova kao što su if ili case iskazi? § ne možete da odredite kako metod radi dok prvo ne proverite uslove različitih atributa u objektu Stanje objekta je ništa drugo nego trenutna vrednost njegovih atributa kada proveravate vrednosti atributa u uslovu, vi ustvari proveravate stanje objekta § Kada implementacija metoda zavisi od promena u vrednostima atributa (promene stanja), kôd može postati veoma složen kako za pisanje tako i za održavanje § State design pattern nudi rešenje koje olakšava inicijalno pisanje koda i umanjuje troškove njegovog održavanja

Struktura State paterna

Struktura State paterna

Primer State design pattern-a Problem: § Potrebno je kreirati klasu Proizvod za sistem upravljanja

Primer State design pattern-a Problem: § Potrebno je kreirati klasu Proizvod za sistem upravljanja zalihama § Proizvod će se nalaziti u različitim stanjima Resursi koji rešavaju dati problem: 1. Proizvod koji obezbeđuje kontekst 2. Stanje proizvoda (Product. State) koje definiše različite implementacije metoda Pravila za state design pattern: § Product. State je generalizacija klasa koje definišu individualna stanja proizvoda kao i njihove implementacije za svaku metodu. § Proizvod prihvata pojedinačne zahteve i svaki delegira odgovarajućoj instanci podklase Product. State, koja predstavlja trenutno stanje proizvoda. § Instanca Product. State izvšava implementaciju i vraća kontrolu proizvodu.

Grafički prikaz State dizajn paterna za studiju slučaja

Grafički prikaz State dizajn paterna za studiju slučaja

Singleton dizajn patern § Singleton kreacioni dizajn patern koji osigurava da je jedna klasa

Singleton dizajn patern § Singleton kreacioni dizajn patern koji osigurava da je jedna klasa instancirana samo jedanput i da ta klasa omogućava pristup samo tom objektu § Situacija gde bi se Singleton mogao upotrebiti je ukoliko se klasa koristi za održavanje brojača ili neko slično stanje informacija kome pristupaju i ažuriraju mnogi delovi sistema § Svaki objekat koji zahteva klasu koja implementira Singleton patern biće joj data referenca na isti objekat

Primer: Singleton design pattern p Enkapsulirana statička promenljiva referencira jednu instancu klase i obezbeđuje

Primer: Singleton design pattern p Enkapsulirana statička promenljiva referencira jednu instancu klase i obezbeđuje tu referencu bilo kojoj klasi koja zahteva taj objekat

Primer Observer dizajn paterna § Observer – definiše jedan na prema više zavisnosti između

Primer Observer dizajn paterna § Observer – definiše jedan na prema više zavisnosti između objekata, tako da kada jedan objekat promeni stanje, objekti koji zavise od njega će automatski biti obavešteni i ažurirani § Problem: • Porudžbina (Order) treba da se ažurira u status “isporučena” (shipped) kada je proizvod napustio svoje odredište • Status “isporučena” je uslov koji povlači Izdavanje otpremnice (Accounts Receivable) i proces praćenja porudžbine (Order tracking process) § Resursi koji rešavaju dati problem: 1. Observable (observed) object (posmatrani objekat) – Concrete subject: skladišti stanje Concrete. Observer objekata i šalje notifikaciju njihovim posmatračima kada se promeni stanje. 2. Observer object (objekat Posmatrač) – Concrete. Observer: održava referencu na Concrete. Subject objekat i skladišti stanje koje treba da bude konzistentno sa subjektom. § Pravila za state design pattern: 1. Observer – obezbeđuje ga klasa Order 2. Observable – obezbeđuje ga objekat Shipment koji se posmatra Order govori Shipment objektu da želi da bude obavešten kada se nešto dogodi. Shipment postavlja Order na listu observera koje treba obavestiti. Kada je Shipment isporučen, Shipment šalje standadne notifikacije svim observerima na listi.

Modelovanje Observer dizajn paterna pomoću alata RSA § Rational Software Architect (RSA) sadrži dizajn

Modelovanje Observer dizajn paterna pomoću alata RSA § Rational Software Architect (RSA) sadrži dizajn paterne, te ih je potrebno samo importovati (moguće je i kreiranje sopstvenih dizajn paterna)

Primena Observer dizajn paterna § Kada selektujete odgovarajući patern dobijate instancu tog paterna koji

Primena Observer dizajn paterna § Kada selektujete odgovarajući patern dobijate instancu tog paterna koji izgleda kao na slici § Klikom na Enter argument name/value (u okviru instance Observer) unosite nazive vaših parametara, npr. za konkretnog observer-a unosite naziv Shopper ili ga samo prevučete i dobićete dijagram ka na slici “Observer Instance” na sledećem slajdu

Observer instance

Observer instance

Dodavanje metoda i atributa modelu

Dodavanje metoda i atributa modelu

Prevođenje modela u Java kod

Prevođenje modela u Java kod

Izvršavanje U prozoru Run this Transformation, kliknite na naredbu Create new Target Container. .

Izvršavanje U prozoru Run this Transformation, kliknite na naredbu Create new Target Container. . U prozoru New Java Project, imenujte projekat, npr: DWorks. Transformed. Java. Kada kliknete Run u prethodnom prozoru, u Model Exploreru će se pojaviti vaš Java projekat.

Pogled na Java kod § Duplim klikom na Order. java može se videti dobijeni

Pogled na Java kod § Duplim klikom na Order. java može se videti dobijeni kod

Vežba 1: Primeniti Singleton dizajn patern 1. Kreirati projekat: Check. My. Luck 2. Kreirati

Vežba 1: Primeniti Singleton dizajn patern 1. Kreirati projekat: Check. My. Luck 2. Kreirati jednostavan use case: 23

3. Kreirati dijagram aktivnosti:

3. Kreirati dijagram aktivnosti:

4. Kreirati dijagram klasa § Da bi koristili Dizajn paterne potrebno je da otvorite

4. Kreirati dijagram klasa § Da bi koristili Dizajn paterne potrebno je da otvorite Pattern Explorer View: Na glavnom meniju izaberite Window > Show View > Other Proširite Modeling folder Selektujte Pattern Explorer > OK Pattern Explorer view će se otvoriti na dnu ekrana, možete ga prebaciti na desnu stranu Proširite Design Patterns, a zatim Creational Izaberite Singleton

5. Primenite Singleton patern § Postoje dva načina da se primeni patern: 1. Desni

5. Primenite Singleton patern § Postoje dva načina da se primeni patern: 1. Desni klik na Singleton klasu, odaberite Apply Pattern • Proširite Check. My. Luck projekat sve do klase Luck. Server, koju ćete selektovati > Next > Finish. 2. Da se klasa Singleton prevuče na dijagram klasa • § U krajnje desnu kocku treba izvršiti povezivanje (binding): selektujte klasu i prevucite je do binding box-a Da bi prikazali veze između paterna i klase: desni klik na praznu površinu dijagrama > Select > All Desni klik na klasu i selektovati Filters > Show Related Elements Selektovati Show All Relationships > OK Naša klasa ima <<abstraction>> zavisnost na patern Singleton.

6. Generišite Java kod § Iz menija odaberite Modeling > Transform > New Configuration

6. Generišite Java kod § Iz menija odaberite Modeling > Transform > New Configuration § Imenujte transformaciju Transform. UMLto. Java § Iz prozora Transformation proširite Java Transformations i selektujte UML to Java > Next § Selektujte klasu Luck. Server (sa levog prozora - source) i kliknite na Create Target Container § Imenujte Java projekat Check. My. Luck. Code > Finish § Selektujte Check. My. Luck. Code (na desnoj strani ekrana kao Target) i kliknite Finish. § Kliknite Run

7. Izvršite program § Proširite Check. My. Luck. Code, zatim src, pa sve do

7. Izvršite program § Proširite Check. My. Luck. Code, zatim src, pa sve do Luck. Server. java i duplim klikom ga otvorite. § Prilagodite kod: . . . import java. io. IOException; public class Luck. Server { public String Check. My. Luck() { if (Math. random()>0. 5) { return "Winner"; } else { return "Looser"; } } public static void main(String args[]) throws IOException { while (true){ System. in. read(); System. out. println(Luck. Server. get. Instance(). Check. My. Luck()); } }

Paterni u RSA alatu:

Paterni u RSA alatu: