semin r java - n vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...znovupouzˇitelnost...

25
Semin ´ r Java avrhov ´ e vzory Radek Koˇ ı Fakulta informaˇ cn´ ıch technologi´ ı VUT Duben 2009 Radek Koˇ ı Semin ´ r Java – N ´ avrhov ´ e vzory 1/ 25

Upload: others

Post on 19-Jan-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Seminar JavaNavrhove vzory

Radek Kocı

Fakulta informacnıch technologiı VUT

Duben 2009

Radek Kocı Seminar Java – Navrhove vzory 1/ 25

Page 2: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Znovupouzitelnost

Dedicnost

implementace trıdy pomocı jine (jiz existujıcı)

znovupouzitelnost bıle skrınkyvyhody a nevyhody

prımocare pouzitı, jednodussı uprava metodstaticketesna vazba s nadrazenou trıdou (problemy s modifikacı)

Radek Kocı Seminar Java – Navrhove vzory 2/ 25

Page 3: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Znovupouzitelnost

Skladanı

nova funkce = poskladanı jiz existujıcıch objektu

znovupouzitelnost cerne skrınkyvyhody a nevyhody

dynamickeobjekty se pouzıvajı pres rozhranıobjekty lze za behu zamenovat (stejne typy)mensı, jednodussı a prehlednejsı navrh

Radek Kocı Seminar Java – Navrhove vzory 3/ 25

Page 4: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Znovupouzitelnost

Skladanı

class A{

foo() { self.m(); }m() { print("Object A doing the job"); }

}

class B{

A a;foo() { a.foo(); }m() { print("Object B doing the job"); }

}

B b;b.foo() => Object A doing the job.

Radek Kocı Seminar Java – Navrhove vzory 4/ 25

Page 5: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Znovupouzitelnost

Skladanı

class A{

foo() { self.m(); }m() { print("Object A doing the job"); }

}

class B{

A a;foo() { a.foo(); }m() { print("Object B doing the job"); }

}

B b;b.foo() => Object B doing the job.

Radek Kocı Seminar Java – Navrhove vzory 5/ 25

Page 6: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Znovupouzitelnost

Parametrizovane typy (genericke programovanı)

templates v C++ (viz Standard Template Library – STL)

generics v Java 5

definujı parametrizovane typy

ma vyznam u staticky typovanych jazyku

Radek Kocı Seminar Java – Navrhove vzory 6/ 25

Page 7: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Znovupouzitelnost

template <typename T>T max(T x, T y){

if (x < y)return y;

elsereturn x;

}

max(3.0, 5.5); => T je typu double

Radek Kocı Seminar Java – Navrhove vzory 7/ 25

Page 8: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Navrhove vzory (design patterns)

Objektove orientovany navrh a programovanıznovupouzitelnost?

zajistenı znovupouzitelnosti⇒ obecny navrhzajistenı aplikovatelnosti na reseny problem⇒ specifickynavrhspor

... prestoproc nevyuzıt resenı, ktere jiz fungovalotakova resenı jsou vysledkem mnoha pokusu a pouzıvanı⇒ vzory pro resenı stejnych typu problemu

Radek Kocı Seminar Java – Navrhove vzory 8/ 25

Page 9: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Navrhove vzory (design patterns)

Navrhove vzory

zakladnı sada resenı dulezitych a stale se opakujıcıchnavrhu

usnadnujı znovupouzitelnost

umoznujı efektivnı navrh (vyber vhodnych alternativ,dokumentace, . . . )

Radek Kocı Seminar Java – Navrhove vzory 9/ 25

Page 10: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Navrhovy vzor

Navrhovy vzor

nazyva, zabstraktnuje a identifikuje klıcove aspekty beznenavrhove struktury

popisuje komunikujıcı objekty a trıdy upravene k resenıobecneho navrhoveho problemu

vzor je sablona pro resenı, nikoli implemeptace problemu!”Kazdy vzor popisuje problem, ktery se neustale vyskytuje, ajadro resenı daneho problemu. Umoznuje toto resenı pouzıvatmnohokrat, aniz bychom to delali dvakrat uplne stejnymzpusobem.”

Nektere vzory si konkurujı, nektere vzory mohou pouzıvat prosvou implementaci jine vzory

Radek Kocı Seminar Java – Navrhove vzory 10/ 25

Page 11: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Navrhovy vzor

Prvky navrhoveho vzorunazev

kratky popis (identifikace) navrhoveho problemu

problempopis, kdy se ma vzor pouzıvat (vysvetlenı problemu,podmınky pro smysluple pouzitı vzoru, . . . )

resenıpopis prvku navrhu, vztahu, povinnostı a spolupracenepopisuje konkretnı navrh, obsahuje abstraktnı popisproblemu a obecne usporadanı prvku pro jeho resenı

dusledkyvysledky a kompromisy (vliv na rozsiritelnost,prenositelnost, . . . )dulezite pro hodnocenı navrhovych alternativ – naklady avyhody pouzitı vzoru

Radek Kocı Seminar Java – Navrhove vzory 11/ 25

Page 12: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Typy vzoru

Vzory se mohou tykattrıd

zabyvajı se vztahy mezi trıdami a podtrıdami (vztah jefixovan)

objektuzabyvanı se vztahy mezi objekty, jsou dynamictejsı

Zakladnı rozdelenı vzorutvorivy

zabyva se procesem tvorby objektu

strukturalnızabyva se skladbou trıd ci objektu

chovanızabyva se zpusoby vzajemne interakce mezi objekty ci trıdyzabyva se zpusoby rozdelenı povinnostı mezi objekty citrıdy

Radek Kocı Seminar Java – Navrhove vzory 12/ 25

Page 13: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Zakladnı navrhove vzory

TvorivyTovarnı metoda (Factory method)Abstraktnı tovarna (Abstract Factory)Jedinacek (Singleton)Prototyp (Prototype)Stavitel (Builder)

StrukturalnıAdapter – trıda (Adapter)Adapter – objekt (Adapter)Dekorator (Decorator)Fasada (Facade)Most (Bridge)Musı vaha (Flyweight)Skladba (Composite)Zastupce (Proxy)

Radek Kocı Seminar Java – Navrhove vzory 13/ 25

Page 14: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Zakladnı navrhove vzory

Chovanı

Interpret (Interpreter)

Sablonova metoda

Iterator (Iterator)

Navstevnık (Visitor)

Obnovitel (Memento)

Pozorovatel (Observer)

Prostrednık (Mediator)

Prıkaz (Command)

Retez odpovednosti (Chain of Responsibility)

Stav (State)

Strategie (Strategy)

Radek Kocı Seminar Java – Navrhove vzory 14/ 25

Page 15: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Jedinacek (Singleton)

Ucel

jedna trıda muze mıt pouze jednu instanci

tvorivy vzor – objekty

Motivace

nutnost mıt pouze jednu instanci (napr. tiskove fronty)

pri pokusu o vytvorenı nove instance se vratı jiz existujıcı

Dusledky

rızeny prıstup k jedine instanci

zdokonalovanı operacı (dedicnost)

usnadnuje zmenu v navrhu (variablinı pocet instancı)

tvarnejsı nez trıdnı (staticke) operace (nelze vıce nez jednuinstanci, C++ neumoznuje polymorfnı prekrytı statickychmetod, . . . )

Radek Kocı Seminar Java – Navrhove vzory 15/ 25

Page 16: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Jedinacek (Singleton)

Struktura

Singleton� uniqueInstance : Singleton+ instance() : Singleton

public class Singleton {protected Singleton inst;

private Singleton() {}

public static Singleton instance() {if (inst == null)

inst = new Singleton();return inst;

}}

Radek Kocı Seminar Java – Navrhove vzory 16/ 25

Page 17: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Abstraktnı tovarna (Abstract Factory)

Ucel

vytvarenı prıbuznych nebo zavislych objektu bezspecifikace konkretnı trıdy

tvorivy vzor – objekty

Motivace

napr. zmena vzhledu sady grafickych nastroju

Dusledky

izoluje konkretnı trıdy – klient pracuje pouze s rozhranım

usnadnuje vymenu produktovych rad (napr. zmenavzhledu, . . . )

podpora zcela novych produktovych rad je obtıznejsı

. . .

Radek Kocı Seminar Java – Navrhove vzory 17/ 25

Page 18: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Abstraktnı tovarna (Abstract Factory)

Struktura

ClientAbstractFactory

+ createProductA() : AbstractProductA+ createProductB() : AbstractProductB AbstractProductA

ProductA2

AbstractProductB

Factory1

+ createProductA()+ createProductB()

Factory2

+ createProductA()+ createProductB()

ProductA1

ProductB2 ProductB1

Radek Kocı Seminar Java – Navrhove vzory 18/ 25

Page 19: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Abstraktnı tovarna (Abstract Factory)

// abstract productpublic interface Wall { ... }

// abstract factorypublic abstract class MazeFactory {

public abstract Wall makeWall();}

public class MazeGame {public Maze createMaze(MazeFactory factory) {

Wall wall = factory.makeWall();...

}}

Radek Kocı Seminar Java – Navrhove vzory 19/ 25

Page 20: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Abstraktnı tovarna (Abstract Factory)

public class StdWall implements Wall { ... }

public class StdMazeFactory extends MazeFactory {public Wall makeWall() {

return new StdWall();}

}

MazeGame game = new MazeGame();MazeFactory factory = new StdMazeFactory();game.createMaze(factory);

Radek Kocı Seminar Java – Navrhove vzory 20/ 25

Page 21: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Abstraktnı tovarna (Abstract Factory)

public class SpecialWall implements Wall { ... }

public class SpecMazeFactory extends MazeFactory {public Wall makeWall() {

return new SpecialWall();}

}

MazeFactory specFactory = new SpecMazeFactory();game.createMaze(specFactory);

Radek Kocı Seminar Java – Navrhove vzory 21/ 25

Page 22: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Command

Ucel

zapouzdrenı pozadavku nebo operacı

vzor chovanı

Motivace

zaslanı pozadavku na obecne urovni, aniz znamekonkretnı protokol

podpora undo operacı

Dusledky

reprezentuje jeden provedeny prıkaz

umoznuje uchovavat predchozı stav klienta

. . .

Radek Kocı Seminar Java – Navrhove vzory 22/ 25

Page 23: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Command

Struktura

Command� receiver : + execute()

ConcreteACommand� stateA : + execute()

ConcreteBCommand� stateB : + execute()

Receiver

+ actionA()+ actionB()

Invoker

Client

Radek Kocı Seminar Java – Navrhove vzory 23/ 25

Page 24: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Command

Radek Kocı Seminar Java – Navrhove vzory 24/ 25

Page 25: Semin r Java - N vrhov vzoryperchta.fit.vutbr.cz/vyuka-java/uploads/16/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ existuj´ıc´ı)´

Navrhove vzory

ZdrojeErich Gamma, Richard Helm, Ralph Johnson, JohnVlissides: Navrh programu pomocı vzoru

popis 23 zakladnıch vzoru

wikipedia.org

Radek Kocı Seminar Java – Navrhove vzory 25/ 25