Diagram tříd

Základní charakteristika

Diagram tříd (Class Diagram) představuje „statický pohled na modelovaný systém“ [Buch2007] a jeho úkolem je znázornit typy objektů v systému a jejich vztahy. [Fow2003] Návrh tříd, jejich odpovědností a následné vytvoření tohoto diagramu je jedním z prvních a základních kroků analýzy navrhovaného programového systému. [Buch2007] Díky tomu, že diagram tříd zachycuje pravidla modelovaného systému, je nejdůležitějším podkladem jak pro forward engineering, tak pro reverse engineering. [Pen2003]

Při tvorbě diagramu tříd je nutné vzít v úvahu jeho účel a rozlišit, zda potřebujeme vyjádřit požadavky na modelovaný software nebo získat podrobný popis designu atd. [Cla2006] Z tohoto důvodu se dle [Buch2007] rozeznávají tři úrovně modelu tříd – konceptuální, designová a implementační.

Konceptuální (doménový, analytický) model (viz. Obrázek 2) je vytvářen za účelem analýzy požadavků na software. Obsahuje pouze tzv. byznys třídy (business classes), které modelují problémovou oblast a jsou tedy součástí slovníku problémové domény (slovníčku pojmů). [Buch2007] U jednotlivých tříd se uvádí obvykle jen názvy klíčových atributů a některých klíčových metod. Pokud je diagram vytvářen pouze za účelem znázornění relací mezi třídami, je možné atributy i metody vynechat. [Arl2008]

Designový model (model návrhu) vychází z modelu konceptuálního, který rozšiřuje a zpřesňuje například o viditelnosti atributů a metod, datové typy apod. Dále do modelu přidává třídy uživatelského rozhraní (presentation classes) a třídy obsluhující systémové události (control classes). [Buch2007] Z jedné třídy v analytickém modelu se tedy může stát v designovém modelu více návrhových tříd. Mezi analytickými třídami a třídami návrhu existuje relace typu trace(viz obrázek 1).

[Arl2008] Implementační model se zaměřuje na „grafické zobrazení implementovaného kódu“. [Buch2007]  

Obrázek 1. Porovnání třídy analytického a návrhového modelu tříd

Prvky diagramu

Mezi prvky používané v diagramu tříd lze zařadit třídy (classes), asociace (associations), rozhraní (interfaces) a popřípadě balíčky (packages). [Buch2007] Třída je „abstrakcí objektů se stejnými vlastnostmi, stejným chováním a stejnými vztahy k ostatním objektům.“ [Buch2007] Každá třída má popsány vlastnosti a operace (souhrnně označovány jako features), které může provádět, a omezení definující, jak mohou být jednotlivé třídy propojeny. [Fow2003] Vlastnosti tříd jsou v UML označovány jako atributy, operace ve fázi návrhu jako metody (V rámci analýzy se používá označení operace). Třídy jsou vzájemně propojeny pomocí asociací. [Buch2007]; [Arl2008]  

Doporučení

Dle [Clas2006b] a [Arl2008] platí pro diagramy tříd následující doporučení:

  1. Odpovědnosti tříd, zaznamenávané jako atributy, by měly být identifikovány již v doménovém (analytickém) modelu. Každá analytická třída by měla mít tři až pět odpovědností.
  2. Pro názvy tříd měla být použita běžná terminologie problémové domény. Obvykle se preferují podstatná jména v jednotném čísle.
  3. Názvy tříd by měly být uváděny v tzv. VelbloudíNotaci. Pomocí této notace by měly být nazývány i metody a atributy s tím rozdílem, že jejich názvy by měly začínat malým písmenem.
  4. Třídy by neměly být pojmenovávány zkratkami.
  5. Asociační třídy je možné modelovat pouze v doménovém modelu tříd. Asociace, které mají asociační třídy, by neměly být pojmenovány.
  6. Konceptuální model je vhodné vytvářet tak, aby byl implementačně nezávislý.
  7. Designový model by měl korespondovat se jmennými konvencemi použitého programovacího jazyka (např. Java programming conventions).
  8. Atributy a metody by měly být vždy setříděny dle viditelnosti od těch s největší viditelností po ty s viditelností nejmenší.
  9. Asociace by měly mít vždy vyznačeny násobnosti.
  10. U asociací by měl být vyznačen směr čtení.
  11. Při modelování by měl být kladen důraz na minimalizaci vazeb mezi třídami. Třída by měla být spojena pouze s tolika dalšími třídami, aby jí bylo umožněno realizovat to, za co je odpovědná.

Příkladový model tříd

 

Doménový model bez atributů

Obrázek 2. Doménový model tříd