46
Semin ´ r Java avrhov ´ e vzory, Z´ asady programov´ an´ ı Radek Koˇ ı Fakulta informaˇ cn´ ıch technologi´ ı VUT Duben 2010 Radek Koˇ ı Semin ´ r Java – N ´ avrhov ´ e vzory, Z´ asady . . . 1/ 46

Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Seminar JavaNavrhove vzory, Zasady programovanı

Radek Kocı

Fakulta informacnıch technologiı VUT

Duben 2010

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 1/ 46

Page 2: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Obsah

Znovupouzitelnost

Navrhove vzory

Zasady programovanı

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 2/ 46

Page 3: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

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, Zasady . . . 3/ 46

Page 4: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

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, Zasady . . . 4/ 46

Page 5: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Znovupouzitelnost

Skladanı – problem SELF

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, Zasady . . . 5/ 46

Page 6: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Znovupouzitelnost

Skladanı – problem SELF

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, Zasady . . . 6/ 46

Page 7: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

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, Zasady . . . 7/ 46

Page 8: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Znovupouzitelnost

interface Sink<T> { flush(T t); }<T> T writeAll(Collection<T> coll, Sink<? super T> snk){

T last;for(T t : coll) {

last = t;snk.flush(last);

}return last;

}

Sink<Object> s;Collection<String> cs;String str = writeAll(cs, s); // T je String

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 8/ 46

Page 9: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

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, Zasady . . . 9/ 46

Page 10: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

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, Zasady . . . 10/ 46

Page 11: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

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, Zasady . . . 11/ 46

Page 12: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

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, Zasady . . . 12/ 46

Page 13: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

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, Zasady . . . 13/ 46

Page 14: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Zakladnı navrhove vzory

TvorivyFactory methodAbstract FactorySingletonPrototypeBuilder

StrukturalnıAdapter (trıda)Adapter (objekt)DecoratorFacadeBridgeFlyweightCompositeProxy

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 14/ 46

Page 15: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Zakladnı navrhove vzory

Chovanı

Interpreter

Iterator

Visitor

Memento

Observer

Mediator

Command

Chain of Responsibility

State

Strategy

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 15/ 46

Page 16: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Jedinacek (Singleton)

Ucel

trıda muze mıt pouze jednu instanci

tvorivy vzor – objekty

Pzn.: mozne resenı – staticke metody ⇒ nevyhody

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 (variabilnı pocet instancı)

. . .

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 16/ 46

Page 17: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Jedinacek (Singleton)

Singleton� uniqueInstance : Singleton+ instance() : Singleton

public class Singleton {protected Singleton inst;

private Singleton() {}

// Tovarni metoda (Factory method)public static Singleton instance() {

if (inst == null)inst = new Singleton();

return inst;}

}

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 17/ 46

Page 18: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

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, Zasady . . . 18/ 46

Page 19: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

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, Zasady . . . 19/ 46

Page 20: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

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, Zasady . . . 20/ 46

Page 21: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Abstraktnı tovarna (Abstract Factory)

// productpublic class StdWall implements Wall { ... }

// factorypublic 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, Zasady . . . 21/ 46

Page 22: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Abstraktnı tovarna (Abstract Factory)

// productpublic class SpecialWall implements Wall { ... }

// factorypublic class SpecMazeFactory extends MazeFactory {

public Wall makeWall() {return new SpecialWall();

}}

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

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 22/ 46

Page 23: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

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, Zasady . . . 23/ 46

Page 24: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Command

Struktura

Command

execute() : void

receiver

ConcreteCommandA

execute() : void

state

Invoker

Client

Receiver

actionA() : void

ConcreteCommandB

execute() : void

state

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 24/ 46

Page 25: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Command

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 25/ 46

Page 26: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Navrhove vzory

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

popis 23 zakladnıch vzoru

http://objekty.vse.cz/Objekty/Vzory

http://en.wikipedia.org

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 26/ 46

Page 27: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Zasady programovanı

Zasady programovanı

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 27/ 46

Page 28: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Co uz zname

Prekryvanı metod trıdy Object

nefinalnı metody equals, hashCode, toString

vzdy kdyz prekryjete metodu equals, prekryjte i metoduhashCode

vzdy prekryjte metodu toString

Kompozice a dedicnost (znovupouzitelnost kodu)Dedicnost

narusuje zapouzdrenı (zavisle na implementacnıchdetailech)

Kompoziceobjekt je slozen z jinych objektumetody jsou delegovany (nezavisle na implementacnıchdetailech)problem SELF

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 28/ 46

Page 29: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Duplicitnı objekty

Duplicitnı objekty

objekty majıcı stejny stav

vetsinou nemenne

vytvarenı objektu je zbytecne

Opakovane pouzitı shodneho objektu

muze byt rychlejsı (optimalnı vyuzitı pameti) a prehlednejsı

vetsinou pouzitelne pro nemenne objekty

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 29/ 46

Page 30: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Duplicitnı objekty

String s = new String("retez");String s = "retez";

Map m = new HashMap();Set s1 = m.keySet();Set s2 = m.keySet();

// opakovane vytvareni objektu se stejnym stavemCalendar c = Calendar.getInstance();c.set(...);

Dupl.javaRadek Kocı Seminar Java – Navrhove vzory, Zasady . . . 30/ 46

Page 31: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Duplicitnı objekty

Vytvarenı malych objektu

mala funkcionalita kontruktoru

rychle (modernı implementace JVM)

Vytvarenı novych objektu

muze zlepsovat jednoduchost nebo sılu programu

Kdy lze opakovane pouzit objekty

objekty jsou nemenne

klesa vykon

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 31/ 46

Page 32: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Defenzivnı kopie objektu

Defenzivnı programovanı

predpoklad, ze klienti vası trıdy se pokusı znicit jejıinvarianty

neodkryvat internı prvky objektu

pred ulozenım provest defenzivnı kopii

pred vracenım provest defenzivnı kopii

DefCopy.java

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 32/ 46

Page 33: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Tovarnı metody mısto konstruktoru

Zıskanı instance trıdy

konstruktory

staticke tovarnı metody

Vyhody tovarnıch metod

majı nazvy

nemusı vytvaret novy objekt pri volanı

nemusı vracet instanci pouze volane trıdy

napr. synchronizovane kolekce, . . .

Nevyhody

tezko odlisitelne od jinych statickych metod

nutnost dodrzovanı konvencı pojmenovanı

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 33/ 46

Page 34: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Tovarnı metody mısto konstruktoru

public static final Boolean TRUE =new Boolean(true);

public static final Boolean FALSE =new Boolean(false);

public static Boolean valueOf(boolean b) {return (b ? TRUE : FALSE);

}

public static <T> Set<T> synchronizedSet(Set<T> s){

return new SynchronizedSet<T>(s);}

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 34/ 46

Page 35: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Rozhranı a abstraktnı trıdy

Definice typu, ktery umoznuje vıce implementacı

rozhranı

abstraktnı trıda

Porovnanı

trıdy lze snadno prizpusobit tak, aby implementovalyrozhranı

rozhranı muze definovat smıseny typ nezavisly nadedicnosti trıd

rozhranı umoznujı flexibilnı a (typove) bezpecna vylepsenıfunkcnosti

rozvıjet abstraktnı trıdu je jednodussı nez rozvıjet rozhranı

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 35/ 46

Page 36: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Rozhranı a abstraktnı trıdy

Doporucenı

pro definici typu pouzıvejte (pokud to jde) vzdy rozhranı

zmena implementace rozhranı pak znamena pouze zmenunazvu konstruktoru (nebo tovarnı metody) bez nutnostiprepisovat dalsı kod

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 36/ 46

Page 37: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Neverejne atributy

Objekt by mel mıt pod kontrolou zmenu svych atributu

trıda by mela jen vyjimecne definovat verejne atributy

prıstup pres verejne metody

zajistit, aby prıma modifikace atributu nebyla mozna

public static final Type[] VALUES = { ... };// => prvky pole se mohou m enit!

private static final Type[] privateVALUES = { ... };

public static final List VALUES = Collections.unmodifiableList(Arrays.asList(privateVALUES));

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 37/ 46

Page 38: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Kontrola platnosti parametru

vzdy kontrolujte platnost parametru metod

podmınky vzdy dokumentujte

/*** Vraci BigInteger, jehoz hodnota je (this mod m).

* @param m modulo, ktere musi byt kladne.

* @return this mod m.

* @throws ArithmeticException pokud m <= 0.

*/public BigInteger mod(BigInteger m) {

if (m.signum() <= 0)throw new ArithmeticException("m <= 0.");

...}

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 38/ 46

Page 39: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Pretezovanı s rozvahou

volba prekryte metody (dedicnost) zavisı na behovem typuobjektu (vybere se vzdy ta nejspecifictejsı varianta)

volba pretızene metody se provadı pri kompilaci

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 39/ 46

Page 40: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Pretezovanı s rozvahou

public String classify(Set s){ return "Mnozina"; }

public String classify(List l){ return "Seznam"; }

public String classify(Collection c){ return "Neznama kolekce"; }

Collection[] test = new Collection[] {new HashSet(),new ArrayList(),new HashMap().values()

};for (int i = 0; i < test.length; i++) {

System.out.println(classify(test[i]));}

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 40/ 46

Page 41: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Zastarale odkazy na objekty

Pametove uniky

neumyslne zachovanı jiz nepouzıvanych objektu

vyssı aktivita GC, vyssı spotreba pameti

nejsou zrejme (spatne se odhalujı)

Zdroj

sprava vlastnı pameti

cache

Stack.java

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 41/ 46

Page 42: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Zastarale odkazy na objekty

Resenı

nastavit null

opakovane pouzitı promenne

definovat promennou v nejmensım moznem oboruplatnosti

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 42/ 46

Page 43: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Zvysenı vykonu (sprava pameti)

Eliminace spravy pameti

zmensit pocet docasnych promennych (v cyklech apod.)

pouzıvat metody, ktere nevytvarejı docasne objekty nebonevracejı kopii objektuString s = "55";int i = new Integer(s).intValue();int i = Integer.parseInt(s);

mısto retezenı + pouzıvat StringBuffer

Str.java

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 43/ 46

Page 44: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Optimalizace

Optimalizace se rıdı dvema zasadami:1. Nedelejte ji.2. Zatım ji nedelejte (pro experty); dokud nemate dokonale jasne resenı.

– M. A. Jackson

Par poznamek k optimalizaci

snazte se psat dobre, nikoliv rychle programy

dobre programy lze dobre optimalizovat, chyby ve spatnenapsanych optimalizovanych programech se hledajı tezkomerte vykonnost pred a po optimalizaci!

mnohdy ma ”optimalizace” velmi maly nebo i negativnıdopad na vykonnost

identifikace problemoveho mıstanespolehat se na intuitivnı pohled (tady musı byt problem)profilovacı nastroje

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 44/ 46

Page 45: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Dokumentacnı komentare

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 45/ 46

Page 46: Semin r Java - N vrhov vzory, Z sady programov nperchta.fit.vutbr.cz/vyuka-java/uploads/18/design...Znovupouzˇitelnost Dediˇ cnostˇ implementace tˇr´ıdy pomoc´ı jin e (jizˇ

Zasady programovanı

Zdroje

Joshua Bloch: Effective Java (2nd Edition)

Martin Fowler: Refactoring: Improving the Design ofExisting Code

Radek Kocı Seminar Java – Navrhove vzory, Zasady . . . 46/ 46