Sdílet prostřednictvím


Diagramy tříd UML: Pokyny

V systému Visual Studio Ultimate lze použít pro popis datových typů a jejich vztahů nezávisle na jejich implementaci diagram tříd UML.Díky diagramu se lze místo jejich implementace zaměřit na logické aspekty tříd.

Diagram tříd UML lze vytvořit výběrem položky Nový diagram v nabídce Architektura.

[!POZNÁMKA]

Toto téma se zabývá diagramy tříd UML.Existuje jiný typ diagramu tříd, který lze vytvořit a použít jej k vizualizaci kódu programu.Podívejte se na téma navrhování a zobrazení třídy a typy.

V tomto tématu

Používání diagramů tříd UML

Základní postup pro vytvoření diagramů tříd

Používání tříd, rozhraní a výčtů

Atributy a operace

Vykreslování a používání asociací

Dědičnost

Typy šablon

Definování oborů názvů s balíčky

Generování kódu z diagramů tříd UML

Používání diagramů tříd UML

Diagram tříd UML lze použít pro různé účely:

  • Pro poskytnutí popisu nezávislého na implementaci typů, které jsou v systému použity a předány mezi komponentami.

    Například typ Objednávka jídla lze implementovat v kódu .NET v obchodní vrstvě, v jazyce XML v rozhraních mezi komponentami, v jazyce SQL v databázi nebo v jazyce HTML v uživatelském rozhraní.Přestože se tyto implementace drobně liší, je vztah mezi Objednávkou jídla a ostatními typy, jako je například Nabídka a Platba, vždy stejný.Diagram tříd UML umožňuje diskuzi o těchto vztazích bez ohledu na implementaci.

  • Aby bylo možné vyjasnit glosář termínů použitých pro komunikaci mezi aplikací a jejími uživateli a pro popis požadavků uživatele.Další informace naleznete v tématu Modelování uživatelských požadavků.

    Je třeba například zvážit uživatelské scénáře, případy užití nebo další popisy požadavků aplikace pro restauraci.V takových popisech lze najít termíny jako Nabídka, Objednávka, Jídlo, Cena, Platba a tak dále.Lze nakreslit diagram tříd UML, který definuje vztahy mezi těmito výrazy.To sníží riziko nesrovnalostí v popisech požadavků, v uživatelském prostředí a v pomocných dokumentech.

Vztah k jiným diagramům

Diagram tříd UML je obvykle nakreslen spolu s jinými diagramy modelování za účelem poskytnutí popisů typů, které používají.V každém případě není fyzická reprezentace typů implikována v žádném z diagramů.

Pokud byl nakreslen diagram:

K popisu je použit diagram tříd UML:

Diagram činnosti

Typ dat procházejících skrz Uzel objektu.

Typy spojek vstupů a výstupů a uzlů parametrů aktivit.

Další informace naleznete v tématu Diagramy činnosti UML: Pokyny.

Sekvenční diagram

Typy parametrů a vrácených hodnot zpráv.

Typy životností.Třída životnosti by měla zahrnovat operace pro všechny zprávy, které může přijímat.

Další informace naleznete v tématu Sekvenční diagramy UML: Pokyny.

Diagram součásti

Rozhraní komponent, výpis jejich operací.

Další informace naleznete v tématu Diagramy komponent UML: Pokyny.

Použití diagramu případu

Typy zmíněné v popisech cílů a v krocích případu užití.

Další informace naleznete v tématu Diagramy případů použití UML: Pokyny.

Základní postup pro vytvoření diagramů tříd

Referenční informace o prvcích diagramu tříd UML lze nalézt v tématu Diagramy tříd UML: Referenční dokumentace.

[!POZNÁMKA]

Podrobné postupy pro vytvoření všech diagramů modelování jsou popsány v tématu Úpravy modelů a diagramů UML.

Vytvoření diagramu tříd UML

  1. V nabídce Architektura vyberte položku Nový diagram.

  2. Z nabídky Šablony vyberte položku Diagram tříd UML.

  3. Pojmenujte diagram.

  4. V nabídce Přidat k projektu modelování vyberte existující projekt modelování z řešení nebo zvolte možnost Vytvořit nový projekt modelování a následně klikněte na tlačítko OK.

    Zobrazí se nový diagram tříd a panel nástrojů Diagram třídUML.Sada nástrojů obsahuje požadované prvky a vztahy.

Nakreslení diagramu tříd UML

  1. Chcete-li vytvořit typ, vyberte z panelu nástrojů nástroj Třída, Rozhraní nebo Výčet a následně klikněte do prázdné části diagramu.(Pokud nevidíte panel nástrojů, stiskněte kombinaci kláves CTRL+ALT+X.)

    Lze rovněž vytvořit typy založené na typech v kódu.Typy lze přetáhnout do diagramu z Průzkumníka řešení, Průzkumníka architektury nebo grafu závislostí.Další informace naleznete v tématu Vytvoření diagramů tříd UML z kódu.

  2. Chcete-li přidat atributy nebo operace typům, nebo literály výčtu, vyberte v typu nadpis Atributy, Operace nebo Literály a stiskněte klávesu ENTER.

    Lze zapsat signaturu, jako je například f(x:Boolean):Integer.Více v oddíle Atributy a operace.

    Pro rychlé přidání několika položek stiskněte klávesu ENTER dvakrát na konci každé položky.Pro procházení seznamu nahoru a dolů lze použít šipky.

  3. Pro rozbalení a sbalení typu klikněte na ikonu dvojité šipky v levém horním rohu.Rovněž lze rozbalit a sbalit oddíl Atributy a Operace třídy nebo rozhraní.

  4. Chcete-li nakreslit asociace, dědičnosti nebo závislosti mezi typy, klikněte na vhodný nástroj, následně na typ zdroje a nakonec na typ cíle.

  5. Chcete-li vytvořit typy v balíčku, nejprve vytvořte balíček pomocí nástroje Balíček a následně v balíčku vytvořte nové typy a balíčky.Rovněž lze použít kopírovací příkazy pro zkopírování typů a následné vložení do balíčku.

  6. Každý diagram je zobrazení modelu, které je sdíleno mezi ostatními diagramy ve stejném projektu.Pro zobrazení stromového zobrazení celého modelu klikněte postupně na volby Zobrazení, Ostatní okna a Průzkumník modelů UML.

Používání tříd, rozhraní a výčtů

V panelu nástrojů jsou k dispozici tři standardní typy klasifikátorů.Ty jsou v tomto dokumentu označovány jako typy.

Třída, výčet a rozhraní

  • Pro reprezentaci dat nebo objektových typů použijte pro většinu případů Třídy (1).

  • Kde je třeba rozlišovat mezi čistým rozhraním a konkrétními třídami, které mají interní implementace, je třeba použít Rozhraní (2).Toto rozlišení je užitečné, pokud je účelem diagramu popsat implementaci softwaru.Je méně vhodné, pokud jsou modelována pasivní data nebo pokud jsou definovány koncepty použité k popisu požadavků uživatele.

  • Pro reprezentaci typu s omezeným počtem literálových hodnot lze použít Výčet (3). Například Stop a Go.

    • Přidejte do výčtu literálové hodnoty.Každé přidělte odlišný název.

    • V případě potřeby lze rovněž každé literálové hodnotě poskytnout číselnou hodnotu.Pro literál ve výčtu otevřete místní nabídku, klikněte na položku Vlastnosti a následně do pole Hodnota v okně Vlastnosti zadejte číslo.

Každému typu zadejte jedinečný název.

Získávání typů z ostatních diagramů

Do diagramu tříd UML lze zobrazit typy z jiného diagramu.

Jiný typ diagramu

Jak získat typy z jiného diagramu

Diagram tříd UML

Třídu lze vložit do více než jednoho diagramu tříd UML.Po vytvoření třídy v diagramu ji do jiného diagramu přetáhněte z Průzkumníka modelů UML.

To je užitečné, pokud vyžadujete, aby se každý diagram zaměřoval na konkrétní skupinu vztahů.

Lze například na jednom diagramu ukázat asociace mezi entitami Objednávka jídla a Nabídka restaurace a na jiném asociace mezi entitami Objednávka jídla a Platba.

Diagram součásti

Pokud byla definována rozhraní na komponentách v diagramu součástí, lze z Průzkumníka modelů UML přetáhnout rozhraní do diagramu tříd.V diagramu třídy můžete definovat metody, které jsou zahrnuty v rozhraní.

Další informace naleznete v tématu Diagramy komponent UML: Pokyny.

Sekvenční diagram UML

Třídy a rozhraní lze vytvořit ze životností sekvenčního diagramu a následně třídu přetáhnout z Průzkumníka modelů UML do diagramu tříd UML.Každá životnost sekvenčního diagramu představuje instanci objektu, komponenty nebo aktéra.

Pro vytvoření třídy ze životnosti otevřete místní nabídku životnosti a klikněte na položku Vytvořit třídu nebo Vytvořit rozhraní.Další informace naleznete v tématu Sekvenční diagramy UML: Pokyny.

Kód programu

V modelu lze reprezentovat typy z kódu.Z Průzkumníka architektury nebo grafu závislostí přetáhněte třídy, rozhraní nebo výčty do diagramu tříd UML.

Typy, které přetáhnete, se objeví v diagramu.Do modelu budou přidány rovněž závislé typy.Pokud byl typ UML tímto způsobem přidán, lze na něj dvakrát kliknout a otevřít zdrojový kód.Další informace naleznete v tématu Vytvoření diagramů tříd UML z kódu.

[!POZNÁMKA]

Kód a model nejsou synchronizovány.Diagram lze aktualizovat pro možnost diskuze o návrzích změn bez ovlivnění kódu.Následné změny v kódu diagram automaticky neovlivní. Diagram se změní, pouze pokud byste typy do diagramu opět přetáhli.

Atributy a operace

Atribut (4) je pojmenovaná hodnota, kterou může každá instance typu mít.Přístup k atributu stav instance nezmění.

Operace (5) je metoda nebo funkce, kterou může instance daného typu provést.Může vrátit hodnotu.Pokud má vlastnost isQuery hodnotu true, nemůže změnit stav instance.

Chcete-li do typu přidat atribut nebo operaci, otevřete kontextovou nabídku typu, klikněte na položku Přidat a následně klikněte na volbu Atribut nebo Operace.

Jejich vlastnosti zobrazíte otevřením kontextové nabídky atributu nebo operace a kliknutím na položku Vlastnosti.Vlastnosti se zobrazí v okně Vlastnosti.

Vlastnosti parametrů operace zobrazíte kliknutím na položku [...] ve vlastnosti Parametry.Zobrazí se nové dialogové okno vlastností.

Podrobné informace o všech vlastnostech, které lze nastavit, lze nalézt v tématech:

Typy atributů a operací

Každý Typ atributu nebo operace a každý typ parametru může být jedním z následujících:

  • (žádný) – Typ může být ponechán jako nespecifikovaný v signatuře vynecháním předcházející dvojtečky (:).

  • Jeden ze standardních primitivních typů: Logická hodnota, Integer, Řetězec.

  • Typ, který je definován v modelu.

  • Parametrizovaná hodnota typu šablony zapsán šablony < parametr >.Více informací lze nalézt v oddílu Typy šablon.

Lze rovněž napsat název typu, který ještě nebyl v modelu definován.Název bude v Průzkumníku modelů UML umístěn mezi Nespecifikované typy.

[!POZNÁMKA]

Pokud bude v modelu následně definována třída nebo rozhraní tohoto názvu, budou se starší atributy a operace stále odkazovat na prvek v seznamu Nespecifikované typy.Pokud je chcete změnit, aby se odkazovaly na novou třídu, je nutné u každého atributu a operace obnovit typ vybráním nové třídy z rozevírací nabídky.

Více typů

Lze nastavit násobnost atributu, operace nebo typu parametru.

Povoleny jsou následující hodnoty:

Násobnost

Atribut, parametr nebo návratová hodnota obsahují:

[1]

Jednu hodnotu daného typu.Toto nastavení je výchozí.

[0..1]

Hodnotu daného typu nebo Null.

[*]

Kolekci libovolného počtu instancí daného typu.

[1..*]

Kolekci alespoň jedné instance daného typu.

[n..m]

Kolekci mezi instancemi n a m daného typu.

Pokud je násobnost větší než 1, lze rovněž nastavit následující vlastnosti:

  • IsOrdered – Pokud je hodnota true, má definované uspořádání.

  • IsUnique – Pokud je hodnota true, nejsou v kolekci žádné duplicitní hodnoty.

Viditelnost

Viditelnost označuje, zda mohou být atribut nebo operace přístupné mimo definici třídy.Povoleny jsou následující hodnoty:

Name

Krátký tvar

Význam

Public

+

Přístupné z jiných typů.

Soukromé

-

Přístupné pouze pro interní definice tohoto typu.

Balíček

~

Přístupné pouze v rámci balíčku, který obsahuje tento typ a ve všech balíčcích, které jej explicitně importují.Více informací lze nalézt v oddílu Definování oborů názvů a balíčků.

Chráněno

#

Přístupný pouze pro tento typ a typy, které z něj dědí.Více informací lze nalézt v oddílu Dědičnost.

Nastavení signatury atributu nebo operace

Signatura atributu nebo operace je sada vlastností obsahující viditelnost, název, parametry (pro operace) a typ.

Signaturu lze napsat přímo do diagramu.Kliknutím vyberte atribut nebo operaci a poté na ně klikněte znovu.

Signaturu zadejte ve tvaru:

visibility attribute-name : Type

-nebo-

visibility operation-name (parameter1 : Type1, ...) : Type

Příklad:

+ AddItem (item : MenuItem, quantity : Integer) : Boolean

Používejte krátký tvar viditelnosti.Výchozí hodnota je + (veřejný).

Každý typ může být typem, který byl definován v modelu, standardním typem, jako je například Integer či String, nebo může jít o název nového typu, který ještě nebyl definován.

[!POZNÁMKA]

Pokud do seznamu parametrů napíšete název bez typu, označuje tato položka název parametru namísto typu.V tomto příkladu budou MenuItem a Integer názvy dvou parametrů s nespecifikovanými typy:

AddItem(MenuItem, Integer) /* parameter names, not types! */

Pro nastavení násobnosti typu v signatuře zadejte násobnost do hranatých závorek za názvem typu. Například takto:

+ AddItems (items : MenuItem [1..*])
+ MenuContent : MenuItem [*]

Pokud jsou atribut nebo operace statické, jejich název se zobrazí v signatuře podtrženě.Pokud je abstraktní, název se zobrazí kurzívou.

Nicméně v okně Vlastnosti lze nastavit pouze vlastnosti Is Static a Is Abstract.

Úplná signatura

Při úpravě signatury atributu nebo operace se mohou na konci řádku a za každým parametrem objevit další vlastnosti.Objevují se uzavřené ve složených závorkách {...}.Tyto vlastnosti lze upravovat nebo přidávat.Příklad:

+ AddItems (items: MenuItem [1..*] {unique, ordered})
+ GetItems (filter: String) : MenuItem [*] {ordered, query}

Tyto vlastnosti jsou následující:

V signatuře

Vlastnost

Význam

unique

Is Unique

V kolekci nejsou duplicitní hodnoty.Platí pro typy s násobností větší než 1.

ordered

Is Ordered

Kolekce je sekvenční.Pokud má hodnotu false, neexistuje konečný první prvek.Platí pro typy s násobností větší než 1.

query

Is Query

Operace nezmění stav své instance.Platí pouze pro operace.

/

Is Derived

Atribut je vypočítán z hodnot jiných atributů nebo asociací.

Před názvem atributu se zobrazí „/“.Příklad:

/TotalPrice: Integer

Obvykle se úplná signatura v diagramu zobrazí pouze při jeho úpravě.Po dokončení úprav jsou další vlastnosti skryty.Pokud má být úplná signatura zobrazena neustále, otevřete kontextovou nabídku pro typ a následně klikněte na volbu Zobrazit úplnou signaturu.

Vykreslování a používání asociací

Asociace je používána pro reprezentaci jakéhokoli vztahu mezi dvěma prvky, bez ohledu na to, jakým způsobem je spojení v softwaru implementováno.Přidružení může například představovat ukazatele v jazyce C#, relace v databázi nebo křížový odkaz z jedné části souboru XML do jiné.Reprezentuje asociace mezi objekty reálného světa, jako je například země a slunce.Asociace neříkají, jak jsou spojení reprezentována, pouze to, že existují.

Vlastnosti asociace

Po vytvoření asociace je třeba nastavit její vlastnosti.Otevřete místní nabídku pro asociaci a následně klikněte na položku Vlastnosti.

Kromě vlastností asociace jako celku má každá role, tedy každý konec asociace, své vlastní vlastnosti.Chcete-li je zobrazit, rozbalte vlastnosti První role a Druhá role.

Některé vlastnosti jednotlivých rolí jsou v diagramu přímo viditelné.Jsou to tyto:

  • Název role.Zobrazí se na správném konci asociace v diagramu.Lze ji nastavit v diagramu nebo v okně Vlastnosti.

  • Násobnost, která má výchozí hodnotu 1.Toto se rovněž na diagramu zobrazí blízko odpovídajícího konce asociace.

  • Agregace.Zobrazí se ve tvaru kosočtverce na jednom konci spojnice.Tím lze naznačit, že instance agregačních rolí vlastní nebo obsahují instance jiných.

  • Is Navigable.Pokud je hodnota true pouze u jedné role, zobrazí se v jejím směru šipka.Toto lze použít k indikaci směru spojení a databázových relací v softwaru.

Úplné podrobnosti o těchto a dalších vlastnostech lze nalézt v tématu Vlastnosti přidružení v diagramech tříd UML.

Po zakreslení má asociace na jednom konci šipku, což označuje, že asociace je provázána v tomto směru.To je užitečné, pokud diagram tříd reprezentuje softwarové třídy a asociace reprezentují ukazatele nebo odkazy.Pokud je však diagram tříd použit k reprezentaci entit a vztahů nebo obchodních konceptů, není použití navigace relevantní.V takovém případě je lepší použít zakreslení asociací bez šipek.To lze provést nastavením vlastnosti Is Navigable na obou stranách asociace na hodnotu true.Chcete-li to snazší, si můžete stáhnout ukázky kódu modelování UML domény.

Atributy a asociace

Asociace je grafický způsob zobrazení atributu.Například namísto vytvoření třídy Restaurace s atributem typu Nabídka lze nakreslit asociaci z entity Restaurace do entity Nabídka.

Každý název atributu se stane názvem role.Objeví se na protilehlé straně asociace vlastnícího typu.Příklad je uveden na obrázku myMenu.

Obecně je vhodnější použít atributy pouze pro typy, které by se neměly zakreslovat do diagramu, jako jsou například primitivní typy.

Ekvivalentní přidružení a atributy

Dědičnost

Pro vytvoření následujících vztahů je třeba použít nástroj Dědičnost:

  • Vztah generalizace mezi specializovaným typem a obecným typem.

    -nebo-

  • Vztah realizace mezi třídou a rozhraním, které implementuje.

Ve vztazích dědičnosti nelze vytvořit smyčky.

Generalizace

Generalizace znamená to, že specializované nebo odvozené typy dědí atributy, operace a asociace obecného nebo základního typu.

Obecný typ se zobrazí na konci vztahu se šipkou.

Zděděné operace a atributy se obvykle ve specializovaných typech nezobrazí.Do seznamu operací specializovaných typů však lze přidat zděděné operace.To je užitečné, pokud je zapotřebí přepsat některé vlastnosti operace ve specializovaném typu nebo pokud je zapotřebí naznačit to, že by to měl dělat implementovaný kód.

Přepsání definice operace ve specializovaném typu

  1. Klikněte na relaci generalizace.

    Zobrazí se zvýrazněně a v její blízkosti se objeví značka Akce.

  2. Klikněte na značku Akce a následně klikněte na položku Přepsat operace.

    Zobrazí se okno Přepsat operace.

  3. Vyberte operace, které chcete, aby se zobrazily ve specializovaném typu, a klikněte na tlačítko OK.

Operace, které jste vybrali, se nyní zobrazí ve specializovaném typu.

Realizace

Realizace znamená, že třída implementuje atributy a operace zadané rozhraním.Rozhraní je na konci spojnice se šipkou.

Při vytvoření spojnice realizace budou operace rozhraní automaticky replikovány do realizační třídy.Pokud budou do rozhraní přidány nové operace, budou replikovány do realizační třídy.

Po vytvoření vztahu realizace jej lze převést do zápisu typu Lupa.Klikněte pravým tlačítkem myši na rozhraní a klikněte na položku Zobrazit jako typ Lupa.

To umožní zobrazit rozhraní, která třída implementuje, bez zbytečných diagramů tříd s odkazy realizace.Rozhraní a třídy, které je realizují, lze rovněž zobrazit v samostatných diagramech.

Realizace uvedeny s konektorem a typu Lupa

Typy šablon

Lze definovat generický typ nebo typ šablony, který může být parametrizován jinými typy nebo hodnotami.

Lze například vytvořit generický slovník parametrizovaný typy klíče a hodnoty:

Třída šablony se dva parametry

Vytvoření typu šablony

  1. Vytvořte třídu nebo rozhraní.To bude váš typ šablony.Vhodně jej pojmenujte. Například Dictionary.

  2. Otevřete místní nabídku nového typu a poté klikněte na položku Vlastnosti.

  3. V okně Vlastnosti klikněte na položku [...] v poli Parametry šablony.

    Objeví se dialogové okno Editor kolekce parametrů šablony.

  4. Zvolte možnost Přidat.

  5. Nastavte název vlastnosti na název parametru pro typ šablony. Například Key.

  6. Nastavte Typ parametru.Výchozí hodnotou je Třída.

  7. Pokud má parametr přijmout pouze odvozené třídy určité základní třídy, nastavte položku Hodnota s omezením na základní třídu, kterou vyžadujete.

  8. Přidejte tolik parametrů, kolik potřebujete, a následně klikněte na tlačítko OK.

  9. Typům šablony přidejte atributy a operace, jako byste to udělali u tříd.

    Lze použít parametry, jejichž druh je Třída, Rozhraní nebo Výčet v definici atributů a operací.Například použitím tříd parametrů Key a Value lze definovat tuto operaci v Dictionary.

    Get(k : Key) : Value

    Parametr, jehož druh je Integer, lze použít jako vazbu v násobnosti.Například parametr maximálního celého čísla by mohl být pro definici násobnosti atributu použit jako [0..max].

Pokud jste vytvořili typy šablon, lze je použít pro definici vazeb šablony:

Třída vázaná ze šablony slovníku

Použití typu šablony

  1. Vytvořte nový typ, například AddressTable.

  2. Otevřete místní nabídku nového typu a poté klikněte na položku Vlastnosti.

  3. Ve vlastnosti Vazba šablony vyberte z rozevíracího seznamu typ šablony, například Dictionary.

  4. Rozbalte vlastnost Vazba šablony.

    Pro každý parametr typu šablony se zobrazí řádek.

  5. Nastavte každý parametr na vhodnou hodnotu.Nastavte například parametr Key na třídu nazvanou Name.

Balíčky

V diagramu tříd UML lze zobrazit balíčky.Balíček je kontejner pro ostatní prvky modelu.Uvnitř balíčku lze vytvořit jakýkoli prvek.V diagramu budou prvky uvnitř balíčku přesouvány společně s balíčkem.

Pro skrytí nebo zobrazení obsahu balíčku lze použít ovládací prvek rozbalení/sbalení.

Další informace naleznete v tématu Definování balíčků a oborů názvů.

Generování kódu z diagramů tříd UML

Pro zahájení implementace tříd lze na základě diagramu tříd UML vygenerovat kód jazyka C# nebo upravit šablony pro generování kódu.Spuštění generování kódu pomocí poskytnutých šablon jazyka C#:

  • Otevřete místní nabídku diagramu nebo prvku, klikněte na položku Generovat kód a následně nastavte nezbytné vlastnosti.

    Další informace o tom, jak tyto vlastnosti nastavit a přizpůsobit poskytnuté šablony, lze nalézt v tématu Generování kódu z diagramů tříd UML.

Viz také

Referenční dokumentace

Sekvenční diagramy UML: Referenční dokumentace

Koncepty

Úpravy modelů a diagramů UML

Diagramy tříd UML: Referenční dokumentace

Modelování uživatelských požadavků

Diagramy komponent UML: Referenční dokumentace

Diagramy případů použití UML: Referenční dokumentace

Diagramy komponent UML: Referenční dokumentace