PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY
BAKALÁŘSKÁ PRÁCE
Diagramy tříd
2012
Marek Langr, DiS.
Anotace Cílem této práce bylo vytvořit aplikaci pro návrh a sestavení diagramu tříd. Aplikace umožňuje zakreslení vztahů mezi třídami, nastavení navigací, připojení asociační třídy, začlenění atributů a operací do třídy, generování zdrojového kódu a uložení návrhu pro pozdější použití.
Děkuji RNDr. Arnoštovi Večerkovi za odborné vedení, cenné rady a připomínky při zpracování bakalářské práce. Dále chci poděkovat rodině za podporu a trpělivost ve chvílích, kdy jsem se jim nemohl věnovat.
Obsah 1. Úvod
9
2. Zadání bakalářské práce 2.1. Specifikace zadání . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Požadavky na program . . . . . . . . . . . . . . . . . . . . . . . .
10 10 10
3. Modelovací jazyk UML 3.1. Co je to UML? . . . . . . . . . . 3.2. Diagramy . . . . . . . . . . . . . 3.3. Diagram tříd . . . . . . . . . . . 3.3.1. Co je to objekt? . . . . . . 3.3.2. Co je to třída? . . . . . . 3.3.3. Notace tříd v jazyce UML 3.3.4. Vztahy mezi třídami . . .
. . . . . . .
11 11 12 12 12 13 13 16
. . . . .
19 19 19 20 21 22
. . . . . . . . . . . . . . . . . .
23 23 23 23 23 25 27 29 31 32 33 34 35 35 36 36 38 38 38
. . . . . . .
4. Analýza existujících CASE nástrojů 4.1. Popis programů . . . . . . . . . . . 4.1.1. Enterprise Architect 9 . . . 4.1.2. Visual Paradigm for UML . 4.1.3. Umbrello UML Modeller . . 4.2. Vliv na aplikaci MLClassDiagrams
. . . . . . .
. . . . .
. . . . . . .
. . . . .
5. Programátorská dokumentace 5.1. Použité technologie a nástroje . . . . . 5.2. Architektura aplikace . . . . . . . . . . 5.3. Popis modulu Core . . . . . . . . . . . 5.3.1. Výčtové typy . . . . . . . . . . 5.3.2. Třída Project . . . . . . . . . . 5.3.3. Třída Diagram . . . . . . . . . 5.3.4. Třída Element . . . . . . . . . . 5.3.5. Třída Connection . . . . . . . . 5.3.6. Třída ClassType : Element . . . 5.3.7. Třída CommentType : Element 5.3.8. Třída Attribute . . . . . . . . . 5.3.9. Třída Method . . . . . . . . . . 5.4. Popis modulu GUI . . . . . . . . . . . . 5.4.1. Třída MainForm . . . . . . . . 5.4.2. Třída Workspace . . . . . . . . 5.4.3. Ovládací prvek SolutionView . 5.4.4. Ovládací prvek TabbedControl 5.4.5. Ovládací prvek Page . . . . . .
4
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . . . . . . .
5.5. Popis modulu DiagramEditor . . . . . . . . . . . . . 5.5.1. Třída DocumentManager . . . . . . . . . . . . 5.5.2. Třída Canvas . . . . . . . . . . . . . . . . . . 5.5.3. Třída (ovládací prvek) Editor . . . . . . . . . 5.5.4. Třída (ovládací prvek) EditorTab . . . . . . . 5.5.5. Třída Shape . . . . . . . . . . . . . . . . . . . 5.5.6. Třída ClassShape : Shape . . . . . . . . . . . 5.5.7. Třída CommentShape : Shape . . . . . . . . . 5.5.8. Třída ConnectionShape . . . . . . . . . . . . 5.5.9. Třída Validator . . . . . . . . . . . . . . . . . 5.5.10. Ovládací prvek ElementListView : ListView . 5.5.11. Dialog ElementDialog : Form . . . . . . . . . 5.5.12. Dialog AttributeDialog : Form . . . . . . . . . 5.5.13. Dialog MethodDialog : Form . . . . . . . . . . 5.5.14. Dialog EnumDelegateDialog : Form . . . . . . 5.5.15. Dialog ItemDialog : Form . . . . . . . . . . . 5.5.16. Dialog CommentDialog : Form . . . . . . . . . 5.5.17. Dialog ConnectionDialog : Form . . . . . . . . 5.6. Popis modulu CodeGenerator . . . . . . . . . . . . . 5.6.1. Výčtové typy . . . . . . . . . . . . . . . . . . 5.6.2. Třída CodeGenerator . . . . . . . . . . . . . . 5.6.3. Třída CSharpCodeGenerator : CodeGenerator 5.6.4. Třída PHPCodeGenerator : CodeGenerator . 5.6.5. Třída IdGenerator . . . . . . . . . . . . . . . 5.6.6. Dialog CodeGeneratorDialog . . . . . . . . . . 5.7. Popis modulu Translations . . . . . . . . . . . . . . 6. Uživatelská dokumentace 6.1. Instalace a požadavky . . . . . . . . . . . . . . . . 6.1.1. Systémové požadavky . . . . . . . . . . . . . 6.1.2. Instalace . . . . . . . . . . . . . . . . . . . . 6.1.3. Odinstalování . . . . . . . . . . . . . . . . . 6.2. Popis hlavního okna programu . . . . . . . . . . . . 6.3. Datové soubory . . . . . . . . . . . . . . . . . . . . 6.4. Sestavení diagramu tříd . . . . . . . . . . . . . . . 6.4.1. Vkládání elementů . . . . . . . . . . . . . . 6.4.2. Editace elementu třída, struktura a rozhraní 6.4.3. Editace elementu výčet a delegát . . . . . . 6.4.4. Zakreslení vztahů mezi elementy (třídami) . 6.4.5. Editace vztahů mezi elementy (třídami) . . . 6.4.6. Ostatní položky menu editoru . . . . . . . . 6.5. Generování zdrojového kódu z diagramu tříd . . . .
5
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
38 38 40 42 43 43 45 46 46 47 48 48 49 49 49 49 49 50 50 50 51 52 52 52 52 53
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
54 54 54 55 55 56 58 58 58 58 59 60 61 61 62
Závěr
63
Conclusions
64
Reference
65
7. Obsah přiloženého CD
66
6
Seznam obrázků 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Třída a objekty . . . . . . . . . . . . . . . . . . . . . . . . . . . Úplná notace třídy . . . . . . . . . . . . . . . . . . . . . . . . . Vazba typu asociace . . . . . . . . . . . . . . . . . . . . . . . . Vazba typu agregace . . . . . . . . . . . . . . . . . . . . . . . . Vazba typu kompozice . . . . . . . . . . . . . . . . . . . . . . . Vazba typu dědičnost . . . . . . . . . . . . . . . . . . . . . . . . Asociační třída - příklad . . . . . . . . . . . . . . . . . . . . . . Asociační třída - příklad - vyjádření pomocí plnohodnotné třídy Enterprise Architect 9 . . . . . . . . . . . . . . . . . . . . . . . Visual Paradigm for UML . . . . . . . . . . . . . . . . . . . . . Umbrello UML Modeller . . . . . . . . . . . . . . . . . . . . . . Diagram užití MLClassDiagrams . . . . . . . . . . . . . . . . . Diagram tříd modulu Core . . . . . . . . . . . . . . . . . . . . . Diagram tříd modulu DiagramEditor . . . . . . . . . . . . . . . Diagram tříd modulu CodeGenerator . . . . . . . . . . . . . . . Okno instalačního programu . . . . . . . . . . . . . . . . . . . . Hlavní okno programu . . . . . . . . . . . . . . . . . . . . . . . Přehled kontextových menu panelu navigace . . . . . . . . . . . Menu pro vkládání elementů . . . . . . . . . . . . . . . . . . . . Dialog editace elementu třída . . . . . . . . . . . . . . . . . . . Dialog editace elementu výčtového typu a delegátu . . . . . . . Menu k zakreslení vztahů mezi elementy (třídami) . . . . . . . . Dialog editace vztahu mezi elementy (třídami) . . . . . . . . . . Ostatní položky menu editoru . . . . . . . . . . . . . . . . . . . Dialog generování zdrojového kódu . . . . . . . . . . . . . . . .
7
. . . . . . . . . . . . . . . . . . . . . . . . .
13 13 16 16 17 17 18 18 19 21 21 24 25 39 50 55 56 57 58 59 60 60 61 61 62
Seznam tabulek 1. 2. 3. 4.
Primitivní typy jazyka UML . . . . . . . Směr argumentů . . . . . . . . . . . . . Enterprise Architect 9, přehled edicí . . . Visual Paradigm for UML, přehled edicí
8
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
15 16 20 20
1.
Úvod
V současné době se vyjádření analytických a návrhových modelů při vytváření rozličných systémů pomocí grafických notací stává stále populárnějším. Diagramy dle standardu UML jsou graficky srozumitelné a dokáží systém popsat vývojářům, ale i zadavateli, a tím do jisté míry usnadňují pochopení řešeného problému. Mně osobně modelovací jazyk UML natolik zaujal, že jsem si jeho část, diagramy tříd, zvolil jako téma bakalářské práce. V následujících kapitolách se věnuji základnímu seznámení s modelovacím jazykem UML, programátorské a uživatelské dokumentaci aplikace pro návrh a sestavení diagramu tříd. Tato aplikace, kterou jsem pojmenoval MLClassDiagrams je součástí baklářské práce.
9
2.
Zadání bakalářské práce
2.1.
Specifikace zadání
Vytvořit aplikaci umožňující návrh a sestavení diagramu tříd se zakreslením vztahů mezi třídami. Nastavení navigací jednotlivých vztahů, připojení asociační třídy, začlenění atributů a operací do jednotlivých tříd. Generování zdrojového kódu z navrženého diagramu a v neposlední řadě možnost uložení diagramu pro pozdější použití či editaci.
2.2.
Požadavky na program
• Zakreslení vztahu mezi třídami • Nastavení navigací ve vztazích mezi třídami • Připojení asociační třídy • Začlenění atributu a operací do tříd • Generování zdrojového kódu z diagramu tříd • Uložení diagramu do souboru ve vhodném formátu
10
3.
Modelovací jazyk UML
Následující kapitola se věnuje základnímu seznámení s modelovacím jazykem UML dle knih [3] a [4]. V závěru kapitoly je uveden popis diagramu tříd a vztahů mezi třídami.
3.1.
Co je to UML?
Unifikovaný modelovací jazyk UML z anglického Unified Modeling Language vznikl na základě práce analytiků a designerů, kteří se snažili v průběhu 80. a 90. let minulého století vytvořit metody umožňující popis objektově orientované analýzy a návrhu. V polovině 90. let minulého století byly velmi populární metody Object Modeling Technique (OMT) autorů Boocha a Rumbaugha, a dále metodika Objectory od Ivara Jacobsona [3]. V roce 1995 byly zahájeny práce sjednocující rozličné metody a syntaxe pro modelování pod záštitou firmy Rational. Výsledkem byl vznik první verze modelovacího jazyka UML, který byl uveden v roce 1997. Uvedený souhrn metod se stal průmyslovým standardem, který byl nadále vyvíjen až do aktuálně používané verze 2.0. Tato verze přináší největší množství změn, k jakým kdy v UML došlo. Metamodel se výrazně transformoval. Pravděpodobně nejvýznamnější změnou je uvedení nových typů diagramů, ke kterým patří diagram objektů a seskupení. Nastala změna názvu diagramu objektové spolupráce na komunikační diagram. Dalšími novými diagramy jsou: • diagram přehledu instrukce, • diagram načasování, • diagramy smíšené struktury. Podstatou modelovacího jazyka UML je souhrn grafických notací pro vyjádření analytických a návrhových modelů. UML je jazykem, který umožňuje modelování různě náročných aplikací pomocí stejné syntaxe. Tím je umožněno sdílení výsledků práce s ostatními členy týmu. Výsledný model je pochopitelný i pro zadavatele aplikace a umožňuje kvalitní a dostatečné vyjasnění požadavků uživatelů na vytvářený systém. Žádný z diagramů UML nezachycuje systém jako celek, ale je soustředěn vždy právě na jeden pohled vyvíjeného systému. Dle knihy autorů Jima Arlowa a Ila Neustadta [4] lze závěrem říci, že jazyk UML byl navržen pro to, aby spojil nejlepší existující postupy modelovacích technik a softwarového inženýrství.
11
3.2.
Diagramy
V jazyce UML 2.0 existuje celkem třináct různých typů diagramů. Následuje jejich přehled včetně rozčlenění do skupin. Přehled diagramů • Strukturní diagramy: – diagram tříd – diagram složené struktury – diagram komponent – diagram nasazení – diagram objektů (instancí) – diagram balíčků • Diagramy chování: – diagram aktivit – diagram užití – stavový diagram • Diagramy interakce: – sekvenční diagram – diagram komunikace – stručný diagram interakce – diagram časování Další popis jednotlivých diagramů je již nad rámec této práce. V další podkapitole se tedy již věnuji pouze diagramu tříd.
3.3.
Diagram tříd
Znázorňuje statickou strukturu a vztahy mezi objektovými třídami navrhovaného systému. 3.3.1.
Co je to objekt?
Objekt je seskupením dat a funkcionalit, které jsou spolu spojeny za účelem plnění požadované zodpovědnosti. Objekt má svou identitu, vlastnosti, chování a zodpovědnost. Vlastnosti jsou v podstatě atributy objektu a chování objektu je realizováno jeho metodami. Každý objekt má jedinečnou zodpovědnost (dovednost).[3] 12
3.3.2.
Co je to třída?
Pro návrh objektových systémů se předpokládá, že je třeba sestavit model tříd objektů (Class model), který nezobrazuje jednotlivé objekty, ale šablony (předpisy) pro jejich vytvoření (třídy objektů). Vztah mezi třídou a objekty znázorňuje obrázek 1. Třída je definována svými atributy a operacemi. Při návrhu třídy neuvažujeme o konkrétním naplnění atributů, pouze určíme jejich název a typ.[3] Objekt 2 vytvořen z
Objekt 1
vytvořen z
Objektová třída (Class)
Objekt 3
vytvořen z
Obrázek 1. Třída a objekty
3.3.3.
Notace tříd v jazyce UML
Grafická syntaxe pro znázornění tříd je v jazyce UML velice bohatá. Jediným povinným oddílem je název třídy. Na obrázku 2. je zobrazena úplná notace třídy. název třídy
stereotyp
označené hodnoty
«entity» BankovniUcet
oddíl názvu
{autor = Marek status = testováno}
oddíl atributů
- cislo: String - vlastnik: String - zustatek: double = 0.0
oddíl operací
+ vytvorit(cislo: String, vlastnik: String) + ulozit(mnozstvi: double) operace třídy + vybrat(mnozstvi: double) + getCislo(): String + getVlastnik(): String + getZustatek(): double
inicializační hodnota
typ viditelnosti
Obrázek 2. Úplná notace třídy
Jaké další nepovinné oddíly budou použity při návrhu záleží výhradně na vás, a především na účelu diagramu. Chceme-li diagramem znázornit pouze relace mezi třídami, stačí do symbolu třídy zahrnout pouze oddíl s názvem třídy. Zajímá-li nás ovšem chování tříd, přidáme k symbolům tříd i oddíl operací. Nebo 13
může být diagram orientován na data, zde tedy připojíme oddíl atributů. Vždy bychom však měli usilovat o maximální využití flexibility jazyka UML, tak aby byl výsledný diagram co nejsrozumitelnější. Oddíl názvu Jazyk UML striktně nenařizuje žádnou konvenci pro pojmenování tříd, přesto se používá zažitá konvence, kdy se pro název používají „velbloudí písmenaÿ. Název třídy začíná velkým písmenem, které je počátkem každého dalšího slova v názvu. Například třídu bankovní účet pojmenujeme „BankovniUcetÿ. Vždy bychom se měli vyhnout používání speciálních znaků, jako jsou interpunkční znaménka, pomlčky, podtržítka, znaky &, # a lomítka. Dále bychom se měli vyvarovat zkracování názvů tříd, atributů a operací. Oddíl atributů Atribut jakožto nositel informací o objektu je definován svým jménem, typem a viditelností. Název atributu jednoznačně pojmenovává danou vlastnost objektu.[3] Opět je vhodné pro pojmenování atributu použít velbloudí zápis. Atributy vyjadřují určitý „předmětÿ, např. zůstatek na účtě, proto se používají podstatná jména nebo jmenné skupiny. viditelnost nazev: typ [nasobnost] = PocatecniHodnota Viditelnost řídí přístup k členům třídy. V jazyce UML rozlišujeme čtyři základní typy přístupu - viditelnosti: • Veřejný (public), označováno symbolem „+ÿ, • Soukromý (private), označováno symbolem „-ÿ, • Chráněný (protected), označováno symbolem „#ÿ. • Balíček (package), označováno symbolem „~ÿ. Typ, někdy uváděný jako formát atributu může být buď další třídou (vlastní datový typ) nebo primitivním typem, viz tabulka 1. Jazyk UML definuje čtyři základní primitivní typy. Ty lze vhodně použít v analytických modelech v případě, že chceme zajistit nezávislost na platformě. Lze samozřejmě použít i standardních typů z objektově orientovaných vývojových prostředí (například long, array, . . .). Násobnost (multiplicita) je velice rozšířená v etapě návrhu, používá se však i v analytických modelech, neboť poskytuje přesný a výstižný způsob vyjádření 14
Primitivní typ Význam (sémantika) Integer Celé číslo Float Reálné číslo Boolean Logický datový typ String Posloupnost znaků Tabulka 1. Primitivní typy jazyka UML
určitých obchodních omezení vztahujících se k „počtu předmětůÿ účastnících se relace. [4] Pomocí násobnosti je nám umožněno modelovat prázdné hodnoty nebo pole předmětů. Například zápis +jmenoPracovnika: String [1..*] nám říká, že veřejný atribut jmenoPracovnika musí obsahovat minimálně jeden řetězec, maximální počet řetězců není omezen. Počáteční hodnota umožňuje nastavit hodnotu atributu v okamžiku tvorby objektu. Oddíl operací Operace jsou funkcemi, které se vážou k určité třídě. Jako takové mají veškerou charakteristiku funkcí, tedy název, seznam argumentů a typ návratové hodnoty. viditelnost nazev(smer nazevArgumentu: typArgumentu = implicitniHodnota, ... další argumenty): navratovyTyp Argumentům operací lze určit jejich směr. Význam směru je uveden v tabulce 2.
15
Směr in out inout
Význam (sémantika) Výchozí hodnota, argument je použit jako vstupní Argument je použit jako výstupní Argument je použit jako vstupní a výstupní Tabulka 2. Směr argumentů
Argumentům operace lze přiřadit implicitní hodnotu. Pokud v okamžiku volání nemá argument hodnotu, použije se hodnota implicitní. [4] 3.3.4.
Vztahy mezi třídami
Asociace Asociace znázorňuje vztahy mezi jednou či více třídami, které jsou abstrakcí množiny spojení mezi instancemi (objekty) těchto tříd. Jinými slovy, asociace mezi třídami nám říká, že tyto třídy mají mezi sebou „nějaký přímý vztahÿ.[3] 1
*
Třída A
Třída B Provádí
Obrázek 3. Vazba typu asociace Agregace Agregace je vyjádření vztahu část - celek, tedy například motor je částí auta, takže můžeme určit vazbu mazi třídou Auto a třídou Motor jako vazbu typu agregace. Třída A
Třída B 1
*
Atribut 1 Atribut 2
Atribut 1 Atribut 2
Operace 1 Operace 2
Operace 1 Operace 2
Obrázek 4. Vazba typu agregace Kompozice Kompozice je speciálním typem agregace, kdy víme, že podřízený objekt nemůže existovat samostatně bez nadřízeného objektu. Se zánikem nadřízeného objektu automaticky zaniká jeho podřízený objekt. Podřízený objekt nelze vytvořit, aniž by exitoval jeho nadřízený objekt. 16
Třída A
Třída B 1
1..*
Atribut 1 Atribut 2
Atribut 1 Atribut 2
Operace 1 Operace 2
Operace 1 Operace 2
Obrázek 5. Vazba typu kompozice
Dědičnost (generalizace) Dalším velmi důležitým vztahem je dědičnost. Dědičnost je klíčovým konceptem objektově orientované analýzy a návrhu. Princip dědění umožňuje třídám sdílet jejich charakteristiky včetně hierarchie dědění a uchovat jejich rozdíly. Dědičností rozumíme vztah mezi třídou a jejími konkrétními potomky. Podřízené třídy dědí ze svého předka atributy a operace. Rozšiřují tedy svou nadřazenou třídu o nové vlastnosti a operace. Třída A Atribut 1 Atribut 2 Operace 1 Operace 2
Třída B
Třída C
Atribut 1 Atribut 2
Atribut 1 Atribut 2
Operace 1 Operace 2
Operace 1 Operace 2
Obrázek 6. Vazba typu dědičnost
Polymorfismus objektů Některé objekty mají k dispozici totožná rozhraní realizovaná prostřednictvím operací, ale metody, které se skrývají za těmito operacemi, jsou rozdílné. Tomuto jevu říkáme polymorfismus. Třídy, které mají tyto virtuální operace, nazýváme polymorfní. [3] Asociační třídy Asociační třídy dovolují přiřadit atributy, operace a další rysy k asociační vazbě, která řeší vztah mezi třídami typu mnoho ku mnohu.
17
Na obrázku 7. je znázorněn vztah mezi třídami Osoba a Firma. V analýze bylo rozpoznáno, že v jedné firmě pracuje jedna nebo více osob. Naopak jedna osoba může být zaměstnána v jedné nebo více firmách. Tento vztah lze řešit přidáním asociační třídy Zamestnanec. V rámci asociační třídy poté můžeme vložit potřebné atributy (např. osobní číslo) a operace, které budou definovat zaměstnance. Pokud by atributy byly přímo součástí třídy Osoba, pak nemůžeme řešit případ, kde osoba pracuje ve více firmách. Firma
1
Osoba
1..*
nazev ico
jmeno prijmeni
Zamestnanec osobniCislo pozice
Obrázek 7. Asociační třída - příklad
Firma nazev ico
1
1..*
Zamestnanec osobniCislo pozice
1
Osoba
1 jmeno prijmeni
Obrázek 8. Asociační třída - příklad - vyjádření pomocí plnohodnotné třídy
18
4.
Analýza existujících CASE nástrojů
Tato kapitola se věnuje krátké analýze tří CASE nástrojů k návrhu a sestavení diagramu tříd. Programy jsou zvoleny tak, aby byly zastoupeny kategorie komerční, komunitně-komerční a s otevřeným zdrojovým kódem. V závěru kapitoly uvádím vliv analyzovaných programů na výslednou aplikaci MLClassDiagrams.
4.1.
Popis programů
Následující text se věnuje popisu tří CASE programů. Většina aplikací umožňuje i modelování dalších diagramů UML viz kapitola 3.2. 4.1.1.
Enterprise Architect 9
Enterprise Architect od společnosti Sparx Systems Pty Ltd. je velice výkonný nástroj pro modelování, analýzu a návrh dle standardu UML 2.3. Spadá do kategorie komerčních produktů s rozsáhlým záběrem funkcí. Je nabízen v šesti edicích, které se liší dle dostupných funkcí a možnosti integrace s vývojovými prostředími. Přehled jednotlivých edicí a určení je uveden v tabulce číslo 3. v závěru této podkapitoly.
Obrázek 9. Enterprise Architect 9
Hlavní předností Enterprise Architect je robustnost a možnost práce v týmu, obsahuje i řadu dalších nástrojů pro řízení týmů, modelování infrastruktury, generování kódu do řady programovacích jazyků a v neposlední řadě exporty pro vytváření dokumentace. Program je dostupný primárně pro platformu Windows, ale lze jej provozovat i na Linux a Mac. Pravděpodobně jedinou nevýhodou programu je pořizovací cena. Program je nabízen v základní edici přibližně za 2 700 Kč/licence, což je nevýhodou pro použití v malých týmech, či začínajících společnostech. Nákup více licencí se tak stává
19
podstatnou zátěží a může být překážkou při zavádění unifikovaného návrhu vývoje. Zkušební verze a další informace k programu Enterprise Architect k dispozici na adrese http://www.sparxsystems.com. Edice Enterprise Architect Editions Desktop Professional Corporate Extended Suite Editions Business and Software Engineering Systems Engineering Ultimate
Určení Komplexní UML nástroj pro individuální analýzu, bez týmové spolupráce Plně vybavený UML nástroj pro pracovní skupiny, analytiky a vývojáře Podporuje velké spolupracující skupiny s důrazem na bezpečnost Pro business modely, architekturu systémů, vývoj a další Pro systémové inženýrství, programování v reálném čase a embedded systémy Komplexní neomezená licence Enterprise Architect
Tabulka 3. Enterprise Architect 9, přehled edicí
4.1.2.
Visual Paradigm for UML
Visual Paradigm for UML (dále jen VP-UML) je komplexní nástroj, za jehož vývojem stojí Visual Paradigm Int’l Ltd. VP-UML zapadá do kategorie komunitně-komerční, je tedy nabízen i ve verzi pro nekomerční účely zdarma. Obdobně jako Entrpeise Architect nabízí VP-UML vedle standardních CASE nástrojů i řadu dalších funkcí, jako například řízení požadavků, modelování databází, řízení projektů a mnoho dalších. Program je nabízen ve čtyřech edicích, které jsou děleny dle oblasti použítí, viz tabulka 4. VP-UML lze provozovat nativně na operačních systémech Windows, Unix/Linux a Mac. Edice Modeler Standard Professional Enterprise
Určení Vizualizace myšlenek s návrhem UML a ER diagramů Publikování a tvorba dokumentace Generování zdrojového kódů a databází Předešlé edice + řízení projektů
Tabulka 4. Visual Paradigm for UML, přehled edicí
20
Hlavními přednostmi VP-UML jsou rozsah funkcí a možnost využití i v dalších oblastech vývoje. Také nativní podpora všech operačních systémů přináší výhodu při práci ve smíšených týmech. Nevýhodou je opět cena licencí, které se pohybují přibližně v rozmezí 1 980 Kč až 27 980 Kč při Enterprise edici.
Obrázek 10. Visual Paradigm for UML
Zkušební verze a další informace k programu Visual Paradigm for UML k dispozici na adrese http://www.visual-paradigm.com/product/vpuml/ . 4.1.3.
Umbrello UML Modeller
Umbrello UML Modeller (dále jen Umbrello) je vyvíjen skupinou The Umbrello Team. Jedná se o program s otevřeným zdrojovým kódem a lze jej použít jak pro nekomerční, tak i komerční projekty. Nativně je podporován pod operačními systémy Unix/Linux, ale lze jej bez větších problémů portovat pod Windows. Umbrello nabízí standardní diagramy UML, možnost importu a exportu zdrojových kódů do různých programovacích jazyků a také umožňuje generování dokumentace k navrhovaným třídám. Kompletní verze a další informace k programu Umbrello UML Modeller k dispozici na adrese http://uml.sourceforge.net.
Obrázek 11. Umbrello UML Modeller
21
4.2.
Vliv na aplikaci MLClassDiagrams
Před zahájením vývoje aplikace jsem se seznámil s programy uvedenými v předešlé kapitole. Vždy jsem testoval funkčnost a utvářel si představu o použití v aplikaci. Poté jsem si setavil jednotlivé body, které jsem začlenil do aplikace. Mimoto jsem vycházel i ze zkušeností s vektorovými grafickými editory a snažil se je uplatnit při vývoji uživatelského rozhraní. Hlavní rysy, které mě zaujaly a ovlivnily aplikaci: • jednoduchost uživatelského rozhraní, • intuitivnost při sestavování diagramu tříd, • jednoduchý export do zrojového kódu, • organizace diagramů do projektů, • možnost uložení diagramu jako obrázek. Během samotného vývoje přicházela řada dalších otázek, které byly průběžně konfrontovány s jednotlivými programy.
22
5.
Programátorská dokumentace
Tato kapitola popisuje aplikaci z programátorského hlediska. Obsahuje popis použitých technologí a nástrojů, konvencí, architektury a hlavních tříd jednotlivých balíčků.
5.1.
Použité technologie a nástroje
Aplikace je postavena na platformě Microsoft .NET Framework verze 4.0. K vývoji bylo použito Microsoft Visual Studio 2010 Express a jako programovací jazyk jsem zvolil C# ve verzi 4.0. Grafické uživatelské rozhraní bylo vytvořeno pomocí Windows Form, které je součástí Microsoft .NET Frameworku. K ukládání a reprezentaci dat byl použit formát XML, který je význačný svou přehledností a jednoduchou přenositelností.
5.2.
Architektura aplikace
Při vývoji aplikace a především jejího uživatelského rozhraní jsem se snažil držet obecně platných zvyklostí tak, aby aplikace byla pro uživatele intuitivní a nepůsobila rušivě. Při psaní zdrojového kódu jsem se držel několika obecných doporučení a pravidel. Podstatné bylo pojmenovávání pomocí velbloudího písma s maximálním důrazem a vypovídací schopností zdrojového kódu. Aplikace se skládá z pěti samostatných projektů. Pro zpřehlednění projekty nazývám jako moduly. Hlavním modulem je Core tvořící datovou vrstvu, dále pak GUI, který reprezentuje základní uživatelské rozhraní, DiagramEditor zahrnující uživatelský prvek editoru diagramu tříd, CodeGenerator modul zabezpečující generování zdrojového kódu a v neposlední řadě Translations což je modul, který sdružuje jazykovou mutaci programu. Na obrázku číslo 12. je znázorněn diagram užití pro uživatele aplikace.
5.3.
Popis modulu Core
V následujícím textu popisuji výčtové typy a hlavní třídy modulu Core, který představuje datovou vrstvu aplikace. Při popisu tříd jsem se zaměřil na jejich hlavní veřejné vlastnosti a metody. Na obrázku číslo 13. je znázorněn diagram tříd pro modul Core. 5.3.1.
Výčtové typy
• AccessType
23
Editor diagramu tříd
«include»
Zakreslení vztahů mezi třídami
«include»
«include»
Uložení projektu
Nastavení navigací ve vztazích mezi třídami
«include»
Uživatel aplikace
Export do grafických formátů
Připojení asociační třídy
Začlenění atributů a operací do tříd
Tisk
Generování zdrojového kódu
Obrázek 12. Diagram užití MLClassDiagrams
Viditelnost atributu Může nabývat hodnot Public (veřejný), Private (soukromý), Protected (chráněný). • ClassAccessType Viditelnost třídy Může nabývat hodnot Public (veřejná), Internal (interní). • SelectType Výběr elementu Reperezentuje výběr elementu. Hodnoty výčtového typu jsou: Empty (element není vybrán), Element (element, později definován svým vlastním typem), Connection (vztah, spojení elementů) • ElementType Typ elementu Blíže specifikuje vybraný element. Hodnoty výčtového typu jsou: Empty (prázdný, není vybrán), Class (třída), Structure (struktura), Interface (rozhraní), Enum (výčet), Delegate (delegát), Comment (komentář). 24
• ConnectionType Typ vztahu Specifikuje typ vztahu mezi objekty. Hodnoty výčtového typu jsou: Empty (prázdný, není vybrán), Association (asociace), Composition (kompozice), Aggregation (agregace), Generalization (dědičnost - generalizace), Realization (realizace), Dependency (závislost), Nesting (vnoření), Comment (komentář). • NavigationType Typ navigace Doplňkový typ pro nastavení směru navigace vztahu mezi objekty. Hodnoty výčtového typu jsou: Empty (prázdná navigace), OneWay (jednosměrná navigace), BothWays (obousměrná navigace).
Obrázek 13. Diagram tříd modulu Core
5.3.2.
Třída Project
Popisuje vlastnosti projektu, informace o manipulaci, dále udržuje seznam diagramů. Poskytuje metody pro ukládání a načítání projektů. Přehled nejdůležitějších vlastností a metod je popsán v následujícím přehledu. • Vlastnosti Name { set; get; } Nastavuje a vrací jméno projektu. 25
FileName { get; } Vrací název souboru. FilePath { set; get; } Nastavuje a vrací cestu k souboru projektu. IsDirty { get; } Vrací logickou hodnotu reprezentující, zda byl projekt změněn. IsEmpty { get; } Vrací informaci o stavu projektu, když je prázdný nabývá hodnoty pravda true. IsModified { get; } Vrací logickou hodnotu reprezentující, zda byl projekt modifikován. IsReadOnly { get; } Jestliže je projekt pouze ke čtení, vrácí pravdu (true). IsSaved { get; } Vrací logickou hodnotu reprezentující, zda byl projekt uložen. IsUntitled { get; } Reprezentuje stav, kdy je projekt nepojmenován. ItemCount { get; } Vrací počet diagramů obsažených v projektu. Items { get; } Vrací seznam všech diagramů v projektu. • Metody Add(Diagram item) Přidá diagram do projektu. RemoveItem(Diagram item) Odebere diagram z projektu. ItemExists(Diagram item) Ověřuje zda daný diagram v projektu existuje. Jestliže ano, vrací logickou pravdu. Load(string fileName) Načítá projekt ze souboru. 26
Save() Ukládá projekt do souboru. Pokud ještě není nastavena cesta k souboru, je vyvoláno dialogové okno pro její určení. Serialize(System.Xml.XmlElement node) Převádí projekt do XML. Deserialize(System.Xml.XmlElement node) Načítá projekt z XML. • Události FileStateChanged Vzniká při změně stavu souboru. ItemAdded Vzniká při přidání diagramu. ItemRemoved Vzniká při odebrání diagramu. Modified Vzniká když dojde k modifikace projektu. Renamed Vzniká při změně názvu projektu. 5.3.3.
Třída Diagram
Třída Diagram reprezentuje dokument diagramu tříd. Sdružuje vlastnosti popisující diagram a informace o jeho manipulaci. Dále uchovává seznamy jednotlivých elementů diagramu a vztahů mezi nimi. Poskytuje metody pro jejich manipulaci a správu. • Vlastnosti Name { set; get; } Nastavuje a vrací jméno diagramu. Elements { get; } Vrací seznam elementů diagramu. Connections { get; } Vrací seznam vztahů mezi elementy.
27
IsDirty { get; } Vrací logickou hodnotu reprezentující, zda byl diagram změněn. IsEmpty { get; } Vrací informaci o stavu diagramu, když je prázdný nabývá hodnoty pravda true. IsModified { get; } Vrací logickou hodnotu reprezentující, zda byl diagram modifikován. IsOpen { set; get; } Signalizuje stav, zda je diagram otevřený. IsReadOnly { get; } Poskytuje informaci jestli je diagram pouze ke čtení. Pokud ano, nelze jej modifikovat. IsSaved { get; } Vrací logickou hodnotu reprezentující, zda byl diagram uložen. IsUntitled { get; } Reprezentuje stav, kdy je diagram nepojmenován. ItemCount { get; } Vrací počet elementů obsažených v diagramu. • Metody AddElement(Element element) Přidává element do diagramu. AddConnection(Connection connection) Přidává vztah mezi elementy. RemoveElement(Element element) Odebírá element z diagramu. RemoveConnection(Connection connection) Odebírá vztah mezi elementy. Serialize(System.Xml.XmlElement node) Převádí diagram do XML. Metoda je volána z nadřazené třídy Project při převodu seznamu diagramů.
28
Deserialize(System.Xml.XmlElement node) Načítá diagram z XML. Metoda je opět volána z nadřazené třídy Project při načítání seznamu diagramů. • Události AddedElement Vzniká při přidání elementu. AddedConnection Vzniká při vytvoření vztahu mezi elementy. DeletedElement Vzniká při odebrání elementu. DeletedConnection Vzniká při odebrání vztahu mezi elementy. Modified Vzniká v okamžiku modifikace projektu. NeedsRedraw Vzniká při nutnosti překreslení diagramu. Opened Vzniká, když je projekt otevřen. Renamed Vzniká, když je projekt přejmenován. 5.3.4.
Třída Element
Představuje rodičovskou třídu, popisuje element diagramu tříd, ze které dále dědí kategorie tříd ClassType a CommentType. Opět popisuje element pomocí veřejných vlastností a nabízí metody pro manipulaci. • Vlastnosti Type { set; get; } Nastavuje a vrací typ elementu definovaný výčtovým typem ElementType. Name { set; get; } Nastavuje a vrací název elementu.
29
Access { set; get; } Nastavuje a vrací viditelnost elementu. Modifier { set; get; } Nastavuje a vrací modifikátor elementu. Location { set; get; } Nastavuje a vrací pozici umístění elementu na kreslícím plátně. Size { set; get; } Nastavuje a vrací velikost. Height { set; get; } Nastavuje a vrací výšku. Width { set; get; } Nastavuje a vrací šířku. IsModified { get; } Vrací logickou hodnotu reprezentující, zda byl element modifikován. • Metody Copy() Vytváří kopii elementu. Metody je využíváno při kopírování elementů na kreslícím plátně. SerializeElement(System.Xml.XmlElement node) Převádí element do XML. Serialize(System.Xml.XmlElement node) Virtuální metoda převádějící potomka elementu do XML. DeserializeElement(System.Xml.XmlElement node) Načítá element z XML. Deserialize(System.Xml.XmlElement node) Virtuální metoda načítající potomka elementu z XML. • Události Modified Vzniká při modifikaci elementu. NeedsRedraw Vzniká při nutnosti překreslení elementu. 30
5.3.5.
Třída Connection
Pomocí svých vlastností popisuje vztah mezi elementy. Udržuje v sobě informace o zdrojovém a cílovém elementu, o jejich indexu, názvu vztahu-operace, násobnostech a typu navigace. • Vlastnosti Type { set; get; } Nastavuje a vrací typ vztahu definovaný výčtovým typem. ConnectionType. IndexFrom { set; get; } Nastavuje a vrací index zdrojového elementu. From { set; get; } Nastavuje a vrací zdrojový element. MultipicityFrom { set; get; } Nastavuje a vrací násobnost vyznačovanou u zdrojového elementu. IndexTo { set; get; } Nastavuje a vrací index cílového elementu. To { set; get; } Nastavuje a vrací cílový element. MultipicityTo { set; get; } Nastavuje a vrací násobnost vyznačovanou u cílového elementu. Navigation { set; get; } Nastavuje a vrací typ navigace definovaný výčtovým typem NavigationType. Operation { set; get; } Nastavuje a vrací název vztahu-operace. IsModified { get; } Vrací logickou hodnotu reprezentující, zda byl vztah modifikován. • Metody Serialize(System.Xml.XmlElement node) Převádí vztah do XML.
31
Deserialize(System.Xml.XmlElement node) Načítá vztah z XML. • Události Modified Vzniká při modifikaci vztahu. NeedsRedraw Vzniká při nutnosti překreslení vztahu. 5.3.6.
Třída ClassType : Element
Je potomkem třídy Element, kdy upřesňuje vlastnosti a metody pro kategorii ClassType obsahující elementy třída (Class), struktura (Structure), rozhraní (Interface), výčet (Enum) a delegát (Delegate). • Vlastnosti Attributes { get; } Vrací seznam atributů. Methods { get; } Vrací seznam metod ShowAttributesInDiagram { set; get; } Nastavuje a vrací možnost zobrazení oblasti atributů v diagramu. ShowMethodsInDiagram { set; get; } Nastavuje a vrací možnost zobrazení oblasti metod v diagramu. • Metody AddAttribute(Attribute attribute) Přidává atribut do elementu. AddMethod(Method method) Přidává metodu do elementu. RemoveAttribute(Attribute attribute) Odebírá atribut z elementu. RemoveMethod(Method method) Odebírá metodu z elementu.
32
Serialize(System.Xml.XmlElement node) Převádí element do XML. Deserialize(System.Xml.XmlElement node) Načítá element z XML. MoveUpItem(object item) Přesouvá položku o úroveň výš. MoveDownItem(object item) Přesouvá položku o úroveň níž. • Události AddedAttribute Vzniká po přidání atributu. AddedMethod Vzniká po přidání metody. RemovedAttribute Vzniká po odebrání atributu. RemovedMethod Vzniká po odebrání metody. ChangedShowAttributes Vzniká po změně v nastavení zobrazení oblasti atributů v diagramu. ChangedShowMethods Vzniká po změně v nastavení zobrazení oblasti metod v diagramu. 5.3.7.
Třída CommentType : Element
Je potomkem třídy Element, kdy upřesňuje vlastnosti a metody pro komentář. • Vlastnosti Comment { set; get; } Nastavuje a vrací komentář. • Metody Serialize(System.Xml.XmlElement node) Převádí element do XML. Deserialize(System.Xml.XmlElement node) Načítá element z XML. 33
5.3.8.
Třída Attribute
Popisuje vlastnosti atributu. Poskytuje metody pro převod do XML a načítání z XML. • Vlastnosti Type { set; get; } Nastavuje a vrací datový typ atributu. IsStatic { set; get; } Nastavuje a vrací logickou hodnotu signalizující, zda se jedná o statický atribut. Name { set; get; } Nastavuje a vrací jméno atributu. Access { set; get; } Nastavuje a vrací viditelnost. Modifier { set; get; } Nastavuje a vrací modifikátor. InitialValue { set; get; } Nastavuje a vrací výchozí hodnotu argumentu. • Metody Serialize(System.Xml.XmlElement node) Převádí argument do XML. Deserialize(System.Xml.XmlElement node) Načítá argument z XML. • Události NeedsRedraw Vzniká v případě nutnosti překreslení argumentu.
34
5.3.9.
Třída Method
Popisuje vlastnosti metody. Poskytuje metody pro převod do XML a načítání z XML. • Vlastnosti Type { set; get; } Nastavuje a vrací návratový typ metody. IsStatic { set; get; } Nastavuje a vrací logickou hodnotu signalizující, zda se jedná o statickou metodu. Name { set; get; } Nastavuje a vrací jméno metody. Access { set; get; } Nastavuje a vrací viditelnost. Modifier { set; get; } Nastavuje a vrací modifikátor. Arguments { set; get; } Nastavuje a vrací argumenty metody. • Metody Serialize(System.Xml.XmlElement node) Převádí metodu do XML. Deserialize(System.Xml.XmlElement node) Načítá metodu z XML. • Události NeedsRedraw Vzniká v případě nutnosti překreslení metody.
5.4.
Popis modulu GUI
Modul reprezentuje hlavní uživatelské rozhraní aplikace. V následujícím textu se věnuji především třídě hlavního okna programu, třídě Workspace, reprezentující pracovní prostor aplikace a rozšířeným ovládacím prvkům SolutionView a TabbedControl. 35
5.4.1.
Třída MainForm
Hlavní okno programu je tvořeno navigačním menu a instancemi ovládacího prvku SolutionView, který uživateli umožňuje navigaci v hierarchii Projekt Diagram a TabbedControl, který zprostředkovává vlastní sestavování diagramu tříd. • Vlastnosti Status { set; get; } Zpřístupňuje vlastnost pro nastavení a získání hodnoty stavového panelu. 5.4.2.
Třída Workspace
Reprezentuje pracovní prostor aplikace. Třída v sobě implementuje návrhový vzor jedináček, který zabezpečuje, aby třída měla pouze jednu instanci. Přes vlastnost Default poskytuje globální přístupový bod k manipulaci s projekty diagramy. • Vlastnosti ActiveProject { set; get; } Nastavuje a vrací aktivní projekt. Workspace Default { get; } Globální přístupový bod vracející jedinou instanci třídy Workspace pracovního prostoru. HasActiveProject { get; } Vrací logickou hodnotu, zda je definován aktivní projekt. HasProject { get; } Vrací logickou hodnotu, zda je v pracovním prostoru projekt. ProjectCount { get; } Vrací počet projektů v pracovním prostoru. Projects { get; } Vrací seznam projektů v pracovním prostoru. ProjectsList { get; } Vrací seznam projektů v pracovním prostoru. • Metody 36
AddEmptyProject() Přidává prázdný projekt. AddProject(Core.Project project) Přidává projekt definovaný instancí třídy Core.Project. AreProjectsModified() Vrací logickou hodnotu signalizující zda byly projekty modifikovány. CloseProject(Core.Project project) Zavírá otevřený projekt. CloseProjects() Zavírá všechny otevřené projekty. IsProjectModified(Core.Project project) Vrací logickou hodnotu signalizující zda byl projekt modifikován. OpenProject() Otvírá projekt. Při volání je spuštěno dialogové okno pro výběr cesty k projktu. RemoveDiagram(Core.Diagram diagram) Odebírá diagram z projektu. SaveProject(Core.Project project) Ukládá aktivní projekt. V případě, že projekt nebyl ještě uložen je volána metoda SaveProjectAs. SaveProjectAs(Core.Project project) Ukládá projekt jako. Při volání je spuštěno dialogové okno pro výběr cesty k uložení projektu. • Události ActiveProjectChanged Vzniká při změně aktivního projektu v pracovním prostoru. ActiveProjectStateChanged Vzniká při změně stavu aktivního projektu. DiagramRemoved Vzniká při odebrání diagramu z projektu.
37
ProjectAdded Vzniká při přidání nového projektu. ProjectRemoved Vzniká při odebrání projektu. 5.4.3.
Ovládací prvek SolutionView
SolutionView je potomkem ovládacího prvku TreeView s rozšířením pro hierarchickou správu projektů a jim přináležícím diagramům. Projekt je reprezentován vláknem ProjectNode s vlastností Project příjmající instanci třídy Core.Project reprezentující vlastnosti projektu. Vlákno reprezentující diagram je DiagramNode, kterému je opět přes vlastnost Diagram předána instance třídy Core.Diagram reprezentující vlastnosti diagramu. 5.4.4.
Ovládací prvek TabbedControl
Je potomkem uživatelského ovládacího prvku UserControl s použitím záložek TabControl s rozšířením o navigační šipky a tlačítko k zavření aktivního diagramu. Pomocí veřejné vlastnosti DocumentManager příjmá a vrací manažer dokumentů. 5.4.5.
Ovládací prvek Page
Reprezentuje záložku pro ovládací prvek TabbedControl s vlastností Document přijímající a vracející editovaný dokument (diagram) reprezentovaný instancí třídy Core.Document.
5.5.
Popis modulu DiagramEditor
Modul DiagramEditor poskytuje uživatelský prvek editoru diagramu tříd. Stará se o vytváření, editaci a úpravy jednotlivých diagramů. Vykresluje jednotlivé elementy a vztahy. Umožňuje exporty diagramů do grafických formátů a tisk. 5.5.1.
Třída DocumentManager
Třída řídí dokumenty (diagramy) v rámci editoru a je prostředníkem mezi editorem a hlavním oknem programu (Modul GUI). • Vlastnosti ActiveDocument { set; get; } Nastavuje a vrací aktivní dokument (diagram).
38
Obrázek 14. Diagram tříd modulu DiagramEditor
• Metody AddOrActive(Core.Diagram document) Přidává nebo aktivuje dokument (diagram). Close(Core.Diagram document) Zavírá dokument (diagram). Remove(Core.Diagram document) Odebírá dokument (diagram). • Události ActiveDocumentChanged Vzniká při změně aktivního dokumentu (diagram). DocumentAdded Vzniká po přidání dokumentu (diagram). DocumentClosed Vzniká po zavření dokumentu (diagram). DocumentRemoved Vzniká po odebrání dokumentu (diagram). 39
5.5.2.
Třída Canvas
Reprezentuje kreslící plátno pro sestavení diagramu tříd. Provádí vykreslování, manipulaci s elementy a vztahy, export do grafických formátů, tisk a obsluhu událostí k výběru tvarů plátna. Instance třídy Canvas je agregována do ovládacího prvku Editor, kde je zpřístupněna uživatelskému rozhraní. • Vlastnosti DiagramName { set; get; } Nastavuje a vrací jméno diagramu. HasShapesElements { get; } Vrací pravdu (true) pokud plátno obsahuje elementy, v opačném případě nepravdu (false). HasShapesConnections { get; } Vrací pravdu (true) pokud plátno obsahuje vztahy, v opačném případě nepravdu (false). Scroll { set; get; } Nastavuje a vrací aktuální posunutí plátna. ShapesElements { get; } Vrací seznam všech elementů plátna. ShapesConnections { get; } Vrací seznam všech vztahů plátna. • Metody AddShapeElement(Shape shape) Přidává do plátna tvar elementu definovaný instancí třídy Shape. AddShapeConnection(ConnectionShape shape) Přidává do plátna tvar vztahu definovaný ConnectionShape.
instancí
třídy
RemoveShapeElement(Core.Element element) Přetížená metoda, mazající element z plátna definovaný instancí třídy Core.Element. RemoveShapeElement(Shape shape) Přetížená metoda, mazající element z plátna definovaný instancí třídy Shape. 40
RemoveShapeConnection(Core.Connection connection) Přetížená metoda, mazající vztah z plátna definovaný instancí třídy Core.Connection. RemoveShapeConnection(ConnectionShape shape) Přetížená metoda, mazající vztah z plátna definovaný instancí třídy ConnectionShape. TrySelect(System.Drawing.Point location) Zkouší, zda se na zadané poloze plátna nachází element či vztah a pokud ano volá jeho metodu TrySelect. TrySelectElement(System.Drawing.Point location) Zkouší, zda se na zadané poloze plátna vyskytuje element, pokud ano pak jej metoda vrací. TrySelectElementClicked() Testuje zda na vybraný element bylo kliknuto, jestliže ano, pak jej metoda vrací. TrySelectConnection(System.Drawing.Point location) Zkouší, zda se na zadané poloze plátna vyskytuje vztah, pokud ano pak jej metoda vrací. TrySelectConnectionShape(System.Drawing.Point location) Zkouší, zda se na zadané poloze plátna vyskytuje tvar vztahu, pokud ano pak jej metoda vrací. TrySelectShape(System.Drawing.Point location) Zkouší, zda se na zadané poloze plátna vyskytuje tvar elementu, pokud ano pak jej metoda vrací. TrySelectShapeClicked() Testuje zda na vybraný tvar elementu bylo kliknuto, jestliže ano, pak jej metoda vrací. TrySizeable(System.Drawing.Point location) Zkouší, zda je na zadané poloze tvar s možností změny velikosti, pokud ano pak metoda vrací tvar elementu a typ změny velikosti. DrawContent(System.Drawing.Graphics g) Vykresluje obsah plátna. Prochází seznam elementů a vztahů, postupně volá jejich metody pro vykreslení.
41
ExportToBitmap() Provádí export do grafických formátů. Před vlastním exportem je vyvolán dialog pro nastavení názvu, cesty a typu k uložení souboru. Lze provést export do formátů JPEG (*.jpg), PNG (*.png), GIF (*.gif), BMP (*.bmp) a TIFF (*.tiff). PrintPreview() Vyvolá předtiskový náhled a umožní provedí nastavení, pak lze dokument vytisknout. Print() Umožní před tiskem vybrat tiskárnu a nastavení, poté tiskne aktivní dokument (diagram). 5.5.3.
Třída (ovládací prvek) Editor
Ovládací prvek Editor zabezpečuje editaci kreslícího plátna reprezentovaného třídou Canvas. Umožňuje přidání, kopírování, vložení a vymazání elementu. Nastavení a smazání vztahů a v neposlední řadě vykreslení diagramu. • Vlastnosti Canvas { get; } Vrací aktivní kreslící plátno. Document { set; get; } Nastavuje a vrací dokument (diagram). HasCanvas { get; } Vrací pravdu (true), když existuje kreslící plátno v opačném případě vrací nepravdu (false). HasDocument { get; } Vrací pravdu (true), když je nastaven dokument (diagram) v opačném případě vrací nepravdu (false). Selected { set; get; } Nastavuje a vrací typ výběru, zda jde o element nebo vztah. SelectedElement { set; get; } Nastavuje a vrací typ vybraného elementu. SelectedConnection { set; get; } Nastavuje a vrací typ vybraného vztahu. 42
• Metody CopyElement() Pokud je vybrán element, zkopíruje ho do schránky. PasteElement() V případě, že schránka obsahuje element je z ní vložen do dokumentu (diagramu). DeleteElement() Vyvolá dialog s otázkou, zda se má vybraný element smazat a v případě potvrzení vybraný element smaže. PrintPreview() Vyvolá předtiskový náhled a provede změny, pak lze dokument vytisknout. Print() Umožní před tiskem vybrat tiskárnu a nastavení, poté tiskne aktivní dokument (diagram). 5.5.4.
Třída (ovládací prvek) EditorTab
EditorTab je ovládacím prvkem obsahující menu pro vytváření elementů, nastavování vztahů a nástroje pro úpravu, export a tisk diagramu tříd. Dále obsahuje instanci výše popsaného ovládacího prvku Editor. 5.5.5.
Třída Shape
Třída Shape reprezentuje základní tvar elementu. Sdružuje vlastnosti popisující tvar element a metody pro vykreslování a manipulaci. Potomci upřesňují specifika a implementují abstraktní metody pro danou kategorii elementů. • Vlastnosti Clicked { set; get; } Nastavuje a vrací vlastnost kliknutí na element. Document { set; get; } Nastavuje a vrací dokument (diagram). Element { set; get; } Nastavuje a vrací element. Graphic { set; get; } Nastavuje a vrací grafiku pro vykreslování. 43
Location { set; get; } Nastavuje a vrací pozici elementu. Scroll { set; get; } Nastavuje a vrací aktuální posunutí plátna. Selected { set; get; } Nastavuje a vrací vlastnost, zda je element vybrán. Size { set; get; } Nastavuje a vrací aktuální velikost elementu. • Metody ActualHeight() Abstraktní metoda vracející aktuální výšku elementu v pixelech. ActualWidth() Abstraktní metoda vracející aktuální šířku elementu v pixelech. AutoResize() Provede automatickou změnu velikosti elementu dle jeho obsahu. AutoResizeHeight() Provede automatickou změnu výšky elementu dle jeho obsahu. AutoResizeWidth() Provede automatickou změnu šířky elementu dle jeho obsahu. ContextMenuStrip() Zobrazuje kontextové menu elementu. Delete() Maže element z dokumentu (diagramu). Draw(System.Drawing.Graphics g, System.Drawing.Point scroll) Provádí vykreslení elementu. DrawSizeableBorder() Vykresluje okraj pro změnu velikosti elementu. TrySelect(System.Drawing.Rectangle select) Zkouší zda je element vybrán. Podle výsledku nastavuje vlastnost Selected. 44
TrySizeable(System.Drawing.Rectangle select) Metoda volána z třídy Canvas pro zkoušku, zda jde elementu změnit velikost. Vrací informací o elementu a typu změny velikosti. • Události CursorChanged Vzniká při výběru oblasti, kdy je možné elementu změnit velikost. NeedsRedraw Vzniká vždy když je nutné překreslit element. SizeChanged Vzniká při změně velikosti elementu. 5.5.6.
Třída ClassShape : Shape
ClassShape je potomkem třídy Shape, upřesňuje vlastnosti a implementuje metody pro elementy třída (Class), struktura (Structure), rozhraní (Interface), výčet (Enum) a delegát (Delegate). • Vlastnosti CountAttributes { get; } Vrací počet atributů. CountMethods { get; } Vrací počet metod. Element { set; } Nastavuje element. • Metody ActualHeight() Vrací aktuální výšku elementu v pixelech. ActualWidth() Vrací aktuální šířku elementu v pixelech. ContextMenuStrip() Zobrazuje kontextové menu elementu. Delete() Maže element z dokumentu (diagramu). Draw(System.Drawing.Graphics graphic, System.Drawing.Point scroll) Provádí vykreslení elementu. 45
5.5.7.
Třída CommentShape : Shape
CommentShape je potomkem třídy Shape, upřesňuje vlastnosti a implementuje metody pro element komentář (Comment). • Vlastnosti Element { set; } Nastavuje komentář. • Metody ActualHeight() Vrací aktuální výšku komentáře v pixelech. ActualWidth() Vrací aktuální šířku komentáře v pixelech. ContextMenuStrip() Zobrazuje kontextové menu komentáře. Delete() Maže komentář z dokumentu (diagramu). Draw(System.Drawing.Graphics graphic, System.Drawing.Point scroll) Provádí vykreslení komentáře. 5.5.8.
Třída ConnectionShape
Třída sdružuje vlastnosti vztahu mezi elementy, logiku pro určení tvaru cesty a metody pro vykreslování vztahu. • Vlastnosti Connection { set; get; } Nastavuje a vrací vztah. Document { set; get; } Nastavuje a vrací dokument (diagram). Scroll { set; get; } Nastavuje a vrací aktuální posunutí plátna. Selected { set; get; } Nastavuje a vrací vlastnost, zda je vztah vybrán. 46
ShapeFrom { set; get; } Nastavuje a vrací zdrojový element vztahu. ShapeTo { set; get; } Nastavuje a vrací cílový element vztahu. • Metody ContextMenuStrip() Zobrazuje kontextové menu vztahu. Delete() Provede smazání vztahu z dokumentu (diagramu). Draw(System.Drawing.Graphics graphic, System.Drawing.Point scroll) Provádí vykreslení vztahu. TrySelect(System.Drawing.Rectangle select) Zkouší zda je vztah vybrán. Podle výsledku nastavuje vlastnost Selected. • Události NeedsRedraw Vzniká vždy, když je nutné vztah překreslit. 5.5.9.
Třída Validator
Statická třída poskytující metody ke kontrole správného tvaru zadávaných údajů ve formulářích. • Metody ValidArgument(string argument, out string errorMessage) Kontroluje správný formát argumentu. Správný tvar je nazev: datovy typ. ValidArguments(string arguments, out string errorMessage) Kontroluje správný formát argumentů, které jsou odděleny pomocí čárek. Příjmaný tvar, je opět ve tvaru nazev: datovy typ. ValidName(string name, out string errorMessage) Kontroluje správný tvar názvu. Minimální delka názvu je jeden znak a nesmí začínat číslicí. Nepřípustné jsou také mezery. 47
ValidValue(string value, out string errorMessage) Kontroluje správný tvar hodnoty při použití výčtového typu. Správný tvar je nazev = hodnota. 5.5.10.
Ovládací prvek ElementListView : ListView
Ovládací prvek ElementListView je potomkem ovládacího prvku ListView, který je standardní součástí .NET Frameworku. ListView umožňuje zobrazení dat v tabulce s možností použití ikon. Původní funkcionalita je rozšířena o možnost editace položek elementu. Elementem je například třída u které editujeme její atributy a metody. Položky, které lze pomocí ElementListView spravovat jsou: atribut (AttributeListViewItem), metoda (MethodListViewItem) a položka (ItemListViewItem). 5.5.11.
Dialog ElementDialog : Form
Pomocí tohoto dialogu lze editovat třídu (Class), strukturu (Structure) a rozhraní (Interface). Obsahuje jednotlivé instance ovládacího prvku ElementListView pro úpravu atributů a metod. • Konstruktor ElementDialog(Core.Elements.ClassType element, Core.ElementType type) Konstruktoru je předán editovaný element a jeho typ. • Vlastnosti Element { set; } Nastavuje editovaný element. Type { set; } Nastavuje typ editovaného elementu. • Metody AdjustForm() Upravuje zobrazení ovládacích prvků dle typu elementu. UpdateTexts() Provádí překlad jednotlivých ovládacích prvků dialogu pomocí modulu Translations. LoadData() Načítá data do ovládacích prvků dialogu z předaného elementu. 48
UpdateData() Aktualizuje data z ovládacích prvků dialogu v předaném elementu. ChangePositionItems(ElementListViewItem item1, ElementListViewItem item2) Obslužná metoda provádějící vzájemnou záměnu dvou položek z ElementListView. 5.5.12.
Dialog AttributeDialog : Form
Dialog zabezpečuje přidávání a editaci atributu v rámci ovládacího prvku ElementListView. Obsahuje obslužné metody pro načtení (LoadData) a aktualizaci (UpdateData) dat. Překlad je zabezpečen pomocí metody UpdateTexts. 5.5.13.
Dialog MethodDialog : Form
MethodDialog zabezpečuje editaci metody opět v rámci ovládacího prvku ElementListView. Obslužné metody jsou stejné, jako při AttributeDialog. 5.5.14.
Dialog EnumDelegateDialog : Form
Dialog je určen k editaci výčtového typu (Enum) a delegátu (Delegate). Konstruktoru je předán editovaný element a jeho typ. Podle typu a metody AdjustForm je formulář upraven. Za pomoci metody UpdateText je dialog přeložen a pomocí obslužných metod LoadData, UpdateData jsou do něj načtena a z něj aktualizována data. Pro editaci položek výčtového typu je použita instance ovládacího prvku ElementListView ve spojení s následujícím dialogem ItemDialog. Přesuny položek jsou prováděny za pomoci metody ChangePositionItems. 5.5.15.
Dialog ItemDialog : Form
Pomocí tohoto dialogu se přidává a edituje položka výčtového typu v rámci ovládacího prvku ElementListView. Konstrukoru je předána položka, status, zda jde o novou či editovanou a případně typ. Data jsou do jednotlivých ovládacích prvků formuláře načítána pomocí metody LoadData a aktualizována metodou UpdateData. Je zde obslužná metoda UpdateTexts k překladu dialogu. 5.5.16.
Dialog CommentDialog : Form
Umožňuje editaci komentáře. Konstruktoru je předán element komentáře ze kterého jsou pomocí metody LoadData načtena data do ovládacích prvků dialogu. Aktualizace je zabezpečena metodou UpdateData. Překlad je proveden za pomoci metody UpdateTexts.
49
5.5.17.
Dialog ConnectionDialog : Form
K úpravě vlastností vztahu mezi elementy slouží formulář ConnectionDialog. Za pomocí tohoto dialogu lze nastavit název vztahu, směr a násobnosti. Vztah je předán konstruktorem. Data do ovládacích prvků načítá metoda LoadData. K atualizaci je volána metoda UpdateData. Popisy ovládacích prvků jsou načítány metodou UpdateTexts.
5.6.
Popis modulu CodeGenerator
V následujícím textu popisuji výčtové typy, hlavní třídy a formuláře modulu CodeGenerator, který z diagramu tříd vytváří zdrojový kód ve zvoleném programovacím jazyce. Modul umožňuje generování zdrojového kódu pro Microsoft Visual C# verze 2008 a 2010 a pro PHP verze 5.3+.
Obrázek 15. Diagram tříd modulu CodeGenerator
5.6.1.
Výčtové typy
• CodeType Typ zdrojového kódu Typ určující zdrojový kód, který generátor z projektu vytváří. Hodnoty jsou: Empty, CSharp, PHP. • SolutionType Typ řešení Tento typ je použit při generování zdrojového kódu pro C#, kdy určuje 50
typ souboru řešení pro zvolenou verzi Visual Studia. Hodnoty daného typu jsou: Empty, VS2005, VS2008, VS2010.
5.6.2.
Třída CodeGenerator
Rodičovská třída sdružující vlastnosti pro generování zdrojového kódu a abstraktní metodu Create pro vlastní generování. • Vlastnosti PathDirectory { set; get; } Nastavuje a vrací cestu, kam bude vygenerován zdrojový kód. PrograssBar { set; get; } Nastavuje a vrací ovládací prvek PrograssBar, který je při generování kódu naplňován hodnotami signalizující stav průběhu. Project { set; get; } Nastavuje a vrací projekt pro generování zdrojových kódů. SolutionType { set; get; } Nastavuje a vrací typ řešení. Vlastnost nabývá významu pouze při generování zdrojových kódů do jazyka C#. Sources { set; get; } Nastavuje a vrací seznam zdrojů. Vlastnost opět nabývá významu pouze při generování zdrojových kódů do jazyka C#. UseNotImplemented { set; get; } Nastavuje a vrací volbu, zda bude při generování metoda obsahovat výjimku o neimplementaci. • Metody Generate() Abstraktní metoda pro generování zdrojového kódu. Při úspěšném vygenerování zdrojových kódů je návratem metody pravda (true) v opačném případě nepravda (false).
51
5.6.3.
Třída CSharpCodeGenerator : CodeGenerator
Třída zabezpečuje generování zdrojového kódu do C# ve verzi 2008 a 2010 včetně vytvoření struktury projektu. Je potomkem třídy CodeGenerator, která sdružuje vlastnosti pro generování zdrojového kódu, popsané v kapitole 5.6.1. • Metody public override bool Generate() Metoda pro generování zdrojového kódu do C#. Při úspěšném vygenerování zdrojových kódů je návratem metody pravda (true) v opačném případě nepravda (false). 5.6.4.
Třída PHPCodeGenerator : CodeGenerator
Třída zabezpečuje generování zdrojového kódu do PHP 5.3+. Třída je opět potomkem třídy CodeGenerator, která sdružuje vlastnosti pro generování zdrojového kódu, popsané v kapitole 5.6.1. • Metody public override bool Generate() Metoda pro generování zdrojového kódu do PHP 5.3+. Při úspěšném vygenerování zdrojových kódů je návratem metody pravda (true) v opačném případě nepravda (false). 5.6.5.
Třída IdGenerator
Statická třída vytvářející unikátní identifikátor. Tento identifikátor je použit při generování zdrojového kódu pro Visual Studio, konkrétněji v souboru řešení (.sln). • Metody Create() Vrací vytvořený unikátní identifikátor pro soubor řešení. Formát je ve tvaru XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, kdy X jsou náhodné znaky složené z písmen [A-Z] a číslic [0-9]. 5.6.6.
Dialog CodeGeneratorDialog
Dialog CodeGeneratorDialog je rozhraním pro výběr jazyka a nastavení možností generování zdrojového kódu. Pomocí něj lze editovat jednotlivé vlastnosti třídy CodeGenerator. • Konstruktor 52
CodeGeneratorDialog(Core.Project project, [CodeGenerator.CodeType codeType = CodeType.Empty]) Konstruktoru je předán projekt a případně typ jazyka pro generování. • Vlastnosti Project { set; get; } Nastavuje a vrací projekt pro generování zdrojových kódů. • Metody UpdateTexts() Provádí překlad jednotlivých ovládacích prvků formuláře pomocí modulu Translations.
5.7.
Popis modulu Translations
Modul Translations obsahuje jednu třídu Translation, která v sobě uchovává reprezentaci jazykové mutace. Jednotlivé položky jsou přístupné přes veřejné vlastnosti. Pojmenování vychází z výchozích hodnot ovládacích prvků a je psáno v anglickém jazyce za pomoci velbloudího písma. V případě korekce či překladu aplikace lze rozšířit nebo vyměnit třídu Translation. Vytvořením samostatného modulu pro jazykovou mutaci je vedle primárního účelu jednoduchého překladu celé aplikace fakt, kdy lze okamžitě provést korekci textu či doplnění nepřesností. V případě umístění textu přímo v rámci ovládacího prvku je pozdější údržba značně složitá.
53
6.
Uživatelská dokumentace
Celá aplikace byla navržena s ohledem na jednoduché a intuitivní ovládání. Hlavní prioritou byla ergonomie aplikace, která by uživatele nijak nerozptylovala a jednoduchou cestou jej dovedla k sestavení diagramu tříd, následnému exportu do grafického formátu či zdrojového kódu zvoleného programovacícho jazyka. Proto jsem při tvorbě uživatelského rozhraní dbal obecných zvyklostí a doporučení. V maximální možné míře jsem využíval standardních ovladacích prvků, případně je rozšířil o chybějící funkcionalitu. Při sestavování formulářů jsem čerpal především ze standardních dialogů operačního systému Microsoft Windows a grafických editorů, především pak z CorelDRAW. V neposlední řadě jsem se držel doporučení z publikace Mgr. Martina Dostála, PhD. - Základy tvorby uživatelského rozhraní [5].
6.1. 6.1.1.
Instalace a požadavky Systémové požadavky
Primárně byla aplikace vyvíjena pro operační systém Windows 7 a však aplikace je bezproblémů spustitelná minimálně pod Windows XP. K běhu je nutná instalace Microsoft .NET Framework 4. Pokud není framework na počítači instalován, je automaticky stažen a přidán během instalace. Z důvodu případného stažení frameworku je vhodné provádět instalaci na počítači s trvalým připojením k internetu. • Podporované (testované) operační systémy: Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7. • Podporované architektury: x86, x64. • Požadavky na hardware: Doporučované minimum: procesor Pentium 1 GHz nebo rychlejší a nejméně 512 MB paměti RAM. Minimální volné místo na disku: pro aplikaci MLClassDiagram přibližně 1MB, kdy při nepřítomnosti Microsoft .NET Framework 4 je nutné počítat nejlépe s 200MB.
54
6.1.2.
Instalace
Instalaci lze provést dvěma způsoby. První možností je využití instalátoru MLClassDiagramsSetup.exe, který v několika krocích provede uživatele instalací. V prvním kroku jste vyzváni k zadání cílového umístění aplikace. V případě, že se nerozhodnete toto umístění změnit, pak je aplikace nainstalována do adresáře C:\Program Files\MLClassDiagrams respektive do C:\Program Files (x86)\MLClassDiagrams při instalaci na 64-bitovém operačním systému. V druhém kroku jste vyzváni k výběru názvu složky umístěné v nabídce Start. Výchozí pojmenování je MLClassDiagrams. V třetím a posledním kroku máte možnost upřesnit vytvoření dalších zástupců. Po veškerých nastaveních je spuštěna instalace. Instalátor automaticky ověřuje přítomnost Microsoft .NET Framework 4, v případě, že není v počítači nainstalován je automaticky stažen a přidán. Druhou možností instalace je rozbalení zkomprimovaných souborů aplikace z balíčku MLClassDiagramsBin.zip a umístění na disk. Pokud se rozhodnete pro tento způsob instalace, pak musíte zabezpečit, aby v počítači byl instalován již zmíněný Microsoft .NET Framework 4. K instalaci frameworku můžete využít instalačního nástroje dotNetFx40 Full setup.exe pro online instalaci nebo kompletního balíku dotNetFx40 Client x86 x64.exe.
Obrázek 16. Okno instalačního programu
6.1.3.
Odinstalování
Jestliže se rozhodnete pro odebrání aplikace z počítače a použili jste instalátor MLClassDiagramsSetup.exe, pak stačí zvolit v ovládacím panelu možnost Programy a funkce, vyhledat aplikaci a zvolit Odinstalovat. V případě ruční instalace stačí smazat adresář se zdrojovými soubory aplikace.
55
Pokud budete chtít odinstalovat i Microsoft .NET Framework 4, pak v obou případech instalace bude opět nutné vyhledat v ovládacích panelech Programy a funkce, najít Microsoft .NET Framework 4 a zvolit odinstalovat.
6.2.
Popis hlavního okna programu
Obrázek 17. Hlavní okno programu Hlavní okno programu lze rozdělit do pěti částí, které jsou znázorněny na předešlém obrázku. • Hlavní menu Nachází se v horní části programu hned pod řádkem s názvem programu a tlačítky pro minimalizavání, maximalizování a zavření aplikace. Menu se skládá ze tří podmenu Soubor, Diagram a Nápověda. – Soubor Nabízí možnosti pro vytvoření nového projektu a diagramu. Dále otevření a zavření projektu, možnost pro zavření všech otevřených projektů. V neposlední řadě uložení editovaného projektu a zavření aplikace. 56
– Diagram Položka umožňuje vyvolání okna pro generování zdrojového kódu pro zvolený programovací jazyk. – Nápověda V tomto menu lze vyvolat nápovědu a informace k programu. • Lišta ovládacího panelu Nachází se hned pod hlavním menu a nabízí obdobnou funkcionalitu, tedy lze pomocí ní vytvořit nový projekt a diagram, otevřít a uložit projekt, vyvolat nápovědu. • Panel navigace Umístěn je v levé polovině okna programu. Pomocí stromové struktury umožňuje navigaci v projektu. Lze v něm otevřít jeden nebo více projektů, kdy pro každý projekt je zobrazen strom obsažených diagramů. Správu projektu lze provádět buď pomocí níže uvedených kláves, nebo za pomoci myši a kontextového menu, vyvolaného pravým tlačítkem nad položkou projektu či diagramu. Správa projektu pomocí kláves: – Insert provádí přidání nového diagramu, – F2 vyvolá možnost pro přejmenování označeného projektu či diagramu, – Delete vyvolá dialog pro potvrzení smazání diagramu, – Šipky umožňují přesuny ve stromu.
Obrázek 18. Přehled kontextových menu panelu navigace
• Editor diagramu Nachází se v pravé polovině okna programu. Dále je v horní části dělen do lišty se záložkami zobrazujícími otveřené diagramy. V pravé části záložek jsou tři navigační ikony pro přepínání mezi záložkami a zavírání aktuální záložky. Pod lištou záložek se nachází panel nástrojů pro sestavení diagramu tříd, editaci a exporty. Dalšímu popisu jednotlivých položek panelu nástrojů 57
se věnuje kapitola 6.4. Sestavení diagramu tříd. Poslední částí je kreslící plátno. • Stavový panel Je umístěn v nejspodnější části hlavního okna programu. Během práce je na něm signalizováno aktuální datum a čas, případně stav ukládání.
6.3.
Datové soubory
Veškerý obsah projektu, skládající se z jednotlivých diagramů a jejich elementů se ukládá do souborů s příponou CDP, což je akronim pro Class Diagrams Project, tedy projekt diagramů tříd. Struktura souboru je textová a je reprezentována pomocí XML. Soubory lze libovolně ukládat na disk, kdy výchozí cestou je složka s uživatelskými dokumenty.
6.4.
Sestavení diagramu tříd
Předpokládejme, že máte vytvořený projekt a v něm diagram. Po otevření diagramu se vám v pravé části hlavního okna zobrazí záložka s editorem diagramu tříd. Zde můžete pomocí níže popsaných menu sestavit diagram. 6.4.1.
Vkládání elementů
1.
2.
3.
4.
5.
6.
Obrázek 19. Menu pro vkládání elementů
Jednotlivé elementy se do diagramu vkládají za pomoci menu, viz předešlý obrázek 19. Každé položce odpovídá jeden element, kterými jsou: 1. 2. 3. 4. 5. 6.
třída Class, struktura Structure, rozhraní Interface, výčtový typ Enum, delegát Delegate, komentář Comment.
6.4.2.
Editace elementu třída, struktura a rozhraní
K editaci elementů třída, struktura a rozhraní slouží dialogové okno znázorněné na obrázku 20., které je dále modifikováno dle typu elementu. Při editaci 58
třídy a struktury jsou využity všechny zobrazené ovládací prvky kromě modifikátoru, který je u struktury neaktivní. Pokud editujeme rozhraní, je v oknu deaktivována oblast modifikátoru a atributů. Obecně tedy dialogové okno elementu umožňuje editovat vlastnosti: název, viditelnost a modifikátor. Dále zpřístupňuje správu položek atributů, metod a možnosti jejich zobrazení v diagramu. Editace se provádi pomocí ovládacího panelu v pravé části od názvu části atributů/metod.
Obrázek 20. Dialog editace elementu třída
6.4.3.
Editace elementu výčet a delegát
Pro editaci výčtového typu a delegátu slouží dialogové okno na následujícím obrázku číslo 20. Okno umožňuje editaci vlastností názvu, viditelnosti a u delegátu datového typu. Opět je dialog upravován dle typu elementu. Položky výčtu, popřípadě argumenty delegátu je možné přidávat a upravovat v seznamu položek, viz obrázek. K manipulaci opět slouží menu v pravé horní části seznamu.
59
Obrázek 21. Dialog editace elementu výčtového typu a delegátu
6.4.4.
Zakreslení vztahů mezi elementy (třídami)
K výběru a zakreslení vztahu mezi elementy slouží menu zobrazené na obrázku 22. Vztah se zakresluje výběrem jeho typu z menu a následným označením zdrojového a cílového elementu. Vztah lze smazat pomocí kontextového menu při jeho označení a stisknutí pravého tlačítka myši. Z kontextového menu lze provést také editaci. 1. 2. 3. 4. 5. 6. 7. 8.
Asociace Agragace Kompozice Dědičnost (generalizace) Realizace (používá se u rozhraní) Závislost Vnoření Vazba komentáře
1.
2.
3.
4.
5.
6.
7.
8.
Obrázek 22. Menu k zakreslení vztahů mezi elementy (třídami)
60
6.4.5.
Editace vztahů mezi elementy (třídami)
Vztahy mezi elementy lze upravovat označením myší a vyvoláním kontextového menu pravým tlačítkem. Poté se zobrazí dialog pro nastavení vlastností názvu vztahu/operace, navigace a násobností. Navigace může být určena u vztahu asociace a může být buď bez vyznačení, jednosměrná nebo obousměrná. Dialog je znázorněn na obrázku šíslo 23.
Obrázek 23. Dialog editace vztahu mezi elementy (třídami)
6.4.6.
Ostatní položky menu editoru
Ostatní položky z obrázku 24. a jejich význam je popsán v následujícím přehledu. 1. Export diagramu do grafických formátů JPEG (*.jpg), PNG (*.png), GIF (*.gif), BMP (*.bmp) a TIFF (*.tiff). 2. Vyvolá předtiskový náhled a umožní provedí nastavení, pak lze dokument vytisknout. 3. Umožní před tiskem vybrat tiskárnu a nastavení, poté tiskne aktivní diagram. 4. Zkopíruje vybraný element do schránky. 5. Vloží ze schránky element do diagramu. 6. Umožní smazání vybraného elementu. Před vlastním smazáním je uživatel vyzván k potvrzení, zda se má element opravdu smazat.
1.
2.
3.
4.
5.
6.
Obrázek 24. Ostatní položky menu editoru
61
6.5.
Generování zdrojového kódu z diagramu tříd
Generování zdrojového kódu z diagramu tříd je možné do programovacího jazyka C# a PHP 5.3+. Generátor se spouští z hlavního menu Diagram - Generovat kód, kdy je vyvolán dialog pro nastavení generování. Dialog umožňuje vybrat cílový programovací jazyk, zadat nebo pomocí tlačítka Procházet... vybrat cestu pro výstup vygenerovaných zdrojových kódů. Při volbě jazyka CSharp lze dále nastavit položky automaticky připojovaných zdrojů. K přidání položek slouží textové pole pod seznamem zdrojů. Přesouvání a mazání lze provádět pomocí tlačítek vpravo nad seznamem. Dále lze nastavit verzi souboru řešení Visual Studia. Na výběr je verze 2008 a 2010. Nakonec lze v sekci Styl kódu nastavit, zda se bude do těla metod vkládat výjimka „NotImplementÿ. Po provedení veškerých nastavení lze zahájit tlačítkem Generovat vlastní generování zdrojového kódu. O postupu generování je uživatel informován na průběhovém panelu. Po ukončení generování je uživatel informován o výsledku.
Obrázek 25. Dialog generování zdrojového kódu
62
Závěr Cílem bakalářské práce bylo vytvořit aplikaci umožňující návrh a sestavení diagramu tříd se zakreslením vztahů mezi třídami včetně generování zdrojového kódu. Požadavky na aplikaci se podařilo splnit, lze sestavit diagram tříd, provádět úpravy, exportovat do grafických formátů, generovat zdrojový kód a vše ukládat pro pozdější použití. Při návrhu programu jsem dbal především na uživatelskou přívětivost a intuitivnost ovládání. Vývojem aplikace jsem získal nové zkušenosti s programovacím jazykem C# a UML, jehož nastudování a pochopení bylo nedílnou součástí bakalářské práce. Dalším vhodným rozšířením aplikace by do budoucna mohlo být začlenění možnosti generování do dalších programovacích jazyků (například C++, JAVA) či přímý export diagramů do PDF.
63
Conclusions The goal of this project was to create an application, which allows creation of class diagrams illustrating relationships between classes, including source code generation. These targets were accomplished successfully, and the application allows to create class diagrams, modify them, export to graphical formats, generate source code, and save the work for future use. I designed this application with user friendly intuitiveness in mind. During the development process I gained new knowledge and experience with C# and UML programming language, studying and understanding of which has been integral part of the project. Possible expansion of the application in the future could implement source code generation for other programming languages (such as C++, Java), or direct diagram export to PDF.
64
Reference [1] RUMBAUGH, James - JACOBSON, Iva - BOOCH, Grady. The Unified Modeling Language Reference Manual. Addison-Wesley, 1998. ISBN: 0-20130998-X. [2] HAMILTON, Kim - RUSSELL, Miles. Learning UML 2.0. O’Reilly Publisher. 2006. ISBN: 0-596-00982-8. [3] KANISOVÁ, Hana - MÜLLER, Miroslav. UML srozumitelně. 2. aktualizované vydání. Brno: Computer Press, a.s., 2007. 176 s. ISBN 80-251-1083-4. [4] ARLOW, Jim - NEUSTADT, Ila. UML 2 a unifikovaný proces vývoje aplikací: Objektove orientovaná analýza a návrh prakticky. 2. aktualizované vydání. Brno: Computer Press, a.s., 2008. 567 s. ISBN 978-80-251-1503-9. [5] Dostál, Martin. Základy tvorby uživatelského rozhraní. http://dostal.inf.upol.cz/data/texts/gui-dostal-13-8.pdf, Elektronická publikace, Olomouc: Přírodovědecká fakulta Univerzity Palackého v Olomouci, Katedra informatiky, 2007. 67 s. [6] SHARP, John. Microsoft Visual C# 2008: Krok za krokem. 1.vydání. Brno: Computer Press, a.s., 2008. 592 s. ISBN 978-80-251-2027-9. [7] NASH, Trey. C# 2010 : Rychlý pruvodce novinkami a nejlepšími postupy. 1. vydání. Brno: Computer Press, a.s., 2010. 624 s. ISBN 978-80-251-3034-6. [8] PECINOVSKÝ, Rudolf. Návrhové vzory. 1. vydání. Brno: Computer Press, a.s., 2008. 527 s. ISBN 978-80-251-1582-4. [9] WRÓBLEWSKI, Piotr. Algoritmy: Datové struktury a programovací techniky. 1. vydání. Brno: Computer Press, a.s., 2007. 351 s. ISBN 80-251-03439.
65
7.
Obsah přiloženého CD
bin/ Instalační soubory, přímo spustitelné z CD, které nainstalují aplikaci MLClassDiagrams, dále všechny potřebné knihovny a další soubory pro bezproblémové spuštění. doc/ Dokumentace práce ve formátu PDF, vytvořená dle závazného stylu KI PřF pro diplomové práce, včetně příloh a všechny soubory nutné pro bezproblémové vygenerování PDF souboru dokumentace, tj. zdrojový text dokumentace, vložené obrázky, apod. src/ Kompletní zdrojové texty programu MLClassDiagrams se všemi potřebnými soubory, knihovnami a dalšími soubory pro bezproblémové vytvoření spustitelných verzí programu. readme.txt Instrukce pro instalaci a spuštění programu MLClassDiagrams, včetně požadavků pro jeho provoz.
66