Klas­sen­dia­gram­me sind Struk­tur­dia­gram­me innerhalb der Unified Modeling Language, kurz: UML. Die Mo­del­lie­rungs­spra­che UML ist ein ISO-Standard. Sie ver­an­schau­licht Systeme der ob­jekt­ori­en­tier­ten Pro­gram­mie­rung. Auch Ge­schäfts­pro­zes­se lassen sich damit über­sicht­lich auf­zeich­nen. Mithilfe visueller Mittel zeigt UML Zustände von Systemen auf und be­schreibt In­ter­ak­tio­nen zwischen Sys­tem­ele­men­ten. Dafür legt die Notation Formen und Linien für 14 Dia­gramm­ty­pen fest.

Klas­sen­dia­gram­me im Kontext der Unified Modeling Language

Die Me­ta­mo­del­lie­rung be­schreibt sowohl einzelne Elemente der Mo­del­lie­rungs­spra­che als auch die Sprache selbst. Sie legt Sprach­ein­hei­ten für un­ter­schied­li­che Ebenen fest. Eine Sprach­ein­heit in dieser visuellen Sprache ist bei­spiels­wei­se das Verhalten. Es be­schreibt sowohl eine Me­ta­klas­se als auch einen Ober­be­griff für alle dy­na­mi­schen Faktoren innerhalb eines Systems. Eine weitere Sprach­ein­heit ist das Objekt, das Grund­ele­ment der ob­jekt­ori­en­tier­ten Pro­gram­mie­rung. UML-Klas­sen­dia­gram­me mo­del­lie­ren Objekte als Instanzen von Klassen. Somit ist das Klas­sen­dia­gramm einer der wich­tigs­ten und meist­ge­nutz­ten Dia­gramm­ty­pen der UML.

Die Dia­gramm­ty­pen teilen sich nach ihrer Funktion in zwei Haupt­ka­te­go­rien ein: Struk­tur­dia­gram­me und Ver­hal­tens­dia­gram­me. Letztere weisen eine Un­ter­ka­te­go­rie auf: In­ter­ak­ti­ons­dia­gram­me. Diese mo­del­lie­ren nicht nur das all­ge­mei­ne Verhalten eines Systems, sondern fo­kus­sie­ren sich auf In­for­ma­ti­ons­flüs­se zwischen Objekten im Zeit­ver­lauf eines Prozesses. Dazu gehören bei­spiels­wei­se die Se­quenz­dia­gram­me. Sie mo­del­lie­ren die chro­no­lo­gi­sche Rei­hen­fol­ge von Nach­rich­ten, die in einem de­tail­lier­ten An­wen­dungs­fall fließen. Ver­hal­tens­dia­gram­me vi­sua­li­sie­ren dy­na­mi­sche Prozesse. Ein Beispiel ist das Ak­ti­vi­täts­dia­gramm. Dieses zeigt auf, wie einzelne Aktionen in einem Ablauf in­ter­agie­ren. Struk­tur­dia­gram­me hingegen zeigen statische Zustände; sie il­lus­trie­ren die Elemente eines Systems und deren Ab­hän­gig­kei­ten un­ter­ein­an­der.

Das Klas­sen­dia­gramm teilt Ob­jekt­in­stan­zen aufgrund ihrer Ei­gen­schaf­ten be­stimm­ten Klassen zu – es besteht also eine hier­ar­chi­sche Ab­hän­gig­keit. Gleich­zei­tig exis­tie­ren Be­zie­hun­gen zwischen ver­schie­de­nen Klassen oder zwischen Objekten.

UML-Klas­sen­dia­gram­me: An­wen­dungs­ge­bie­te

Klas­sen­dia­gram­me stellen Zustände mit Sys­tem­ele­men­ten dar. Sie zeigen Struk­tu­ren bis zur kleinsten Instanz auf. Demnach eignen sie sich für die Dar­stel­lung von de­tail­lier­ten Software-Ar­chi­tek­tu­ren. Daraus lassen sich konkrete Pro­gram­mier­schrit­te ableiten. Einige soft­ware­ge­stütz­te Pro­gram­mier­um­ge­bun­gen wandeln diese UML-Diagramme direkt in Code-Frames um. Mittels Team-Sharing kom­mu­ni­zie­ren Ent­wick­ler un­ter­ein­an­der oder mit anderen Ent­schei­dern innerhalb eines Un­ter­neh­mens. Für Fach­frem­de ver­mit­telt ein UML-Diagramm einen Überblick über geplante Sys­tem­struk­tu­ren oder Pro­zess­ab­läu­fe. Zudem lassen sich damit Sys­tem­an­for­de­run­gen for­mu­lie­ren, die die Ent­wick­ler dann umsetzen. Un­ter­ein­an­der können IT-Experten Diagramme mo­del­lie­ren und effektiv abändern, ohne bereits in der Pla­nungs­pha­se größere Um­ge­bun­gen oder Prozesse pro­gram­mie­ren zu müssen.

Das sind die Ein­satz­ge­bie­te von Klas­sen­dia­gram­men:

  • Sie be­schrei­ben Typen innerhalb eines Systems. Die grafische Dar­stel­lung lässt sich in ver­schie­de­ne Pro­gram­mier­spra­chen und Um­ge­bun­gen über­tra­gen. Somit existiert sie un­ab­hän­gig von der zu­künf­ti­gen Anwendung.
  • Sie mo­del­lie­ren bereits be­stehen­de Software-Ar­chi­tek­tu­ren. Sollen zu­sätz­li­che Be­stand­tei­le ein­ge­bun­den werden, vi­sua­li­sie­ren sie geeignete Struk­tu­ren, an denen neue Kom­po­nen­ten eingebaut werden können. Für die zu­künf­ti­gen Sys­tem­ele­men­te erstellen Klas­sen­dia­gram­me einen Leitfaden für den Programm-Code. Je nach Bedarf kann dieser Schritt skiz­zen­haft oder sehr de­tail­liert ausfallen.
  • Sie stellen Da­ten­mo­del­le dar. Dabei eignen sie sich für Systeme un­ter­schied­li­cher Kom­ple­xi­tät.
  • Bei ver­schach­tel­ten An­wen­dun­gen können die Do­ku­men­ta­ti­on und die Wartung sehr komplex werden. Klas­sen­dia­gram­me ver­mit­teln einen Überblick über das Schema.
  • Sie stellen An­for­de­run­gen an eine Software dar. Als Bilddatei lassen sie sich leicht über interne Ge­schäfts­ka­nä­le wei­ter­lei­ten. So er­mög­li­chen sie Experten aus un­ter­schied­li­chen Ab­tei­lun­gen, sich über die Ar­chi­tek­tur aus­zu­tau­schen.
  • Der UML-Standard nutzt Klas­sen­dia­gram­me, um seine eigene Notation visuell dar­zu­stel­len.

Klas­sen­dia­gram­me: Notation laut UML

UML-Klas­sen­dia­gram­me bestehen aus Klassen und deren Instanzen (Objekte) sowie Schnitt­stel­len. Sie stellen hier­ar­chi­sche Be­zie­hun­gen sowie As­so­zia­tio­nen zwischen diesen Elementen her. Die Notation dieses Dia­gramm­typs ist der Grund­bau­stein für die meisten anderen Struk­tur­dia­gram­me. UML 2 definiert Struk­tur­dia­gram­me als Klas­si­fi­zie­rer. Innerhalb der UML-Me­ta­mo­del­lie­rung sind Pa­ket­dia­gram­me, Kom­po­nen­ten­dia­gram­me und der­glei­chen Sub­klas­sen des Struk­tur­dia­gramms. Dieses wird aber nicht mo­del­liert, da es eine abstrakte Klasse ist. Das Klas­sen­dia­gramm eignet sich am besten als Beispiel für ein Struk­tur­dia­gramm. Andere Diagramme dieser Kategorie nutzen ab­ge­wan­del­te Bausteine des Klas­sen­dia­gramms für ihre Notation.

Fakt

Als Klas­si­fi­zie­rer (Englisch: Clas­si­fier) versteht UML eine abstrakte Me­ta­klas­se. Sie dient dazu, Mo­dell­ele­men­te innerhalb der Mo­del­lie­rungs­spra­che einem ge­mein­sa­men Konzept zu­zu­ord­nen. Das nennt sich Ge­ne­ra­li­sie­rung. So kann der Standard allgemein for­mu­liert werden. Geht die Spe­zi­fi­ka­ti­on auf ein be­stimm­tes Element ein, muss lediglich diese Be­son­der­heit erklärt werden.

Die Klasse

Die Klasse ist ein Mo­dell­ele­ment im Klas­sen­dia­gramm und eine Spe­zia­li­sie­rung des ver­kap­sel­ten Klas­si­fi­zie­rers (En­cap­su­la­tedClas­si­fier) und des Ver­hal­tens­klas­si­fi­zie­rers (Be­ha­vio­redClas­si­fier). Sie fasst eine Menge von Instanzen zusammen. Ob­jekt­in­stan­zen innerhalb einer Klasse prägen die gleichen Merkmale (At­tri­bu­tes) und Ver­hal­tens­wei­sen (Methods) aus. Außerdem weisen sie die gleiche Semantik auf, d. h. sie nutzen die gleichen Zeichen mit der gleichen Bedeutung. Somit ist die Klasse eine Art Muster für ihre Objekte. Sie in­stan­ziert die Objekte und definiert ihr Verhalten im System.

Fakt

Die Instanz ist eine konkrete Aus­prä­gung eines abs­trak­ten Elements. Sie führt ein vor­ge­schrie­be­nes Verhalten innerhalb der vor­ge­ge­be­nen Parameter aus. Manche Instanzen benennt UML explizit. So ist das Objekt eine benannte Instanz der Klasse. Ei­gen­schaf­ten von Instanzen mo­del­liert man mit Dia­gram­men auf Instanz-Level. Statt eines Klas­sen­dia­gramms zeichnen Sie dann bei­spiels­wei­se ein Ob­jekt­dia­gramm.

Ver­kap­sel­te Klas­si­fi­zie­rer erweitern so­ge­nann­te struk­tu­rier­te Klas­si­fi­zie­rer. Letztere zeichnen sich dadurch aus, dass sie im Inneren eine Struktur vor­schrei­ben und ver­bun­de­ne Elemente aufnehmen können. Diese Elemente (Me­ta­klas­se: Con­nec­ta­b­le­Ele­ments) be­ein­flus­sen das Verhalten der Klas­si­fi­zie­rer. Jedes ver­bun­de­ne Element steht für einen Teil­neh­mer am Verhalten im Klas­si­fi­zie­rer. Man sagt auch, sie über­neh­men eine Rolle. Der ver­kap­sel­te Klas­si­fi­zie­rer besitzt zu­sätz­lich eine An­dock­stel­le (Port). Damit isoliert man den Klas­si­fi­zie­rer vom System, ohne die Ver­bin­dung zu verlieren.

Ver­hal­tens­klas­si­fi­zie­rer weisen häufig eine Ver­bin­dung zu einer Schnitt­stel­le auf, die In­ter­face­Rea­liza­ti­on (Schnitt­stel­len­aus­füh­rung). Der Klas­si­fi­zie­rer stimmt implizit mit den Be­din­gun­gen der Schnitt­stel­le überein, indem er den Funk­ti­ons­um­fang der Schnitt­stel­le un­ter­stützt. Die In­ter­face­Rea­liza­ti­on (auch „Lollipop“ genannt) zeichnen Sie als un­ge­füll­ten Kreis, der über eine Linie mit der Klasse verbunden ist.

Die genannten Me­ta­klas­sen klas­si­fi­zie­ren Objekte. Die Klasse ist die spe­zi­fi­sche Aus­prä­gung dieser Me­ta­klas­sen. Somit bestimmt sie die Klas­si­fi­zie­rung näher und kon­kre­ti­siert die einzelnen Be­stand­tei­le, die die Struktur und das Verhalten der Objekte ausmachen. Klassen besitzen Ei­gen­schaf­ten, die sie (und ihre un­ter­ge­ord­ne­ten Objekte) be­schrei­ben. Dazu gehören:

  • Merkmale (Pro­per­ties bzw. At­tri­bu­tes, wenn sie zur Klasse gehören)
  • Ope­ra­tio­nen (Ope­ra­ti­ons, können für ein Objekt auf­ge­ru­fen werden)
  • Si­gnal­emp­fän­ger (Re­cep­ti­ons) seit UML 2.0
  • An­schlüs­se (Ports) seit UML 2.0
  • Kon­nek­to­ren (Con­nec­tors)

Diese Ei­gen­schaf­ten fügen Sie in die Notation ein, wenn Sie ein Klas­sen­dia­gramm erstellen. In UML wird eine Klasse als Rechteck mit durch­ge­zo­ge­ner Linie dar­ge­stellt. Sein Körper besteht aus drei Ab­tei­lun­gen, die über­ein­an­der an­ge­ord­net sind. Nur der oberste Teil muss zwingend mo­del­liert werden, denn hier legen Sie den Namen der Klasse fest. Die beiden anderen Par­ti­tio­nen be­schrif­ten Sie optional mit At­tri­bu­ten (Mitte) und Ope­ra­tio­nen (unten). Diesen Elementen weisen Sie ver­schie­de­ne Sicht­bar­kei­ten zu, indem Sie folgende Symbole vor ihren Namen schreiben:

  • + = öf­fent­lich
  • - = privat
  • # = geschützt
  • / = ab­ge­lei­tet
  • ~ = Paket
  • * = zufällig

Pro­per­ties (Merkmale)

Pro­per­ties sind ver­bun­de­ne Elemente. Klas­sen­ei­ge­ne Attribute (ow­ne­dAt­tri­bu­tes) sind immer Rollen. Man verbindet sie über Kon­nek­to­ren. Besitzen sie die Ei­gen­schaft is­Com­po­si­te= true („ist zu­sam­men­ge­setzt = wahr“), nennt man sie Teile (Parts).

Die UML-Property ist ein Struk­tur­merk­mal, das ver­schie­de­ne Ein­satz­ge­bie­te hat. Neben der Funktion als Attribut in einer Klasse kann es auch As­so­zia­ti­ons­en­den dar­stel­len.

Der Property-Type leitet sich vom Namen des Klas­si­fi­zie­rers ab. Optional legen Sie einen Stan­dard­wert für ein Merkmal fest. Zu­sätz­lich bestimmen Mo­di­fi­zie­rer näher, wie sich ein Merkmal verhält:

  • geordnet (Notation: isOrdered = true)
  • ein­zig­ar­tig (Notation: isUnique = true)
  • nicht ein­zig­ar­tig (Notation: isUnique = false)
  • schreib­ge­schützt (das Merkmal kann nur gelesen werden, Notation: is­Re­a­dOn­ly = true)
  • Sequenz (das Merkmal ist eine geordnete Sammlung, Notation: isUnique = false und isOrdered = true)
  • Ver­ei­ni­gung (eine ab­ge­lei­te­te Ver­ei­ni­gung von Teil­men­gen, Notation: union)
  • ID (gehört zur Be­zeich­nung seines Klas­si­fi­zie­rers, Notation: id)
  • Merk­mals­ein­gren­zung (eine Ein­gren­zung, die das Merkmal be­ein­flusst, Notation: property-cons­traint)
  • Neu­de­fi­ni­ti­on eines Merkmals (definiert ein vererbtes, benanntes Merkmal um, Notation: redefines [Merk­mals­na­me])
  • Teilmenge des Merkmals (sym­bo­li­siert ein Merkmal, das eine Teilmenge eines benannten Merkmals ist, Notation: subsets [Merk­mals­na­me])

Ope­ra­tio­nen

Ope­ra­tio­nen sind Ver­hal­tens­funk­tio­nen. Sie kommen in Klassen, aber auch in Da­ten­ty­pen oder Schnitt­stel­len vor. Sie rufen die Instanz einer Klasse direkt auf. Die Operation legt folgende Aspekte eines Aufrufs fest:

  • Name
  • Typ
  • Parameter
  • Ein­schrän­kun­gen

Die Operation gehört ihrem über­ge­ord­ne­ten Klas­si­fi­zie­rer an. Dieser ändert sie mög­li­cher­wei­se, indem er Typ oder Parameter neu definiert.

Für Ope­ra­tio­nen gibt es Vor­be­din­gun­gen. Diese müssen erfüllt sein, bevor die Operation aus­ge­führt wird. UML definiert jedoch nicht, wie sich ein Ver­hal­tens­auf­ruf verhält, wenn die Vor­be­din­gun­gen nicht erfüllt sind. Außerdem legen Sie Nach­be­din­gun­gen fest, die erfüllt sein müssen, wenn die Operation ab­schließt. Kör­per­be­din­gun­gen be­schrän­ken das Aus­ga­be­er­geb­nis auf einen Wert, der aus ihren Spe­zi­fi­ka­tio­nen errechnet wird. Dieser Wert sollte die Nach­be­din­gun­gen erfüllen. Die Operation kann aber auch eine Ausnahme her­vor­ru­fen, während sie aus­ge­führt wird. Dann erfüllt sie vor­aus­sicht­lich nicht die Nach­be­din­gun­gen.

Die Notation für das Klas­sen­dia­gramm schreibt vor, dass Ope­ra­tio­nen in einem Abteil im Körper der Klasse notiert werden. Laut UML-Standard ist die Angabe ob­li­ga­to­risch. Gleich­zei­tig er­mög­licht UML, alle stan­dard­mä­ßi­gen Angaben innerhalb einer Klasse zu un­ter­drü­cken. Nur der Name muss notiert werden.

Si­gnal­emp­fän­ger

Ein Si­gnal­emp­fän­ger zeigt an, dass ein Klas­si­fi­zie­rer bereit ist, ein Signal an­zu­neh­men. Er definiert auch, welche Arten von Signalen die Instanzen der Klasse annehmen. Der Si­gnal­emp­fän­ger heißt so wie sein Signal. Ent­spre­chen­de Angaben notieren Sie im Körper der Klasse, in einem Abteil unter den Ope­ra­tio­nen.

Ports

Ports sind An­schlüs­se für ver­kap­sel­te Klas­si­fi­zie­rer. Sie stellen einen Punkt dar, an dem der Klas­si­fi­zie­rer mit seiner Umwelt in­ter­agiert. Abgesehen von den Ports ist der ver­kap­sel­te Klas­si­fi­zie­rer ein in sich ge­schlos­se­nes System. Da seine inneren Struktur- und Ver­hal­tens­ele­men­te vom rest­li­chen System unberührt bleiben, können Sie diesen Klas­si­fi­zie­rer ebenso un­ab­hän­gig de­fi­nie­ren. Solange ein System die Ein­schrän­kun­gen des Ports erfüllt, können Sie den ver­kap­sel­ten Klas­si­fi­zie­rer in un­ter­schied­li­chen Um­ge­bun­gen wie­der­ver­wen­den.

Zudem erlaubt UML mehrere An­dock­stel­len pro Klas­si­fi­zie­rer. Sie können für jeden Port eigene Regeln de­fi­nie­ren. Der Port ist eine Ei­gen­schaft des Klas­si­fi­zie­rers, Sie legen seine Regeln also im Bereich für Pro­per­ties fest. Dazu gehören die Dienste, die der Klas­si­fi­zie­rer seiner Umwelt anbietet, und die Dienste, die er benötigt. Sie un­ter­schei­den zwischen un­ter­schied­li­chen In­for­ma­ti­ons­flüs­sen, indem Sie den dafür ver­wen­de­ten Port iden­ti­fi­zie­ren.

Auch Ports selbst haben Ei­gen­schaf­ten. Führt der Port ver­öf­fent­lich­te Funk­tio­nen des Klas­si­fi­zie­rers aus, zeigt das die Ei­gen­schaft isService an. Wenn isService = true gegeben ist, gilt der Port als un­ver­zicht­ba­rer Be­stand­teil der nach außen sicht­ba­ren Funk­tio­nen des ver­kap­sel­ten Klas­si­fi­zie­rers. Bei isService = false gehört der Port nicht zu den es­sen­zi­el­len Features und kann daher, genau wie andere interne Funk­tio­nen, geändert oder gelöscht werden.

Ports in­ter­agie­ren mit Schnitt­stel­len. Es gibt be­reit­ge­stell­te und benötigte Schnitt­stel­len (s. u. „Schnitt­stel­len“). Die Schnitt­stel­le, die mit dem Port verbunden ist, spe­zi­fi­ziert die In­ter­ak­tio­nen, die über den Port laufen. Da die An­dock­stel­le eine Ei­gen­schaft ist, hat sie einen Typ. Der Wert von is­Con­ju­ga­ted ver­mit­telt zwischen dem Typen und der Schnitt­stel­le des Ports. Ist der Wert wahr, kann sich die benötigte Schnitt­stel­le direkt vom Typ des Ports ableiten oder aus der Menge von Schnitt­stel­len, die der Typ des Ports rea­li­siert. Eine be­reit­ge­stell­te Schnitt­stel­le leitet sich in diesem Fall aus der Menge der Schnitt­stel­len ab. Wenn is­Con­ju­ga­ted wahr ist, leitet sich die be­reit­ge­stell­te Schnitt­stel­le vom Typ ab.

Generiert ein ver­kap­sel­ter Klas­si­fi­zie­rer eine Instanz, werden für jeden seiner Ports ent­spre­chen­de Instanzen erstellt. Ein Port hält die jeweilige Instanz in Über­ein­stim­mung mit seinem Typ und seiner Mul­ti­pli­zi­tät (s. u.). Die Instanzen nennt UML In­ter­ak­ti­ons­punk­te. Jede Instanz besitzt ein­zig­ar­ti­ge Verweise, anhand derer sie zwischen den un­ter­schied­li­chen Anfragen für Ver­hal­tens­funk­tio­nen un­ter­schei­det, die an ihre Ports gerichtet werden.

Ports mit der Ei­gen­schaft is­Be­ha­vi­or = true senden eine Anfrage an die Instanz des ver­kap­sel­ten Klas­si­fi­zie­rers. Die Anfrage übernimmt das spe­zi­fi­zier­te Verhalten der Instanz. Die so­ge­nann­ten Behavior-Ports leiten Anfragen also nicht ins Innere Ihres Klas­si­fi­zie­rers. Ist im Klas­sen­dia­gramm dafür kein Verhalten fest­ge­legt, gehen Nach­rich­ten an diesen Ports verloren.

Einen Port mo­del­lie­ren Sie als kleines Quadrat auf dem Rahmen des Klas­si­fi­zie­rers, zu dem er gehört. An den Port zeichnen Sie die benötigte oder be­reit­ge­stell­te Schnitt­stel­le. Wenn Sie keine spe­zi­el­len Merkmale für den Port festlegen, zeichnen Sie die Schnitt­stel­le ohne Port.

Kon­nek­to­ren

Kon­nek­to­ren de­fi­nie­ren Ver­bin­dun­gen zwischen zwei oder mehr Instanzen. Die Spe­zi­fi­ka­ti­on er­mög­licht deren Kom­mu­ni­ka­ti­on. Im Gegensatz zu Be­zie­hun­gen wie der As­so­zia­ti­on verbinden Kon­nek­to­ren keine be­lie­bi­gen Instanzen, sondern nur Instanzen, die als Ver­bin­dungs­tei­le definiert sind. Kon­nek­to­ren mo­del­lie­ren Sie als Kanten mit min­des­tens zwei Enden. Sie stehen für die teil­neh­men­den Instanzen, die den ver­knüpf­ba­ren Elementen einen Typ zuweisen.

Mul­ti­pli­zi­tä­ten

Eine weitere wichtige Größe ist die Mul­ti­pli­zi­tät. Dieser Parameter gibt an, wie viele Instanzen eine struk­tu­rier­te Klasse ausbilden darf. Zudem begrenzt sie Attribute und Ope­ra­tio­nen. Sie ist ein Teil der inneren Struktur – das ist ein vor­ge­schrie­be­nes Element im Körper der Klasse. Sie tragen es hinter den At­tri­bu­ten und Ope­ra­tio­nen ein. Zu diesem Abschnitt gehört auch die Topologie. Knoten (Ob­jekt­in­stan­zen) verbinden sich über Kom­mu­ni­ka­ti­ons­we­ge (Com­mu­ni­ca­ti­onPaths) zu To­po­lo­gie­netz­wer­ken.

Mul­ti­pli­zi­tä­ten notieren Sie wie folgt:

<mul­ti­pli­zi­tät> : <mul­ti­pli­zi­täts­be­reich> [<Ord­nungs­be­zeich­nung> , <Ein­zig­ar­tig­keits­be­zeich­ner>]

Der Mul­ti­pli­zi­täts­be­reich gibt einen festen Wert oder einen Von-bis-Bereich an:

  • 0 = die Klasse bildet keine Instanzen aus (kommt selten vor)
  • 0..1 = entweder keine Instanz oder eine Instanz
  • 1 oder 1..1 = genau eine Instanz
  • 0..* oder nur * = keine Instanz oder mehr mit offenem Wert
  • 1..* = eine Instanz oder mehr mit offenem Wert

Die Ordnung und Ein­zig­ar­tig­keit kann man als Set (Menge) aus­drü­cken oder durch Ein­zel­be­grif­fe, die man mit Komma trennt. Je nachdem, ob die Knoten in der Menge ein­zig­ar­tig oder geordnet sind, erhält die Menge eine Typ­be­schrei­bung. In der Notation be­schrei­ben Sie die einzelnen Größen als ordered/unordered (geordnet/un­ge­ord­net) oder unique/not unique (ein­zig­ar­tig/nicht ein­zig­ar­tig).

Mengentyp Ein­zig­ar­tig Geordnet
Sequenz Nein Ja
Mul­ti­men­ge (Bag) Nein Nein
Geordnete Menge Ja Ja
Menge Ja Nein

Ein­schrän­kung

Auch die Ein­schrän­kung (Cons­traint) soll hier erwähnt werden. In früheren UML-Versionen zählte dieses Element zu den Be­zie­hun­gen. In­zwi­schen definiert UML die Ein­schrän­kung als packbares Element. Das heißt, dass sie direkt einem Paket gehören kann. Sie geht auch mit anderen Elementen solche Be­zie­hun­gen ein, z. B. mit Klassen oder Merkmalen. Das be­ein­flusst die Notation jedoch nicht. Die Ein­schrän­kung stellt eine Bedingung oder Zu­si­che­rung für ihren Besitzer dar. Sie kann eines oder mehrere Elemente be­ein­flus­sen.

Das be­sit­zen­de Element benötigt Zugriff auf die Ein­schrän­kung. Damit prüft es, ob die Ein­schrän­kung valide ist und ob sie erfüllt wurde. Es hängt vom Besitzer ab, wann das passiert. Einige Elemente, wie die Operation, ve­ri­fi­zie­ren die Ein­schrän­kun­gen vor ihrer Aus­füh­rung, zwi­schen­durch und/oder danach. Sie besitzen Vor­be­din­gun­gen, Kör­per­be­din­gun­gen und Nach­be­din­gun­gen. Die Spe­zi­fi­ka­ti­on, wann ein Element seine Ein­schrän­kung prüft, be­zeich­net UML als Kontext. Man un­ter­schei­det zwischen dem Kontext und der tat­säch­li­chen Spe­zi­fi­ka­ti­on. Letztere be­schreibt, welches Element die Ein­schrän­kung absteckt, welchen Aspekt sie bewertet und welches Ergebnis sie erwartet. Die genaue Spe­zi­fi­zie­rung erhält ein Cons­traint durch eine boolesche Wert­spe­zi­fi­zie­rung.

Die Notation besteht aus einer Textkette in folgender Form:

<Name des ein­ge­schränk­ten Elements> ::= { <Name der Ein­schrän­kung> : <boole­scher Ausdruck> }

UML schreibt keine Sprache vor. Sie haben die Wahl, welche Ein­schrän­kung Sie in welcher Sprache vornehmen wollen, wenn Sie Ihr Klas­sen­dia­gramm erstellen. Nutzen Sie eine Pro­gram­mier­spra­che wie Java, eine na­tür­li­che Sprache oder eine für Maschinen lesbare Sprache wie XML. Die Object Ma­nage­ment Group, die den UML-Standard festlegt, ver­öf­fent­licht die Object Cons­traint Language (OCL). Diese Sprache definiert UML-kom­pa­ti­ble Ein­schrän­kun­gen. Ihr Vorteil ist, dass sie sich nahtlos in die Notation einfügt.

Manche ein­ge­schränk­ten Elemente notieren Sie in UML als Text, z. B. ein Attribut einer Klasse im Klas­sen­dia­gramm. Die Ein­schrän­kung notieren Sie hinter dem Text­ele­ment in ge­schwun­ge­nen Klammern. Handelt es sich bei dem Besitzer um ein Element, das Sie als Symbol dar­stel­len, plat­zie­ren Sie die Ein­schrän­kung möglichst nah an dem Symbol; so sollte es of­fen­sicht­lich sein, dass beide Elemente eine se­man­ti­sche Beziehung haben. Noch deut­li­cher machen Sie die Ver­bin­dung, indem Sie die Ein­schrän­kung in ein No­tiz­zet­tel-Symbol schreiben und mit seinem Besitzer über eine ge­stri­chel­te Linie verbinden.

Wirkt die Ein­schrän­kung auf zwei Elemente, verbinden Sie die Besitzer über eine ge­stri­chel­te Linie. Daran schreiben Sie die Ein­schrän­kung in ge­schwun­ge­nen Klammern. Setzen Sie eine Pfeil­spit­ze an ein Ende, si­gna­li­siert dies die Position der Besitzer innerhalb einer Sammlung von ein­ge­schränk­ten Elementen (cons­trai­ned­Ele­ments). Der Pfeil zeigt weg von der ersten Position hin zur zweiten. Besitzen mehr als zwei Elemente die Ein­schrän­kung, nutzen Sie das No­tiz­zet­tel-Symbol und verbinden jedes Element mit der Ein­schrän­kung.

Auch Kanten zählen zu den be­schränk­ba­ren Elementen. Mo­del­lie­ren Sie mehr als zwei Kanten derselben Art, ziehen Sie die ge­stri­chel­te Cons­traint-Linie durch alle Kanten, die die in­vol­vier­ten Elemente dar­stel­len.

Ste­reo­ty­pen

Ste­reo­ty­pen de­fi­nie­ren Er­wei­te­run­gen von Me­ta­klas­sen. Laut UML-Spe­zi­fi­ka­ti­on gehören sie zu den Profilen. Be­schreibt ein Stereotyp zu­sätz­li­che Ei­gen­schaf­ten mehrerer Me­ta­klas­sen, kann er während der Laufzeit zu einem be­stimm­ten Zeitpunkt nur eine Instanz der Me­ta­klas­se auf einmal be­schrei­ben. Unter den Me­ta­klas­sen nimmt der Stereotyp eine bestimmte Rolle ein. Denn er kann niemals alleine stehen. Sie mo­del­lie­ren einen Stereotyp immer in Ver­bin­dung mit dem Klas­si­fi­zie­rer, den er erweitert. Sie verbinden die Me­ta­klas­se mit dem Ste­reo­ty­pen, indem Sie eine Er­wei­te­rung (Extension) mo­del­lie­ren.

Hinweis

Seit UML 2.4 legt die Spe­zi­fi­ka­ti­on fest: Das Label eines Ste­reo­typs schreibt man am Anfang mit einem Groß­buch­sta­ben, etwa <<Type>>. Andere Label, etwa für Ei­gen­schaf­ten an As­so­zia­ti­ons­en­den, schreibt man durch­gän­gig klein.

Man un­ter­schei­det zwei Arten von Be­zie­hun­gen zwischen (Meta-)Klasse und Stereotyp. Die benötigte Er­wei­te­rung (Notation: is­Re­qui­red = true) definiert, dass ein Stereotyp mit jeder Instanz der Me­ta­klas­se im Klas­sen­dia­gramm eine Ver­bin­dung eingeht. Die nicht benötigte Er­wei­te­rung (Notation: is­Re­qui­red = false) erlaubt Ihnen, Instanzen der Me­ta­klas­se frei mit einem Stereotyp zu ver­knüp­fen. Sie können den Stereotyp auch löschen. Jedoch darf eine bestimmte Instanz während der Laufzeit nur einmal mit einem be­stimm­ten Stereotyp verknüpft sein.

Wollen Sie einen Stereotyp entfernen, löschen Sie das Profil, das ihn definiert, aus dem Bereich an­ge­wand­te Profile (ap­pli­ed­pro­files) im über­ge­ord­ne­ten Paket. Al­ter­na­tiv tilgen Sie die Instanz, die er erweitert.

UML definiert einige Klassen-Ste­reo­ty­pen, die Ihr UML-Klas­sen­dia­gramm erweitern. Sechs Ste­reo­ty­pen gehören zum Standard. Oft genutzt, aber nicht stan­dar­di­siert sind drei Ste­reo­ty­pen, mit denen Sie das Muster „Modell-Prä­sen­ta­ti­on-Steuerung“ (Model-View-Con­trol­ler, kurz: MVC) in UML umsetzen. Die drei nicht stan­dar­di­sier­ten Ste­reo­ty­pen sind:

  • Die Entität (Notation: <<Entity>>): Der Stereotyp Entity definiert eine Klasse oder ein Objekt. Die jeweilige Instanz steht für eine Sammlung von Daten. Häufig sind es Sys­tem­da­ten, die über längere Zeit ge­spei­chert werden sollen. Die Entität übernimmt die Rolle des Modells aus dem MVC-Muster. UML kennt diesen Ste­reo­ty­pen, aber ordnet ihn stan­dard­mä­ßig den Kom­po­nen­ten­dia­gram­men zu. Die häufig genutzte Notation führt die Spe­zi­fi­ka­ti­on nicht auf. Sie mo­del­lie­ren die Entität als Kreis, der auf einer kurzen Linie ruht.
  • Die Grenze (Notation: <<Boundary>>): Die Grenze ist ein Stereotyp für eine Klasse oder ein Objekt. Sie ent­spricht in etwa dem Element View im MVC-Muster. Die Grenze mo­del­liert die Grenze Ihres Systems, z. B. eine Be­nut­zer­ober­flä­che. Üb­li­cher­wei­se stellt man sie als Kreis dar, von dem links eine Linie abgeht, die auf eine vertikale Linie trifft.
  • Das Kon­troll­ele­ment (Notation: <<Control>>): Das Kon­troll­ele­ment re­prä­sen­tiert dieselben Elemente wie der Con­trol­ler unter MVC. Klassen oder Objekte mit diesem Stereotyp mo­del­lie­ren Elemente, die das Sys­tem­ver­hal­ten oder Kon­troll­flüs­se abstimmen. Im UML-Standard übernimmt der Stereotyp <<Focus>> ähnliche Aufgaben. Eine Control-Instanz zeichnen Sie als Kreis mit einer offenen Pfeil­spit­ze auf der Linie.

Diese drei Ste­reo­ty­pen lassen sich auch als einfache Klasse zeichnen. Im Rechteck notieren Sie den Namen des je­wei­li­gen Ste­reo­typs. Haupt­säch­lich wenden Mo­del­lie­rer diese Formen in Se­quenz­dia­gram­men an. Wenn Sie mehr über Entity-Boundary-Control-Diagramme wissen wollen, lesen Sie unseren Artikel über Se­quenz­dia­gram­me mit UML.

Für Klas­sen­dia­gram­me eignen sich diese stan­dar­di­sier­ten Ste­reo­ty­pen:

  • Fokus (<<Focus>>)
  • Helfer (<<Auxiliary>>)
  • Typ (<<Type>>)
  • An­wen­dungs­klas­se (<<Im­ple­men­ta­tion­Class>>)
  • Me­ta­klas­se (<<Metaclass>>)
  • Utility (<<Utility>>)

Fokus

Die Fo­kus­klas­se definiert die grund­le­gen­de Ge­schäfts­lo­gik oder den Kon­troll­fluss von Hel­fer­klas­sen. Diese un­ter­stüt­zen die Fo­kus­klas­se, die eine oder mehrere Helfer anbindet. Sie definiert un­ter­stüt­zen­de Klassen implizit, indem Sie mit ihnen eine Ab­hän­gig­keits­be­zie­hung eingeht (s. u. „Die ge­rich­te­te Beziehung“). Nutzt sie Hel­fer­klas­sen, definiert sie diese explizit. Der UML-Standard empfiehlt diesen Stereotyp besonders für die Design-Phase, wenn Sie Kon­troll­flüs­se zwischen Kom­po­nen­ten dar­stel­len oder die grund­le­gen­de Ge­schäfts­lo­gik festlegen.

Fakt

Ge­schäfts­lo­gik, auch An­wen­dungs­lo­gik, be­schreibt die Logik eines Systems, die sich mit der Aus­füh­rung realer Ge­schäfts­an­for­de­run­gen befasst. Sie grenzt sich ab von der Logik, die die tech­ni­sche Aus­füh­rung vor­schreibt. In der ob­jekt­ori­en­tier­ten Pro­gram­mie­rung brachte die Ge­schäfts­lo­gik das Konzept des Ge­schäfts­ob­jekts hervor. Dieses mo­del­liert konkrete Abläufe und reale Werte in einem In­for­ma­ti­ons­sys­tem.

Helfer

Die Hel­fer­klas­se agiert meist in Kom­bi­na­ti­on mit der Fo­kus­klas­se. Sie un­ter­stützt generell Klassen mit ent­schei­den­der Bedeutung für das System. Dafür führt sie zweit­ran­gi­ge Kon­troll­flüs­se aus und definiert sub­si­diä­re Logik. Un­ter­stützt die Hel­fer­klas­se eine Fo­kus­klas­se, erfolgt die De­fi­ni­ti­on explizit. Über eine Ab­hän­gig­keits­be­zie­hung de­fi­nie­ren Sie die un­ter­stütz­te Klasse implizit.

Typ

Die Ty­pen­klas­se legt ein Gebiet für Ge­schäfts­ob­jek­te fest. Außerdem spe­zi­fi­ziert sie die Ope­ra­to­ren dieser Objekte. Der Typ-Stereotyp kann Attribute und As­so­zia­tio­nen aufweisen. Jedoch be­schreibt er damit nicht die physische Aus­füh­rung des Objekts.

An­wen­dungs­klas­se

Einige Pro­gram­mier­spra­chen (z. B. Java oder C++) erlauben lediglich eine Klasse für jede Instanz. Mit UML können Sie eine Instanz jedoch mehreren Klassen zuordnen. Die An­wen­dungs­klas­se schlägt eine Brücke zwischen diesen zwei Welten. Dieser Stereotyp be­schränkt die UML-Klasse. Er bestimmt, dass eine Instanz unter ihm nur eine Klasse rea­li­sie­ren darf. Dafür kann die An­wen­dungs­klas­se mehrere un­ter­schied­li­che Typen umsetzen. Um einen ihr zu­ge­ord­ne­ten Klas­si­fi­zie­rer er­folg­reich aus­zu­füh­ren, muss sie zwei Be­din­gun­gen erfüllen: Sie muss alle Ope­ra­tio­nen des Klas­si­fi­zie­rers be­reit­stel­len und diese müssen das Verhalten aufweisen, das für den Klas­si­fi­zie­rer definiert wurde. Physische Attribute und As­so­zia­tio­nen müssen aber nicht über­ein­stim­men.

Me­ta­klas­se

Da sich die Formen von Klasse und Me­ta­klas­se nicht un­ter­schei­den, gibt das Label Metaclass an, dass es sich um den Stereotyp Me­ta­klas­se handelt. Die Instanzen dieser Klasse sind selbst Klassen. Mit diesem Stereotyp arbeiten Sie also auf einem höheren Abs­trak­ti­ons­le­vel.

Utility

Die Utility-Klasse besitzt keine Instanzen. Sie kenn­zeich­net lediglich eine Sammlung benannter Attribute und Ope­ra­tio­nen. Diese sind immer statisch. Statische Attribute ändern sich nicht, wenn sie auf­ge­ru­fen werden. Statische Ope­ra­tio­nen wendet man bei Entitäten oder En­ti­täts­ty­pen an. Nutzen Sie die Utility-Klasse, müssen Sie von Anfang an die ent­spre­chen­den Werte und Ope­ra­tio­nen angeben, da diese sich nicht mehr ändern. Un­ter­strei­chung kenn­zeich­net diese Elemente.

Hinweis

UML spe­zi­fi­ziert weitere Standard-Ste­reo­ty­pen für andere Dia­gramm­ty­pen. Deren An­wen­dungs­be­rei­che und Notation entnehmen Sie der UML-Spe­zi­fi­ka­ti­on 2.5.1, Kapitel 22: Standard Profile, Tabelle 22.1, Seite 680.

Schnitt­stel­len

Schnitt­stel­len sind Klas­si­fi­zie­rer. In ihrer Notation ähneln sie den Klassen. Im Gegensatz zur Klasse sind sie aber De­kla­ra­tio­nen, d. h. sie de­kla­rie­ren eine Menge logisch zu­sam­men­hän­gen­der, öf­fent­li­cher Funk­tio­nen und Ver­pflich­tun­gen. Dafür nutzen sie einen Vertrag. Führt eine Instanz die Schnitt­stel­le aus, muss sie diesen Vertrag erfüllen. Dabei spricht man davon, dass die Instanz einen Service laut Vertrag anbietet. Als De­kla­ra­ti­on bildet die Schnitt­stel­le selber keine Instanzen.

An dieser Stelle kommt die Klasse gelegen, denn sie in­stan­ziert. Ihre Instanz setzt Schnitt­stel­len­spe­zi­fi­ka­tio­nen ein. Dafür muss sie den Vertrag der Schnitt­stel­le erfüllen. Im Gegenzug nutzt sie das Interface als öf­fent­li­che Kulisse. Zudem kann ein Klas­si­fi­zie­rer mehrere Schnitt­stel­len einsetzen. Umgekehrt dient eine Schnitt­stel­le auch mehreren Klas­si­fi­zie­rern. Im UML-Klas­sen­dia­gramm ähneln sich die No­ta­tio­nen von Schnitt­stel­le und Klasse: ein Rechteck, optional mit drei durch Linien ge­trenn­ten Bereichen.

Um zu zeigen, dass eine Klasse eine Schnitt­stel­le einsetzt, nutzt man die Notation In­ter­face­Rea­liza­ti­on (bekannt von den Ver­hal­tens­klas­si­fi­zie­rern). Diese re­prä­sen­tiert eine be­reit­ge­stell­te Schnitt­stel­le (Provided Interface) – das ist eine Schnitt­stel­le, die eine Instanz direkt ausführt. Letzteres gilt auch für über­ge­ord­ne­te Klassen wie die Kom­po­nen­te. Hat die Klasse einen öf­fent­li­chen Port, stellt dieser die Schnitt­stel­le bereit. Die In­ter­face­Rea­liza­ti­on stellen Sie mit einem Kreis dar, der über eine Linie mit dem Klas­si­fi­zie­rer verbunden ist.

Es gibt auch benötigte Schnitt­stel­len (Required In­ter­faces). Sie vi­sua­li­sie­ren eine Ab­hän­gig­keits­be­zie­hung (s. u. „Be­zie­hun­gen“). Dabei benötigt ein Element ein anderes Element, um den vollen Umfang seiner eigenen Funk­tio­nen aus­zu­füh­ren. In diesem Fall benötigt ein Klas­si­fi­zie­rer (oder eine seiner Instanzen) eine Schnitt­stel­le. Die In­ter­face­U­sa­ge (Schnitt­stel­len­nut­zung) spe­zi­fi­ziert die Ansprüche an die Schnitt­stel­le. Dafür verbindet eine durch­ge­zo­ge­ne Linie den Klas­si­fi­zie­rer mit einem offenen Halbkreis. Dieser sym­bo­li­siert die Schnitt­stel­le. Notieren Sie den Namen der Schnitt­stel­le bei beiden Re­prä­sen­tan­ten unter dem (Halb-)Kreis.

Vererbt eine Klasse eine Schnitt­stel­le an eine un­ter­ge­ord­ne­te Klasse, mo­del­lie­ren Sie die Schnitt­stel­len­an­bin­dung an die un­ter­ge­ord­ne­te Klasse oder Instanz. Zeigen Sie die hier­ar­chi­sche Beziehung mit dem Zir­kum­flex (^), z. B. als ^Schnitt­stel­le 1.

Nutzen Sie die recht­ecki­ge Schnitt­stel­len-Notation, zeichnen Sie zwischen den zwei Knoten eine Kante. Im Klas­sen­dia­gramm mo­del­lie­ren Kanten die Be­zie­hun­gen zwischen Klassen, Instanzen oder Kom­po­nen­ten. UML schreibt ver­schie­de­ne Linien und Pfeile für un­ter­schied­li­che Funk­tio­nen und Be­zie­hun­gen vor. In diesem Fall verbinden Sie eine Klasse mit der be­nö­tig­ten Schnitt­stel­le über einen ge­stri­chel­ten Pfeil mit offener Spitze. Geben Sie dem Pfeil das Label <<use>>. Eine be­reit­ge­stell­te Schnitt­stel­le verbinden Sie mit einer Klasse über einen ge­stri­chel­ten Pfeil mit ge­schlos­se­ner, nicht aus­ge­füll­ter Spitze. Der Pfeil zeigt immer in Richtung der Schnitt­stel­le.

Da­ten­ty­pen

Da­ten­ty­pen vereinen eine Menge von Objekten mit deren Ope­ra­tio­nen. Dabei verwenden sie konkrete Wer­te­be­rei­che und fügen diese mit ihren spe­zi­el­len Ope­ra­tio­nen zusammen. Objekte können mehrere Typen haben. Deren Zah­len­wer­te reichen von pri­mi­ti­ven Typen bis zu längeren Auf­zäh­lun­gen.

Da­ten­ty­pen sind Klas­si­fi­zie­rer. Ihre Instanzen iden­ti­fi­zie­ren Sie nur anhand ihres Wertes. Mit Da­ten­ty­pen vi­sua­li­sie­ren Sie Werttypen, primitive Typen und struk­tu­rier­te Typen im UML-Klas­sen­dia­gramm. Kopieren Sie eine Datentyp-Instanz oder mo­del­lie­ren zwei Instanzen desselben Datentyps mit demselben Wert, gelten diese als gleiche Instanzen.

Besitzt der Datentyp Attribute, ordnet ihn UML als struk­tu­rier­ten Datentyp ein. Dessen Instanzen gelten nur als gleich, wenn ihre Struktur und die Werte ihrer Attribute gleich sind.

Primitive Typen weisen keine un­ter­ge­ord­ne­te Struktur auf, sondern stehen für atomare Da­ten­wer­te. Sie finden im Klas­sen­dia­gramm auch bei Ein­schrän­kun­gen Anwendung. Meist weisen diese Typen eine komplexe Semantik außerhalb der UML-Spe­zi­fi­ka­ti­on auf. In UML besitzen sie jedoch keine Identität, weshalb sie bei gleichem Wert nicht un­ter­scheid­bar sind. Das sind einige primitive Typen in UML:

  • Boolean (boolesche Variablen)
  • Integer (ganze Zahl)
  • Un­li­mi­t­ed­Na­tu­ral (un­be­grenz­te, na­tür­li­che Zahl)
  • Real (reale Zahlen)
  • String (Zei­chen­ket­te)

Sie notieren primitive Typen mit dem Label <<primitive>> über dem Namen des je­wei­li­gen Da­ten­ty­pen.

Die Enu­me­ra­ti­on (Auf­zäh­lung) ist ein Datentyp. Sie stellen den Wert der Auf­zäh­lung als so­ge­nann­tes Auf­zäh­lungs­buch­sta­ben­sym­bol dar. Wie im Bild oben zu sehen, handelt es sich dabei einfach um einen Namen, der sym­bo­lisch für einen be­stimm­ten Wert steht. Diesen wählen Sie selbst. In der Auf­zäh­lung „Ro­sen­ar­ten“ steht bei­spiels­wie­se der Name „Teerosen“ für die Anzahl Teerosen, die ein Blu­men­la­den im Sortiment hat. Im Klas­sen­dia­gramm zeichnen Sie diesen Klas­si­fi­zie­rer mit dem Symbol für die Klasse, einem Rechteck. Der Name sowie das Label <<enu­me­ra­ti­on>> steht im Kopf. Sie trennen den Kopf­be­reich vom Körper durch ho­ri­zon­ta­le Linien in Ab­tei­lun­gen.

Wie bei anderen Klassen re­ser­viert die Auf­zäh­lung die oberen Ab­tei­lun­gen für Attribute und Ope­ra­tio­nen. Blieben diese leer, lassen Sie beide Ab­tei­lun­gen aus dem Diagramm weg. Im untersten Teil geben Sie Ihre Auf­zäh­lungs­buch­sta­ben­sym­bo­le ein. Bei­spiels­wei­se besteht die Auf­zäh­lung von Ro­sen­ar­ten in einem Blu­men­ge­schäft aus dem Kopf mit dem Titel „Ro­sen­ar­ten“ und dem Körper mit einer Liste: Teerosen, Noisette-Rosen, Gallica-Rosen, Bourbon-Rosen, Zimtrosen.

Be­zie­hun­gen

Klas­sen­dia­gram­me stellen Be­zie­hun­gen zwischen Sys­tem­ele­men­ten dar. So soll der Be­trach­ter sehen, welche Kom­po­nen­ten das System benötigt und wie sie sich ge­gen­sei­tig be­ein­flus­sen. Das UML-Element Beziehung ist eine abstrakte Klasse. Es steht für die Idee einer Beziehung zwischen Sys­tem­kom­po­nen­ten. Somit besitzt dieses Element keine ge­son­der­te Notation. Seine Aus­prä­gun­gen weisen jedoch spe­zi­fi­sche Details auf, die sie un­ter­schei­den.

Be­zie­hun­gen werden in UML als Kanten zwischen Knoten ver­stan­den. Somit mo­del­lie­ren Sie Be­zie­hun­gen generell mit einer Linie bzw. mit Ab­wand­lun­gen davon – wie dem Pfeil.

Die UML-De­fi­ni­ti­on zu Be­zie­hungs-Sub­klas­sen und Instanzen hat sich von UML 1 zu UML 2 teilweise drastisch geändert. Ur­sprüng­lich gab es bei­spiels­wei­se se­man­ti­sche, struk­tu­rel­le und ge­rich­te­te Be­zie­hun­gen. Drei konkrete Be­zie­hun­gen (As­so­zia­ti­on, Ein­schrän­kung und Ab­hän­gig­keit) ordnete UML den se­man­ti­schen Be­zie­hun­gen zu. Unter UML 2 sind Ein­schrän­kun­gen in­zwi­schen packbare Elemente, As­so­zia­tio­nen de­fi­nie­ren einige Quellen als struk­tu­rel­le und se­man­ti­sche Beziehung. Die Ab­hän­gig­keit läuft nun unter ge­rich­te­ten Be­zie­hun­gen.

Es bleibt zu ab­zu­war­ten, wie sich der Standard in künftigen Versionen ändert. Nach­fol­gend erläutern wir Klas­sen­dia­gram­me weiterhin nach UML 2.5. Demnach hat die Me­ta­klas­se Beziehung zwei Sub­klas­sen: die ge­rich­te­te Beziehung und die As­so­zia­ti­on.

Die As­so­zia­ti­on

Die As­so­zia­ti­on ist eine Beziehung, die Tupel verbindet. In der In­for­ma­tik sind Tupel geordnete Wer­te­samm­lun­gen. Im Gegensatz zur Menge spielen dabei logische Ver­bin­dung und Rei­hen­fol­ge eine Rolle. Somit ist es nicht falsch, der As­so­zia­ti­on neben der of­fi­zi­el­len Be­zeich­nung als se­man­ti­sche Beziehung auch eine struk­tu­rel­le Kom­po­nen­te zu­zu­wei­sen. Die As­so­zia­ti­on ist eine Ver­bin­dung zwischen Klas­si­fi­zie­rern. Die Elemente in dieser Beziehung haben eine logische oder physische Nähe. Je nach Anzahl der Mit­glie­der nennt man die As­so­zia­ti­on binär (zwei Instanzen), ternär (drei Instanzen) oder n-är (ab vier Instanzen).

As­so­zia­ti­ons­en­den verbinden im UML-Klas­sen­dia­gramm As­so­zia­tio­nen mit Instanzen. Das As­so­zia­ti­ons­en­de hat einen Endnamen. Dieser Name drückt die Rolle der Instanz in der je­wei­li­gen Beziehung aus. Nehmen wir an, ein Student dreht mehrere Versionen eines Kurzfilms für ein Film­se­mi­nar. Dann wäre die Rolle des Film­stu­den­ten zum Film „Schöpfer“. Die Rolle des Films wäre „Se­mi­nar­ar­beit“. Den Namen schreiben Sie unter die Ver­bin­dungs­li­nie, jeweils an das In­stanz­sym­bol, das es be­schreibt. Das Ende gehört entweder der As­so­zia­ti­on selbst oder dem End-Klas­si­fi­zie­rer. Bei mehr als zwei Enden gehört die Rolle zur As­so­zia­ti­on.

Der Pfeil neben dem As­so­zia­ti­ons­na­men im oberen Klas­sen­dia­gramm zeigt die Richtung der Beziehung an. Im unteren Diagramm si­gna­li­siert der Punkt an der Instanz „Film“, dass das As­so­zia­ti­ons­en­de „Se­mi­nar­ar­beit“ der Instanz „Film­stu­dent“ gehört. Da das As­so­zia­ti­ons­en­de „Schöpfer“ keine solche Mar­kie­rung aufweist, gehört Sie der As­so­zia­ti­on selbst. Die Mul­ti­pli­zi­tät „1“ zeigt an, dass genau eine Instanz „Film­stu­dent“ existiert. Die Instanz „Film“ hat min­des­tens drei Aus­bil­dun­gen.

Die Na­vi­gier­bar­keit ist eine End­ei­gen­schaft (End Property). Sie zeigt an, ob eine Instanz an diesem Ende der As­so­zia­ti­on vom anderen Ende der As­so­zia­ti­on er­reich­bar ist. Ist Instanz B er­reich­bar für Instanz A, zeichnen Sie auf die As­so­zia­ti­ons­kan­te eine offene Pfeil­spit­ze in Richtung Instanz B direkt an das In­stanz­sym­bol B. Ist Instanz D nicht er­reich­bar für Instanz C, zeichnen Sie ein X auf die Linie bei Instanz D. Wollen Sie keine Na­vi­gier­bar­keit angeben, zeichnen Sie keine ge­son­der­te Notation.

Es gibt zwei Varianten der As­so­zia­ti­on: die Ver­bin­dung (Link) und die Ag­gre­ga­ti­on.

  • Die Ver­bin­dung (Link) ist eine Instanz der As­so­zia­ti­on. Sie verfügt über min­des­tens zwei Enden, die jeweils eine Mul­ti­pli­zi­tät haben. Dieser Wert muss eine Instanz des Datentyps der Enden sein. In unserem Bei­spiel­bild oben filmt ein Film­stu­dent drei Filme während der Stu­di­en­zeit. Der Wert für die Instanz „Student“ ist „1“. Der Wert für die Instanz „Film“ ist „3“. Die Ver­bin­dung mo­del­lie­ren Sie als durch­ge­zo­ge­ne Linien zwischen Be­zie­hungs­teil­neh­mern. Im Gegensatz zur As­so­zia­ti­on verbindet der Link Instanzen und keine Klas­si­fi­zie­rer.
     
  • Die Ag­gre­ga­ti­on ist eine binäre As­so­zia­ti­on. Sie hat also immer zwei Teil­neh­mer. Im Gegensatz zum Link stellt Sie keine Be­zie­hun­gen auf gleicher Ebene her. Statt­des­sen zeigt sie Be­zie­hun­gen zwischen einem Teil und dem Ganzen. Die Ag­gre­ga­ti­on stellen Sie durch eine Ei­gen­schaft am As­so­zia­ti­ons­en­de dar. Sie mo­del­lie­ren einen Rhombus an der Instanz, die für das Ganze steht.

Die Unterart Kom­po­si­ti­on (Composite Ag­gre­ga­ti­on) be­schreibt die Beziehung zwischen einer Zu­sam­men­set­zung von Teilen und einem einzelnen Teil davon. Löscht das System das Ganze (die Zu­sam­men­set­zung), zerstört es auch den einzelnen Teil. Ist z. B. ein Baum das Ganze, dann ist ein Blatt ein Teil davon. Fällt der Baum einem Waldbrand zum Opfer, zerstört der Brand auch die Blätter. Wenn Sie bei­spiels­wei­se ein Klas­sen­dia­gramm erstellen und diese Beziehung dar­stel­len, zeichnen Sie eine durch­ge­zo­ge­ne Linie zwischen den Instanzen. Mo­del­lie­ren Sie einen schwarz gefüllten Rhombus auf die Seite der Zu­sam­men­set­zung (in diesem Beispiel: die Instanz „Baum“). Diese Seite nennt man auch Ag­gre­ga­ti­ons­en­de.

Die zweite Unterart der Ag­gre­ga­ti­on ist die geteilte Ag­gre­ga­ti­on (abgekürzt auch einfach Ag­gre­ga­ti­on). Diese asym­me­tri­sche Beziehung besteht zwischen einer Ei­gen­schaft (Property) und einer Instanz, die für eine Menge von Instanzen steht. Die Ver­bin­dung sollte direkt erfolgen. An­dern­falls könnte eine Kom­po­si­ti­ons­in­stanz als Teil ihrer selbst in­ter­pre­tiert werden. Das kann passieren, wenn Sie die Ab­hän­gig­keits­be­zie­hung zyklisch mo­del­lie­ren. Die geteilte Ei­gen­schaft kann zu mehreren Kom­po­si­tio­nen gehören. Gleich­zei­tig kann ihre Instanz un­ab­hän­gig von der Kom­po­si­ti­on exis­tie­ren. Löscht das System in diesem Fall eine Kom­po­si­ti­on (oder alle), kann die Teil­in­stanz weiter bestehen. Deshalb gilt diese Beziehung als schwach im Vergleich zur Kom­po­si­ti­on.

Außerdem bietet die As­so­zia­ti­on noch eine Be­son­der­heit: die As­so­zia­ti­ons­klas­se. Sie ist gleich­zei­tig Klasse und Beziehung. Somit können Sie der As­so­zia­ti­ons­klas­se im Klas­sen­dia­gramm Attribute zuweisen.

Die ge­rich­te­te Beziehung

Die ge­rich­te­te Beziehung ist eine abstrakte Klasse. Sie be­schreibt Be­zie­hun­gen zwischen einer Quelle und einem Ziel. Beide Enden der Beziehung können mehrere Elemente aufweisen. Wie die As­so­zia­ti­on hat die ge­rich­te­te Beziehung ebenfalls keine fest­ge­leg­te Notation. Ihre Un­ter­klas­sen bilden spe­zi­fi­sche Formen aus. Diese basieren auf einer Linie von der Quelle zum Ziel. Folgende Instanzen prägen eine ge­rich­te­te Beziehung aus:

  • Ver­all­ge­mei­ne­rung (Ge­ne­ra­liza­ti­on)
  • Ab­hän­gig­keit (De­pen­den­cy)
  • Vor­la­gen­Bin­dung (Template Binding)
  • Ein­be­zie­hen (Include): gehört zur Notation für An­wen­dungs­fall­dia­gram­me
  • Erweitern (Extend): gehört zur Notation für An­wen­dungs­fall­dia­gram­me

Die Ver­all­ge­mei­ne­rung ist eine binäre Beziehung zwischen Klassen. Sie richtet sich von einer Subklasse zu einer Su­per­klas­se – also von einer be­stimm­ten zu einer all­ge­mei­ne­ren Klasse. Die bestimmte Klasse (z. B. Dahlie) besitzt die Ver­all­ge­mei­ne­rung. Ein Pfeil mit ge­schlos­se­ner, aber nicht gefüllter Pfeil­spit­ze zeigt von dieser Quelle zum Ziel. Das Ziel ist die all­ge­mei­ne Klasse (z. B. Korb­blüt­ler).

Die Subklasse spe­zi­fi­ziert die all­ge­mei­ne Klasse. Das heißt auch, dass die Subklasse einige Ei­gen­schaf­ten – in­halt­lich wie struk­tu­rell – mit der Su­per­klas­se teilt, meist die grund­le­gen­den Elemente. Dieser Umstand nennt sich Vererbung. So teilt die Klasse Dahlie im Beispiel den körb­chen­för­mi­gen Blü­ten­stand mit der Su­per­klas­se Korb­blüt­ler. Ein spe­zi­fi­sches Merkmal des Genus Dahlie sind seine acht Chro­mo­so­men­paa­re – andere Pflanzen haben meist nur zwei Chro­mo­so­men­paa­re. Die un­ter­schied­li­chen Dahlien-Arten bilden daher viel­fäl­ti­ge­re Er­schei­nungs­merk­ma­le aus.

Fakt

Um­gangs­sprach­lich werden Ver­all­ge­mei­ne­run­gen auch als „ist ein …“-Be­zie­hun­gen be­zeich­net. Denn man kann sagen: „Eine Dahlie ist ein Korb­blüt­ler.“

Implizit erlaubt UML die multiple Vererbung. Damit mo­del­lie­ren Sie mehrere Sub­klas­sen, die sowohl ge­mein­sa­me als auch un­ter­schied­li­che Su­per­klas­sen aufweisen. Al­ter­na­tiv exis­tie­ren mehrere Ebenen der Ver­all­ge­mei­ne­rung. Diese Be­zie­hun­gen können Sie entweder mit der Pfeil-Notation dar­stel­len oder Sie ver­schach­teln die Sub­klas­sen in ihren Su­per­klas­sen. Dafür mo­del­lie­ren Sie alle zu­ge­hö­ri­gen Sub­klas­sen im Körper der Su­per­klas­se.

Das Ver­all­ge­mei­ne­rungs-Set (Ge­ne­ra­liza­ti­on Set) hilft Ihnen, Übersicht im Klas­sen­dia­gramm zu wahren. Das Set ist ein packbares Element. Pakete in UML sind Behälter für benannte Elemente, die se­man­ti­sche Ähn­lich­kei­ten haben und sich ggf. gemeinsam verändern. Ein Paket ist ein Na­mens­raum und keine Klasse. Das Ver­all­ge­mei­ne­rungs-Set können Sie aber mit einem Klas­si­fi­zie­rer as­so­zi­ie­ren. Dieser nennt sich Powertyp.

Sie mo­del­lie­ren den Powertyp als String an der Ver­all­ge­mei­ne­rungs­kan­te in dieser Form: {[is­Co­ve­ring Property] , [is­Dis­joint Property]} : [Name des Powertyps]. Die Ei­gen­schaft is­Co­ve­ring be­schreibt, ob das Set voll­stän­dig ist. Die Werte sind entweder complete (voll­stän­dig) oder in­com­ple­te (un­voll­stän­dig). Die Ei­gen­schaft is­Dis­joint sagt aus, ob die Klas­si­fi­zie­rer ge­mein­sa­me Instanzen teilen. Die Werte sind entweder disjoint (keine Über­lap­pung) oder over­lap­ping (Über­lap­pung besteht).

Hinweis

Die Stan­dar­di­sie­rung UML 2.5 gibt wenig Auskunft zur Vererbung. Sie können sich jedoch nach vor­he­ri­gen Versionen richten. UML 2 erklärt allgemein, dass spe­zia­li­sier­te Klassen die Merkmale und Ein­schrän­kun­gen ihrer Su­per­klas­sen über­neh­men. UML 1.4 spe­zia­li­sier­te, dass de­kla­rier­te Attribute in einer Subklasse vererbte Attribute über­schrei­ben.

Die Ab­hän­gig­keit (De­pen­den­cy) ist eine Beziehung zwischen „Anbieter“ und „Klient“ (supplier-client-re­la­ti­onship). Diese ge­rich­te­te Beziehung be­schreibt, dass ein Element abhängig von einem anderen Element ist. Es kann sich auch um eine Menge an Elementen handeln. Der Klient benötigt ein anderes Element für die nähere Spe­zi­fi­ka­ti­on oder um seine Aufgabe aus­zu­füh­ren. Ohne den Anbieter fehlt dem Klienten ein struk­tu­rel­ler oder se­man­ti­scher Be­stand­teil. Deshalb wirken sich Ver­än­de­run­gen am Anbieter mög­li­cher­wei­se auf den Klienten aus. Laut UML 2.5 be­ein­flusst die Semantik immer das genannte Element, aber nicht dessen Instanzen. Ab­hän­gig­kei­ten spielen nicht nur im UML-Klas­sen­dia­gramm eine Rolle, sondern auch in anderen Struk­tur­dia­gram­men wie dem Kom­po­nen­ten­dia­gramm oder dem Be­reit­stel­lungs­dia­gramm.

Die Ab­hän­gig­keit hat drei Un­ter­ka­te­go­rien:

  • Abs­trak­ti­on (Abs­trac­tion)
  • Be­reit­stel­lung (De­ploy­ment)
  • Nutzung (Usage)

Die Abs­trak­ti­on verbindet Elemente auf ver­schie­de­nen Ebenen. Al­ter­na­tiv zeigt sie ver­schie­de­ne Blick­win­kel auf. Die benannten Elemente in dieser Ab­hän­gig­keits­be­zie­hung stehen für dasselbe Konzept. Dabei ist das spe­zi­fi­sche­re Element laut UML-Standard der Klient, der abhängig vom Anbieter, dem abs­trak­te­ren Element, ist. Somit müssten das Pfeilende an der Subklasse und die Spitze an der Su­per­klas­se liegen. UML erlaubt aber auch eine um­ge­kehr­te Notation. Ist es Ihrer Meinung nach sinn­vol­ler, wenn das abstrakte Element abhängig von seiner Subklasse ist, zeichnen Sie die Pfeil­spit­ze an das spe­zi­fi­sche­re Element.

Die Abs­trak­ti­on hat zwei Un­ter­klas­sen: die Rea­li­sa­ti­on (Rea­liza­ti­on) und die Aus­prä­gung (Ma­ni­fes­ta­ti­on).

Die Rea­li­sa­ti­on haben wir bereits in Bezug auf Schnitt­stel­len erwähnt. Die Schnitt­stel­len­rea­li­sa­ti­on (In­ter­face­Rea­liza­ti­on) ist eine Spe­zi­fi­zie­rung der Rea­li­sa­ti­on. Sie be­schreibt eine Beziehung zwischen Klas­si­fi­zie­rer und Schnitt­stel­le. Der Klas­si­fi­zie­rer nutzt die Schnitt­stel­le, um seinem Klienten einen Service an­zu­bie­ten. Die Schnitt­stel­le führt diesen Service aus. Dafür muss der Klas­si­fi­zie­rer den Vertrag erfüllen, den die Schnitt­stel­le fest­schreibt. Die Notation für be­reit­ge­stell­te und benötigte Schnitt­stel­len finden Sie im Abschnitt „Schnitt­stel­len“.

Die Ersetzung (Sub­sti­tu­ti­on) ist eine weitere Beziehung, die die Rea­li­sa­ti­on spe­zi­fi­ziert. Sie besteht zwischen einem Ersatz-Klas­si­fi­zie­rer und einem Vertrags-Klas­si­fi­zie­rer. Der Ersatz-Klas­si­fi­zie­rer erfüllt den Vertrag des anderen Klas­si­fi­zie­rers. Während der Laufzeit ersetzen Instanzen des Ersatz-Klas­si­fi­zie­rers po­ten­zi­ell Instanzen des Vertrags-Klas­si­fi­zie­rers. Im Gegensatz zur Spe­zia­li­sie­rung besteht keine struk­tu­rel­le Ähn­lich­keit zwischen Elementen der Sub­sti­tu­ti­on. Sie notieren die Sub­sti­tu­ti­on als Ab­hän­gig­keits­kan­te (ge­stri­chel­ter Pfeil mit offener Spitze) im Klas­sen­dia­gramm und fügen das Schlüs­sel­wort <<sub­sti­tu­te>> an die Kante an.

Die Aus­prä­gung be­schreibt eine Beziehung zwischen einem Artefakt und einem oder mehreren Mo­dell­ele­men­ten. UML definiert Artefakte als Klas­si­fi­zie­rer. Sie sym­bo­li­sie­ren konkrete, physische Instanzen wie Ar­chiv­ord­ner. Die Aus­prä­gung steht dafür, dass ein Artefakt ein ver­bun­de­nes Element direkt ausführt. Umgekehrt kann es sym­bo­li­sie­ren, dass Elemente an der Ent­ste­hung des Artefakts beteiligt sind. Die Aus­prä­gung ist ein Element des Be­reit­stel­lungs­dia­gramms und wird hier nur der Voll­stän­dig­keit halber erwähnt. Sie verlangen dieselbe Notation wie Er­set­zun­gen. Das Schlüs­sel­wort ist <<manifest>>.

Die Abs­trak­ti­on definiert zudem einige Ste­reo­ty­pen. Ste­reo­ty­pen gehören zu den UML-Profilen. Soll eine be­stehen­de Me­ta­klas­se für ein Projekt erweitert werden, definiert man dafür ein Profil. Die Stereotyp-Klasse nutzt man immer zusammen mit der Me­ta­klas­se, da ein Profil nur Be­stehen­des ändert oder eine Ter­mi­no­lo­gie hinzufügt. Seit UML 2.4.1 notiert UML Ste­reo­ty­pen mit Groß­buch­sta­ben am Anfang. Die Standard-Ste­reo­ty­pen für eine Abs­trak­ti­on sind:

  • Ableiten (<<Derive>>): Ein Element leitet sich von einem anderen Element ab. Meist sind sie vom gleichen Typ.
  • Ver­fei­nern (<<Refine>>): Ein Element gibt de­tail­lier­te­re In­for­ma­tio­nen für eine Klasse, die auch im anderen Element existiert. Die Elemente befinden sich auf ver­schie­de­nen Abs­trak­ti­ons­ebe­nen. Bei­spiels­wei­se ver­fei­nert ein Modell auf aus­füh­ren­der Ebene seine Klasse „Mit­ar­bei­ter“ im Ver­hält­nis zur Klasse „Mit­ar­bei­ter“ auf der Design-Ebene.
  • Verfolgen (<<Trace>>): Un­ter­schied­li­che Modelle drücken ver­schie­de­ne Aspekte eines Systems aus. Mit Mapping bzw. Tracing verfolgen Sie Elemente, die in ver­schie­de­nen Modellen dasselbe Konzept dar­stel­len. Mit dem Trace können Sie Än­de­run­gen an den Elementen sowie Vorgaben nach­voll­zie­hen.
Hinweis

Mithilfe dieser Abs­trak­ti­ons­ste­reo­ty­pen mappen Sie die Beziehung zwischen Klient und Anbieter. Dieser Prozess kann beid­sei­tig oder einseitig und formal oder informal statt­fin­den. Klient und Anbieter befinden sich in un­ter­schied­li­chen Dia­gram­men, z. B. in einem Klas­sen­dia­gramm und in einem An­wen­dungs­fall­dia­gramm.

Die Be­reit­stel­lung zeigt die Beziehung zwischen einem Artefakt und seinem Ein­satz­ziel. Im UML-Diagramm deutet die Be­reit­stel­lungs­kan­te von einem oder mehreren Ar­te­fak­ten auf das Ein­satz­ziel (De­ploy­ment Target). Das Schlüs­sel­wort für die Kante ist <<deploy>>. Diese Ab­hän­gig­keit können Sie auch auf dem Level von Instanzen anwenden. Al­ter­na­tiv mo­del­lie­ren Sie das Artefakt in den Körper des Ein­satz­ziels. Dafür zeichnen Sie entweder das Artefakt als Symbol oder Sie listen die be­reit­ge­stell­ten Artefakte auf. Diese Ab­hän­gig­keit ist ein Teil der Notation für Be­reit­stel­lungs­dia­gram­me.

Die Nutzung be­schreibt eine Beziehung, in der der Klient den Anbieter benötigt, um seine Aufgaben voll­stän­dig zu erfüllen oder um Ope­ra­tio­nen aus­zu­füh­ren. Die Nutzung setzt also die all­ge­mei­ne Ab­hän­gig­keit als Instanz um. Diese Ab­hän­gig­keit prägt einige konkrete Be­zie­hun­gen aus:

  • Nutzen (<<use>>): Ein Element nutzt ein anderes Element, jedoch sind die genauen Be­zie­hungs­teil­neh­mer und der genaue Nutzen nicht de­tail­liert fest­ge­legt.
  • Er­schaf­fen (<<create>>): Ein Klient-Klas­si­fi­zie­rer oder eines seiner Struktur- bzw. Ver­hal­tens­ele­men­te erschafft eine oder mehrere Instanzen des Anbieter-Klas­si­fi­zie­rers.
  • Aufrufen (<<call>>): Eine Operation ruft eine andere Operation auf. Das Ziel kann jegliche Operation im Umfeld der Quell-Operation sein, auch über­ge­ord­ne­te Klas­si­fi­zie­rer.
  • Senden (<<send>>): Eine Operation ist die Quelle, also der Klient. Ihr Ziel ist ein Signal. Die Ab­hän­gig­keit mo­del­liert also, dass die Operation das Ziel­si­gnal sendet.
  • Benötigte Schnitt­stel­le (Required Interface ­­­-----C): Die benötigte Schnitt­stel­le existiert, im Gegensatz zur be­reit­ge­stell­ten Schnitt­stel­le, nicht im Klas­si­fi­zie­rer. Sie bestimmt die Dienste, die ein Klas­si­fi­zie­rer benötigt, um seine Funk­tio­nen für seinen Klienten aus­zu­füh­ren. Die Ab­hän­gig­keit besteht zwischen Klas­si­fi­zie­rer und Schnitt­stel­le. Mehr dazu lesen Sie im Abschnitt „Schnitt­stel­len“.

Vorlagen-Bindung (Template Binding) ist die letzte ge­rich­te­te Beziehung, die im Klas­sen­dia­gramm Anwendung findet. Wenn Sie ein Klas­sen­dia­gramm erstellen, erweist es sich manchmal als nützlich, Vorlagen für Ihre Klassen an­zu­fer­ti­gen. Vorlagen bestehen bei Klassen aus Vorlagen-Pa­ra­me­tern. Diese Parameter gehören in die Vorlagen-Signatur. Die Signatur bestimmt die geordnete Menge an Pa­ra­me­tern innerhalb der Vorlage. Mo­del­lie­ren Sie Klassen, die keine in­di­vi­du­el­len Ei­gen­schaf­ten aufweisen müssen, arbeiten Sie ef­fi­zi­en­ter, wenn Sie Vorlagen verwenden. Soll aber eine Klasse feste Parameter erhalten, nutzen Sie die Vorlagen-Bindung. Die Beziehung besteht zwischen einem ge­bun­de­nen Element und der Vorlagen-Signatur in einer Ziel-Vorlage.

Das gebundene Element ist vor­la­gen­fä­hig, d. h. es kann zu einer Vorlage werden oder an andere Vorlagen gebunden werden. Das Element ist gebunden, weil es eine Ver­bin­dung zu einer Vorlage aufweist. Diese Ver­bin­dung be­schreibt den Aufbau des Elements, indem es formelle Vorlagen-Parameter aus der Vorlage mit wertigen Pa­ra­me­tern ersetzt.

Fazit

Das Klas­sen­dia­gramm ist eines der be­lieb­tes­ten UML-Diagramme, weil es Sys­tem­struk­tu­ren sowohl de­tail­liert als auch über­sicht­lich darstellt. Als Struk­tur­dia­gramm zeigt es das System im sta­ti­schen Zustand. So erhalten die Be­trach­ter einen Überblick über die not­wen­di­gen Elemente in einem System. Zudem stellen Sie damit Be­zie­hun­gen zwischen den Bau­stei­nen Ihrer Sys­tem­ar­chi­tek­tur dar. Von realen Objekten bis zu abs­trak­ten Klassen mit er­wei­tern­den Profilen mo­del­lie­ren Sie mit dem UML-Klas­sen­dia­gramm un­ab­hän­gig von der Pro­gram­mier­spra­che. So fördern Sie das Ver­ständ­nis zwischen Fach­be­rei­chen bei der Umsetzung eines Projekts.

Zum Hauptmenü