• Keine Ergebnisse gefunden

Modul: Einführung in die Praktische Informatik Grundlagen der Programmierung GPR VG09 OO-Paradigmen / UML-Klassendiagramme

N/A
N/A
Protected

Academic year: 2022

Aktie "Modul: Einführung in die Praktische Informatik Grundlagen der Programmierung GPR VG09 OO-Paradigmen / UML-Klassendiagramme"

Copied!
57
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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)

(2)

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

(3)

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!)

(4)

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

(5)

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

(6)

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!

(7)

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()

(8)

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

(9)

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)

(10)

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.

(11)

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, …

(12)

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.

(13)

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

(14)

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

(15)

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

(16)

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

(17)

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

(18)

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.

(19)

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.

(20)

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.

(21)

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.

(22)

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

(23)

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

(24)

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?

(25)

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.

(26)

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.

(27)

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

(28)

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

(29)

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.

(30)

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

(31)

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!

(32)

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.

(33)

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.

(34)

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!)

(35)

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

(36)

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/

(37)

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

(38)

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.

(39)

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

(40)

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]

(41)

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

(42)

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.

(43)

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

(44)

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

(45)

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

(46)

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

(47)

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

(48)

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

(49)

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/

(50)

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

(51)

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

(52)

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

(53)

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

(54)

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

(55)

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

(56)

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!

(57)

Prof. Dr. Franziska Matthäus Prof. Dr. Matthias Kaschube Dr. Karsten Tolle

Folie 57

EPI - Organisatorisches

… und auch: herzlichen Dank für Ihre

Aufmerksamkeit!

Referenzen

ÄHNLICHE DOKUMENTE

werden gleichzeitig definiert (Rekursion!) I Namen f, y und Parameter (x) überlagern andere I Es gilt die Abseitsregel. I Deshalb: Auf gleiche Einrückung der lokalen

Christoph Lüth &amp; Dennis Walter Universität Bremen Wintersemester

I Vordefinierte Typen: Listen [a] und Tupel (a,b) I Berechungsmuster über Listen: primitive Rekursion,. Listenkomprehension I Überladung

I Eigenschaften von Werten des Typen (insb. ihre innere Struktur) können nur über die bereitgestellten Operationen beobachtet werden. Zur Implementation von ADTs in

I Signatur: Typ und Operationen eines ADT I Axiome: über Typen formulierte Eigenschaften. I Spezifikation = Signatur

Christoph Lüth &amp; Dennis Walter Universität Bremen Wintersemester

I Berechungsmuster über Listen: primitive Rekursion, Listenkomprehension. I Überladung

Abstract: Ausgehend von einigen grundsätzlichen Postulaten für einen allgemein bildenden Informatikunterricht in der Sekundarstufe 1 wird ein möglicher Lernweg skizziert, der von