Modul: Einführung in die Praktische Informatik Grundlagen der Programmierung GPR
VG09 OO-Paradigmen / UML-Klassendiagramme
Prof. Dr. Franziska Matthäus / Prof. Dr. Matthias Kaschube / Dr. Karsten Tolle Institut für Informatik
Fachbereich Informatik und Mathematik (12)
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 2
EPI - Organisatorisches
OOP und UML Aufteilung:
Wann Thema Quiz
GPR 08 Intro OOP und UML,
Anwendungsfalldiagramm Zustandsdiagramm
Ja (Anwendungsfalls und Zustandsidagramm)
EPR 08 Klassen in Python Ja (Begriffe und Codeanalyse) GPR 09 OO-Paradigmen
Klassendiagramm
Objektdiagramm
Ja (Klassen und Objekt-Diagramme)
… aber erst nach EPR 09! Daher jetzt noch nicht online!
EPR 09 Klassendiagramm Objektdiagramm
Nein – im GPR 09 Quiz enthalten EPR 10 eventuell
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 3
EPI - Organisatorisches
Übersicht
‣ Paradigmen der OO-Programmierung
‣ Klassendiagramme in UML
(Anfang: … geht in EPR 09 noch weiter!)
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 4
EPI - Organisatorisches
Paradigmen der OO-Programmierung
‣ Abstraktion
‣ Kapselung
‣ Polymorphie
‣ Vererbung
‣ Introspektion
‣ Klassen
‣ Methoden
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 5
EPI - Organisatorisches
Klassen und Instanzen (1)
Klassen sind Vorlagen, aus denen
Objekte (Instanzen) zur Laufzeit erzeugt werden.
‣ Klassen sind die „Konstruktionspläne“ (Schablonen) für Objekte.
‣ Die Klasse entspricht in etwa einem Datentyp, geht aber darüber hinaus:
Sie legt nicht nur die Schnittstelle fest, sondern beschreibt auch die
Datenstrukturen (Attribute), aus denen die erzeugten Objekte bestehen, sie definiert zudem die Operationen (Methoden).
- Attribute
Name
- Methoden
Klassendiagramm
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 6
EPI - Organisatorisches
Klassen und Instanzen (2)
‣ Im Kontext der Datenstrukturen (Datentypen) realisieren Klassen also einen
konstruktiven Weg um neue, benutzerspezifische Datenstrukturen und die darauf arbeitenden Methoden zu beschreiben (zu programmieren) eigene/spezifische Datentypen.
‣ In rein objektorientierten Sprachen wie Smalltalk und auch Python werden dem Prinzip
"Alles ist ein Objekt" (Alan Kay, Erfinder von Smalltalk) folgend, auch elementare Typen wie Ganzzahlen (Integer) durch Objekte repräsentiert.
‣ Auch Klassen selbst sind hier Objekte, die wiederum Ausprägungen von Metaklassen sind.
‣ Viele Sprachen, unter anderem C++ und Java folgen allerdings nicht der „reinen Lehre“.
Python aber ja!
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 7
EPI - Organisatorisches
Klassen
‣ Die (Daten-)Struktur einer Klasse bilden die Attribute (auch Eigenschaften genannt).
‣ Attribute selbst können auch wieder komplexe Datentypen (z.B. Listen, Mengen, Dictionaries) oder auch wieder Klassen sein.
‣ Aus Klassen erzeugte Objekte werden Instanzen (Exemplare) der Klasse genannt.
‣ In manchen Programmiersprachen gibt es zu jeder Klasse ein bestimmtes Objekt (Klassenobjekt), das dazu dient, die Klasse (also die Schablone) zur Laufzeit zu repräsentieren; dieses Klassenobjekt ist dann z.B. zuständig für die Erzeugung (Instanzierung) von Objekten der Klasse durch einen Konstruktor.
(Erlaubt auch den Zugriff z.B. auf Klassenvariablen.)
account_type number balance
Account
__init__() deposit() withdraw() inquiry()
account_type : string number : int
balance : float owner : Person
Account
__init__() deposit() withdraw() inquiry()
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 8
EPI - Organisatorisches
Beispiel: Bankkonto - Account
Ein Bankkonto könnte beispielsweise folgendermaßen definiert sein:
‣ hat eine Kontonummer (Attribut: number)
‣ hat einen Kontostand (Attribut: balance)
‣ kann eingerichtet und initialisiert werden (Methode __init__())
‣ kann eine Einzahlung durchführen (Methode deposit())
‣ kann eine Auszahlung durchführen (Methode withdraw())
‣ kann den Saldostand mitteilen (Methode inquiry())
Dieses obenstehende und die zugehörige Syntax (Schnittstelle, unvollständig) kennt der anwendende Programmierer ... nicht aber wie es genau implementiert ist!
number balance
Account
__init__() deposit() withdraw() inquiry()
Klassendiagramm
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 9
EPI - Organisatorisches
Instanzen (Exemplare, Objekte)
‣ „Ein Objekt ist eine Instanz (oder Exemplar) einer Klasse.“
‣ Eine Instanz einer Klasse ist ein konkretes Exemplar dieser Klasse mit konkreten
zugehörigen Ausprägungen, z.B. Werte der Attribute.
‣ Instanzen werden zur Laufzeit aus einer Klasse erzeugt. Die Klasse ist dabei die Schablone nach der erzeugt wird.
peter:Account number = 1234567 balance = 0.0
Objektdiagramm
Hier werden nur die Attribute angegeben.
Die Methoden werden hier nicht angegeben, weil sie ja auch überall gleich sind.
Instanzname Klassenname
peter = Account(1234567, 0)
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 10
EPI - Organisatorisches
Kapselung (encapsulation):
bezeichnet den kontrollierten Zugriff auf Objekte.
Anmerkung: Das Kapselungsprinzip gibt es auch unabhängig von objektorientierten Konzepten, z.B. als Modularisierungsprinzip.
Vom Innenleben eines Objektes soll der Benutzer (Programmierer des aufrufenden Objekts) möglichst wenig wissen müssen Geheimnisprinzip (Parnas: information hiding). Wie bei Modulen.
Durch die Kapselung werden nur Informationen über das "Was" eines Objektes (was es leistet) nach außen sichtbar, nicht aber das "Wie" (die interne Repräsentation und Realisation).
Es wird eine Schnittstelle nach außen definiert und zugleich dokumentiert.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 11
EPI - Organisatorisches
Kapselung
Kapselung: Schützt Attribute vor dem Zugriff von außerhalb der Klasse.
Zugriff auf die Attribute erfolgt nur über entsprechende Methoden (Zugriffsmethoden)
Im allgemeinen gibt es zu einem bestimmten Attribut eine Methode, die den Wert des Attributes liefert - häufig als Getter (von to get)
und eine andere, mit deren Hilfe man den Wert eines Attributes verändern kann - häufig als Setter (von to set) bezeichnet.
Zentrales Modell ist hier der abstrakte Datentyp, in dem Daten in einer Datenstruktur zusammengefasst sind, auf die nur über festgelegte Zugriffsfunktionen (Prozeduren / Funktionen, Setter&Getter Java) zugegriffen werden kann, nicht unbedingt in Python! (Abstrakte Datentypen können auf verschiedene Weisen implementiert
werden)
Ein anderes Beispiel in modernen Programmiersprachen ist das 'Verbergen von Daten' (streng genommen natürlich deren Namen) durch Gültigkeitsbereiche (Namensräume!): Funktion, Klasse, Modul, …
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 12
EPI - Organisatorisches
Getter- und Setter-Methoden (Folie 29 VE_EPR_08)
Siehe auch:
https://www.programiz.com/python-programming/property
_temperature: Der Unterstrich zeigt an, dass der Programmierer ein direktes Verändern der Variable nicht will!
Durch die Get- und Set-Methoden können die Besonderheiten (hier die minimalste mögliche Temperatur) abgebildet werden.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 13
EPI - Organisatorisches
Kapselung + Geheimnisprinzip = Abstraktion
encapsulation + information hiding = abstraction
Strenge Definition:
Kapselung + Geheimnisprinzip = Abstraktion
Aber:
Als Kapselung bezeichnet man in der objektorientierten Programmierung
(siehe auch UML) häufig den kontrollierten Zugriff auf Methoden und Attribute.
(Aber Vorsicht: in der Literatur werden die drei Begriffe häufig synonym verwendet.) Geheimnis-
prinzip Kapselung
Abstraktion
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 14
EPI - Organisatorisches
Ausblick:
Kapselung in UML „Universal Modelling Language“
Sichtbarkeit: Attribute und Methoden können sein:
public (+): Zugreifbar für alle Ausprägungen (auch die anderer Klassen) private (-): Nur für Ausprägungen der eigenen Klasse zugreifbar
protected (#): Nur für Ausprägungen der eigenen Klasse und von Spezialisierungen der selben zugreifbar
package (~): erlaubt den Zugriff für alle Elemente innerhalb des eigenen Pakets
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 15
EPI - Organisatorisches
Zugriffsspezifikatoren - Java
public protected
ohne private
private – nur innerhalb der Klasse sichtbar und somit zugreifbar.
ohne – nur innerhalb des Pakets, das die Deklaration der Klasse enthält
(Standardzugriffsrecht) – wird auch „package private“ genannt.
protected – zugreifbar von Methoden der eigenen Klasse, der davon abgeleitete Klassen und von Klassen im selben Paket.
public – für Methoden aller Klassen zugreifbar (welche die Klasse importieren).
ZugriffsSpezifikator
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 16
EPI - Organisatorisches
Vorteile der Abstraktion
(Kapselung + Geheimnisprinzip)
‣ Dadurch, dass die Implementierung eines Objektes anderen Objekten nicht bekannt ist, kann die Implementierung geändert werden, ohne die Zusammenarbeit mit anderen Objekten zu beeinträchtigen.
‣ Beim Zugriff über eine Zugriffsfunktion (get) spielt es von außen keine Rolle, ob diese Funktion 1:1 im Inneren des Objekts existiert, das Ergebnis einer Berechnung ist oder möglicherweise aus anderen Quellen (z.B. einer Datei oder Datenbank) stammt.
‣ Erhöhte die Übersichtlichkeit, da nur die öffentliche Schnittstelle eines Objektes betrachtet werden muss (beim Debugging).
‣ Definiert einen eigenen Namensraum (Gültigkeit): Deutlich verbesserte Testbarkeit, Stabilität und Änderbarkeit der Software
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 17
EPI - Organisatorisches
Durchatmen!
Paradigmen der OO-Programmierung
‣ Abstraktion
‣ Kapselung
‣ Polymorphie
‣ Vererbung
‣ Introspektion
‣ Klassen
‣ Methoden
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 18
EPI - Organisatorisches
Vererbung und Polymorphie (1)
Klassen können von anderen Klassen abgeleitet werden (Vererbung).
‣ Dabei erbt die Klasse die Datenstruktur (Attribute) und die Methoden von der vererbenden Klasse (Basisklasse).
‣ In der abgeleiteten Klasse (Subklasse) können Methoden der Basisklasse in den meisten
Programmiersprachen überschrieben werden, d.h. einzelne Methode neu implementiert, und eigene Methoden und Daten (Attribute) hinzufügt werden.
‣ Ein Objekt der abgeleiteten Klasse kann überall dort verwendet werden, wo ein Objekt der Basisklasse erwartet wird; überschriebene Methoden werden dann auf der abgeleiteten Klasse ausgeführt (Polymorphie), d.h. verschiedene Objekte können auf die gleiche
Nachricht unterschiedlich reagieren.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 19
EPI - Organisatorisches
Vererbung und Polymorphie (2)
Die Nutzung der Vererbung bietet sich an, wenn es Objekte gibt, die konzeptionell aufeinander
aufbauen oder sich spezialisieren. Gegebenenfalls lassen sich Objektdefinitionen von vorneherein so aufteilen, dass identische Merkmale in der Definition eines "vererbenden" Objektes
zusammengefasst werden.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 20
EPI - Organisatorisches
Superklasse – Subklasse ... Terminologie
‣ Vererbungsbeziehungen zwischen Objekten werden in der Regel mit Hilfe von Klassendefinitionen hergestellt.
‣ Dabei bezeichnet man die "vererbende" Klasse als Basisklasse oder auch Superklasse und die "erbende" Klasse als abgeleitete Klasse bzw. Subklasse: Verschiedene
Begriffshierarchien sind üblich:
Superklasse = Basisklasse = Oberklasse Subklasse = abgeleitete Klasse = Unterklasse
Methode = Elementfunktion = Memberfunktion
Attribut = Datenelement = Member
Exemplar = Instanz = Objekt
Die Nutzung der Begriffe geht aber durcheinander: rot die hiermeist benutzten Ausprägungen.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 21
EPI - Organisatorisches
„Das“ klassische Beispiel
Ein Fahrzeug besitzt bestimmte Attribute, diese können z.B. Höchstgeschwindigkeit, maximale_Zuladung und Farbe sein.
Die Klasse Kraftfahrzeug erbt all diese Attribute, kann aber noch zusätzliche Attribute besitzen. Des
Weiteren kann ein Kraftfahrzeug auch zusätzliche Methoden wie Motor starten besitzen
Die Klasse Personenkraftwagen kann dann wiederum von Kraftfahrzeug abgeleitet werden
Durch die Ableitung von Kraftfahrzeug erbt der
Personenkraftwagen automatisch alle Attribute von Kraftfahrzeug und Fahrzeug.
- Höchstgeschwindigkeit - maximale_Zuladung - Farbe
Fahrzeug
- beschleunigen ()
- Art_des_Antriebs - Leistung
Kraftfahrzeug
- starte_motor()
- Anzahl der Sitzplätze Personenkraftwagen
Achtung: Offenes Dreieck.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 22
EPI - Organisatorisches
Kriterien
Ob eine Klasse in einer Vererbungsbeziehung zu einer anderen Klasse steht, lässt sich durch eine einfache "ist-ein"-Regel feststellen, also
‣ Jeder Personenkraftwagen ist ein Kraftfahrzeug,
‣ Jeder Personenkraftwagen ist ein Fahrzeug, aber
‣ Nicht jedes Fahrzeug ist ein Personenkraftwagen – (Motorrad, Fahrrad, LKW, …)!
Ein Personenkraftwagen ist auch kein Sitz, sondern
‣ ein Personenkraftwagen besitzt einen oder hat einen Sitz.
‣ Dies kann durch Attribute einer Klasse beschrieben werden (oder durch Aggregation oder Komposition, kommt später noch).
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 23
EPI - Organisatorisches
Mehrfachvererbung
Von Mehrfachvererbung spricht man, wenn eine Klasse
mehrere unmittelbare Basisklassen hat.
Beispiel: Modellierung eines Amphibienfahrzeugs
hat die Attribute von Landfahrzeug, als auch alle von Wasserfahrzeug.
Amphibienfahrzeug - Tiefgang
Wasserfahrzeug - Anzahl_der_Räder
Landfahrzeug
Aus Wikipedia:
https://de.wikipedia.org/wiki/Datei:Amphicar-stuttgart-2005.jpg Urheber: Enslin
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 24
EPI - Organisatorisches
Implementierung der Mehrfachvererbung
Nur einige Programmiersprachen bieten die Möglichkeit der Mehrfachvererbung.
Programmiersprachen mit Mehrfachvererbung sind z.B. C++, Eiffel und Python.
Dagegen unterstützen z.B. Java, Smalltalk und Ada Mehrfachvererbung nicht.
Als Einwand gegen Mehrfachvererbung wird häufig genannt, dass es das Design unnötig verkompliziere und undurchsichtig machen könne?
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 25
EPI - Organisatorisches
Beispiel (Folie 28 VE8 EPR)
class A:
var_a = 42
def method1(self):
print("Klasse A : method1") def __method_privat(self):
print(„Nur in A vorhanden!") class B:
var_b = 37
def method1(self):
print("Klasse B : method1") def method2(self):
print("Klasse B : method2")
class C(A, B): # Erbt von A dann von B.
var_c = 3.3
def method3(self):
print("Klasse C : method3") class D: pass
class E(C, D): pass
Die Suche nach einem in einer Oberklasse definierten Attribut erfolgt mittels
Tiefensuche in der class()- Anweisung von links nach rechts, d.h. in der
Reihenfolge, in der die Oberklassen in der Klassen- definition angegeben wurden.
Die Oberklassen werden in der Reihenfolge C, A, B, D abgesucht (Tiefensuche). Für den Fall, dass mehrere Klassen das gleiche Symbol definieren, gilt, dass das zuerst gefundene Symbol genommen wird.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 26
EPI - Organisatorisches
Eingeschränkte Implementierungen der
Mehrfachvererbung in anderen Programmiersprachen
‣ Java, Delphi und C# bieten mit so genannten „Schnittstellen“ (Interface) eine eingeschränkte Form der Mehrfachvererbung.
‣ Hierbei kann eine Klasse maximal von einer Basisklasse abgeleitet werden, jedoch kann sie beliebig viele "Schnittstellen erben".
‣ Damit verpflichtet sich diese Klasse, die Methoden der Schnittstellen zu realisieren.
‣ Mit einfacher Vererbung und eingeschränkter Mehrfachvererbung in Form von
Schnittstellen sind die meisten Anforderungen an ein Software-Design realisierbar, ohne die „Nachteile“ der uneingeschränkten Mehrfachvererbung in Kauf nehmen zu müssen.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 27
EPI - Organisatorisches
Polymorphie in der Natur
Das Pantherchamäleon
‣ Das Chamäleon ändert seine Farbe in Abhängigkeit seiner Stimmung.
‣ Es hat eine andere Farbe, ist aber immer noch dasselbe Individuum.
Ärger
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 28
EPI - Organisatorisches
Polymorphie in der Evolutionstheorie
“
It is not the strongest of the species that survives, nor the most intelligent,
but rather the one most responsive to change.”
Charles Darwin
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 29
EPI - Organisatorisches
Polymorphie
‣ Die Fähigkeit eines Objektes zu entscheiden, welche Methode auf sich selbst anzuwenden ist, bezeichnet man als Polymorphie in der Objektorientierung.
‣ Das Objekt kann auf eigene Weise auf den Aufruf einer Methode reagieren.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 30
EPI - Organisatorisches
Beispiel Polymorphie
Die Polymorphie durch Überladen und Überschreiben von Methoden.
Vorteile des Überladens einer Methode
• sinnvoll, wenn mehrere Methoden dasselbe Ergebnis erzielen sollen, aufgrund des Eingabetyps aber unterschiedliche
Implementierungen benötigen.
• Im Programmquellcode entfällt dadurch die umständliche Typabfrage und die anschließende Fallunterscheidung.
• Bei der Programmierung ist darauf zu achten,
dass Methoden mit gleichem Namen inhaltlich „zusammenpassen“.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 31
EPI - Organisatorisches
A B C C
Tippfehler: … geht aber offensichtlich trotzdem!
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 32
EPI - Organisatorisches
Introspektion
‣ Introspektion (engl introspection, auch Reflexion (engl. reflection)) bedeutet, dass ein Programm Erkenntnisse über seine eigene Struktur gewinnen kann.
‣ Eine wichtige Rolle spielt Introspektion im Zusammenhang mit typsicherer
Programmierung, aber auch in Fragen der Persistenz (persistente Datenhaltung von Objekten und deren Beziehungen).
‣ Introspektion ermöglicht es, z.B. zur Laufzeit Informationen über Klassen oder deren Instanzen abfragen zu können. Bei einer Methode sind das u.a. deren Sichtbarkeit, der Typ des Rückgabewertes oder der Typ der Übergabeparameter. Die Umsetzung ist dabei sprachspezifisch realisiert.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 33
EPI - Organisatorisches
Zusammenfassung Objekte
Die Paradigmen der OO-Programmierung sind:
‣ Klassen (Attribute und Methoden) und Instanzen/Objekte
‣ Abstraktion (Kapselung + Geheimprinzip)
‣ Vererbung,
‣ Polymorphie,
‣ Introspektion.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 34
EPI - Organisatorisches
Übersicht
‣ Paradigmen der OO-Programmierung
‣ Klassendiagramme in UML
(Anfang: … geht in EPR 09 noch weiter!)
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 35
EPI - Organisatorisches
Klassendiagramme
Repräsentation von Klassen
‣ Klassen werden durch Rechtecke dargestellt, die entweder nur den Namen der Klasse (fettgedruckt, GroßGeschrieben, CameCasing) tragen
‣ oder zusätzlich:
‣ attribute: mindestens Namen, ggf. zusätzliche Elemente
‣ method(): mindestens Namen, ggf. zusätzliche Elemente
ClassName attribute_1 attribute_2 method_1() method_2()
ClassName method_1() method_2() ClassName
attribute_1 attribute_2
ClassName
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 36
EPI - Organisatorisches
Attribute
Die Attribute werden wie folgt spezifiziert (Wikipedia):
[Sichtbarkeit] [/] name [: Typ] [ Multiplizität ] [= Vorgabewert] [{eigenschaftswert*}]
… aus dem Buch: UML@Classroom http://www.uml.ac.at/de/
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 37
EPI - Organisatorisches
Zusätzliche Elemente bei Attributen (1)
‣ Für Attribute kann ein Datentyp (eine Klasse) angegeben werden Notation: attribute_0 : float
(in Python beschreibt dies, welche Klasse hier erwartet wird!)
‣ Attribute können Initialwerte haben.
Notation: attribute_1 = 0
account_type : string number : int
balance : float = 0
Account
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 38
EPI - Organisatorisches
Zusätzliche Elemente bei Attributen (2)
‣ Attribute können besondere Eigenschaftswerte haben.
Beispiel: read-only
[wäre in Python eine "Konstante":
Namen nur in GROSSBUCHSTABEN]
… manchmal werden dort auch Zusicherungen/Regeln angegeben, z.B.:
geburtsdatum : Datum
immatrikulation : Datum { geburtsdatum < immatrikulation }
‣ Optionale oder obligatorische Attribute können durch Angabe einer entsprechenden Multiplizität ausgezeichnet werden.
Notation: optional_attribute: Class[0..1]
mandatory_attribute: Class[1]
Multiplizitätsangaben sollen nur notiert werden wenn sie ungleich [1] sind.
Eine Sortiereigenschaft kann mit "unordered" (default) oder "ordered" notiert werden.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 39
EPI - Organisatorisches
Zusätzliche Elemente bei Attributen (3)
Attribute können Sichtbarkeiten (Zugriffsrestriktionen) haben.
Notation: erfolgt direkt vor dem Attributnamen + public_attribute
# protected_attribute - private_attribute
~ package_attribute
Klassenattribute werden unterstrichen Notation: class_attribute
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 40
EPI - Organisatorisches
Beispiele für Attribute in UML
name: String = 'Unkonwn' Born: Date
radius: Integer = 25 {read-only}
Default_name = 'Noname'
~ version_number: Integer - counter: Integer
dynam_array [*] {ordered}
ohneTyp
name: String [5]
first_name [0..1]
first_names [1..5]
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 41
EPI - Organisatorisches
Methoden / Operationen
Operationen werden in ähnlicher Art und Weise spezifiziert:
[Sichtbarkeit] name [({Parameter})] [: Rückgabetyp] [{eigenschaftswert*}]
Zudem wird ein Parameter wie folgt aufgebaut:
[Übergaberichtung] name : Typ [ Multiplizität ] [= Vorgabewert] [{eigenschaftswert*}]
Wikipedia: https://de.wikipedia.org/wiki/Klassendiagramm
… aus dem Buch: UML@Classroom http://www.uml.ac.at/de/
Operationen Parameter
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 42
EPI - Organisatorisches
Zusätzliche Elemente bei Methoden (1)
‣ Die Parameter einer Methode entsprechen in ihrer Definition den Attributen, d.h. sie tragen einen Namen und ggf. weitere Angaben , zum Beispiel zum Typ und Default-Werten.
‣ Die Parameter einer Methode können mit den Übergaberichtungen in, out, oder inout gekennzeichnet werden.
Notation:
change_position(out x)
‣ Hier mit Rückgabetyp (: Boolean):
Notation:
my_method(x : Float, y : Float) : Boolean
Die Übergaberichtungen (Wikipedia):
in Der übergebene Parameter wird nur gelesen (Standard, wenn nichts angegeben wurde).
out Der übergebene Parameter wird beschrieben, ohne ihn vorher zu lesen.
inout Der übergebene Parameter wird gelesen bzw. verarbeitet und beschrieben, beispielsweise um das Ergebnis zurückzugeben.
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 43
EPI - Organisatorisches
Zusätzliche Elemente bei Methoden (2)
‣ Methoden können mit Eigenschaftswerten versehen werden. Eigenschaftswerte sind z.B. {deprecated} um auszudrücken, dass diese Methode nur noch zur Kompatibilität mit früheren Versionen existiert aber sonst nicht mehr verwendet werden soll.
Notation: Eigenschaftswerte stehen in geschweiften Klammern anzeigen {deprecated}
‣ Methoden können in den Eigenschaftswerten auch mit Zusicherungen versehen werden, die beispielsweise beschreiben, welche Bedingungen beim Aufruf erfüllt sein müssen oder welche Werte die Parameter besitzen dürfen (wie bei Attributen).
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 44
EPI - Organisatorisches
Übersicht:
Beziehungselemente im Klassendiagramm
‣ Vererbung
Generalisierung resp.
Spezialisierung
‣ Assoziation
‣ Gerichtete Assoziation
‣ Aggregation
‣ Komposition
‣ Abhängigkeit
ClassName_1 ClassName_2
ClassName_1 ClassName_2 ClassName_1 ClassName_2
ClassName_1 ClassName_2 ClassName_1 ClassName_2 ClassName_1 ClassName_2
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 45
EPI - Organisatorisches
Vererbung
‣ Beschreibt eine Generalisierung resp. Spezialisierung
‣ ClassName_2 ist die Oberklasse (allgemeinere Eigenschaften)
‣ Es kann ein Diskrimminator (Generalisation Set Name) hinzugefügt werden, der den maßgeblichen Aspekt für die hierarchische Gliederung beschreibt.
‣ Anwendung ist zu empfehlen dokumentierte Entwurfsentscheidung
ClassName_1 ClassName_2
Diskrimmintor
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 46
EPI - Organisatorisches
Klassen-Hierarchien
‣ Dieses Beispiel zeigt eine einfache Klassen- Hierarchie, bei der Customer und Supplier Erweiterungen von Partner sind. Customer ist wiederum eine Verallgemeinerung von PrivateCustomer und BusinessCustomer.
‣ Alle Erweiterungen erben die Methoden getAddress() und setAddress() von der Basis-Klasse.
Partner get_address() set_address()
Customer Supplier
PrivateC BusinessC
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 47
EPI - Organisatorisches
Klassen-Hierarchien
‣ Dieser Entwurf erlaubt es,
Kontakt-Adressen verschiedener Sorten von Partnern z.B. in einer Liste zu verwalten.
‣ Damit bleibt z.B. der Ausdruck von Adressen unabhängig von den vorhandenen Ausprägungen.
(Polymorphie)
Partner get_address() set_address()
Customer Supplier
PrivateC BusinessC
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 48
EPI - Organisatorisches
Eigenschaften der Generalisierung
Wir unterscheiden:
unvollständig oder vollständig:
‣ In einer vollständigen Generalisierungshierarchie muss jede
Instanz der Superklasse auch Instanz mindestens einer Subklasse sein.
überlappend oder disjunkt:
‣ In einer überlappenden Generalisierungshierarchie kann ein Objekt Instanz von mehr als einer Subklasse sein
Default: unvollständig, disjunkt
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 49
EPI - Organisatorisches
Abstract
java.util.Collection class and interface hierarchy
(https://en.wikipedia.org/wiki/Java_collections_framework#/media/File:Java.util.Collection_hierarchy.svgby Ramlmn- Own work) CC BY-SA 4.0
Für abstrakte Klassen können keine Instanzen gebildet werden!
In Python über das Modul: Abstract Base Classes (ABC). Siehe z.B.:
https://www.geeksforgeeks.org/abstract- classes-in-python/
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 50
EPI - Organisatorisches
Assoziation (link)
‣ beschreibt eine Verbindung (Beziehungen) zwischen Klassen
‣ kann auch rekursiv sein (auf sich selbst bezogen)
‣ Jede Assoziation kann einen Namen haben. Bsp.:
‣ Es können auch Rollen und Multiplizitätsangaben (kommt noch mal in EPR VE09) angegeben werden.
ClassName_1 Namen ClassName_2
Rolle 0..1 1
Employer employed Employee
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 51
EPI - Organisatorisches
Gerichtete Assoziation
‣ Bedeutung der Pfeilspitze:
hier kann von Objekten aus ClassName_1 direkt zu Objekten aus ClassName_2 navigiert werden.
‣ Bedeutung des Kreuzes:
zu Objekten aus ClassName_1 kann von Objekten aus ClassName_2 explizit nicht navigiert werden.
ClassName_1 ClassName_2
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 52
EPI - Organisatorisches
Aggregation
‣ Beschreibt eine Ganzes-Teile-Hierarchie,
d.h. das Ganze ClassName_1 besteht aus ClassName_2 Teilen
‣ Raute steht auf der Seite des Aggregats
‣ Meist ist die Multiplizität auf Seiten des Ganzes = 1 und wird i.d.R. dann weggelassen
ClassName_1 ClassName_2
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 53
EPI - Organisatorisches
Komposition
‣ Eine Komposition ist eine spezielle Aggregation, bei der die Teile vom Ganzen existenzabhängig sind.
‣ Die Raute steht auf Seiten der Komposition.
‣ Die Kardinalität (oder Multiplizität) auf Seite des Ganzen muss immer 0 oder 1 sein. Jedes Teil ist nur Teil maximal eines Kompositionsobjektes.
‣ Beispiel: Rechnung mit den Rechnungspositionen
‣ Die Rechnungspositionen sind existentsabhängig von der Rechnung.
Sobald die Rechnung gelöscht wird, werden auch alle Rechnungspositionen gelöscht.
ClassName_1 ClassName_2
Gebäude Hörsaal Beamer
Beispiel aus UML@Classroom
1 * 0..1 1
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 54
EPI - Organisatorisches
Abhängigkeit
‣ ist eine "Realisierungsbeziehung"
‣ Das Zielelement (ClassName_2) ist für die Spezifikation oder Implementierung der Quellelemente erforderlich.
‣ Zur weiteren Kennzeichnung der Beziehung werden
"Schlüsselworte" / Stereotype benutzt". Diese sind:
‣ call, create, derive, instantiate, permit, realize, refine, trace, use, substitute
ClassName_1 ClassName_2 unabhängig
abhängig Schlüsselwort
Von Gubaer - selbst gezeichnet, CC BY-SA 3.0, https://de.wikipedia.org/w/index.php?curid=623608
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 55
EPI - Organisatorisches
Von Stkl - Redrawn in SVG, original PNG Klassendiagramm-1.png by Gubaer, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=38884211
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 56
EPI - Organisatorisches
Zusammenfassung
Die Paradigmen der OO-Programmierung sind:
‣ Klassen (Attribute und Methoden) und Instanzen/Objekte
‣ Abstraktion (Kapselung + Geheimprinzip)
‣ Vererbung,
‣ Polymorphie,
‣ Introspektion.
Die Beziehungen zwischen Objekten können mit UML- Klassendiagrammen verdeutlicht werden.
… in EPR 09 gehen wir noch weiter auf Klassendiagramme ein!
Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle
Folie 57
EPI - Organisatorisches