UML diagram tříd - hledání analytických tříd, relací, atributů
Martin Komárek
Úvod do UML 2
Třídy a Objekty
Account
accountNumber : String owner : String balance : double
objekty
třída
ilasAccount:Account
accountNumber : "803" owner : "Ila" balance : 310.00
fabsAccount:Account
accountNumber : "802" owner : "Fab" balance : 1000.00
jimsAccount:Account
accountNumber : "801" owner : "Jim" balance : 300.00
«instantiate» «instantiate» «instantiate»
Úvod do UML 3
Co jsou to třídy a objekty?
• Každý objekt je instancí třídy
• Třídy umožňují modelovat množinu objektů se stejnými vlastnostmi
• Třída představuje šablonu na objekty:
– Třída určuje strukturu objektu (množinu jeho vlastností)
– Všechny objekty mají
• stejné atributy
• stejnou množinu operací
• obecně různé hodnoty atributů
• Představujte si třídy jako:
– Razítka
– Formičky na cukroví třída
objekt
Úvod do UML 4
Zobecnění
• Klasifikátor a instance – Klasifikátor je abstrakce, instance je konkrétní projev
této abstrakce
– Nejběžnější forma třída/objekt
– Obecně instance mají stejnou notaci jako třídy, ale jméno podtrženo
BankAccount
balance
getBalance()
myAccount:BankAccount
balance = 100.0
«instantiate»
Úvod do UML 5
Cvičení – najděte třídy?
Proč vůbec v analýze modelovat třídy/entity?
• Evidence business entit
– Definice entit se kterými řešení bude pracovat.
– Definice atributů entit.
• Evidence vztahů business entit
UML notace třídy
• Pojmenovávejte podstatnými jmény
• Nepoužívejte zkratky
Název třídy
atribut1: typ atributu atribut2: typ atributu atribut3: typ atributu atribut4: typ atributu
Osoba
jméno: text příjmení: text datum narození : datum věk: číslo email: email
Syntaxe asociace
Asociace = vztah tříd.
Firma Osoba 1 0..*
zaměstnává
význam asociace
násobnost
Firma Osoba zaměstnavatel zaměstnanec
1 0..*
role
Násobnost = Multiplicita = Kardinalita vazby
Firma Osoba zaměstnanec
1 0..*
zaměstnavatel
Firma může zaměstnávat mnoho osob, ale nemusí žádnou.
Každá osoba pracuje právě v jedné firmě.
Význam násobnosti: minimum..maximum
0..1 nula nebo 1
1 právě 1
0..* nula či více
* nula či více
1..* 1 či více
1..6 1 až 6
Třídy pouze jako slovníček pojmů
Parcela
Kolonie
Objekt
rozloha čísloParcely …
název čísloÚčtu …
typObjektu …
Třídy doplněné o vazby
Parcela
Kolonie
Objekt
rozloha čísloParcely …
název čísloÚčtu …
typObjektu …
0..*
1
Se skládá z
Může mít
0..1 1
Cvičení – Co diagram zachycuje?
Osoba
Bankovní účet
0..*
1 majitel
0..*
1..* disponent
Úvod do UML 13
Cvičení 1
• Namodelujte filesystem. Zde jsou potřebné údaje:
– Základní stavební jednotka je file
– Files jsou v directories
– Directories mohou obsahovat další directories
Cvičení 2
• Namodelujte síť adresářů.
Úvod do UML 14
Cvičení 3
• Namodelujte síť měst spojených různě dlouhými cestami, které mohou být i jednosměrné.
Úvod do UML 15
Cvičení 4
• Namodelujte matriku. Konkrétně vztahy rodičů (otec a matka) a dětí.
Úvod do UML 16
Cvičení – Namodelujte vztahy vodoměrů a jejich odečtů
• Vodoměry jsou instalovány ve stromové struktuře, aby bylo možné zjistit
případné úniky v jednotlivých větvích. Každý vodoměr tedy může mít
několik podružných vodoměrů. A podružný vodoměr opět může mít
několik podružných vodoměrů.
• Na každém vodoměru pravidelné probíhá odečet jeho stavu k určitému
dni.
Úvod do UML 18
Detailní notace UML třídy
• Třídy pojmenované UpperCamelCase
• Pojmenovávejte jména podst. jmény
• Nepoužívejte zkratky
Window
+size : Area=(100,100) #visibility : Boolean = false +defaultSize: Rectangle #maximumSize : Rectangle -xptr : XWindow*
+create() +hide() +display( location : Point ) -attachXWindow( xwin : XWindow*)
{author = Jim, status = tested}
oddíl jména
oddíl atributů
oddíl operací
jméno třídy tagged value
počáteční hodnoty
třídní (statické) operace viditelnost
Úvod do UML 19
Oddíl atributů
• Vše kromě jména je volitelné
• initialValue je hodnota, kterou atribut dostane při instanciaci
• Atributy pojmenované lowerCamelCase – pojmenovávejte atributy podstatnými jmény
– nepoužívejte zkratky
• Atribut může mít – stereotyp
+size : Area=(100,100) - address : String [3] visibility name : type multiplicity = initialValue
Úvod do UML 20
Viditelnost
Symbol Jméno Kdo má přístup
+ public Každý
- private Pouze operace uvnitř třídy
# protected Pouze operace uvnitř třídy nebo potomci třídy
~ package Každý ze stejného balíčku či podbalíčku uvnitř třídy
Úvod do UML 21
Násobnost (Multiplicita) • Umožňuje modelovat kolekce věcí
PersonDetails
-name : String [2..*] -address : String [3] -emailAddress : String [0..1]
name se skládá z či více Stringů
address skládá právě ze 3 Stringů
emailAddress je 1 String nebo není nastavena( null)
multiplicita
Úvod do UML 22
Oddíl operací
+display( location : Point )
visibility name( direction parameterName: parameterType = default, …) : returnType
seznam parametrů
• Operace pojmenovány lowerCamelCase – Nepoužívat zkratky a speciální symboly
– Operace pojmenovány slovesem či slov. frází
• Operace může mít více návratových typů – může vracet více objektů
• Operace může mít: – stereotyp jako prefix
– seznam tagged values jako postfix
může být více tupů oddělených čárkou - r1, r2,… rn
Úvod do UML 23
Druhy parametrů
druh parametru
význam
in vstup do operace
operace nemění jeho hodnotu
out je do něj uložen výstup operace
inout slouží jako vstup
operace ho může změnit
return návratová hodnota operace
maxMin( in a: int, in b:int, return maxValue:int , return minValue:int ) maxMin( in a: int, in b:int ):int,int
Úvod do UML 24
Reflexivní asociace
Directory File 0..* 1 0..*
0..1
C
Windows My Documents Corel
Command
autoexec
config
To John
directories files
parent
subdirectory
reflexivní asociace
Úvod do UML 25
Průchodnost
• Průchodnost vyjadřuje jakým směrem lze posílat zprávy
• Jaký objekt má odkaz na který Order Product * *
Neprůchodný Objekt Product neobsahuje seznam Orders
Objekt Order obsahuje seznam Products
Průchodný zdroj cíl
průchodnost
A B
A B
A B
A B
z A do B je průchodné z B do A je průchodné
z A do B je průchodné z B do A je neprůchodné
z A do B je průchodné z B do A je nedefinováno
z A do B je nedefinováno z B do A je nedefinováno
Úvod do UML 26
Průchodnost - zásady
• 3 možné způsoby:
– Znázorňuj průchodnost explicitně všude
– Neznázorňuj průchodnost nikde
– Neznázorňuj křížky
• obousměrné mají 2 šipky
• jednosměrné mají 1 šipku
A B
A B
z A do B je průchodné z B do A je neprůchodné
z A do B je průchodné z B do A je průchodné
standard
Úvod do UML 27
Asociace vs Atributy
• Jednosměrná asociace s rolí může být nahrazena atributem, vyjadřuje to samé.
• Kdy použít asociaci:
– Cílová třída je důležitá pro model
– Cílová třída je nestandardní
• Kdy použít atribut:
– Cílová třída je standardní nebo primitivní typ
House Address 1 1
address House
address:Address
atribut
=
Úvod do UML 28
Asociační třídy
Company Person * *
Každá osoba může pracovat pro více společností. Každá společnost může zaměstnávat více osob.
Pokud je osoba zaměstnána společností, kam umístíme plat?
employment
Úvod do UML 29
Syntaxe asociační třídy
Company Person * *
Contract
salary:double asociační třída
Úvod do UML 30
Možnost alternativy
Company Person * *
Contract
salary:double
Company Person Contract
salary:double
* * 1 1
Úvod do UML 31
Agregace a kompozice
A B
A B A B
agregace kompozice
• asociaci možno ještě upřesnit • nutno zvážit přínosy upřesnění • v analýze doporučuji nepoužívat
Úvod do UML 32
Agregace a kompozice
silná vazba – strom a jeho listy
slabá vazba – počítačová sestava a její části
Agregace Kompozice
Úvod do UML 33
Agregace
Celek a část nejsou na sobě existenčně závislé
Části mohou být sdíleny více celky
Počítačová sestava Komponenty 0..3 0..*
celek část
typ vztahu celek-část
agregace
Úvod do UML 34
Kompozice
• Části nejsou sdílené
• Celek je zodpovědný za konstrukci a destrukci částí
• V momentě zániku celku zanikají i jeho části
• Kaskádový DELETE v SQL
• Př.: Dům-Patra-Místnosti, Faktura-Položky faktury,…
Ruka Prst 1 1..5
silnější forma agregace
„složenina“ část kompozice
vždy 0..1 nebo 1
<<enumeration>>
• Stereotyp pro výčtovou třídu.
Úvod do UML 36
UML Syntaxe Objektu
• Všechny objekty dané třídy mají stejnou množinu operací – nezobrazují se u objektů ale u tříd).
• Typy atributů pro přehlednost obvykle vynechány • Konvence pojmenování:
– objekty a atributy lowerCamelCase – jméno třídy UpperCamelCase
jimsAccount : Account
accountNumber : String = "1234567" owner : String = "Jim Arlow" balance : double = 300.00
jméno atributu
oddíl atributů
oddíl jména
typ atributu
hodnota atributu
jméno objektu
jméno třídy
jimsAccount : Account
jimsAccount
: Account
jméno objektu a třídy
pouze jméno objektu
pouze jméno třídy
varianty
(neuvedeme oddíl atributů)
anonymní objekt
object identifier (must be underlined)
Úvod do UML 37
Spojení - Diagram objektů
bookClub:Club
ila:Person
erica:Person
naomi:Person spojení
BookClub
objekt
Úvod do UML 38
Generalizace třídy
Shape
Square Circle Triangle
více obecný element
více specifické elementy
rodič nadtřída předek
potomek podtřída následník
genera
lizace
speci
aliz
ace
Hierarchie generalizace
“je druhu”
Vztah mezi obecným a více specifickým elementem
Úvod do UML 39
Dědění
• Podtřída dědí všechny vlastnosti nadtřídy: – atributy
– operace
– vztahy
– (stereotypy, tagy, omezení)
• Podřída může přidávat nové vlastnosti (atributy, operace,…)
• Podtřída může změnit implementaci operací
Úvod do UML 40
Překrývání
• Podtřída často potřebuje změnit chování definované v předkovi
Shape
draw( g : Graphics ) getArea() : int getBoundingArea() : int
Square Circle
draw( g : Graphics ) getArea() : int
draw( g : Graphics ) getArea() : int width x height p x radius2
Úvod do UML 41
Abstraktní operace
• Abstraktní operace – signatura bez implementace
• Třída abstraktní pokud má nějaké abstraktní operace
• Od abstraktní třídy není možné vytvořit instanci
• Potomek abstraktní třídy také abstraktní pokud neimplementuje abstraktní operace
konkrétní operace
Shape
draw( g : Graphics ) getArea() : int getBoundingArea() : int
Square Circle
draw( g : Graphics ) getArea() : int
draw( g : Graphics ) getArea() : int
abstraktní třída
konkrétní třída
abstraktní operace
abstraktní prvky italikou
Úvod do UML 42
Rozhraní (Interface)
• Speciální druh (abstraktní) třídy
• Specifikuje pojmenovanou množinu vlastností
• Účel – oddělení specifikace funkčnosti od implementace
• Rozhraní definuje kontrakt, který musí implementující klasifikátory realizovat
Úvod do UML 43
Rozhraní (Interface) cd
«interface»
Comparable
+ compareTo(Object) : int
«interface»
TimeComparable
+ getTimeDif(Object) : int
«interface»
WeightComparable
+ getWeightDif(Object) : int
TimeStamp
- minutes: int
- hours: int
+ compareTo(Object) : int
+ getTimeDif(Object) : int
BackUp
+ BackUp(TimeComparable)
+ run() : void
«realize»
Úvod do UML 44
Syntaxe poskytovaného rozh.
• Poskytované rozhraní – klasifikátor ho implementuje
CD Book
Borrow
«interface» Borrow
borrow() return() isOverdue()
CD Book
“Lollipop” style notace
“Class” style notace
rozhraní
realizuje
Úvod do UML 45
Syntaxe požadovaného rozh.
• Požadované rozhraní – klasifikátor používá metody předepsané rozhraním
Borrow
Library
požadované rozhraní
Borrow
Library
«interface» Borrow
Library
class style notace lollipop style notace
Úvod do UML 46
Konektor sestavení
Borrow
Book CD
Library
konektor sestavení
Poskytované a požadované rozhraní je možné spojit konektorem sestavení.
Úvod do UML 47
Opakování - vztahy
závislost
asociace
kompozice
agregace
generalizace
realizace
Zdrojový element závisí na cílovém.
Vazba mezi objekty.
Cílový element je částí zdrojového
Silnější forma agregace.
Zdrojový element je specializací cílového.
Zdrojový element zaručuje splnění kontraktu předepsaného cílovým element.
relationship UML syntaxe sémantika stručně
Úvod do UML stavových diagramů
© Cactoo Software s.r.o.
www.cactoosoftware.com
49
Stavové diagramy
Slouží k modelování životního cyklu entit
Základní artefakty digramu:
– Začátek
– Konec (nemusí mít vždy)
– Stavy
– Přechody
Stav 2 Stav 1
Událost [Podmínka] / Akce
Trigger [Guard] / Effect
50
Jaký stav chybí? Jaký stav špatně pojmenován/znázorněn?
stm Úřední stav y živ ota - nedokonalé
Sv obodný Ženatý
Rozv edený
Final
smrt
smrt
svatba
narození
smrt rozvod
svatba [věk>16]
/výměna dokladů
51
Lepší řešení
stm Úřední stav y živ ota - lepší řešení
Sv obodný Ženatý
Rozv edený
Vdov ec
Zemřelý
smrt
smrt
partnerky
smrt
svatba
svatba [věk>16]
/výměna dokladůnarození
svatba
rozvod
smrt
52
Je možné nějak zjednodušit?
stm Úřední stav y živ ota - lepší řešení
Sv obodný Ženatý
Rozv edený
Vdov ec
Zemřelý
smrt
smrt
partnerky
smrt
svatba
svatba [věk>16]
/výměna dokladůnarození
svatba
rozvod
smrt
53
Nadstav
stm Úřední stav y živ ota - v yužití nadstav u
Živ ý
Sv obodný Ženatý
RozvedenýVdov ec
Zemřelý
svatba [věk>16]
/výměna dokladů
rozvod
svatba
smrt
narození
svatbasmrt
partnerky
54
Entry a Exit Pointy
stm Úřední stav y živ ota - entry a exit pointy
imigrace
narození
ExitPoint
Živ ý
imigrace
narození
ExitPoint
Sv obodný Ženatý
Rozvedený
Vdov ec
Zemřelý
Entry
point
Pouze jako ukázka
Exit pointu
- v digramu nemá
význam
smrt
partnerkyimigrace
smrt
rozvod
narození
svatba
svatba [věk>16]
/výměna dokladů
svatba
55
Příklad stavového diagramu
Pro níže uvedený příklad namodelujte stavový diagram trezoru. V domě jsou uchovávány cennosti v trezoru schovaném za obrazem. Pro odkrytí trezoru je nutné stisknout skryté tlačítko. Obraz se odsune ale jen v případě, že je otevřené okno a zároveň zavřené dveře. Následně se trezor: a) otevře vložením (a pootočením) klíče, ale jen za podmínky, že bylo mezitím zavřeno okno. Otevřený trezor se automaticky zavře a skryje za obraz po vytažení klíče ze zámku. b) skryje zpět za obraz, pokud vložím klíč, ale okno zůstalo otevřeno. Současně se zablokují zámky místnosti a je spuštěn alarm