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
[email protected] 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áv rhov ý 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() : voi d
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 -
Kniha
e vi d e n cn i Ci sl o ro kNa ku p u d a tu m V yraze n i p o ri zo va ci Ce n a
1 -
m a E xem p l a re 1 ..*
na ze v isb n ro kV yd a ni ob sa h kl i co va S l o va
« tra ce»
« tra ce »
S e ri a l i za b l e
Se ri a l i zab l e Kniha
Vytisk -
vyti ski d : in t da tu m vyra ze n i : Da te evi d e n cni ci sl o : Stri n g po ri zo va ci ce n a : d o u b l e ro kn a ku p u: i n t
+ + + + + + +
Vyti sk() ge tDa tu m vyra ze ni () : Da te se tDa tu m vyra ze ni (Da te ) : vo i d ge tE vi d e ncn i ci sl o() : S tri ng se tE vi d e ncn i ci sl o (S tri n g ) : vo i d ge tP o ri zova ci ce n a () : d o ub l e se tP o ri zova ci ce n a(d o u b l e) : voi d ge tRo kn a ku p u () : i n t se tRo kn a ku p u (i n t) : vo i d
+ +
-kn i h ai d
+ 1 + + + + + + + +
kn i h a i d : i n t isb n : S tri n g kl i co va sl ova : S tri n g na ze v: Stri n g ro kvyd a n i : i n t Kn i h a () ge tIsb n () : S tri n g se tIsb n (Stri n g ) : vo i d ge tK l i co va sl o va () : S tri n g se tK l i co va sl o va (S tri n g ) : vo i d ge tNa ze v() : S tri ng se tNa ze v(S tri n g ) : vo i d ge tRo kvyd a n i () : i n t se tRo kvyd a n i (i n t) : vo i d
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 deployment Databázov ý model
●
MySQL
Kniha Autor -
jm eno p ri j m e n i
j e Na p sa n a 1 ..*
0 ..* -
n a ze v i sb n ro kV yd a n i o b sa h kl i co va S l o va
« tra ce » « tra ce »
Autor « co l u m n » j m e n o : V A RCHA R(5 0 ) p ri j m e n i : V A RCHA R(5 0 ) *P K a u to rID: In te g e r
Kniha
«PK» + P K _ A u to r() « FK » (a u to rID = a u to rID)
0 ..*
j eNapsana
« FK »
« co l u m n » n a ze v: V A RCHA R(5 0 ) i sb n : V A RCHA R(2 0 ) ro kV yd a n i : NUM E RIC(4 ) o b sa h : T E X T kl i co va S l o va : V A RCHA R(5 0 ) *P K kn i h a ID: In te g e r FK re g a l ID: INT E G E R FK n a kl a d a te l stvi ID: INT E G E R
(kn i h a ID = kn i h a ID)
« co l u m n » FK a u to rID: INT E G E R 1 ..* FK kn i h a ID: INT E G E R
«PK» + P K _ K n i h a ()
« FK » + A u to r() + K n i h a ()
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
Ev idence v ypuj cek
+ A uto r
+ Cte n a r
+ je Na p sa na
+ j e Re ze rvo va n a
+ K ni h a
+ Po ku ta
+ Nakl a d a te l stvi
+ Re ze rva ce
+ Reg a l
+ Vyp u j cka
+ Zan r
+ Vyti sk
+ za raze na Do
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 v ypuj cek-slide Vytisk
Ctenar « co l u m n » ci sl o P ru ka zky: INT E G E R e m a i l : V A RCHA R(5 0 ) j m e n o : V A RCHA R(5 0 ) p ri j m e n i : V A RCHA R(5 0 ) te l e fo n : V A RCHA R(5 0 ) *P K cte na rID: INT E G E R
« co l u m n » d a tu m V yra ze n i : DA T E e vi d e n cn i Ci sl o : V A RCHA R(5 0 ) p o ri zo va ci Ce n a : DO UB L E ro kNa ku p u : INT E G E R FK vyp u j cka ID: INT E G E R sta v: V A RCHA R(5 0 ) *P K vyti skID: INT E G E R FK kn i h a ID: INT E G E R
Vypuj cka « co l u m n » d a tu m V ra ce n i : DA T E d a tu m V yp u j ce n i : DA T E vyp u j ce n a Do : DA T E *P K vyp u j cka ID: INT E G E R FK cte n a rID: INT E G E R FK vyti skID: INT E G E R
«PK» + P K _Cte n a r(INT E G E R) 1
(cte n a rID = cten a rID)
«PK» + P K _ V yp u j cka (INT E G E R)
« FK »
0 ..*
« FK » + m a V yp u j ce n o (INT E G E R) + j e V yp u j ce n (INT E G E R)
1
«PK» + P K _ V yti sk(INT E G E R) « FK » + j e V yp u j ce n (INT E G E R) + m a E xe m p l a re (INT E G E R)
« FK » (vyti skID = vyti skID)
0 ..*
1 ..* (kn i h a ID = kn i h a ID) « 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 ● ●
–
Třída ●
–
Pojmenovaný Nepojmenovaný
sd Sekv enční diagram :T řída B
Ob je kt A:T řída A
asynch . zp rá va() syn ch. zp ráva ()
Statická metoda
Zpráva ● ●
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 Zrušení objektu
sd Vytv oření, zrušení :T řída A
« crea te»
No vý obje kt:T řída B
zp rá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
Ob je kt B: T říd a 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 –
sd Fragment :T řída B
Fragment ● ● ●
Větvení Cyklus Další (opt, par)
alt f
O bj ekt A:T řída A
zprá va A ()
[a >b ] [a <=b] zprá va B ()
loop [a
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 Vypuj ceniVytisku vyti sk :V yti skDT O
:S ta vV o l n y
kn i h a V yp u j ce k :K n i h a V yp u j ce k
Zp ra cu j (Cte n a r, V yti skDT O) za p i sV yp u j cku (V yti skDT O , Cte n a r)
n e w()
vyp u j cka
se tV yti sk(V yti skDT O) se tCte n a r(Cte n a r)
se tV yp u j ce n a Do (Da te )
se tS ta v(n e w S ta vV yp u j ce n y())
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 ● ●
–
Pojmenovaný Nepojmenovaný
Třída ●
–
sd Diagram komunikace
●
1: zpráva()
1.2: zprá va()
Obj ektB:Třída B
Statická metoda
Zpráva ●
:Třída A
Synchronní Asynchronní
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: cre a te ()
:Třída B
« de stro y»
« crea te » 1 .1: vytvo r()
1.2: zp ra va ()
: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
:Třída A
:Třída A
1: [a >b]:zprava()
:Třída B
1.1: *[i =1 ..n ]:zprava()
1 .2: *[i=1..n]:zpra va()
:Třída B
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
:KnihaVypuj cek 1.2: create() 1.3: setVytiskid(int) 1.4: setCtenarid (int) 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 ● ●
–
Přehledné zachycení pořadí zasílání zpráv Větší vyjadřovací schopnosti
Nevýhody ● ●
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 ● ●
–
Úspornější na místo i při zobrazení více objektů Možnost uspořádat objekty horizontálně i vertikálně
Nevýhody ●
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