SlideShare a Scribd company logo
1 of 41
Download to read offline
Dizajn paterni
Command, Template method, Prototype



                 dr Zoran Jeremić
                 zoran.jeremic@gmail.com




                                           1
Paterni ponašanja

COMMAND


                    2
3
4
5
Problem koji treba rešiti


 Imamo jednostavan daljinski upravljač sa većim brojem
  on i off dugmadi i skup klasa različitih proizvođača koje
  se u značajnoj meri razlikuju.
    Metode on(), off(), setTemperature(), setVolume(),
     setDirection()...
 Možemo očekivati još različitih proizvođača u
  budućnosti.
 Daljinski je “glup” i prepoznaje samo generičke zahteve.
 Na koji način ćemo dizajnirati akcije kao što su “Uključi
  svetlo”, “otvori garažu”...


                                                              6
Command


 Namena
    Enkapsulira zahtev kao objekat čime omogućava parametrizaciju
     klijenata sa različitim zahtevima, redovima za čekanje, ili
     zahtevima za formiranje dnevnika rada, i podržava operacije čije
     se dejstvo može poništiti.
 Poznat takođe kao
    Action (akcija), Transaction (transakcija)
 Problem
    Potrebno je da prosleđuje zahteve objekata bez ikakvog znanja
     o operaciji koja se zahteva ili o primaocu zahteva




                                                                     7
8
9
Command patern

 Klijent kreira ConcreteCommand objekat i definiše njegove prijemnike.
 Invoker objekat smešta ConcreteCommand objekat.
 Invoker izdaje zahtev pozivanjem Execute command objekta. Kada su komande
  poništive (undo), ConcreteCommand čuva stanje za poništavanje pre pozivanja
  Execute.
 ConcreteCommand objekat poziva operacije na svom prijemniku da bi izvršio zahtev.




                                                                                  10
Još primera upotrebe




                       11
Još primera upotrebe

 Konobar uzima narudžbenicu, ili komandu od mušterije i enkapsulira
  zahtev pišući ga na formularu. Narudžbenica (formular) se stavlja u red
  brzih jela. Formulari ne zavise od menija i stoga se mogu koristiti za
  podršku naručivanja različitih jela.




                                                              Primer



                                                                            12
13
Još primera upotrebe

 Meniji implementirani korišćenjem Command
    Svaki izbor u Menu klasi je instanca MenuItem klase. Klasa
     Application kreira ove menije i njihove elemente kao i ostatak
     korisničkog interfejsa. Klasa Application takođe čuva podatak o
     Document objektima koje je korisnik otvorio.
    Klasa Application konfiguriše svaki MenuItem korišćenjem
     instance konkretne Command podklase. Kada korisnik selektuje
     MenuItem, MenuItem poziva Execute na svojoj komandi, i
     Execute izvršava operaciju.




                                                                       14
Još primera upotrebe


 MenuItem ne zna koje podklase klase Command koristi.
  Command podklase čuvaju prijemnik zahteva i pozivaju
  jednu ili više operacija na prijemniku <<npr next slide>>
 Na primer, PasteCommand podržava paste teksta sa
  klipborda u Document. Prijemnik PasteCommand klase
  je Document objekat. Execute operacija poziva Paste na
  primajućem Document objektu.




                                                          15
Command - primenljivost


 Command upotrebite u sledećim slučajevima:
    Kada hoćete da parametrizujete objekte akcijom koju treba da
     izvrše, kao npr MenuItem. Takvu parametrizaciju možete u
     proceduralnom jeziku izraziti funkcijom za uzvraćanje poziva, tj.
     funkcijom koja je negde registrovana da bi se kasnije pozivala.
    Kada želite da navedete, poređate i izvršite zahteve u različito
     vreme. Objekat Command može da ima životni ciklus nezavisan
     od prvobitnog zahteva. Ako primalac zahteva može da se
     predstavi na način nezavistan od adresnog prostora, možete
     objekat komande za taj zahtev da prenesete drugom procesu i
     tamo izvršite zahtev.




                                                                         16
Command - primenljivost


   Kada hoćete da podržite poništavanje akcije.
   Kada hoćete da podržite evidentiranje promena da bi se one
    mogle ponovo primeniti u slučaju pada sistema. Ako interfejs
    Command proširite operacijama učitavanja i čuvanja, moći ćete
    da održite trajnu evidenciju promena.
   Ako želite da struktuirate sistem oko operacija višeg nivoa
    izgrađenih od operacija na primitivnim objektima. Takva struktura
    je uobičajena kod informacionih sistema koji podržavaju
    transakcije.




                                                                    17
Paterni ponašanja

TEMPLATE METHOD


                    18
19
Problem




• Recept za kafu               • Recept za čaj
   – Prokuvati vodu               –   Prokuvati vodu
   – Staviti kafu u ključalu      –   Staviti čaj u ključalu vodu
     vodu                         –   Sipati čaj u šolju
   – Sipati kafu u šolju          –   Dodati limun
   – Dodati šećer i mleko
                                                               20
Klasa Coffee

public class Coffee {
           void prepareRecipe() {
                      boilWater();
                      brewCoffeeGrinds();
                      pourInCup();
                      addSugarAndMilk();
           }
           public void boilWater() {
                      System.out.println(“Boiling water”);
           }
           public void brewCoffeeGrinds() {
                      System.out.println(“Dripping Coffee through filter”);
           }
           public void pourInCup() {
                      System.out.println(“Pouring into cup”);
           }
           public void addSugarAndMilk() {
                      System.out.println(“Adding Sugar and Milk”);
           }
}
                                                                              21
Klasa Tea

public class Tea {
           void prepareRecipe() {
                      boilWater();
                      steepTeaBag();
                      pourInCup();
                      addLemon();
           }
           public void boilWater() {
                      System.out.println(“Boiling water”);
           }
           public void steepTeaBag() {
                      System.out.println(“Steeping the tea”);
           }
           public void addLemon() {
                      System.out.println(“Adding Lemon”);
           }
           public void pourInCup() {
                      System.out.println(“Pouring into cup”);
           }
}
                                                                22
Dijagram klasa sa apstrakcijom




                                 23
Problem

 Prokuvati vodu                                     Ove dve su već
 Staviti kafu (ili čaj) u ključalu vodu             abstrakovane u
                                                     osnovnu klasu
 Sipati kafu (ili čaj) u šolju
 Dodati šećer i mleko (ili limun)                  Nisu abstrakovane ali
                                                    su u suštini iste, samo
                                                    primenjuju drugi
                                                    napitak.

         Coffee                      Tea
                                                    void prepareRecipe() {
void prepareRecipe() {     void prepareRecipe() {
                                                     boilWater();
 boilWater();               boilWater();
                                                     brew();
 brewCoffeeGrinds();        steepTeaBag();
                                                     pourInCup();
 pourInCup();               pourInCup();
                                                     addCondiments();
 addSugarAndMilk();         addLemon();


                                                                          24
Klasa CaffeineBeverage

public abstract class CaffeineBeverage {
         void prepareRecipe() {
                    boilWater();
                    brew();
                    pourInCup();
                    addCondiments);
         }
         abstract void brew();
         abstract void addCondiments();

         public void boilWater() {
                    System.out.println(“Boiling water”);
         }
         public void pourInCup() {
                    System.out.println(“Pouring into cup”);
         }
}




                                                              25
Klase Coffee i Tea

 public class Coffee extends CaffeineBeverage{
            public void brew() {
                       System.out.println(“Dripping Coffee through filter”);
            }
            public void addCondiments() {
                       System.out.println(“Adding Sugar and Milk”);
            }
 }


 public class Tea extends CaffeineBeverage{
            public void brew() {
                       System.out.println(“Steeping the tea”);
            }
            public void addCondiments() {
                       System.out.println(“Adding Lemmon”);
            }
 }


                                                                               26
Template method


 Namena
   Definiše skelet algoritma u nekoj operaciji prepuštajući
    implementaciju nekih koraka potklasi. Template metod
    dozvoljava da potklase redefinišu neke korake altoritma ne
    menjajući strukturu altoritma.




                                                                 27
Template method - primer

 Graditelji kuća koriste Template metod kada razvijaju novi ogranak. Tipičan
  ogranak se sastoji od ograničenog broja planova spratova, sa različitim
  varijantama za svaki plan sprata. Unutar plana sprata, osnova, okviri,
  vodovodne cevi i električna instalacija su identični za svaku kuću. Varijacije
  se uvode u kasnijim fazama konstrukcije da bi proizveli veći broj modela.




                            Primer


                                                                              28
Template method - struktura




                              29
Template method - primenljivost


 Za impementiranje nepromenljivih delova algoritma na
  jednom mestu i prepuštanje implementacije ponašanja
  koje se menja potklasama.
 Kada ponašanje zajedničko za potklase treba izdvojiti i
  staviti u zajedničku klasu da bi se izbeglo dupliranje
  koda.
 Za kontrolisanje proširivanja potklasa. Možete da
  definišete šablonski metod koji na određenim tačkama
  poziva “priljučene” operacije i na taj način dopušta
  proširivanje samo u tim tačkama.


                                                            30
Template method - posledice


 Template method poziva sledeće vrste operacija:
    Konkretne operacije (iz ConcreteClass ili klijentske klase)
    Konkretne operacije AbstractClass klase
    Primitivne operacije (tj. Apstraktne operacije)
    Proizvodne metode
    Priključne operacije – obezbeđuju podrazumevano ponašanje
     koje potklase mogu po potrebi da prošire. Priljučena operacija
     često podrazumevano ništa ne radi.




                                                                      31
Gradivni paterni

PROTOTYPE


                   32
Prototype (prototip)




                       33
Prototype

 Određuje vrste objekata koji se prave koristeći prototipski primerak i
  pravi nove objekte kopiranjem tog prototipa.
 Prototipovi novih proizvoda se često izrađuju pre pune proizvodnje,
  ali u ovom primeru prototip je pasivan i ne učestvuje u kopiranju
  samog sebe. Deoba ćelija, koja rezultuje u dobijanju dve identične
  ćelije, je primer kako prototip igra aktivnu ulogu u kopiranju samog
  sebe i demonstrira Prototype patern. Kada se ćelija deli, dobijaju se
  dve identične ćelije. Drugim rečima ćelija klonira samu sebe.




                                                                       34
Prototype


 Namena
   Određuje vrste objekata koji se prave koristeći prototipski
    primerak i pravi nove objekte kopiranjem tog prototipa.




                                                                  35
Prototype - problem

 Okruženje u primeru obezbeđuje apstraktnu klasu Graphic za
  grafičke komponente, npr. beleške i note. Osim toga, ona
  obezbeđuje apstraktnu klasu Tool za definisanje alata poput onih u
  paleti.
 Okruženje takođe definiše GraphicTool podklasu za alate koji
  kreiraju instance grafičkih objekata i dodaje ih u dokument.




                                                                       36
Prototype - problem

 GraphicTool klasa pripada okruženju dok su alati za beleške i note
  specifični u našoj aplikaciji. GraphicTool ne zna kako da kreira
  instance naših muzičkih klasa. Mogli bismo da napravimo podklase
  GraphicTool za svaku vrstu muzičkog objekta, ali tako bi nastalo
  mnogo podklasa koje bi se razlikovale samo po vrsti muzičkog
  objekta koji instanciraju. Sastavljanje objekata je fleksibilna
  alternativa za potklase.




                                                                       37
Prototype - rešenje


 Rešenje je da se natera klasa GraphicTool da pravi nov
  objekat klase Graphic kopiranjem ili kloniranjem neke
  instance potklase klase Graphic. Tu instancu nazivamo
  prototipom. Klasa GraphicTool se parametrizuje
  prototipom koji treba da klonira i doda u dokument.




                                                           38
Prototype - primenjivost


 Prototype treba da se koristi kada sistem ne sme da
  zavisi od toga kako se njegovi proizvodi prave,
  sastavljaju i predstavljaju,
 Kada se klase koje treba instancirati određuju u vreme
  izvršavanja, na primer dinamičkim učitavanjem




                                                           39
Prototype - struktura




                        40
Prototype - posledice


 Dodavanje i uklanjanje proizvoda u vreme izvršavanja
 Određivanje novih objekata menjanjem vrednosti
 Određivanje novih objekata menjanjem strukture
 Smanjivanje broja podklasa
 Dinamičko konfigurisanje aplikacije klasama




                                                         41

More Related Content

More from Zoran Jeremic

T 3.2 definisanje strukture sistema koriscenjem uml dijagrama klasa
 T 3.2 definisanje strukture sistema koriscenjem uml dijagrama klasa T 3.2 definisanje strukture sistema koriscenjem uml dijagrama klasa
T 3.2 definisanje strukture sistema koriscenjem uml dijagrama klasaZoran Jeremic
 
T 3.1 definisanje zahteva koriscenjem use case dijagrama
 T 3.1 definisanje zahteva koriscenjem use case dijagrama T 3.1 definisanje zahteva koriscenjem use case dijagrama
T 3.1 definisanje zahteva koriscenjem use case dijagramaZoran Jeremic
 
T 3 uvod u modelovanje koriscenjem uml-a
 T 3 uvod u modelovanje koriscenjem uml-a T 3 uvod u modelovanje koriscenjem uml-a
T 3 uvod u modelovanje koriscenjem uml-aZoran Jeremic
 
T 2 zivotni ciklus i metodologije razvoja softvera
 T 2 zivotni ciklus i metodologije razvoja softvera T 2 zivotni ciklus i metodologije razvoja softvera
T 2 zivotni ciklus i metodologije razvoja softveraZoran Jeremic
 
T 1 uvod u softversko inzenjerstvo
 T 1 uvod u softversko inzenjerstvo T 1 uvod u softversko inzenjerstvo
T 1 uvod u softversko inzenjerstvoZoran Jeremic
 
Synergy of Performance-Based Model and Cognitive Trait Model in DP-ITS
Synergy of Performance-Based Model and Cognitive Trait Model in DP-ITSSynergy of Performance-Based Model and Cognitive Trait Model in DP-ITS
Synergy of Performance-Based Model and Cognitive Trait Model in DP-ITSZoran Jeremic
 
A Semantic-rich Framework for Learning Software Patterns
A Semantic-rich Framework for Learning Software PatternsA Semantic-rich Framework for Learning Software Patterns
A Semantic-rich Framework for Learning Software PatternsZoran Jeremic
 
Project-based Collaborative Learning Environment with Context-aware Education...
Project-based Collaborative Learning Environment with Context-aware Education...Project-based Collaborative Learning Environment with Context-aware Education...
Project-based Collaborative Learning Environment with Context-aware Education...Zoran Jeremic
 
Semantically-enabled Project-based Collaborative Learning of Software Patterns
Semantically-enabled Project-based Collaborative Learning of Software PatternsSemantically-enabled Project-based Collaborative Learning of Software Patterns
Semantically-enabled Project-based Collaborative Learning of Software PatternsZoran Jeremic
 
A Semantic-rich Framework for Learning Software Patterns
A Semantic-rich Framework for Learning Software PatternsA Semantic-rich Framework for Learning Software Patterns
A Semantic-rich Framework for Learning Software PatternsZoran Jeremic
 
Project-based Collaborative Learning of Software Patterns
Project-based Collaborative Learning of Software PatternsProject-based Collaborative Learning of Software Patterns
Project-based Collaborative Learning of Software PatternsZoran Jeremic
 
A Semantic-rich Framework for Learning Software Patterns
A Semantic-rich Framework for Learning Software PatternsA Semantic-rich Framework for Learning Software Patterns
A Semantic-rich Framework for Learning Software PatternsZoran Jeremic
 

More from Zoran Jeremic (13)

T 3.2 definisanje strukture sistema koriscenjem uml dijagrama klasa
 T 3.2 definisanje strukture sistema koriscenjem uml dijagrama klasa T 3.2 definisanje strukture sistema koriscenjem uml dijagrama klasa
T 3.2 definisanje strukture sistema koriscenjem uml dijagrama klasa
 
T 3.1 definisanje zahteva koriscenjem use case dijagrama
 T 3.1 definisanje zahteva koriscenjem use case dijagrama T 3.1 definisanje zahteva koriscenjem use case dijagrama
T 3.1 definisanje zahteva koriscenjem use case dijagrama
 
T 3 uvod u modelovanje koriscenjem uml-a
 T 3 uvod u modelovanje koriscenjem uml-a T 3 uvod u modelovanje koriscenjem uml-a
T 3 uvod u modelovanje koriscenjem uml-a
 
T 2 zivotni ciklus i metodologije razvoja softvera
 T 2 zivotni ciklus i metodologije razvoja softvera T 2 zivotni ciklus i metodologije razvoja softvera
T 2 zivotni ciklus i metodologije razvoja softvera
 
T 1 uvod u softversko inzenjerstvo
 T 1 uvod u softversko inzenjerstvo T 1 uvod u softversko inzenjerstvo
T 1 uvod u softversko inzenjerstvo
 
PhD Dissertation
PhD DissertationPhD Dissertation
PhD Dissertation
 
Synergy of Performance-Based Model and Cognitive Trait Model in DP-ITS
Synergy of Performance-Based Model and Cognitive Trait Model in DP-ITSSynergy of Performance-Based Model and Cognitive Trait Model in DP-ITS
Synergy of Performance-Based Model and Cognitive Trait Model in DP-ITS
 
A Semantic-rich Framework for Learning Software Patterns
A Semantic-rich Framework for Learning Software PatternsA Semantic-rich Framework for Learning Software Patterns
A Semantic-rich Framework for Learning Software Patterns
 
Project-based Collaborative Learning Environment with Context-aware Education...
Project-based Collaborative Learning Environment with Context-aware Education...Project-based Collaborative Learning Environment with Context-aware Education...
Project-based Collaborative Learning Environment with Context-aware Education...
 
Semantically-enabled Project-based Collaborative Learning of Software Patterns
Semantically-enabled Project-based Collaborative Learning of Software PatternsSemantically-enabled Project-based Collaborative Learning of Software Patterns
Semantically-enabled Project-based Collaborative Learning of Software Patterns
 
A Semantic-rich Framework for Learning Software Patterns
A Semantic-rich Framework for Learning Software PatternsA Semantic-rich Framework for Learning Software Patterns
A Semantic-rich Framework for Learning Software Patterns
 
Project-based Collaborative Learning of Software Patterns
Project-based Collaborative Learning of Software PatternsProject-based Collaborative Learning of Software Patterns
Project-based Collaborative Learning of Software Patterns
 
A Semantic-rich Framework for Learning Software Patterns
A Semantic-rich Framework for Learning Software PatternsA Semantic-rich Framework for Learning Software Patterns
A Semantic-rich Framework for Learning Software Patterns
 

Recently uploaded

Razvoj samopouzdanja kod skolskog deteta
Razvoj samopouzdanja kod skolskog detetaRazvoj samopouzdanja kod skolskog deteta
Razvoj samopouzdanja kod skolskog detetaNerkoJVG
 
Istorija opstinsko takmicenje za 6. razred - test_2024.pdf
Istorija opstinsko takmicenje za 6. razred - test_2024.pdfIstorija opstinsko takmicenje za 6. razred - test_2024.pdf
Istorija opstinsko takmicenje za 6. razred - test_2024.pdfpauknatasa
 
Istorija ključ za okruzno takmicenje za 6. razred_2024
Istorija ključ za okruzno takmicenje za 6. razred_2024Istorija ključ za okruzno takmicenje za 6. razred_2024
Istorija ključ za okruzno takmicenje za 6. razred_2024pauknatasa
 
Profesionalna_orijentacija / Srednja Škola Hipokrat
Profesionalna_orijentacija / Srednja Škola HipokratProfesionalna_orijentacija / Srednja Škola Hipokrat
Profesionalna_orijentacija / Srednja Škola HipokratNerkoJVG
 
Istorija okruzno takmicenje za 7. razred 2022.pdf
Istorija okruzno takmicenje za 7. razred 2022.pdfIstorija okruzno takmicenje za 7. razred 2022.pdf
Istorija okruzno takmicenje za 7. razred 2022.pdfpauknatasa
 
Istorija kljuc za okruzno takmicenje za 6. razred 2022
Istorija kljuc za okruzno takmicenje za 6. razred 2022Istorija kljuc za okruzno takmicenje za 6. razred 2022
Istorija kljuc za okruzno takmicenje za 6. razred 2022pauknatasa
 
Istorija okruzno takmicenje za 6. razred_20242024.pdf
Istorija okruzno takmicenje za 6. razred_20242024.pdfIstorija okruzno takmicenje za 6. razred_20242024.pdf
Istorija okruzno takmicenje za 6. razred_20242024.pdfpauknatasa
 
Istorija okruzno takmicenje za 6. razred 2022. godine.pdf
Istorija okruzno takmicenje za 6. razred 2022. godine.pdfIstorija okruzno takmicenje za 6. razred 2022. godine.pdf
Istorija okruzno takmicenje za 6. razred 2022. godine.pdfpauknatasa
 
Istorija 6. razred okruzno takmicenje 2023 test.pdf
Istorija 6. razred okruzno takmicenje 2023 test.pdfIstorija 6. razred okruzno takmicenje 2023 test.pdf
Istorija 6. razred okruzno takmicenje 2023 test.pdfpauknatasa
 
Istorija 6. razred opstinsko takmicenje 2022.pdf
Istorija 6. razred opstinsko takmicenje 2022.pdfIstorija 6. razred opstinsko takmicenje 2022.pdf
Istorija 6. razred opstinsko takmicenje 2022.pdfpauknatasa
 
Птице које можемо да пронађемо у Београду
Птице које можемо да пронађемо у БеоградуПтице које можемо да пронађемо у Београду
Птице које можемо да пронађемо у БеоградуИвана Ћуковић
 
Istorija kljuc za okruzno takmicenje za 7. razred 2022. godine.doc
Istorija kljuc za okruzno takmicenje za 7. razred 2022. godine.docIstorija kljuc za okruzno takmicenje za 7. razred 2022. godine.doc
Istorija kljuc za okruzno takmicenje za 7. razred 2022. godine.docpauknatasa
 

Recently uploaded (15)

Razvoj samopouzdanja kod skolskog deteta
Razvoj samopouzdanja kod skolskog detetaRazvoj samopouzdanja kod skolskog deteta
Razvoj samopouzdanja kod skolskog deteta
 
Istorija opstinsko takmicenje za 6. razred - test_2024.pdf
Istorija opstinsko takmicenje za 6. razred - test_2024.pdfIstorija opstinsko takmicenje za 6. razred - test_2024.pdf
Istorija opstinsko takmicenje za 6. razred - test_2024.pdf
 
Istorija ključ za okruzno takmicenje za 6. razred_2024
Istorija ključ za okruzno takmicenje za 6. razred_2024Istorija ključ za okruzno takmicenje za 6. razred_2024
Istorija ključ za okruzno takmicenje za 6. razred_2024
 
Profesionalna_orijentacija / Srednja Škola Hipokrat
Profesionalna_orijentacija / Srednja Škola HipokratProfesionalna_orijentacija / Srednja Škola Hipokrat
Profesionalna_orijentacija / Srednja Škola Hipokrat
 
Istorija okruzno takmicenje za 7. razred 2022.pdf
Istorija okruzno takmicenje za 7. razred 2022.pdfIstorija okruzno takmicenje za 7. razred 2022.pdf
Istorija okruzno takmicenje za 7. razred 2022.pdf
 
OIR12-L1.pptx
OIR12-L1.pptxOIR12-L1.pptx
OIR12-L1.pptx
 
Istorija kljuc za okruzno takmicenje za 6. razred 2022
Istorija kljuc za okruzno takmicenje za 6. razred 2022Istorija kljuc za okruzno takmicenje za 6. razred 2022
Istorija kljuc za okruzno takmicenje za 6. razred 2022
 
OIR12-L2.pptx
OIR12-L2.pptxOIR12-L2.pptx
OIR12-L2.pptx
 
Istorija okruzno takmicenje za 6. razred_20242024.pdf
Istorija okruzno takmicenje za 6. razred_20242024.pdfIstorija okruzno takmicenje za 6. razred_20242024.pdf
Istorija okruzno takmicenje za 6. razred_20242024.pdf
 
Istorija okruzno takmicenje za 6. razred 2022. godine.pdf
Istorija okruzno takmicenje za 6. razred 2022. godine.pdfIstorija okruzno takmicenje za 6. razred 2022. godine.pdf
Istorija okruzno takmicenje za 6. razred 2022. godine.pdf
 
OIR-V10.pptx
OIR-V10.pptxOIR-V10.pptx
OIR-V10.pptx
 
Istorija 6. razred okruzno takmicenje 2023 test.pdf
Istorija 6. razred okruzno takmicenje 2023 test.pdfIstorija 6. razred okruzno takmicenje 2023 test.pdf
Istorija 6. razred okruzno takmicenje 2023 test.pdf
 
Istorija 6. razred opstinsko takmicenje 2022.pdf
Istorija 6. razred opstinsko takmicenje 2022.pdfIstorija 6. razred opstinsko takmicenje 2022.pdf
Istorija 6. razred opstinsko takmicenje 2022.pdf
 
Птице које можемо да пронађемо у Београду
Птице које можемо да пронађемо у БеоградуПтице које можемо да пронађемо у Београду
Птице које можемо да пронађемо у Београду
 
Istorija kljuc za okruzno takmicenje za 7. razred 2022. godine.doc
Istorija kljuc za okruzno takmicenje za 7. razred 2022. godine.docIstorija kljuc za okruzno takmicenje za 7. razred 2022. godine.doc
Istorija kljuc za okruzno takmicenje za 7. razred 2022. godine.doc
 

T 3.6 design paterni (b)

  • 1. Dizajn paterni Command, Template method, Prototype dr Zoran Jeremić zoran.jeremic@gmail.com 1
  • 3. 3
  • 4. 4
  • 5. 5
  • 6. Problem koji treba rešiti  Imamo jednostavan daljinski upravljač sa većim brojem on i off dugmadi i skup klasa različitih proizvođača koje se u značajnoj meri razlikuju.  Metode on(), off(), setTemperature(), setVolume(), setDirection()...  Možemo očekivati još različitih proizvođača u budućnosti.  Daljinski je “glup” i prepoznaje samo generičke zahteve.  Na koji način ćemo dizajnirati akcije kao što su “Uključi svetlo”, “otvori garažu”... 6
  • 7. Command  Namena  Enkapsulira zahtev kao objekat čime omogućava parametrizaciju klijenata sa različitim zahtevima, redovima za čekanje, ili zahtevima za formiranje dnevnika rada, i podržava operacije čije se dejstvo može poništiti.  Poznat takođe kao  Action (akcija), Transaction (transakcija)  Problem  Potrebno je da prosleđuje zahteve objekata bez ikakvog znanja o operaciji koja se zahteva ili o primaocu zahteva 7
  • 8. 8
  • 9. 9
  • 10. Command patern  Klijent kreira ConcreteCommand objekat i definiše njegove prijemnike.  Invoker objekat smešta ConcreteCommand objekat.  Invoker izdaje zahtev pozivanjem Execute command objekta. Kada su komande poništive (undo), ConcreteCommand čuva stanje za poništavanje pre pozivanja Execute.  ConcreteCommand objekat poziva operacije na svom prijemniku da bi izvršio zahtev. 10
  • 12. Još primera upotrebe  Konobar uzima narudžbenicu, ili komandu od mušterije i enkapsulira zahtev pišući ga na formularu. Narudžbenica (formular) se stavlja u red brzih jela. Formulari ne zavise od menija i stoga se mogu koristiti za podršku naručivanja različitih jela. Primer 12
  • 13. 13
  • 14. Još primera upotrebe  Meniji implementirani korišćenjem Command  Svaki izbor u Menu klasi je instanca MenuItem klase. Klasa Application kreira ove menije i njihove elemente kao i ostatak korisničkog interfejsa. Klasa Application takođe čuva podatak o Document objektima koje je korisnik otvorio.  Klasa Application konfiguriše svaki MenuItem korišćenjem instance konkretne Command podklase. Kada korisnik selektuje MenuItem, MenuItem poziva Execute na svojoj komandi, i Execute izvršava operaciju. 14
  • 15. Još primera upotrebe  MenuItem ne zna koje podklase klase Command koristi. Command podklase čuvaju prijemnik zahteva i pozivaju jednu ili više operacija na prijemniku <<npr next slide>>  Na primer, PasteCommand podržava paste teksta sa klipborda u Document. Prijemnik PasteCommand klase je Document objekat. Execute operacija poziva Paste na primajućem Document objektu. 15
  • 16. Command - primenljivost  Command upotrebite u sledećim slučajevima:  Kada hoćete da parametrizujete objekte akcijom koju treba da izvrše, kao npr MenuItem. Takvu parametrizaciju možete u proceduralnom jeziku izraziti funkcijom za uzvraćanje poziva, tj. funkcijom koja je negde registrovana da bi se kasnije pozivala.  Kada želite da navedete, poređate i izvršite zahteve u različito vreme. Objekat Command može da ima životni ciklus nezavisan od prvobitnog zahteva. Ako primalac zahteva može da se predstavi na način nezavistan od adresnog prostora, možete objekat komande za taj zahtev da prenesete drugom procesu i tamo izvršite zahtev. 16
  • 17. Command - primenljivost  Kada hoćete da podržite poništavanje akcije.  Kada hoćete da podržite evidentiranje promena da bi se one mogle ponovo primeniti u slučaju pada sistema. Ako interfejs Command proširite operacijama učitavanja i čuvanja, moći ćete da održite trajnu evidenciju promena.  Ako želite da struktuirate sistem oko operacija višeg nivoa izgrađenih od operacija na primitivnim objektima. Takva struktura je uobičajena kod informacionih sistema koji podržavaju transakcije. 17
  • 19. 19
  • 20. Problem • Recept za kafu • Recept za čaj – Prokuvati vodu – Prokuvati vodu – Staviti kafu u ključalu – Staviti čaj u ključalu vodu vodu – Sipati čaj u šolju – Sipati kafu u šolju – Dodati limun – Dodati šećer i mleko 20
  • 21. Klasa Coffee public class Coffee { void prepareRecipe() { boilWater(); brewCoffeeGrinds(); pourInCup(); addSugarAndMilk(); } public void boilWater() { System.out.println(“Boiling water”); } public void brewCoffeeGrinds() { System.out.println(“Dripping Coffee through filter”); } public void pourInCup() { System.out.println(“Pouring into cup”); } public void addSugarAndMilk() { System.out.println(“Adding Sugar and Milk”); } } 21
  • 22. Klasa Tea public class Tea { void prepareRecipe() { boilWater(); steepTeaBag(); pourInCup(); addLemon(); } public void boilWater() { System.out.println(“Boiling water”); } public void steepTeaBag() { System.out.println(“Steeping the tea”); } public void addLemon() { System.out.println(“Adding Lemon”); } public void pourInCup() { System.out.println(“Pouring into cup”); } } 22
  • 23. Dijagram klasa sa apstrakcijom 23
  • 24. Problem  Prokuvati vodu Ove dve su već  Staviti kafu (ili čaj) u ključalu vodu abstrakovane u osnovnu klasu  Sipati kafu (ili čaj) u šolju  Dodati šećer i mleko (ili limun) Nisu abstrakovane ali su u suštini iste, samo primenjuju drugi napitak. Coffee Tea void prepareRecipe() { void prepareRecipe() { void prepareRecipe() { boilWater(); boilWater(); boilWater(); brew(); brewCoffeeGrinds(); steepTeaBag(); pourInCup(); pourInCup(); pourInCup(); addCondiments(); addSugarAndMilk(); addLemon(); 24
  • 25. Klasa CaffeineBeverage public abstract class CaffeineBeverage { void prepareRecipe() { boilWater(); brew(); pourInCup(); addCondiments); } abstract void brew(); abstract void addCondiments(); public void boilWater() { System.out.println(“Boiling water”); } public void pourInCup() { System.out.println(“Pouring into cup”); } } 25
  • 26. Klase Coffee i Tea public class Coffee extends CaffeineBeverage{ public void brew() { System.out.println(“Dripping Coffee through filter”); } public void addCondiments() { System.out.println(“Adding Sugar and Milk”); } } public class Tea extends CaffeineBeverage{ public void brew() { System.out.println(“Steeping the tea”); } public void addCondiments() { System.out.println(“Adding Lemmon”); } } 26
  • 27. Template method  Namena  Definiše skelet algoritma u nekoj operaciji prepuštajući implementaciju nekih koraka potklasi. Template metod dozvoljava da potklase redefinišu neke korake altoritma ne menjajući strukturu altoritma. 27
  • 28. Template method - primer  Graditelji kuća koriste Template metod kada razvijaju novi ogranak. Tipičan ogranak se sastoji od ograničenog broja planova spratova, sa različitim varijantama za svaki plan sprata. Unutar plana sprata, osnova, okviri, vodovodne cevi i električna instalacija su identični za svaku kuću. Varijacije se uvode u kasnijim fazama konstrukcije da bi proizveli veći broj modela. Primer 28
  • 29. Template method - struktura 29
  • 30. Template method - primenljivost  Za impementiranje nepromenljivih delova algoritma na jednom mestu i prepuštanje implementacije ponašanja koje se menja potklasama.  Kada ponašanje zajedničko za potklase treba izdvojiti i staviti u zajedničku klasu da bi se izbeglo dupliranje koda.  Za kontrolisanje proširivanja potklasa. Možete da definišete šablonski metod koji na određenim tačkama poziva “priljučene” operacije i na taj način dopušta proširivanje samo u tim tačkama. 30
  • 31. Template method - posledice  Template method poziva sledeće vrste operacija:  Konkretne operacije (iz ConcreteClass ili klijentske klase)  Konkretne operacije AbstractClass klase  Primitivne operacije (tj. Apstraktne operacije)  Proizvodne metode  Priključne operacije – obezbeđuju podrazumevano ponašanje koje potklase mogu po potrebi da prošire. Priljučena operacija često podrazumevano ništa ne radi. 31
  • 34. Prototype  Određuje vrste objekata koji se prave koristeći prototipski primerak i pravi nove objekte kopiranjem tog prototipa.  Prototipovi novih proizvoda se često izrađuju pre pune proizvodnje, ali u ovom primeru prototip je pasivan i ne učestvuje u kopiranju samog sebe. Deoba ćelija, koja rezultuje u dobijanju dve identične ćelije, je primer kako prototip igra aktivnu ulogu u kopiranju samog sebe i demonstrira Prototype patern. Kada se ćelija deli, dobijaju se dve identične ćelije. Drugim rečima ćelija klonira samu sebe. 34
  • 35. Prototype  Namena  Određuje vrste objekata koji se prave koristeći prototipski primerak i pravi nove objekte kopiranjem tog prototipa. 35
  • 36. Prototype - problem  Okruženje u primeru obezbeđuje apstraktnu klasu Graphic za grafičke komponente, npr. beleške i note. Osim toga, ona obezbeđuje apstraktnu klasu Tool za definisanje alata poput onih u paleti.  Okruženje takođe definiše GraphicTool podklasu za alate koji kreiraju instance grafičkih objekata i dodaje ih u dokument. 36
  • 37. Prototype - problem  GraphicTool klasa pripada okruženju dok su alati za beleške i note specifični u našoj aplikaciji. GraphicTool ne zna kako da kreira instance naših muzičkih klasa. Mogli bismo da napravimo podklase GraphicTool za svaku vrstu muzičkog objekta, ali tako bi nastalo mnogo podklasa koje bi se razlikovale samo po vrsti muzičkog objekta koji instanciraju. Sastavljanje objekata je fleksibilna alternativa za potklase. 37
  • 38. Prototype - rešenje  Rešenje je da se natera klasa GraphicTool da pravi nov objekat klase Graphic kopiranjem ili kloniranjem neke instance potklase klase Graphic. Tu instancu nazivamo prototipom. Klasa GraphicTool se parametrizuje prototipom koji treba da klonira i doda u dokument. 38
  • 39. Prototype - primenjivost  Prototype treba da se koristi kada sistem ne sme da zavisi od toga kako se njegovi proizvodi prave, sastavljaju i predstavljaju,  Kada se klase koje treba instancirati određuju u vreme izvršavanja, na primer dinamičkim učitavanjem 39
  • 41. Prototype - posledice  Dodavanje i uklanjanje proizvoda u vreme izvršavanja  Određivanje novih objekata menjanjem vrednosti  Određivanje novih objekata menjanjem strukture  Smanjivanje broja podklasa  Dinamičko konfigurisanje aplikacije klasama 41