UML diagram tříd - hledání analytických tříd, relací, atributů Martin Komárek
Třídy a Objekty Account třída accountnumber : String owner : String balance : double «instantiate» «instantiate» «instantiate» jimsaccount:account accountnumber : "801" owner : "Jim" balance : 300.00 fabsaccount:account accountnumber : "802" owner : "Fab" balance : 1000.00 ilasaccount:account accountnumber : "803" owner : "Ila" balance : 310.00 objekty Úvod do UML 2
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 3
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() «instantiate» myaccount:bankaccount balance = 100.0 Úvod do UML 4
Cvičení najděte třídy? Úvod do UML 5
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 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 Pojmenovávejte podstatnými jmény Nepoužívejte zkratky
Syntaxe asociace Asociace = vztah tříd. význam asociace Firma zaměstnává 1 násobnost 0..* Osoba Firma 1 zaměstnavatel role zaměstnanec 0..* Osoba
Násobnost = Multiplicita = Kardinalita vazby Firma může zaměstnávat mnoho osob, ale nemusí žádnou. Firma zaměstnavatel zaměstnanec 1 0..* Každá osoba pracuje právě v jedné firmě. Osoba 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 Objekt rozloha čísloparcely typobjektu Kolonie název čísloúčtu
Třídy doplněné o vazby Parcela rozloha čísloparcely 1 Může mít 0..1 Objekt typobjektu 0..* Se skládá z 1 Kolonie název čísloúčtu
Cvičení Co diagram zachycuje? Osoba majitel 1 1..* disponent 0..* 0..* Bankovní účet
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 Úvod do UML 13
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.
Detailní notace UML třídy jméno třídy tagged value oddíl jména oddíl atributů viditelnost oddíl operací Window {author = Jim, status = tested} +size : Area=(100,100) #visibility : Boolean = false +defaultsize: Rectangle #maximumsize : Rectangle -xptr : XWindow* +create() +hide() +display( location : Point ) -attachxwindow( xwin : XWindow*) počáteční hodnoty třídní (statické) operace Třídy pojmenované UpperCamelCase Pojmenovávejte jména podst. jmény Nepoužívejte zkratky Úvod do UML 18
Oddíl atributů +size : Area=(100,100) - address : String [3] visibility name : type multiplicity = initialvalue 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 Úvod do UML 19
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 20
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 21
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 22
Druhy parametrů druh parametru in out význam vstup do operace operace nemění jeho hodnotu je do něj uložen výstup operace inout return slouží jako vstup operace ho může změnit 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 23
Reflexivní asociace subdirectory 0..* Directory 1 0..* File 0..1 parent reflexivní asociace C autoexec config Windows My Documents Corel To John Command directories Úvod do UML files 24
Průchodnost Průchodnost vyjadřuje jakým směrem lze posílat zprávy Jaký objekt má odkaz na který zdroj Objekt Order obsahuje seznam Products Průchodný Order * * Product cíl průchodnost Neprůchodný Objekt Product neobsahuje seznam Orders A A A A B B B 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 25
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 standard A B z A do B je průchodné z B do A je neprůchodné A B z A do B je průchodné z B do A je průchodné Úvod do UML 26
Asociace vs Atributy House address 1 1 Address = House address:address atribut 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 Úvod do UML 27
Asociační třídy Company * employment * 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? Úvod do UML 28
Syntaxe asociační třídy Company * * Person asociační třída Contract salary:double Úvod do UML 29
Možnost alternativy Company * * Person Contract salary:double Company 1 Contract * * 1 salary:double Person Úvod do UML 30
Agregace a kompozice A B agregace kompozice A B A B 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 31
Agregace a kompozice Agregace Kompozice slabá vazba počítačová sestava a její části silná vazba strom a jeho listy Úvod do UML 32
Agregace typ vztahu celek-část Počítačová sestava celek 0..3 0..* agregace Komponenty část Celek a část nejsou na sobě existenčně závislé Části mohou být sdíleny více celky Úvod do UML 33
Kompozice Ruka složenina silnější forma agregace vždy 0..1 nebo 1 1 1..5 kompozice Prst část Čá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, Úvod do UML 34
<<enumeration>> Stereotyp pro výčtovou třídu.
UML Syntaxe Objektu object identifier (must be underlined) oddíl jména oddíl atributů jimsaccount : Account accountnumber : String = "1234567" owner : String = "Jim Arlow" balance : double = 300.00 jméno atributu jméno objektu typ atributu jméno třídy hodnota atributu jméno objektu a třídy pouze jméno objektu pouze jméno třídy varianty (neuvedeme oddíl atributů) jimsaccount : Account jimsaccount : Account anonymní objekt 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 Úvod do UML 36
Spojení - Diagram objektů BookClub ila:person bookclub:club erica:person objekt spojení naomi:person Úvod do UML 37
specializace Generalizace třídy Vztah mezi obecným a více specifickým elementem více obecný element Shape rodič nadtřída předek generalizace je druhu Square Circle Triangle více specifické elementy potomek podtřída následník Hierarchie generalizace Úvod do UML 38
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 39
Překrývání Shape draw( g : Graphics ) getarea() : int getboundingarea() : int Square Circle draw( g : Graphics ) draw( g : Graphics ) width x height getarea() : int getarea() : int p x radius 2 Podtřída často potřebuje změnit chování definované v předkovi Úvod do UML 40
Abstraktní operace abstraktní prvky italikou abstraktní třída Shape draw( g : Graphics ) getarea() : int getboundingarea() : int abstraktní operace konkrétní operace konkrétní třída Square draw( g : Graphics ) getarea() : int Circle draw( g : Graphics ) getarea() : int 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 Úvod do UML 41
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 42
Rozhraní (Interface) cd «interface» Comparable + compareto(object) : int TimeStamp - minutes: int - hours: int + compareto(object) : int + gettimedif(object) : int «realize» «interface» WeightComparable + getweightdif(object) : int «interface» TimeComparable + gettimedif(object) : int BackUp + BackUp(TimeComparable) + run() : void Úvod do UML 43
Syntaxe poskytovaného rozh. Poskytované rozhraní klasifikátor ho implementuje «interface» Borrow borrow() return() isoverdue() rozhraní realizuje Borrow Book CD Book CD Class style notace Lollipop style notace Úvod do UML 44
Syntaxe požadovaného rozh. Požadované rozhraní klasifikátor používá metody předepsané rozhraním class style notace lollipop style notace Library Library Library «interface» Borrow Borrow Borrow požadované rozhraní Úvod do UML 45
Konektor sestavení Poskytované a požadované rozhraní je možné spojit konektorem sestavení. Library konektor sestavení Borrow Book CD Úvod do UML 46
Opakování - vztahy relationship UML syntaxe sémantika stručně závislost Zdrojový element závisí na cílovém. asociace Vazba mezi objekty. agregace Cílový element je částí zdrojového kompozice Silnější forma agregace. generalizace realizace Zdrojový element je specializací cílového. Zdrojový element zaručuje splnění kontraktu předepsaného cílovým element. Úvod do UML 47
Úvod do UML stavových diagramů Cactoo Software s.r.o. www.cactoosoftware.com
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 1 Událost [Podmínka] / Akce Trigger [Guard] / Effect Stav 2 49
Jaký stav chybí? Jaký stav špatně pojmenován/znázorněn? stm Úřední stav y živ ota - nedokonalé narození Sv obodný svatba [věk>16] /výměna dokladů Ženatý smrt smrt rozvod svatba smrt Rozv edený Final 50
Lepší řešení stm Úřední stav y živ ota - lepší řešení narození Sv obodný svatba [věk>16] /výměna dokladů Ženatý smrt partnerky svatba smrt Vdov ec rozvod svatba smrt Zemřelý smrt Rozv edený 51
Je možné nějak zjednodušit? stm Úřední stav y živ ota - lepší řešení narození Sv obodný svatba [věk>16] /výměna dokladů Ženatý smrt partnerky svatba smrt Vdov ec rozvod svatba smrt Zemřelý smrt Rozv edený 52
Nadstav stm Úřední stav y živ ota - v yužití nadstav u narození Sv obodný Živ ý svatba [věk>16] /výměna dokladů Ženatý smrt partnerky rozvod svatba svatba Vdov ec Rozv edený smrt Zemřelý 53
Entry a Exit Pointy stm Úřední stav y živ ota - entry a exit pointy Živ ý narození Sv obodný Ženatý narození svatba [věk>16] /výměna dokladů imigrace smrt partnerky svatba svatba imigrace Vdov ec rozvod Rozv edený Entry point ExitPoint smrt Pouze jako ukázka Exit pointu - v digramu nemá význam Zemřelý 54
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 55