Component diagram - diagram komponent

Základy

Diagram komponent spolu s diagramem tříd (class diagram) patří do skupiny diagramů struktur (structure diagram).

Diagram komponent znázorňuje komponenty použité v systému, tj. logické komponenty (např. business k., procesní k.) či fyzické komponenty (např. EJB k., CORBA k., .NET k. atd.). D. komponent nám může pomoci zejména tam, kde používáme vývoj založený na komponentách a kde struktura systému je založena na komponetách.

Komponenta je modulární část systému, která zapouzdřuje svůj obsah (tj. zapouzdřuje stav a chování i více klasifikátorů) a jejíž projev je nahraditelný (tj. komponenty, poskytující ekvivalentní funkcionalitu založenou na kompatibilitě jejich interfejsů, mohou být libovolně zaměňovány, a to buď už v čase tvorby designu, nebo až za běhu cílového systému).
Komponenta je specializací strukturované třídy.
Protože je komponenta specializací třídy, může mít své atributy a operace a může mít asociace a generalizace-specializace (více viz diagram tříd (class diagram)).

D. komponent využívá koncepty diagramu kompoziní struktury (co se týče parts, portů a konektorů).

Příklady diagramu komponent

PS.: diagramy použité v této kapitole jsou v podstatě překreslené a přeložené diagramy z oficiální specifikace - superstruktury (Unified Modeling Language : Superstructure, version 2.0, formal/05-07-04)
PS2.: diagramy použité v této kapitole jsem kreslil v CASE enterprise architect verze 6.1, a ten do jmenovky frame ohraničujícího celý diagram vkládá tag id - nevím proč, oficiální tag je component nebo cmp :-( diagram komponent, 9 kB

Na prvním obrázku je diagram komponent s jednou strukturovanou komponentou Obchod a jejími třemi vnitřními komponentami :Objednavka, :Produkt a :Zakaznik.

diagram komponent, 6 kB

V druhém obrázku je další diagram komponent, kde vidíme komponentu Objednavka a její vnitřní klasifikátory HlavickaObjednavky a PolozkaObjednavky, které realizují chování této komponenty.

V diagramech můžeme vidět :

  • komponenta je znázorněna jako symbol klasifikátoru (pravoúhelník), s klíčovým slovem <<component>>. Volitelně má v pravém horním rohu zobrazenu speciální malou ikonu komponenty. ( PS.: ve verzi UML 1.x vypadal symbol komponenty právě tak, jako ona speciální ikona, přitom starý symbol komponenty je přípustný i ve verzi UML 2.0).
    Existují dva druhy komponent :
    • basic component : pro ni platí vše, co je v této kapitole o komponentě řečeno (pokud není výslovně uvedeno, že se informace týká jen komponenty typu packaging)
    • packaging component : rozšiřuje komponentu typu basic o možnosti skupinování; takovéto komponenty se týkají aspekty spojené s problematikou namespaces (komponenta může dědit a importovat své členy, jako např. packages, use cases, komponenty, artefakty, třídy, ....)
  • poskytovaný (provided) interface je implementován přímo danou komponentou (popř. klasifikátorem, který realizuje chování komponenty), nebo je to vlastně typ poskytovaného portu (zde poskytovaný interface ZadaniObjednavky je připojen na nepojmenovaný port).
  • požadovaný (required) interface je typem požadovaného portu, nebo je určený závislostí usage přímo z dané komponenty (popř. klasifikátoru, který realizuje chování komponenty), (zde požadovný interface Ucet komponenty Obchod (1. diagram) je připojen na nepojmenovaný port, požadovaný interface ObjednatelnaPolozkaUcet komponenty Objednavka (2. diagram) je připojen pomocí závislosti na interní třídu PlozkaObjednavky).
  • port nám umožňuje organizování interfejsů do skupin : můžeme vytvářet pojmenované sady interfejsů
  • delegační konektor (delegation connector) propojuje externí rozhraní komponenty (tak, jak je specifikováno portem) s vnitřní částí komponenty (tj. s vnitřní komponentou či třídou anebo s portem vnitřní komponenty).
  • montážní konektor (assembly connector) spojuje požadovaný a poskytovaný itrefejs; strana, která poskytuje interfejs, musí být schopna poskytnout minimálně všechny služby, které může požadovat strana s požadovaným interfejsem

Další podrobnosti

Komponenta (component)

Komponenta definuje své chování v rámci poskytovaných (provided) a požadovaných (required) interfejsů.
Komponenta se může projevit (manifest) jako jeden či více artefaktů (artifact), kzeré mohou být nasazeny (deployed) do cílového prostředí (dále viz diagram nasazení).
Komponenta může mít navázanou sadu klasifikátorů, které realizují její chování.
Komponenta má dva pohledy :

  • external view, black-box : vnějsí pohled na komponentu prostřednictvím veřejně viditelných vlastností a operací. Volitelně, pro definování více precizního externího pohledu, může být připojeno chování (např. protokol state machine) k interfejsu, portu, nebo přímo ke komponentě
  • internal view, white-box : vnitřní pohled na komponentu prostřednictvím privátních vlastností a realizujících klasifikátorů
Existuje řada standardních stereotypů pro komponenty :
  • <<buildComponent>> : skupina elementů definovaných za účelem vývoje na systémové úrovni, např. pro kompilování, verzování, ....
  • <<entity>> pro komponentu s perzistneními informacemi, která reprezentuje business koncept
  • <<implement>>
  • <<process>> pro transakčně založenou komponentu
  • <<service>> pro bezestavové, funkční komponenty
  • <<subsystem>> pro definování rozsáhlých komponent

Náměty na další studium

  • alternativní notace komponenty s dalšími compartments (se seznamy interfejsů, operací, atributů, parts, konektorů, artefaktů, ....)
  • zobrazení iterfejsu jako klasifikátoru (se zobrazením operací a událostí)
  • alternativní zobrazení interních klasifikátorů (realizujících chování komponenty) jako klasifikátorů se závislostí na dané komponentě
  • notace zděděných interfejsů : /interface
  • notace artefaktu implementujícího komponentu : přímo fyzickým umístěním v komponentě nebo pomocí relace se stereotypem <<implement>>
  • sdružování konců montážních (assembly) konektorů
  • použití montážního (assembly) konektoru pro spojení komplexních portů (s více požadovanými/poskytovanými interfejsy) : seznam interfejsů jako seřazená sada, použití {provided}, {required}.