5. diel - UML - Class diagram
V predchádzajúcom kvíze, Kvíz - Use Case diagram a doménový model v UML, sme si overili nadobudnuté skúsenosti z predchádzajúcich lekcií.
Dnes si ukážeme nejaké ďalšie väzby a vytvoríme si triedny diagram.
Class diagram
Diagram tried je diagram implementácie. To je rozdiel oproti doménovému modelu, ktorý bol skôr náčrt systému. Class diagram je už naostro, musí byť úplný, keď ho programátor prepíše do kódu, kód musí fungovať. Budeme tu mať teda všetky triedy, ktoré aplikácia bude obsahovať. Triedy budú mať všetky atribúty a tiež metódy. Diagram je platformovo závislý, teda špecifický pre určitý programovací jazyk. Okrem iného to znamená, že sa v identifikátoroch už nevyskytuje diakritika, atribúty majú dátové typy špecifické pre daný jazyk a podobne.
Význam diagramu
Class diagram je návod pre programátora, ten by už nemal s naším diagramom riešiť žiadne zásadné otázky ani problémy, jeho práca by mala byť (možno bohužiaľ:) ) rutinné. Návrh systému majú na starosti skúsení programátori a analytici. Vďaka návrhu sa potom samotné programovanie môže odovzdať aj menej skúseným programátorom, ktorí sú často lacnejšie. Diagram tried je dobré vytvoriť však aj v prípade, že systém píšeme len pre seba, donúti nás to najprv premýšľať v kontexte celého systému a až potom programovať. Nestane sa nám, že napíšeme polovicu systému a potom zistíme, že to takto nebude fungovať. Zložitejšie informačné systémy už nemožno vytvárať bez návrhu a aj práca v tíme sa bez kvalitného návrhu nezaobíde. Diagram nám do budúcnosti poslúži aj ako dokumentácia.
Ukážme si ešte raz grafickú notáciu triedy v UML, tentoraz už kompletnú:
V prvej časti obdĺžnika je opäť názov triedy, tentoraz už bez diakritiky.
V druhej časti sú prítomné atribúty s dátovými typmi. Pred každým atribútom je uvedený modifikátor prístupu. Máme 4 možnosti:
- - (mínus) - Privátny atribút (private).
- + (plus) - Verejný atribút (public).
- # (hash kríž) - Protected atribút (protected).
- ~ (tilda) - Atribút viditeľný v rámci balíka (package).
Medzi názov atribútu a dátový typ píšeme dvojbodku.
Metódy v poslednom obdĺžniku sú zapisované podobne. Je možné špecifikovať ešte niekoľko symbolov, ale to sa v praxi príliš nepoužíva a preto sa tým nebudeme zaoberať.
Vzťahy
Oproti doménovému modelu tu môžeme použiť ešte ďalšie 2 vzťahy.
Realizácia (Realization)
Vzťah realizácie je medzi interface a triedou, ktorá tento interface
implementuje. Trieda reprezentujúca interface má tzv.
stereotyp. Ten sa píše do dvojitých špicatých zátvoriek,
rovnako ako to je pri väzbe <<include>>
v Use Case
diagrame. Stereotyp umožňuje zmeniť význam určitého prvku v diagrame,
teraz meníme triedu na interface. Trieda implementujúca interface je k
interface pripojená väzbou podobnou dedičnosti, iba je čiara vykreslená ako
prerušovaná.
Asociačná trieda (Association class)
Asociačná trieda je trieda, ktorá sprostredkováva vzťah medzi 2 entitami. Výhodou je to, že môže vzťahu dodať nejaké atribúty. Často sa uvádza príklad tried Osoba a Zajazd, kedy asociačná trieda Ucast priraďuje osobu na zájazd a dodáva čas príchodu a odchodu. Ďalším príkladom je Osoba a Hotel, kedy v hoteli nie je pevne stanovený čas ubytovania a objednáva si ho konkrétna osoba. Podobná trieda by mohla ešte napr. byť medzi zamestnancom a firmou, kde by definovala plat zamestnanca. Ďalším využitím môže byť možnosť takto vytvoriť väzbu M:N, podobne, ako to funguje pri databázach. Asociačná trieda by teda držala kolekciu referencií. Použitie asociačnej triedy môže byť trochu zavádzajúce a pokiaľ si nie ste istí, tak sa jej radšej vyhnite.
Príklad Class diagramu
Prejdime k príkladu a vytvorme si Class diagram ITnetwork. Budeme samozrejme vychádzať z predošlého doménového modelu.
Vopred upozorňujem, že príklad je veľmi zjednodušený, návrh nie je ideálny a nectí MVC architektúru, ako je pri webových aplikáciách zvykom.
Vidíme, že oproti doménovému modelu tu máme úplne novú triedu System. Tá drží inštancie aktuálneho článku a aktuálneho užívateľa. Ďalej drží kolekcie článkov, členov a sekcií. Doménový model iba mapoval dôležité entity z hľadiska business zadania a teda ani nepremýšľal nad tým, ako systém bude vo vnútri fungovať. Počet tried sa teda prakticky vždy s prechodom od doménového modelu k Class diagramu zvýši.
Inštancia systému sa vytvára s každým HTTP požiadavkou, ako nám hovorí poznámka k triede naľavo. Za povšimnutie stojí aj výpočtový typ StavClanku, ktorý je tu zakreslený ako trieda a výpočtový typ je z neho vytvorený pomocou stereotypu <<enumerable>>. Zvyšok sme si už popísali, takže si diagram prezrite. Ako je to pri všetkých diagramoch, je to jeden možný spôsob, ako systém navrhnúť, možností je nespočetne a aj tých správnych je mnoho.
V nasledujúcom cvičení, Riešené úlohy k 4.-5. lekciu UML, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.