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

bg right:40% width:400

  • 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.

bg w:700 right:55%


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 HeartRateSensor und PowerMeter über alle Methoden und Attribute der Klasse Sensor
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

h:600


---
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 
    }

Quelle


h:600


---
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 
    }

bg w:550 right:40%

  • 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

Quelle


Aggregation und Komposition 🧠

w:550

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

Multiplizitäten

bg w:550 right:45%

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

bg w:550 right:45%

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


h:600


---
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 
    }

h:600


✍️ 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

bg right h:400


Lösung

w:900


🎯 Lernfortschritt

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