Přeskočit obsah
    Axiom AAF: Neztratit během vývoje hodnotu užitku systému očekávanou zákazníkem.

Class

Úvod

Tato kapitola zavádí dva související pojmy Class Modelu (CLM): Class — analytickou třídu jako evidovaný pojem informačního systému — a Atribut — vlastněnou hodnotu Class povahy primitivního datového typu.

Oba pojmy žijí na úrovni analytického modelování (AM) s mírou detailu implementace 0 % (viz kapitola Analytické modelování). Nenesou žádný technologický detail.

Class a Atribut se zavádějí společně, protože rozhodnutí „je tento prvek Class, nebo Atribut?" je jeden analytický krok, ne dva.

CLM se vyjadřuje omezenou syntaxí CLM Lite (viz kapitola Slovník evidovaných pojmů (alias CLM Lite)). Class i Atribut přebírají z UML pouze rysy slučitelné s AM.

Class

Class je evidovaný pojem informačního systému — samostatně identifikovatelná jednotka, kterou systém eviduje, se svým vlastním životním cyklem.

Příklady: evidovaná osoba, evidovaná faktura, evidovaný vlak, evidovaná platba, evidované kino.

Class má identitu výskytu. Instance Class je v běhu systému samostatně identifikovatelná evidovaná jednotka.

Class má atributy — vlastněné hodnoty primitivní povahy (viz pojem Atribut níže).

Class má životní cyklus. Instance Class prochází v systému svými stavy a přechody. Stavy se popisují u Class, přechody mezi stavy se popisují ve scénáři Use Case 1. druhu (viz kapitola Use Case 1. druhu).

Class se zapojuje do vztahů s jinými Class. Tyto vztahy zavádějí samostatné kapitoly Asociace a Generalizace a vzory CLM Lite (viz dále).

Třídy v návrhu informačního systému se značí prefixem C_: C_Osoba, C_Faktura, C_Vlak. Výskyty (instance těchto tříd v běhu systému) se značí neutrálním jménem: O1, O2, F1.

Dichotomie třída-instance

Dichotomie třída-instance rozděluje prostor informačního systému na dva disjunktní podprostory: prostor tříd a prostor instancí.

Class je meta-pravidlo pro budoucí instance. Definuje vlastnosti, které budou mít všechny instance z ní vzniklé. Instance je konkrétní výskyt s konkrétními hodnotami těchto vlastností.

Pojem třída má synonyma druh a typ. Pojem instance má synonyma objekt a výskyt. Obě řady formulací jsou rovnocenné.

Vztah lze přiblížit papírovou kartotékou. Každý šuplík má jednu nevyplněnou kartičku-vzor, ze které se kopírováním vytvářejí nové vyplněné evidenční kartičky. Kartička-vzor je třída, vyplněné kartičky jsou instance. Všechny kartičky v šuplíku mají stejný formát (vznikly z téhož vzoru), formát se ale šuplík od šuplíku liší.

Prostor tříd je statický — počet tříd v nasazeném systému je neměnný. Prostor instancí je dynamický — počet instancí se za běhu systému mění.

Při hledání tříd se nejprve vidí instance jako konkrétní příklady evidence a teprve z nich se zobecňuje meta-pravidlo, tedy třída. Tento přechod od instancí ke třídám je přechod do úrovně meta.

Vztah meta lze aplikovat opakovaně směrem nahoru — na třídy tříd (metatřídy). Tato vyšší meta-hierarchie existuje (využívá ji například definice jazyka UML, formalizuje ji MOF a nad ním PMM). CLM zůstává na úrovni dichotomie třída-instance; pohyb výše do meta není předmětem CLM.

Multiinstanční a jednoinstanční třída

Class nese multiplicitu — povolený počet instancí, které z ní smějí vzniknout.

Většina tříd je multiinstanční: vzniká z nich dopředu neznámý počet instancí. Multiinstanční multiplicita je výchozí; pokud se u třídy multiplicita neuvede, třída se chápe jako multiinstanční.

Jednoinstanční třída připouští právě jednu instanci. Její technologickou obdobou je vzor Singleton z GOF, dnes považovaný za anti-pattern.

Výjimečně se zavádí třída s pevným počtem několika instancí — typicky číselník (code list) s pevným počtem prvků.

Třídám se dávají názvy v jednotném čísle. Název je název meta-vzorce (třídy), ne výčtu instancí.

Rozlišující znaky

Class nemá metody, operace ani algoritmy. Chování a děj se popisují ve scénářích Use Case 1. druhu, ne u Class.

Class nemá konstruktory, gettery ani settery. To jsou pojmy OOP a programovacího jazyka, ne pojmy AM.

Class nemá validační pravidla pro přechody stavů. Kontroly při přechodu stavu patří do scénáře Use Case.

Class nepřebírá pravidla z reálného pojmu v okolí automaticky. Analytik vědomě rozhodne, která pravidla evidovaná Class přebírá a v jakém stavu životního cyklu platí.

Pokud zadání zavádí u třídy metodu, operaci nebo validační pravidlo, neodpovídá to pojmu Class na úrovni AM a je to chyba.

Atribut

Atribut je vlastněná hodnota Class povahy primitivního datového typu.

Příklady: rodné číslo Osoby, datum vystavení Faktury, kód rezervace Platby, jméno Klienta.

Atribut je strukturně podřízen jedné Class — svému majiteli. Není sdílený a nemá vlastní identitu nezávislou na majiteli.

Atribut má jméno. Jméno je věcné a popisuje obsah atributu (Rodné číslo, Datum vystavení, Celková částka).

Atribut má povahu — jeden z primitivních datových typů (viz níže).

Atribut má majitele — právě jednu Class, která atribut vlastní.

Atribut má násobnost právě 1. Je to strukturní slot u majitele; „0 instancí" by znamenalo, že atribut není. Vícenásobnost atribut vylučuje (viz Rozlišující znaky).

Atribut je buď vyplněn, nebo nevyplněn. Optionalita atributu není multiplicita 0..1 (počet instancí — to patří Asociaci), ale vyplněnost (obdoba null / not null): povinný atribut musí být vyplněn, nepovinný smí zůstat nevyplněn. Povinnost vyplnění se nehádá — řídí se scénářem.

Primitivní datové typy

Atribut nese hodnotu z konfigurovaného výčtu primitivních datových typů. Výčet je konfigurace, ne pevná součást pojmu — může se lišit firmu od firmy a v rámci projektu se upravovat. Analytik volí typ z tohoto výčtu, ne z typů programovacího jazyka.

  • řetězec — sekvence znaků pro názvy, popisy a identifikátory bez aritmetiky (jména osob, názvy firem, adresy, SPZ, telefonní čísla, kódy rezervací, e-maily).
  • číslo celé — celočíselná hodnota bez desetinné části (počty kusů, pořadová čísla, věk v letech).
  • číslo desetinné — číselná hodnota s desetinnou částí (rozměry, váhy, procenta, koeficienty). Nepatří sem peněžní částka.
  • peněžní částka — hodnota vyjadřující peníze, vždy včetně měny (CZK, EUR, USD). Aritmetika zohledňuje zaokrouhlování a měnu.
  • datum — kalendářní datum bez času (datum narození, vystavení, splatnosti).
  • čas — denní čas bez data (otevírací hodiny, čas události v rámci dne).
  • datum a čas — kombinace data a denního času (okamžik vzniku záznamu, změny stavu, události).
  • logická hodnota — true / false (příznaky zaplaceno, aktivní, platný).
  • výčet — uzavřená množina pojmenovaných hodnot pro konkrétní atribut (stav, pohlaví, typ dokladu). Pokud se hodnoty mohou rozšiřovat za běhu systému, nejde o výčet, ale o samostatný číselník (kandidát na Class).

Rozlišující znaky

Kandidát je Class, pokud je samostatně identifikovatelný, má vlastní životní cyklus, může být sdílen mezi více majiteli nebo nemá majitele, a má vlastní strukturu, která se dále člení.

Kandidát je Atribut, pokud je vlastněn jedním majitelem, není sdílen s jinými majiteli, má povahu primitivního datového typu a nemá vlastní strukturu, která by se dále členila.

Vícenásobnost je samostatná hranice. Jakmile má být hodnota vícenásobná (kolekce hodnot téhož významu), není to atribut — ani u primitivního typu bez vlastní struktury. Vícenásobnost vynucuje povýšení na samostatnou Class a vztah Kompozice ku N nebo Sdílená agregace ku N podle vlastnictví. Multiplicita > 1 je tedy postačující kritérium „není atribut", nezávislé na kritériu struktury. Vícehodnotový atribut by do modelu zavedl nenormalizovanou strukturu.

Rozhodnutí je analytické a může se revidovat. Příklad: rodné číslo iniciálně zavedeme jako atribut Osoby. Jakmile dostane vlastní strukturu (historie změn, validace vůči registru, vlastní životní cyklus přidělení a zrušení), promění se z atributu v Class C_RodneCislo. Tato proměna je přirozený refaktoring, ne porušení modelu.

Více pojmenování pro tutéž věc (kód platby, identifikátor platby, kód rezervace) může označovat jeden pojem, ale i tři různé pojmy s různými životy. Analytik synonyma samovolně neztotožňuje ani samovolně nerozděluje; podezření na synonymii řeší dotazem na zadavatele.

Nejčastější chyby

Zavedení metody nebo operace u Class. Class na úrovni AM nemá chování; děj a kontroly patří do scénáře Use Case 1. druhu.

Automatické převzetí pravidel z okolí na evidovanou Class. Reálná faktura musí mít alespoň jeden řádek, evidovaná C_Faktura ve stavu otevřená k editaci může mít 0 řádků. Pravidlo z reálu platí jen v určitém stavu životního cyklu a kontroluje se v případu užití, ne u Class.

Záměna evidovaného pojmu a pojmu v okolí. Faktura v okolí (papír, daňový doklad) a evidovaná C_Faktura nesou stejné jméno, ale jsou to dva různé referenty s různým chováním (viz kapitola Architektura BPM-UCM-CLM).

Záměna názvu instance za její obsah. Instanci se dává neutrální název (Ulice1), ne název podle obsahu (Ulice Milady Horákové). Hodnota Milady Horákové je obsah atributu název, ne jméno instance.

Samovolné ztotožnění nebo rozdělení synonymních pojmů. Mlčky ztotožněná synonyma maskují skutečnou strukturu, mlčky rozdvojené pojmy vytvářejí redundanci. Rozhodnutí proběhne vědomě, na základě dotazu na zadavatele.

Vícehodnotový atribut. Hodnota, která se vyskytuje vícekrát, není atribut — atribut má násobnost 1. Modeluje se jako samostatná Class a vztah Kompozice ku N nebo Sdílená agregace ku N.

Vazby

Class a Atribut stojí na Objektovém paradigmatu. Vnější pohled na Class je to, co instance umí vydat; vnitřní pohled jsou její atributy a delegace na jiné prvky (viz kapitola Objektové paradigma).

Class a Atribut žijí na nejvyšší úrovni abstrakce, na úrovni analytického modelování (viz kapitola Analytické modelování).

Class je předmětem vrstvy CLM v architektuře analytického modelu (viz kapitola Architektura BPM-UCM-CLM).

Class se zapojuje do vztahů s jinými Class přes Asociaci a Generalizaci a přes vzory CLM Lite (viz dále).

Class a Atribut jsou BASE pojmy AAF. Externí kotva: Objektové paradigma a kniha Analytické modelování v praxi (kapitola 1.4 Dichotomie třída-instance, kapitola 2.2 úroveň analytického modelování). Z UML 2.5.1 (Class, Property/Attribute) se přebírají pouze rysy slučitelné s AM — existence třídy a instancí, atributy jako pojmové vlastnosti. Nepřebírají se operace, metody, visibility a statické metody.

Verze a změny

  • 1.0 — Early Access.