Warning
This page is located in archive.

Diagram tříd - Class Diagram

Úkolem diagramu tříd je dekompozice problému do dílčích částí reprezentovanými třídami.

Krok 1: Identifikace tříd

Nejprve je potřeba vytvořit třídy odpovídající aktorům a užitím z diagramu užití. Každá třída má nějaké vlastnosti (např. osobajméno) a metody (u osoby může být volána metoda getJmeno()). Vlastnosti a metody mají definovánu viditelnost:

  • private (označeno -) - viditelné pouze pro konkrétní třídu
  • protected (označeno #) - viditelné pro třídu a všechny třídy z ní zděděné
  • package (označeno ~) - viditelné pro třídy v témže balíčku
  • public (označeno +) - viditelné pro všechny

Obecně platí, že viditelnost by měla být ta nejpřísnější možná.

Krok 2: Hierarchické vazby

V dalším kroku je vhodné do class diagramu vložit hierarchické vazby - musí odpovídat diagramu užití

Krok 3: Vazby mezi třídami

Dále identifikujeme vazby mezi objekty. Tyto vazby označujeme jako asociační. Vazba může být směrová/orientovaná (je “důležitější spíše” v jednom směru); označena čarou s nevyplněnou šipkou; nebo nesměrová/neorientovaná (pouze čára). U asociace by měla být definována multiplicita (na každé straně).

Speciálním případem asiciační vazby je vazba, která má definovány nějaké další vlastnosti, popřípadě metody. Takovou vazbu realizujeme asociační třídou (např. diplomka).

Krok 4: Je asociace pouze asociace?

Asociace volně svazuje třídy. Mnohdy je ale potřeba naznačit, že vazba označuje vztah “podřazenosti” tříd, např. instance jedné třídy jsou (jednou z) částí třídy druhé. Auto má 4 kola, Profesor vede přednášky. Mnohdy instance konkrétní třídy má zasadní podíl na (kvalitativních) parametrech celku (OsobaSrdce). Takouvou asociaci označujeme jako agregaci, označujeme ji přidáním prázdného kosočtverce.

Z programátorského hlediska, třídy spojené aggregační vazbou musí být instancovány nejpozději v průběhu volání konstruktoru “nadřazené” třídy.

Krok 5: Je agregace pouze agregace?

Speciálním případem agregace je kompozice. Ta navíc udává, že instance obou tříd tvoří nedělitelný celek, jedna bez druhé nemá smyslu. V našem případě, Osoba bez Srdce má natolik omezenou funkcionalitu, že uvažování takové kombinace je bezpředmětné. Kompozice znemožňuje u instancované třídy provést změnu třídu nadřazené, deskrukce instance jedné třídy vede k destrukci instance(í) třídy druhé. Kompozici značíme na čáře plným kosočtvercem .

Rozdíl mezi agregací a kompozicí je patrný z následujícího příkladu: Auto má 4 Kola. Ta ale můžu vyměnit a pořád auto zůstane autem. Kola jsou součástí Auta, auto bez kol má omezenou funkcionalitu (tedy auto kola mít musí). To je agregace… Auto musí mít i motor. Krom toho, pokud je motor zničen např. provozem, celý celek Auto má zásadně omezenou funkcionalitu, toto omezení znemožňuje funkcionalitu celého celku. Parametry motoru zásadně ovlivňují parametry auta. Zlikvidujeme-li auto, zlikvidujeme i motor (a obráceně) - proto kompozice.

Krok 6: Interakce s okolím, další vazby

Součástí diagramu tříd jsou i rozhraní, vazby typu používá, atd. Tyto vazby se označují přerušovanou čarou.

A je to teď dobře?

Záleží na úhlu pohledu… Diagram není úplně správně, nalezení nedokonalostí však ponechám na Vás. Klíč pro hledání: nemohu o tom říci více?

courses/a4m33nms/cviceni/03.txt · Last modified: 2013/10/04 13:02 (external edit)