UML-Klassendiagramm und Vererbung
🎯 Lernziele
Nach dieser Einheit sind Sie in der Lage dazu * Sachverhalte mittels UML-Klassendiagramm zu modellieren * das Konzept der Vererbung beschreiben
UML-Klassendiagramm
- Das UML-Klassendiagramm ist ein weiteres Werkzeug aus der Familie der Unified Modeling Language (UML)
- Es dient dazu Klassen und deren Beziehungen zu beschreiben
- Oben: Klassenname
- Mitte: Attribute
- Unten: Methoden (Funktionen
())
- Pfeile beschreiben die Beziehungen
- Enthält keine Ausprägungen der Klassen
Vererbung
- Durch Vererbung können die Attribute und Methoden einer (Parent-)Klasse an andere (Child-)Klassen weitergegeben werden.
- Neu implementiert werden müssen dann nur zusätzliche Attribute und Methoden.
- Im UML-Klassendiagramm wird die Vererbung mit meinem im leeren Dreieck endenden Pfeil dargestellt.
Beispiel Vererbung
class Sensor(): # Klasse Device wird beschrieben
def __init__(self, id): # Bauplan der Klasse mit allen Attributen
self.id = id
self.current_value()
self.values = []
def get_id(self): # Methode der Klasse
print("Hi, Ich bin " + self.id)
class HeartRateSensor(Sensor): # Definition einer Child-Klasse
<...>
def calc_heart_rate_variability():
<...>
class PowerMeter(Sensor): # Definition einer Child-Klasse
<...>
def calc_normalized_power():
<...>
Erklärung
- Somit verfügt ein Objekt der Klasse
HeartRateSensorundPowerMeterüber alle Methoden und Attribute der KlasseSensor
sensor = Sensor("Sensor1")
sensor.get_id()
sensor2 = HeartRateSensor("Sensor2")
sensor2.get_id()
sensor2.calc_heart_rate_variability()
sensor3 = PowerMeter("Sensor3")
sensor3.get_id()
sensor3.calc_normalized_power()
Konsturktoren bei Vererbung
- Der Konstruktor der Parent-Klasse wird nicht automatisch aufgerufen
- Der Konstruktor der Parent-Klasse muss explizit aufgerufen werden
class HeartRateSensor(Sensor): # Definition einer Child-Klasse
def __init__(self, id):
super().__init__(id)
class PowerMeter(Sensor): # Definition einer Child-Klasse
def __init__(self, id, unit):
super().__init__(id)
self.unit = unit
Beziehungen zwischen Klassen
---
title:
---
classDiagram
Person <|-- Subject : Inheritance
Person <|-- Supervisor : Inheritance
class Person{
+string name
}
class Subject{
+int heart_rate
+int age
+pedal()
}
class Supervisor{
}
class PerformanceTest{
+int id
+start()
+stop()
}
class Step{
+int position
+int duration
+int power
}
---
title:
---
classDiagram
Person <|-- Subject : Inheritance
Person <|-- Supervisor : Inheritance
Supervisor -- PerformanceTest :
Subject -- PerformanceTest :
Step --* PerformanceTest : Composition
class Person{
+string first_name
+string last_name
}
class Subject{
+int heart_rate
+int age
+pedal()
}
class Supervisor{
+ start_test()
}
class PerformanceTest{
+int id
+obj Subject
+list Steps
+start()
+stop()
}
class Step{
+int position
+int duration
+int power
}

- Das UML-Klassendiagramm enthält noch weitere Komponenten. Wichtig sind im Folgenden:
- Klasse (Class)
- Vererbung (Inheritance)
- Assoziation - Beziehung zwischen zwei oder mehr Klassen
- Aggregation - Spezielle Assoziation, die eine Zuordnung ausdrückt
- Komposition - Beziehung zwischen einem Ganzen und seinen Teilen
Aggregation und Komposition 🧠

- Die Räume können ohne das Gebäude nicht existieren (Komposition)
- Die Studierende existieren auch ohne Vorlesung weiter (Aggregation)
Multiplizitäten

| Multiplizität | Bedeutung |
|---|---|
| 1 | genau ein |
| * | viele, kein oder mehr, optional |
| 1..* | ein oder mehr |
| 0..1 | kein oder ein, optional |
| m..n | m bis n |
| m..* | m bis unendlich |
| m | genau n |
Die Leserichtung geht von der Klasse weg: * "Genau vier Räder gehören zu genau einem Auto!" * "Ein Parkplatz enthält null bis unendlich viele Autos!" * "Ein Auto steht auf einem oder keinem Parkplatz!"
Hinweis: Komposition von Rad zu Auto ist diskutabel
---
title:
---
classDiagram
Person <|-- Subject : Inheritance
Person <|-- Supervisor : Inheritance
Supervisor "1"--"0...n" PerformanceTest : Link
Subject "1"--"0...n" PerformanceTest : Link
Step "1...*" --* "1" PerformanceTest : Composition
class Person{
+string first_name
+string last_name
}
class Subject{
+int heart_rate
+int age
+pedal()
}
class Supervisor{
+ start_test()
}
class PerformanceTest{
+int id
+obj Subject
+list Steps
+start()
+stop()
}
class Step{
+int position
+int duration
+int power
}

✍️ Aufgabe
Gegeben ist der folgende Sachverhalt: - Jede Person hat einen Namen, eine Telefonnummer und E-Mail. - Jede Wohnadresse wird von nur einer Person bewohnt. Es kann aber sein, dass einige Wohnadressen nicht bewohnt sind. - Den Wohnadressen sind je eine Strasse, eine Stadt, eine PLZ und ein Land zugeteilt. - Wohnadressen können bestätigt werden und als Beschriftung (für Postversand) gedruckt werden. - Es gibt zwei Sorten von Personen: Student, welcher sich für ein Modul einschreiben kann und Professor, welcher einen Lohn hat. - Der Student besitzt eine Matrikelnummer und eine Durchschnittsnote.
Modellieren Sie diesen Sachverhalt mit einem UML Klassendiagramm. Beachten Sie die Assoziation (bewohnt) zwischen Person und Adresse und deren Multiziplität.
Tipp: Mermaid Diagrams
- Markup-Language zur Erstellung vieler Diagramme (UML-Klassendiagramm, Entity Relationship, Gantt-Chart)
- Grafiken können in verschiedenen Formaten erzeugt werden
- Änderungen für jeden online möglich

Lösung

🎯 Lernfortschritt
Nach dieser Einheit sind Sie in der Lage dazu * Sachverhalte mittels UML-Klassendiagramm zu modellieren * das Konzept der Vererbung beschreiben