Klassendiagramme

Was du heute lernst:

  • Die Bedeutung von Klassendiagrammen für die statische Struktur von Software erfassen.
  • Die Elemente eines Klassendiagramms (Klasse, Attribute, Methoden) definieren.
  • Die verschiedenen Beziehungen zwischen Klassen (Assoziation, Vererbung, Aggregation, Komposition) erkennen und modellieren.

Einleitung: Die Bausteine des Codes verstehen

Klassendiagramme sind das Rückgrat der objektorientierten Softwareentwicklung. Sie visualisieren die statische Struktur eines Systems, indem sie Klassen, ihre Eigenschaften (Attribute) und Verhaltensweisen (Methoden) sowie die Beziehungen zwischen ihnen darstellen. Dieses Verständnis ist entscheidend, um komplexe Softwareprojekte zu planen, zu entwerfen und zu dokumentieren. Mit Klassendiagrammen können wir sicherstellen, dass alle Beteiligten ein klares Bild von der Architektur des Systems haben, bevor auch nur eine Zeile Code geschrieben wird.

Merksatz: Klassendiagramme visualisieren die statische Struktur eines Softwaresystems und zeigen Klassen, ihre Attribute, Methoden sowie die Beziehungen zwischen ihnen auf.

Der Weg vom Text zum Modell: Analyse-Methoden

Wie kommen wir von einer Problembeschreibung zu einem fertigen Klassendiagramm? Dafür nutzen wir zwei einfache, aber effektive Methoden der objektorientierten Analyse (OOA):

  • Nominalphrasenanalyse (Wer oder was?): Wir markieren alle Substantive (Nomen) im Text. Diese sind Kandidaten für Klassen (z. B. Kunde, Konto) oder deren Attribute (z. B. Name, Kontostand).
  • Verbalphrasenanalyse (Was passiert?): Wir markieren alle Verben (Tätigkeitswörter) im Text. Diese beschreiben das Verhalten der Objekte und werden zu Methoden (z. B. einzahlen(), abbuchen()).

Beispiel: "Ein Kunde eröffnet ein Konto." → Kunde und Konto sind Klassen, eröffnet wird eine Methode.

Grundlagen des UML-Klassendiagramms

  • Definition: Ein Diagrammtyp in der Unified Modeling Language (UML), der die Struktur eines Systems durch die Darstellung von Klassen, deren Attributen, Methoden und den Beziehungen zwischen den Klassen beschreibt.
  • Elemente:
    • Klassen: Repräsentieren Objekte oder Konzepte im System. Jede Klasse ist in drei Bereiche unterteilt: Name, Attribute und Methoden.
    • Attribute: Eigenschaften oder Daten, die eine Klasse beschreibt. Sie werden mit Sichtbarkeit (z.B. +, -, #), Namen und Typ angegeben.
    • Methoden: Funktionen oder Operationen, die von der Klasse ausgeführt werden können. Sie werden mit Sichtbarkeit, Namen, Parametern und Rückgabetyp angegeben.
    • Beziehungen: Verbindungen zwischen Klassen, wie Assoziationen, Vererbungen und Aggregationen.
  • Beispiel: Ein Klassendiagramm für ein Bibliothekssystem könnte Klassen wie "Buch", "Autor" und "Benutzer" enthalten, mit entsprechenden Attributen und Methoden.

Beziehungen in Klassendiagrammen

Assoziation

  • Definition: Eine Assoziation ist eine Beziehung zwischen zwei oder mehr Klassen, die beschreibt, wie Objekte dieser Klassen miteinander interagieren oder verbunden sind.
  • Merkmale:
    • Rollen: Jede Klasse in einer Assoziation kann eine Rolle spielen, die beschreibt, wie sie an der Beziehung beteiligt ist.
    • Multiplizität: Gibt an, wie viele Objekte einer Klasse mit Objekten einer anderen Klasse assoziiert sein können (z. B. 1:1, 1:n, m:n).
    • Navigierbarkeit: Zeigt an, ob und in welche Richtung die Beziehung zwischen den Klassen navigierbar ist.
  • Beispiel: In einem Klassendiagramm für ein Bibliothekssystem könnte eine Assoziation zwischen den Klassen "Buch" und "Autor" bestehen, wobei ein Buch von einem oder mehreren Autoren geschrieben werden kann (1:n-Beziehung).
  • Benachbarte Themen: Aggregation, Komposition, Vererbung. Sieh dir dieses UML-Ressourcen-Portal für weitere Beispiele an.

Vererbung (Generalisierung)

  • Definition: Vererbung ist ein Mechanismus, durch den eine Klasse (Unterklasse oder abgeleitete Klasse) Eigenschaften und Methoden einer anderen Klasse (Oberklasse oder Basisklasse) erbt. Dies fördert die Wiederverwendbarkeit und Strukturierung von Code.
  • Merkmale:
    • Allgemeinheit: Die Oberklasse definiert allgemeine Attribute und Methoden, die von den Unterklassen spezifiziert oder erweitert werden können.
    • Spezialisierung: Unterklassen können spezifische Attribute und Methoden hinzufügen oder die geerbten Methoden überschreiben.
    • Symbolik: In UML wird die Vererbung durch eine durchgezogene Linie mit einem leeren Pfeil an der Oberklasse dargestellt.
  • Beispiel: In einem Klassendiagramm könnte eine Oberklasse "Fahrzeug" Attribute wie "Farbe" und "Modell" haben, während die Unterklassen "Auto" und "Motorrad" spezifische Attribute wie "Anzahl der Türen" oder "Typ des Lenkers" hinzufügen.
  • Benachbarte Themen: Polymorphismus, Kapselung, Designmuster. Weitere Informationen findest du unter UML-Diagrammen zur Vererbung.

Aggregation

  • Definition: Aggregation ist eine spezielle Form der Assoziation, die eine "Teil-Ganzes"-Beziehung zwischen zwei Klassen beschreibt, wobei das Teil (die aggregierte Klasse) unabhängig vom Ganzen (der aggregierenden Klasse) existieren kann.
  • Merkmale:
    • Schwache Beziehung: Das Teil kann auch ohne das Ganze existieren. Zum Beispiel kann ein "Rad" unabhängig von einem "Auto" existieren.
    • Symbolik: In UML wird Aggregation durch eine durchgezogene Linie mit einer leeren Raute an der Seite des Ganzen dargestellt.
  • Beispiel: In einem Klassendiagramm könnte eine Aggregation zwischen den Klassen "Bibliothek" und "Buch" bestehen, wobei eine Bibliothek mehrere Bücher enthält, aber die Bücher auch unabhängig von der Bibliothek existieren können.
  • Benachbarte Themen: Komposition, Assoziation, Vererbung.

Komposition

  • Definition: Komposition ist eine spezielle Form der Aggregation, die eine starke "Teil-Ganzes"-Beziehung zwischen zwei Klassen beschreibt, wobei das Teil (die kompositionale Klasse) ohne das Ganze (die kompositionale Klasse) nicht existieren kann.
  • Merkmale:
    • Starke Beziehung: Das Teil ist eng mit dem Ganzen verbunden und kann nicht unabhängig existieren. Wenn das Ganze zerstört wird, werden auch die Teile zerstört.
    • Symbolik: In UML wird Komposition durch eine durchgezogene Linie mit einer ausgefüllten Raute an der Seite des Ganzen dargestellt.
  • Beispiel: In einem Klassendiagramm könnte eine Komposition zwischen den Klassen "Haus" und "Zimmer" bestehen, wobei ein Zimmer nur existiert, solange das Haus existiert. Wenn das Haus abgerissen wird, werden auch die Zimmer entfernt.
  • Benachbarte Themen: Aggregation, Assoziation, Vererbung.

Übungsaufgabe: Entwirf die Klassen für ein einfaches Online-Shop-System

Aufgabenstellung:


Entwirf ein Klassendiagramm für einen einfachen Online-Shop. Berücksichtige mindestens die folgenden Entitäten und ihre Beziehungen:
  • Ein Kunde, der Produkte bestellen kann.
  • Ein Produkt, das im Shop angeboten wird.
  • Eine Bestellung, die mehrere Produkte enthalten kann.
  • Ein Warenkorb, der Produkte für einen Kunden enthält, bevor er zur Bestellung wird.
Definiere für jede dieser Entitäten passende Attribute (z.B. für Kunde: Name, E-Mail; für Produkt: Name, Preis, Beschreibung; für Bestellung: Bestelldatum, Status; für Warenkorb: Artikelanzahl) und mindestens eine wichtige Methode (z.B. für Kunde: bestellen(); für Produkt: Preis anzeigen(); für Bestellung: Gesamtpreis berechnen(); für Warenkorb: Produkt hinzufügen()). Stelle die Beziehungen zwischen diesen Klassen dar (z.B. Kunde hat eine Beziehung zu Bestellung und Warenkorb, Bestellung enthält Produkte, Warenkorb enthält Produkte). Betrachte die Beziehungen sorgfältig: Ist es eine Assoziation, Aggregation oder Komposition?

Schwierigkeitsgrad: schwer

Erwartete Bearbeitungszeit: 45 Minuten


Nächster Schritt

Nachdem wir die statische Struktur der Software mit Klassendiagrammen erfasst haben, betrachten wir nun das dynamische Verhalten von Objekten.

Weiter zu: Aktivitätsdiagramm →