Návrh - návrhové třídy a vzory Ing. Jiří Mlejnek Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Jiří Mlejnek, 2011 jiri.mlejnek@fit.cvut.cz Softwarové inženýrství BI-SI1 LS 2011/ Před. 6 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
Obsah Návrhový model tříd Databázový model Spolupráce objektů Vzory GRASP Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 2
Návrhový model tříd Závislý na zvolené technologii Vychází z doménového modelu Datové typy atributů Upřesnění relací Nové softwarové třídy Přiřazení zodpovědností Realizace scénářů případů užití Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 3
Návrhový model tříd Diagram tříd pokročilá notace Statické Abstraktní Viditelnost Konstruktor Inicializace Kolekce Závislosti class Návrhový model tříd Třída - statický atribut: int # protected atri but: int ~ package visible: i nt - /odvozený atribut: i nt - iniciali zovaný atribut: i nt = hodnota - konstantní atribut: i nt {reado nly} - kol ekce dupl icity: i nt [0..*] {bag} - uspořádaná kol ekce: i nt [1..*] {ordered} + statická m etoda() : void + abstraktní metoda() : voi d + m etoda(char) : boolean[] «constructor» + konstruktor() : void Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 4
Návrhový model tříd deployment Náv rhov ý model tříd Java Vytisk - evidencnicislo - roknakupu - datum Vyrazeni - porizovacicena m aexem plare 1..* 1 - nazev - isbn - rokvyd ani - obsah - klicovaslova Kniha «trace» «trace» Vytisk Serializable Kniha Serializable - vytiskid: int - datum vyrazen i: Da te - evid encni cisl o: Stri ng - porizovacicena: double - rokn akupu: i nt -knihaid - knihaid: int - isbn: S trin g - klicovaslova: String - nazev: Stri ng - rokvydani: i nt + Vytisk() + getdatum vyraze ni() : Date + setdatum vyrazeni(date) : vo id + getevidencnicislo() : String + setevidencnicislo(string) : void + getpori zovacicena() : do ubl e + setporizovacicena(double) : void + getroknakupu() : int + setroknakupu(int) : void 1 + Kniha() + getisbn() : String + setisbn(string) : void + getklicovaslova() : String + setklicovaslova(string) : void + getnazev() : String + setnazev(string) : void + getrokvydani() : int + setrokvydani(int) : void Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 5
Návrhový model tříd Doporučení - důležitá je přehlednost Nezobrazovat názvy asociací Nezobrazovat get a set metody Pouze pro jednoduché třídy (Adresa, Bankovní účet) upřednostňovat zobrazení pomocí atributu Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 6
Návrhový model tříd Dotazy? Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 7
Databázový model Popisuje uložení dat v relační databázi Generování zakládacích SQL skriptů Obsahuje datové typy zvolené databáze Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 8
Databázový model Primární klíče Cizí klíče Dekompozice m:n vazeb Dědičnost 1 tabulka 2 tabulky 3 tabulky Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 9
Databázový model MySQL deployment Databázový model Autor - jm eno - pri jm eni 1..* jenapsana 0..* Kniha - nazev - isbn - rokvydani - obsah - klicovaslova «trace» Autor «trace» «colum n» jm eno: V ARCHAR(50) prijm eni: VARCHAR(50) *PK autorid: Integer «PK» + PK_ Autor() «FK» (a utorid = autorid) 0..* jenapsana «colum n» FK autorid: INT EG ER 1..* FK knihaid: INT EG ER «FK» (knihaid = kn ihaid) Kniha «colum n» nazev: VARCHAR(50) isbn: V ARCHAR(20) rokvyd ani: NUM ERIC(4 ) obsah: T EXT klicova Slova: VARCHA R(50) *PK knihaid: Integer FK regalid: INT EGER FK naklad atelstviid: INT EG ER «PK» + PK_ Kniha() «FK» + Autor() + Kniha() Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 10
Databázový model Doporučení - důležití je přehlednost Členění tabulek do více balíčků Skrývání popisů konců asociací (názvy PK, FK) Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 11
Databázový model Členění do balíčků class Relační datov ý model Ev idence knih + Autor + jenapsana + Kniha + Nakladatelstvi + Regal + Zanr + zarazenado Evidence vypujcek + Ctenar + jerezervovana + Pokuta + Rezervace + Vypujcka + Vytisk Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 12
Databázový model Rozdělení na více diagramů req Ev idence vypuj cek-slide Ctenar «colum n» cisloprukazky: INT EGER em ail: VARCHAR(50) jm eno: VARCHAR(50) prijm eni: VARCHAR(50) telefon: VARCHAR(50) *PK ctenarid: INT EGER «PK» + PK_Ctenar(INT EGER) (ctenarid = ctenarid) «FK» 1 0..* Vypujcka «colum n» datum Vraceni : DAT E datum Vypujceni : DAT E vypujcenado: DAT E *PK vypujckaid: INT EGER FK ctenarid: INT EGER FK vytiskid: INT EGER «PK» + PK_ Vypujcka(INT EGER) «FK» + m avypujceno(int EGER) + jevypujcen(int EGER) «FK» (vytiskid = vytiskid) 0..* 1 Vytisk «colum n» datum Vyrazeni: DAT E evidencnicislo: VARCHA R(50) porizovacicena: DOUBLE roknakupu: INT EGER FK vypujckaid: INT EGER stav: VARCHAR(50) *PK vytiskid: INT EGER FK knihaid: INT EGER «PK» + PK_ Vytisk(INT EGER) «FK» + jevypujcen(int EGER) + m aexem plare(int EGER) 1..* (knihaid = knihaid) «FK» 1 Ev idence knih::kniha Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 13
Databázový model Dotazy? Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 14
Spolupráce objektů Popis realizace scénářů Zachycení komunikace spolupracujících objektů Přiřazení zodpovědnosti třídám Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 15
Spolupráce objektů Notace interakční diagramy UML Sekvenční diagram Diagram komunikace Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 16
Spolupráce objektů Sekvenční diagram Objekt sd Sekv enční diagram :T řída B Objekt A:T řída A Třída Pojmenovaný Nepojmenovaný asynch. zpráva() synch. zpráva() Zpráva Statická metoda Asynchronní Synchronní Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 17
Spolupráce objektů Návratová hodnota 2 různé způsoby sd Náv ratov á hodnota :T řída A :T řída B vysledek= zprava() zprava() vysle dek Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 18
Spolupráce objektů Vytvoření objektu sd Vytvoření, zrušení :T řída A Zrušení objektu «create» Nový objekt:t řída B zpráva() «destroy» Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 19
Spolupráce objektů Sekvenční diagram Nalezená zpráva Zaslání zprávy sám sobě (Self Message) sd SelfMessage Objekt B: T řída B Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 20
Spolupráce objektů Sekvenční diagram Fragment sd Fragment :T řída B Objekt A:T řída A Větvení Cyklus Další (opt, par) alt f [a>b] [a <=b] zpráva A() zpráva B() loop [a<b] zpráva A() Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 21
Spolupráce objektů Sekvenční diagram sd VypujceniVytisku vytisk :VytiskDT O :StavVolny knihavypujcek :KnihaVypujcek Zpracuj(Ctenar, VytiskDT O) zapisvypujcku(vytiskdt O, Ctenar) new() vypujcka setvytisk(vytiskdt O) setctenar(ctenar) setvypujcenado(date) setstav(new StavVypujceny()) Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 22
Spolupráce objektů Diagram komunikace Objekt Třída Zpráva Pojmenovaný Nepojmenovaný Statická metoda Synchronní Asynchronní sd Diagram komunikace :Třída A 1: zpráva() 1.2: zprá va() Obj ektb:třída B 1.1: zpráva() :Třída C Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 23
Spolupráce objektů Diagram komunikace Vytvoření objektu Zrušení objektu sd Diagram komunikace v ytv áření obj ektu :Třída A 1: create() :Třída B «create» 1.1: vytvor() «destroy» 1.2: zprava() :Třída C Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 24
Spolupráce objektů Diagram komunikace Podmínky Cykly Iterace sd Diagram komunikace v ětv ení, cykly :Třída A 1: [a>b]:zprava() :Třída B :Třída A 1.1: *[i=1..n]:zprava() :Třída B :Třída A 1.2: *[i=1..n]:zprava() obj ekty[i]:třída B Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 25
Spolupráce objektů Diagram komunikace sd 6. přednáška :VytiskDTO 1: zpracuj(ctenar, VytiskDT O) :Stav Volny 1.1: zapisvypu jcku(vytiskdt O, Ctenar) :Vypuj cka 1.2: create() 1.3: setvytiskid(int) 1.4: setctenarid(int) :KnihaVypuj cek 1.5: setvypujcena do(date) Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 26
Spolupráce objektů Sekvenční diagram Výhody Nevýhody Přehledné zachycení pořadí zasílání zpráv Větší vyjadřovací schopnosti Velké nároky na prostor v horizontálním směru Nevhodné pro zobrazení většího množství objektů Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 27
Spolupráce objektů Diagram komunikace Výhody Nevýhody Úspornější na místo i při zobrazení více objektů Možnost uspořádat objekty horizontálně i vertikálně Obtížnější sledování pořadí zasílání zpráv Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 28
Spolupráce objektů Dotazy? Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 29
GRASP Základní vzory / principy pro přiřazení zodpovědností třídám Zodpovědnost je úkol, který má třída řešit Existuje mnoho způsobů rozdělení úloh mezi třídy Neexistuje jediné správné řešení Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 30
GRASP Informační expert (Information Expert) Nízká provázanost (Low Coupling) Vysoká soudržnost (High Cohesion) 6 dalších Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 31
GRASP Informační expert Základní princip přiřazení zodpovědnosti Popis Přiřaďte zodpovědnost třídě, která má informace potřebné pro splnění této zodpovědnosti Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 32
GRASP Nízká provázanost Zmenšuje dopad při provádění změn Popis Přiřaďte zodpovědnost tak, aby provázanost zůstala nízká Každá třída by si měla vystačit při plnění úkolu sama a minimalizovat nutnost využití ostatních tříd Zvyšuje možnost znovupoužití Počet vazeb mezi třídami by měl být minimální Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 33
GRASP Vysoká soudržnost Podporuje nízkou provázanost Popis Přiřaďte zodpovědnost tak, aby soudržnost zůstala vysoká Každá třída by měl být zaměřena na jediný úkol Zvyšuje srozumitelnost systému Zodpovědnost třídy je snadno pochopitelná Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 34
GRASP Jedna třída umí všechno Nízká provázanost Malá soudržnost Každá třída pouze jednu metodu Vysoká provázanost Velká soudržnost Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 35
GRASP Další informace Larman, Craig (2005). Applying UML and Patterns An Introduction to Object-Oriented Analysis and Design and Iterative Development http://en.wikipedia.org/wiki/grasp_(objectoriented_design) Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 36
GRASP Dotazy? Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 37
Děkuji za pozornost. Ing. Jiří Mlejnek (FIT ČVUT) BI-SI1, 2011 Před. 6 - Návrh - návrhové třídy a vzory 38