Der umfassende Leitfaden zu UML-Klassendiagrammen: Notation, Beziehungen und Best Practices

Im Bereich der Softwareentwicklung und des objektorientierten Designs (OOD) dient die UML-Klassendiagramm als das Rückgrat der Systemmodellierung. Es handelt sich um ein statisches Strukturdiagramm, das die Architektur eines Systems beschreibt, indem es dessen Klassen, deren Attribute, Operationen (Methoden) und die komplexen Beziehungen zwischen Objekten darstellt. Ob Sie ein Domänenmodell erstellen oder Software-Spezifikationen detaillieren, das Verständnis von Klassendiagrammen ist unerlässlich fürdie Umsetzung konzeptioneller Entwürfe in funktionierenden Code.

What is Class Diagram?

Das Wesen einer Klasse verstehen

Im Zentrum des Diagramms steht die Klasse, die als Bauplan für Objekte dient. Während Objekte verwendbare Instanzen sind, die Daten und Verhalten enthalten, definiert die Klasse die Regeln für diese Objekte. In UML-Notation, wird eine Klasse durch ein Rechteck dargestellt, das in drei spezifische Abschnitte unterteilt ist:

  • Klassenname: Beim ersten (oberen) Abschnitt. Dies ist obligatorisch. Abstrakte Klassen werden typischerweise kursiv geschrieben.
  • Attribute: Beim zweiten Abschnitt. Diese repräsentieren den Zustand oder die strukturellen Merkmale der Klasse (Member-Variablen).
  • Operationen (Methoden): Beim dritten Abschnitt. Diese definieren die Verhaltensmerkmale oder Dienste, die die Klasse bereitstellt.

Sichtbarkeit und Zugriffssteuerung

Um die Kapselung zu definieren, verwendet UML spezifische Symbole vor Attribut- und Operationsnamen, um die Sichtbarkeit anzugeben. Dies bestimmt, welche anderen Klassen auf diese Mitglieder zugreifen können.
Class Diagram Tutorial

Symbol Sichtbarkeitstyp Beschreibung
+ Öffentlich Ist von jeder anderen Klasse zugänglich.
Privat Nur innerhalb der Klasse selbst zugänglich.
# Protected Zugänglich für die Klasse und ihre Unterklassen (abgeleitete Klassen).
~ Paket Zugänglich für jede Klasse innerhalb desselben Pakets.

Entschlüsselung von Klassenbeziehungen

Die Stärke eines UML-Klassendiagramms liegt darin, wie es die Interaktion zwischen Klassen. Genau wie die Codeimplementierung auf Logik beruht, stützt sich UML auf spezifische Verbindungen, um Absicht zu vermitteln. Nachfolgend sind die primären Beziehungstypen aufgeführt:
UML Class Diagram Tutorial

1. Vererbung (Generalisierung)

Vererbung stellt eine „IST-EIN“Beziehung dar. Es handelt sich um eine taxonomische Beziehung, bei der ein spezifischer Klassifikator (Kind) Merkmale von einem allgemeinen Klassifikator (Elternteil) erbt. Zum Beispiel ist ein Kreis ein Form.

  • Notation: Eine durchgezogene Linie mit einem hohlen Pfeil, der von der Kindklasse zur Elternklasse zeigt.
  • Verwendung: Wird verwendet, um Analysemodelle zu vereinfachen, indem Gemeinsamkeiten in einer Oberklasse eingeführt werden.

2. Assoziation

Dies ist eine strukturelle Verbindung zwischen gleichrangigen Klassen, die oft durch ein Verb beschrieben wird (z. B. „Lehrer unterrichtet Schüler“). Sie zeigt an, dass zwei Klassen miteinander verbunden sind, erzeugt aber eine lose Kopplung.

  • Notation: Eine durchgezogene Linie, die zwei Klassen verbindet.
  • Vielfachheit: Gibt an, wie viele Objekte beteiligt sind (z. B. 1, 0..1, 1..*).

3. Aggregation

Aggregation ist eine spezielle Form der Assoziation, die eine „TEIL-VON“Beziehung darstellt. Sie impliziert jedoch eine schwache Eigentumsverhältnis. Der Teil kann unabhängig vom Ganzen existieren. Zum Beispiel hat ein Auto Reifen, aber wenn das Auto zerstört wird, können die Reifen weiterhin existieren.

  • Notation: Eine durchgezogene Linie mit einem leeren (hohlen) Diamanten am Ende, verbunden mit der aggregierten (Eltern-)Klasse.

4. Komposition

Komposition ist eine strengere Form der Aggregation. Sie stellt ein starkes Eigentumsverhältnis dar, bei dem der Teil nicht existieren kannohne das Ganze. Wenn das Elternobjekt zerstört wird, werden auch die Kindobjekte zerstört. Ein Beispiel ist ein Haus und seine Räume.

  • Notation: Eine durchgezogene Linie mit einem gefüllten (festen) Diamanten am Ende, verbunden mit der zusammengesetzten (Eltern-)Klasse.

5. Abhängigkeit

Dies stellt eine „Verwendungs“-Beziehung dar. Sie besteht dann, wenn eine Klasse mit einer anderen Klasse speziell als Parameter in einer Methode oder als lokale Variable interagiert, anstatt als Feld. Änderungen an der Definition der Lieferantklasse können die Clientklasse beeinflussen.

  • Notation: Eine gestrichelte Linie mit einem offenen Pfeil, der auf die Abhängigkeit zeigt.

    UML Class Diagram Tutorial

Richtlinien für effektive Klassendiagramme

Die Erstellung eines lesbaren und genauen Diagramms erfordert die Einhaltung bestimmter Richtlinien.

  1. Verwenden Sie Standard-Namenskonventionen: Klassennamen sollten Substantive sein (z. B. Kunde, Bestellung), im Allgemeinen großgeschrieben. Assoziationsnamen sollten Verben sein (z. B. platziert, enthält).
  2. Identifizieren Sie die Perspektive: Bevor Sie zeichnen, entscheiden Sie, ob Sie eine konzeptionelleAnsicht (Domänenkonzepte), eine SpezifikationsAnsicht (Schnittstellen) oder eine ImplementierungsAnsicht (code-spezifisch).
  3. Verwalten Sie die Komplexität: Versuchen Sie nicht, das gesamte System in einem einzigen Diagramm zu modellieren. Teilen Sie das System in mehrere Diagramme auf, wobei Sie sich auf bestimmte Module oder Geschäftsbereiche konzentrieren.
  4. Beschreiben Sie die Vielzahl explizit: Klären Sie immer, ob eine Beziehung ein-zu-eins, ein-zu-viele oder viele-zu-viele ist, um sicherzustellen, dass die Datenbank- oder Code-Logik die geschäftlichen Anforderungen widerspiegelt.

    Wie man ein Klassendiagramm online zeichnet

Praxisbeispiel: Bestellverarbeitungssystem

Betrachten Sie einen Standard-E-Commerce-Szenario mit einem Kunden, einer Bestellung und einem Produkt. Hier ist, wie die Beziehungen in eine Klassendiagramm-Struktur:

  • Kunde und Bestellung (Assoziation): Ein Kunde stellteine Bestellung. Die Vielzahl beträgt1Kunde zu0..*Bestellungen.
  • Bestellung und Zeile (Komposition): Eine Bestellung besteht aus Zeilen. Wenn die Bestellung gelöscht wird, verlieren die Zeilen ihre Bedeutung und werden zerstört. Dies ist ein gefülltes Diamant-Symbol, das auf die Bestellung zeigt.
  • Zeile und Produkt (Assoziation/Schwache Aggregation): Eine Zeile verweist auf ein Produkt. Das Produkt existiert jedoch unabhängig von der Zeile (es bleibt im Lagerbestand). Dies ist eine Standard-Assoziation oder eine schwache Aggregation.
  • Zahlung (Realisierung):Ein Interface namensIPaymentkönnte von Klassen realisiert werdenKreditkartenZahlung und PayPalZahlung.

Tipps und Tricks zur Optimierung

Wenden Sie diese Tipps an, um Ihre Diagramme von einfachen Zeichnungen zu professionellen technischen Artefakten zu entwickeln:

  • Der „Vorlesen“-Test:Lesen Sie Ihre Beziehungen laut vor. „Ein Auto besteht aus Rädern.“ Wenn es sich unpassend anhört, überprüfen Sie, ob Sie die richtige Pfeilrichtung oder Beziehungstyp verwenden.
  • Parameter-Richtungsbestimmung:In der Operationspartition können Sie die Parameter-Richtung mitin, aus, oder inout vor dem Parameternamen, um den Datenfluss zu klären.
  • Abstrakte Kursivschrift: Wenn eine Klasse nicht direkt instanziiert werden kann (sie ist abstrakt), stellen Sie sicher, dass ihr Name kursiv geschrieben ist. Dies ist ein subtiler, aber entscheidender Hinweis für Entwickler.
  • Vermeiden Sie sich kreuzende Linien: Während moderne Werkzeuge wie Visual Paradigm die Routing-Funktion gut bewältigen, versuchen Sie, Klassen manuell anzuordnen, um sich kreuzende Linien zu minimieren, was die Lesbarkeit erheblich verbessert.

Prüfliste für Klassendiagramme

Bevor Sie Ihr UML-Klassendiagramm endgültig festlegen, durchlaufen Sie es mit dieser praktikablen Prüfliste:

  • [ ] Vollständigkeit: Sind alle notwendigen Klassen für das spezifische Modul vorhanden?
  • [ ] Sichtbarkeit: Sind Attribute und Operationen mit den korrekten Sichtbarkeitssymbolen (+, -, #) markiert?
  • [ ] Genauigkeit der Beziehungen: Haben Sie korrekt zwischen Aggregation (leerer Diamant) und Komposition (gefüllter Diamant) unterschieden?
  • [ ] Vielzahl: Ist die Kardinalität an beiden Enden von Assoziationen definiert (z. B. 1..*)?
  • [ ] Navigierbarkeit: Deuten Pfeile eindeutig an, welche Klasse auf die andere zugreifen kann?
  • [ ] Benennung: Sind Klassennamen Substantive und eindeutig? Sind Beziehungsverben klar?
  • [ ] Verallgemeinerung: Ergibt die Vererbungshierarchie Sinn (Is-A-Beziehung)?