Archyno
UMLNotationsreferenz

UML-Klassendiagramm-Symbole

Jede Pfeilspitze, Raute und Strichlinie, die ein Klassendiagramm tragen kann, in Legendengrösse neben ihrer Bedeutung - die Seite, die man beim Prüfen einer Markierung offen hält.

11 Min. LesezeitUML 2.5.17 von 35

Die kurze Antwort

  • Das verzierte Ende einer Linie trägt die Bedeutung: das Dreieck zeigt auf die Oberklasse, die Raute sitzt am besitzenden Ganzen, der offene Pfeil zeigt auf das Benutzte.
  • Durchgezogene Linie mit hohlem Dreieck ist Generalisierung, gestrichelt ist Realisierung. Die erste erbt Struktur und Verhalten, die zweite verspricht nur die Operationen.
  • Eine Multiplizität beschreibt die Klasse, an der sie steht: 0..* neben Order heißt viele Bestellungen, nicht viele Kunden.
  • An den Kästen: kursiver Name heißt abstrakt, Guillemets stehen für ein Schlüsselwort oder einen Stereotyp, ein führender Schrägstrich für abgeleitet und geschweifte Klammern für eine Bedingung.

01Die sechs Beziehungen#

ElementNotationWas es bedeutet
AssoziationDie beiden Klassen wissen voneinander. Der Standard, und weit häufiger die richtige Antwort als alles darunter.
GeneralisierungHohles Dreieck beim Elternteil. Das Kind ist eine Art des Elternteils und kann überall einspringen, wo das Elternteil erwartet wird.
RealisierungGestrichelt, hohles Dreieck an der Schnittstelle. Die Klasse liefert, was die Schnittstelle deklariert, ohne Zustand zu erben.
KompositionGefüllte Raute am Ganzen. Der Teil gehört genau einem Ganzen und wird mit ihm gelöscht.
AggregationHohle Raute am Ganzen. Der Teil kann geteilt werden und überlebt das Ganze. Mehr formale Bedeutung trägt sie nicht.
AbhängigkeitGestrichelter, offener Pfeil. Eine Klasse benutzt eine andere, ohne eine Referenz auf sie zu halten - ein Parameter, ein Rückgabetyp, ein statischer Aufruf.
Ein UML-Klassendiagramm, das jede Beziehungsart auf einmal zeigt. Order generalisiert von AbstractOrder, realisiert die Schnittstelle Printable, besteht aus OrderLine, aggregiert Tag, ist mit Customer assoziiert und hängt von einem PriceService ab.
Jede Beziehungsart, die ein Klassendiagramm tragen kann, auf einem Bild, damit sich die Linien direkt vergleichen lassen.

Die Regel, die das merkbar macht: das verzierte Ende ist das Ende, auf das es ankommt - das Dreieck zeigt auf den allgemeineren Klassifizierer, die Raute sitzt am besitzenden Ganzen, und der offene Pfeil zeigt auf das Benutzte. Wer sich merkt, welches Ende die Markierung trägt, kann die Bedeutung meist rekonstruieren.

02Die Kästen selbst#

Die Hälfte der Markierungen auf einem Klassendiagramm sitzt auf den Linien, die andere auf den Kästen - und die zweite Hälfte überspringen die meisten. Ein Rechteck mit einem Namen ist eine Klasse; alles Folgende ändert, welche Art Ding dieses Rechteck zu sein behauptet, und wer den Unterschied nicht kennt, liest eine Schnittstelle als Klasse und wundert sich, warum sie keine Attribute hat.

ElementNotationWas es bedeutet
KlasseOrderEin schlichtes Rechteck mit aufrechtem Namen. Der Standard, und die einzige hier, die gar keine Kennzeichnung braucht.
Abstrakte KlasseAbstractOrderKursiver Name. Nicht instanziierbar - sie existiert, um generalisiert zu werden. Wo Kursivschrift nicht überlebt - und am Whiteboard tut sie das nie - schreibt man {abstract} unter den Namen.
Schnittstelle«interface» PrintableEin Vertrag mit Operationen und ohne Zustand. Klassen erreichen sie über Realisierung - die gestrichelte Linie mit dem hohlen Dreieck - nie über Generalisierung.
Aufzählung«enumeration» StatusEine feste Menge von Literalen, eines pro Zeile im Abschnitt unter dem Namen: DRAFT, PLACED, SHIPPED. Keine Sichtbarkeitszeichen - Literale sind immer öffentlich.
Datentyp«dataType» MoneyEin Wert ohne Identität: zwei Instanzen mit denselben Zahlen sind dasselbe Ding. «primitive» ist dieselbe Idee für die eingebauten Typen.
Aktive Klasse‖ Scheduler ‖Doppelte senkrechte Striche an den Seiten. Das Objekt besitzt einen eigenen Kontrollfluss, statt auf einen Aufruf zu warten - ein Prozess, ein Daemon, ein Queue-Consumer.

Die Kastenformen. Alles außer der ersten ist ein Schlüsselwort oder ein Wechsel des Schriftschnitts - genau deshalb liest man sie so leicht einfach mit.

Eine Schnittstelle hat eine zweite, kleinere Notation, die keinen Kasten kostet: einen Lolli - einen Kreis an einem Stiel - am anbietenden Klassifizierer und eine passende Pfanne, einen offenen Halbkreis, am benötigenden. Schiebt man beide zusammen, hat man das Kugel-und-Pfanne, aus dem Komponentendiagramme gebaut sind. Es sagt genau das, was das gestrichelte Dreieck sagt, auf einem Zehntel des Platzes, und es ist die richtige Wahl, sobald ein Diagramm mehr als etwa drei Schnittstellen zeigt.

03Im Kasten: Sichtbarkeit, Typen und Multiplizität#

Ein Klassenkasten ist ein Namensband mit bis zu zwei Abschnitten darunter: Attribute, dann Operationen. Beide sind optional, und ein Kasten, der nur ein Name ist, ist völlig zulässig - auf einem Diagramm über Beziehungen meist genau das Richtige.

ElementNotationWas es bedeutet
Öffentlich+ name: StringFür alles sichtbar. Das, was die Member einer Schnittstelle immer sind.
Privat- id: UUIDNur innerhalb der Klasse sichtbar. Auf den meisten Entwurfsdiagrammen der Normalfall.
Geschützt# state: StatusFür die Klasse und ihre Untertypen sichtbar.
Paket~ cache: MapInnerhalb des besitzenden Pakets sichtbar. In der Praxis selten.
StatischunterstrichenGehört dem Klassifizierer und nicht einer Instanz.
AbstraktkursivKlasse oder Operation hat keine Implementierung. Wo Kursivschrift ein Whiteboard nicht überlebt, schreibt man oft «abstract».

Die Multiplizität steht am Ende einer Beziehung, und die Syntax ist klein: 1 genau eins, 0..1 optional, * oder 0..* beliebig viele einschließlich keiner, 1..* mindestens eins und 2..5 ein echter Bereich. Eine fehlende Multiplizität bedeutet unspezifiziert und nicht eins - deshalb ist ein leeres Ende eine Lücke und kein Standard.

Eine Operation schreibt sich + place(customer: Customer, at: Instant): Order - Sichtbarkeit, Name, Parameter mit Typen, dann nach dem Doppelpunkt der Rückgabetyp. Zwei Verzierungen tauchen oft genug auf, um sie zu kennen: ein Parameter kann eine Richtung tragen, etwa out receipt: Receipt, und ein Attribut einen Vorgabewert, etwa - status: Status = DRAFT. Beides ist nicht erforderlich, und ein Domänenmodell fährt meist ohne beides besser.

04Die Enden einer Linie: Pfeile, Rollen und Qualifizierer#

Eine Beziehung trägt an beiden Enden Bedeutung, und fast alles, was an einem Klassendiagramm im Review schiefgeht, sitzt an einem Ende und nicht in der Mitte. Die Linie sagt, dass zwei Klassen verbunden sind; die Enden sagen, wer wen erreichen kann, wie viele, in welcher Reihenfolge und unter welchem Namen.

ElementNotationWas es bedeutet
NavigierbarkeitEin offener Pfeil an einem Ende: dieses Ende ist vom anderen aus erreichbar, und über den Rückweg wird nichts behauptet. Order hält einen Customer; ob ein Kunde seine Bestellungen auflisten kann, ist eine eigene Frage.
Nicht navigierbarEin kleines Kreuz am Ende. Ausdrücklich nicht in diese Richtung erreichbar - eine viel stärkere Aussage als ein leeres Ende, und auf den ein, zwei Stellen eines Modells lohnend, an denen es eine echte Entwurfsentscheidung ist.
Rollenname+ placedByWie dieses Ende von der anderen Seite heißt. Unverzichtbar, sobald eine Klasse sich auf sich selbst bezieht - manager und reports an den beiden Enden zwischen Employee und Employee - und nützlich immer dann, wenn der Klassenname allein nicht sagt, wofür die Referenz da ist.
Multiplizität0..*Wie viele Objekte an diesem Ende auf eines am anderen kommen. Lesen Sie sie zu dem Ende hin, an dem sie steht: 1 bei Customer und 0..* bei Order heißt ein Kunde, beliebig viele Bestellungen.
Eigenschaftszeichenkette{ordered}In geschweiften Klammern neben einer Multiplizität. {ordered} heißt, die Position gehört zur Bedeutung, {unique}, dass keine Duplikate auftreten können - zusammen sind sie der Unterschied zwischen Liste, Menge und Multimenge.
Qualifizierer[ isbn ]Ein kleiner Kasten am Quellende, der einen Schlüssel enthält. Er macht aus 0..* ein 0..1: eine Bibliothek hat viele Bücher, eine per ISBN qualifizierte höchstens eines.
Assoziationsklasse- - - EnrolmentEine Klasse, per gestrichelter Linie an der Mitte einer Assoziation befestigt, die die Attribute hält, die zur Paarung gehören und nicht zu einer der Seiten - eine Note, ein Einschreibedatum, ein Preis zum Bestellzeitpunkt.
N-äre AssoziationEine hohle Raute in der Mitte mit drei oder mehr Linien daran. Zulässig, selten und fast immer klarer als Klasse mit drei Assoziationen neu gezeichnet - was eine Datenbank ohnehin daraus machen würde.

Alles, was an ein Linienende geschrieben werden kann. Lesen Sie die Multiplizität zu dem Ende hin, an dem sie sitzt - diese eine Konvention verursacht mehr missverstandene Diagramme als die Pfeilspitzen.

05Notizen, Constraints und abgeleitete Member#

Die letzte Gruppe von Markierungen trägt die Regeln, die eine Kästen-und-Linien-Zeichnung allein nicht ausdrücken kann. Ein Klassendiagramm ist eine Struktur, und die Hälfte dessen, was ein Fachexperte weiß, ist eine Bedingung an dieser Struktur - eine Summe, die nie negativ sein darf, ein Paar von Beziehungen, von denen genau eine gefüllt sein darf.

ElementNotationWas es bedeutet
Notiz⎒ KommentarEin Rechteck mit geknickter Ecke, per schlichter gestrichelter Linie an das gebunden, worum es geht. Freier Text: eine Annahme, eine offene Frage, ein Verweis auf das Ticket, aus dem die Klasse stammt.
Constraint{total >= 0}Geschweifte Klammern, überall wo die Bedingung gilt - in einer Notiz, neben einem Attribut, an einem Assoziationsende. Eine Aussage, von der das Modell behauptet, sie gelte jederzeit, in der Sprache, die sich klar liest; OCL, wenn das Modell maschinell geprüft wird, Deutsch, wenn es gelesen wird.
Abgeleitet/ age: IntegerEin vorangestellter Schrägstrich. Der Wert wird berechnet statt gespeichert - genau das Signal, das ein Schemagenerator und ein Code-Reviewer beide brauchen, und genau das, das weggelassen wird.
Nur lesbar{readOnly}Bei der Erzeugung gesetzt und danach nie mehr. An einem Assoziationsende ist es der Unterschied zwischen einer Referenz, die man umhängen darf, und einer, die man nicht umhängen darf.
Xor{xor}Auf eine gestrichelte Linie zwischen zwei Assoziationen geschrieben: für ein gegebenes Objekt darf genau eine davon gefüllt sein. Eine Rechnung geht an eine Person oder an ein Unternehmen, nie an beide.
Generalisierungsmenge{complete, disjoint}Neben einer Gruppe von Generalisierungen mit gemeinsamem Elternteil. complete heißt, die Untertypen decken jeden Fall ab, disjoint, dass nichts zwei davon gleichzeitig sein kann. Die vier Kombinationen sind vier wirklich verschiedene Modelle.

Eine Konvention außerhalb dieser Tabelle lohnt sich zu kennen, weil sie wie ein Klassendiagramm aussieht und keines ist: ein unterstrichener Name der Form order1: Order ist eine Instanz, und ein Diagramm aus solchen ist ein Objektdiagramm - dieselbe Notation, die einen Moment zeigt statt jeden möglichen. Unterstreichung innerhalb eines Klassenkastens bedeutet etwas ganz anderes und ist die Statik-Markierung aus der Tabelle oben.

06Guillemets und der Rest#

Text in Guillemets - «interface», «enumeration», «entity» - ist ein Stereotyp: eine Erweiterung des Standardvokabulars, die sagt, welche Art Ding dieser Klassifizierer über „Klasse“ hinaus ist. Eine Handvoll definiert UML selbst; der Rest kommt aus einem Profil, dem Mechanismus, eigene zu erfinden, ohne die Sprache zu verlassen.

Guillemets erledigen zwei verschiedene Aufgaben, und die Spezifikation unterscheidet sie, obwohl auf dem Papier nichts das tut. «interface» und «enumeration» sind Schlüsselwörter: Teil von UML, in der Bedeutung festgelegt und in jedem Werkzeug zulässig. «aggregate root» oder «pii» sind Stereotypen: Ihr eigenes Vokabular, in einem Profil definiert und nur für Leser bedeutungsvoll, denen jemand gesagt hat, was sie heißen. Beides lohnt sich. Es lohnt sich zu wissen, welches von beiden man gerade geschrieben hat, denn die zweite Art braucht eine Legende auf dem Diagramm und die erste nicht.

Ein Stereotyp kann auch getaggte Werte tragen - {owner = payments-team, retention = 7y} unter einer stereotypisierten Klasse - und so beginnt ein Modell, die Metadaten zu halten, die eine Tabelle vorher schlecht gehalten hat. Das ist der Mechanismus, den ein Profil definiert.

In je einer Zeile

  1. 01Das verzierte Ende ist das entscheidende: Dreieck beim Elternteil, Raute am Ganzen, Pfeil am Benutzten.
  2. 02Hohles Dreieck ist Generalisierung, gestricheltes hohles Dreieck Realisierung - durchgezogen erbt, gestrichelt verspricht nur.
  3. 03Gefüllte Raute heißt mit dem Ganzen gelöscht; hohle heißt geteilt und überlebend.
  4. 04Eine Multiplizität beschreibt die Klasse, die sie berührt - lesen Sie sie zu ihrem Ende hin.
  5. 05Eine leere Multiplizität heißt unspezifiziert, nicht eins - sie ist eine Lücke im Diagramm.
  6. 06Ein führender Schrägstrich heißt abgeleitet, geschweifte Klammern sind ein Constraint, ein unterstrichener Name ist eine Instanz.
  7. 07Guillemets markieren entweder ein UML-Schlüsselwort oder Ihren eigenen Stereotyp; nur der zweite braucht eine Erklärung auf dem Diagramm.

Um all das an echten Modellen zu sehen, lesen Sie die durchgearbeiteten Beispiele; für die Begründung hinter den Markierungen statt der Markierungen selbst den Artikel zum Klassendiagramm.

07Häufige Fragen#

Was bedeuten die Pfeile im UML-Klassendiagramm?

Ein hohles Dreieck ist Generalisierung, ein gestricheltes Realisierung; eine gefüllte Raute ist Komposition, eine hohle Aggregation; eine schlichte Linie ist eine Assoziation, ein gestrichelter offener Pfeil eine Abhängigkeit. Der Kopf sitzt stets am allgemeineren oder besitzenden Ende.

Was unterscheidet gefüllte und hohle Raute?

Die gefüllte Raute ist Komposition: der Teil wird mit dem Ganzen gelöscht und gehört genau einem Ganzen. Die hohle Raute ist Aggregation: der Teil kann geteilt werden und überdauert das Ganze. Über diese Lesart hinaus trägt Aggregation in UML 2.5.1 keine formale Semantik.

Was bedeuten Plus, Minus und Raute vor einem Attribut?

Es sind Sichtbarkeitszeichen: Plus ist public, Minus private, das Doppelkreuz protected und die Tilde package. Sie gehören auf ein Entwurfsdiagramm, dessen Thema die Codestruktur ist, und entfallen meist im Domänenmodell, weil sie über das Geschäft nichts aussagen.

Was bedeutet ein Schrägstrich vor einem Attributnamen?

Ein führender Schrägstrich kennzeichnet das Attribut als abgeleitet: sein Wert wird aus anderen Attributen oder Assoziationen berechnet statt gespeichert. Ein /alter an einer Person, die bereits ein Geburtsdatum hält, sagt einem Schemagenerator, keine Spalte anzulegen, und einem Prüfer, nicht nach dem Code zu suchen, der beides synchron hält.

Was unterscheidet ein UML-Schlüsselwort von einem Stereotyp?

Beide stehen in Guillemets und sind nicht dasselbe. Ein Schlüsselwort wie interface oder enumeration gehört zu UML selbst und bedeutet in jedem Werkzeug dasselbe. Ein Stereotyp wie aggregate root ist Ihr eigenes Vokabular, in einem Profil definiert, und sagt einem Leser ohne Vorwissen nichts - es braucht also eine Legende im Diagramm, die ein Schlüsselwort nicht braucht.

In dieser Reihe

Passend dazu

Alle Artikel