Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

47
Eiffel Ein Vortrag im Rahmen des Seminars ProgrammiersprachenChristian Niehaus

Transcript of Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

Page 1: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

EiffelEin Vortrag im Rahmen des Seminars

“Programmiersprachen”

Christian Niehaus

Page 2: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

2

Gliederung

• Entstehungsgeschichte von Eiffel• Allgemeines zu Eiffel• Besondere Aspekte von Eiffel

– Einfach- und Mehrfachvererbung

– Dynamisches Binden und Polymorphismus

– Selektiver Export von Features

– Programming by Contract

– Fehlerbehandlung und Exceptions

• Fazit

Page 3: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

3

Gliederung

• Entstehungsgeschichte von Eiffel• Allgemeines zu Eiffel• Besondere Aspekte von Eiffel

– Einfach- und Mehrfachvererbung

– Dynamisches Binden und Polymorphismus

– Selektiver Export von Features

– Programming by Contract

– Fehlerbehandlung und Exceptions

• Fazit

Page 4: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

4

Entstehungsgeschichte

• Entwickelt 1985 durch Bertrand Meyer und Jean Marc Nerson• Namensgeber ist Gustave Eiffel, der Konstrukteur des

Eiffelturms• Streng objektorientierte Programmiersprache nach Vorbild von

Simula• Seit 1987 kommerzielle Vermarktung• Heute zahlreiche frei verfügbare Eiffel-Compiler im Internet

Page 5: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

5

Gliederung

• Entstehungsgeschichte von Eiffel

• Allgemeines zu Eiffel• Besondere Aspekte von Eiffel

– Einfach- und Mehrfachvererbung

– Dynamisches Binden und Polymorphismus

– Selektiver Export von Features

– Programming by Contract

– Fehlerbehandlung und Exceptions

• Fazit

Page 6: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

6

Allgemeines

• Compiler-Sprache• Gehört zur Klasse der objektorientierten Sprachen• Programm als System miteinander interagierender Klassen• Unterstützung von

– (Mehrfach-) Vererbung– Dynamisches Binden– Polymorphismus– Datenabstraktion / Abstrakte Klassen

Page 7: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

7

Allgemeines

• Fünf Basistypen: INTEGER, REAL, DOUBLE, CHARACTER, BOOLEAN

• Alle anderen Datentypen müssen als Klassen realisiert werden• Automatische Speicherverwaltung

– Automatische Zuweisung von Speicherbereichen an neu erstellte Objekte

– Automatische Bereinigung des Speichers mittels Garbage Collector

Page 8: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

8

Klassen

• Klasse besteht aus sog. Features (Methoden/Funktionen, Variablen und Konstanten)

• Alle Variablen sind Teil eines Objekts, keine globalen Variablen• Auch Hauptprogramm in Form einer Klasse

class HELLOcreation hello_worldfeature

hello_world isdo

print (”Hello World”)end

end

Page 9: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

9

Gliederung

• Entstehungsgeschichte von Eiffel• Allgemeines zu Eiffel• Besondere Aspekte von Eiffel

– Einfach- und Mehrfachvererbung– Dynamisches Binden und Polymorphismus

– Selektiver Export von Features

– Programming by Contract

– Fehlerbehandlung und Exceptions

• Fazit

Page 10: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

10

Klasse AUTO ist konform zu Klasse FAHRZEUGKlasse FAHRZEUG ist nicht konform zu Klasse AUTOKlasse AUTO ist komform zu sich selbstKlasse FAHRZEUG ist konform zu sich selbst

Vererbung

• Kindklasse erbt die Features von Vaterklasse• Immer Vererbung aller Features, kein selektives Erben nur einzelner

Features• Kindklasse ist konform zur Vaterklasse

class AUTOinherit FAHRZEUG.....

FAHRZEUG

AUTO

Page 11: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

11

class STUDENTISCHE_HILFSKRAFTinherit STUDENT, LEHRSTUHLMITARBEITER...

Mehrfachvererbung

• Eine Klasse kann in Eiffel beliebig viele Vaterklassen haben• Vererbungsgraph hat keine klassische Baumstruktur mehr

STUDENTLEHRSTUHL

MITARBEITER

STUDENTISCHE_HILFSKRAFT

Page 12: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

12

Möglichkeiten der Feature-Übernahme

• Unveränderte Übernahme von geerbten Features• Umbenennen von geerbten Features (rename)• Redefinition von geerbten Features (redefine)• Effecting von geerbten Features• Zusammenfügen von geerbten Features (join)• undefine von geerbten Features

Page 13: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

13

Umbenennen von Features

• Feature erhält einen neuen Namen, unter dem es auch weitervererbt werden kann

• Alter Name des Features kann anderweitig vergeben werden• Keine Änderung der Funktionalität

Mögliche Gründe:• Name eines geerbten Features passt vom Sinn her nicht mehr

in die Kindklasse• Namenskonflikt durch Mehrfachvererbung

Page 14: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

14

Beispiel rename

class STUDENTISCHE_HILFSKRAFTinherit STUDENT

rename personennummer as matrikelnummerinherit LEHRSTUHLMITARBEITER

rename personennummer as mitarbeiternummerend....

STUDENTLEHRSTUHL

MITARBEITER

STUDENTISCHE_HILFSKRAFT

Page 15: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

15

Redefinition von Features

• Änderung von– Implementierung– Signatur– Zusicherungen eines Features

• Neue Signatur muss konform zur alten sein, d.h.– Anzahl Parameter darf sich nicht ändern

– Neue Typen von Parametern und Rückgabewert müssen konform zu bisherigen Typen sein

Page 16: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

16

Beispiel Redefinition

class KREISinherit ELLIPSE

redefineberechne_umfang

endfeature

berechne_umfang is do-- hier neue Implementierung einfügen...

end

Page 17: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

17

Effecting

• Implementieren eines sog. deferred Features• Feature wird dadurch zu effektivem Feature• Arbeitet nach denselben Regeln wie Redefinition• Wird zusammen mit Redefinition unter dem Oberbegriff

Redeklaration zusammengefasst

Page 18: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

18

Join

• Automatisches Zusammenfassen von mehreren geerbten deferred Features zu einem einzigen Feature

• Features müssen dabei identische Namen und Signaturen haben

• Zusammenfassen von Features mit unterschiedlichen Signaturen nicht möglich

STUDENTLEHRSTUHL

MITARBEITER

STUDENTISCHE_HILFSKRAFT

berechne_alter berechne_alter

berechne_alter

Page 19: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

19

undefine

• Zurückversetzen eines effektiven Features in den deffered Zustand

• Dabei keine Änderung der Signatur des Features

Beispiel:

class Binherit A

undefine methode_1end...

Page 20: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

20

Gliederung

• Entstehungsgeschichte von Eiffel• Allgemeines zu Eiffel• Besondere Aspekte von Eiffel

– Einfach- und Mehrfachvererbung

– Dynamisches Binden und Polymorphismus– Selektiver Export von Features

– Programming by Contract

– Fehlerbehandlung und Exceptions

• Fazit

Page 21: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

21

Statischer und dynamischer Typ

• Variable besteht Typ, Name und Wert• Ist Typ eine Klasse, so besteht Wert aus einem Verweis auf ein

Objekt• Typ untergliedert sich dann in statischen und dynamischen Typ

– statischer Typ ist derjenige Typ, der bei Variablendeklarion festgelegt wurde

– dynamischer Typ ist der Typ desjenigen Objekts, auf das die Variable derzeit referenziert

• Statischer Typ ist während gesamter Laufzeit fest• Dynamischer Typ kann sich während Laufzeit ändern

Variable statischer Typ

dynamischer TypTyp

Name

Wert

Page 22: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

22

Polymorphismus

• Statischer und dynamischer Typ müssen nicht übereinstimmen• Variable kann während Laufzeit Objekte unterschiedlicher

Typen annehmen

• Dynamischer Typ muss aber stets konform zu statischem Typ sein

Polymorphismus

Page 23: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

23

Beispiele Polymorphismus

Variable Objekt

Statischer Typ: FAHRZEUG

Wert: Dynamischer Typ: FAHRZEUG

Statischer Typ: FAHRZEUG

Wert: Dynamischer Typ: AUTO

Statischer Typ: AUTO

Wert: Dynamischer Typ: FAHRZEUG

Page 24: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

24

FAHRZEUG

AUTO

Dynamisches Binden

bewegen

fahren

Variable meinFahrzeug:

Statischer Typ: FAHRZEUG

Dynamischer Typ: AUTO

meinFahrzeug.bewegen

Page 25: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

25

Gliederung

• Entstehungsgeschichte von Eiffel• Allgemeines zu Eiffel• Besondere Aspekte von Eiffel

– Einfach- und Mehrfachvererbung

– Dynamisches Binden und Polymorphismus

– Selektiver Export von Features– Programming by Contract

– Fehlerbehandlung und Exceptions

• Fazit

Page 26: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

26

class Afeature {B, C}

x: INTEGERy: REALmethode_1 is

do...

end

Exportliste

Selektiver Export von Features

• Häufig sollen Features nicht für beliebige andere Objekte sichtbar sein

• Features können selektiv nur für Objekte bestimmter Klasse sichtbar gemacht werden

• Dazu Anpassung des Exportstatus• Exportstatus eines Features kann bei dessen Deklaration

mittels sog. Exportliste festgelegt werden

Page 27: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

27

feature {A, B, C} alle Objekte, die konform zu Klassen A, B oder C sind

feature {ANY}feature

alle Objekte

feature {NONE}feature {}

keine Objekte (privates Feature)

Exportliste Sichtbarkeitsbereich

Beispiele Exportliste

Page 28: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

28

Beispiel:

class B inherit Aexport

{C} x{D, E} y, methode_1

endend

Änderung des Exportstatus

• Exportstatus wird an Unterklassen weitervererbt• Exportstatus geerbter Features kann in der Unterklasse

nachträglich geändert werden

Features y und methode_1 sind jetzt für alle Klassen sichtbar, die konform zu D oder E sind.

Feature x ist jetzt für alle Klassen sichtbar, die konform zu C sind.

Page 29: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

29

Gliederung

• Entstehungsgeschichte von Eiffel• Allgemeines zu Eiffel• Besondere Aspekte von Eiffel

– Einfach- und Mehrfachvererbung

– Dynamisches Binden und Polymorphismus

– Selektiver Export von Features

– Programming by Contract– Fehlerbehandlung und Exceptions

• Fazit

Page 30: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

30

Programming by Contract

• Dient der Korrektheit und Robustheit des erstellten Programms• Kommunikation zwischen Objekten beruht auf sog.

Zusicherungen

Zusicherungen• Präzise festgelegte Verpflichtungen zwischen aufrufender Routine (client)

und aufgerufener Routine (supplier)Vertrag zwischen Client und Supplier

• Bestehen aus boolschen Ausdrücken• Bei Nichterfüllung einer Zusicherung wird Exception geworfen

Page 31: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

31

Typen von Zusicherungen

• Vorbedingungen• Nachbedingungen• Klasseninvarianten• Schleifenvarianten• Schleifeninvarianten

Page 32: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

32

Vorbedingung

Nachbedingung

ProgrammlogikProgrammlogik

Client Supplier

Routinenaufru

fVorbedingungprüfen

Exceptio

n Routineabarbeiten

Nachbedingungprüfen

Rückgabe

Vor- und Nachbedingungen

routine_1 routine_2

Page 33: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

33

sqrt (p: REAL): REAL is

end

do-- Quadratwurzel berechnen....

Programmlogik

ensureabs ((result * result) - p) < 0.001 Nachbedingung

Vorbedingungrequire

p >= 0

Beispiel Vor- und Nachbedingungen

Page 34: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

34

Klasseninvariante

• Für gesamtes Objekt gültig (nicht für einzelne Routinen)• Muss zu jedem Zeitpunkt erfüllt sein, zu dem von außerhalb auf

das Objekt zugegriffen werden kann• Gut geeignet für allgemeine Konsistenzbedingungen

Page 35: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

35

Schleifeninvariante

• Stellt korrekten Ablauf von Schleifen sicher• Muss nach Schleifeninitialisierung sowie vor jedem Durchlauf

erfüllt sein• Nichterfüllen führt zu Abbruch der Schleife und Werfen einer

Exception

Page 36: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

36

Schleifenvariante

• Stellt sicher, dass keine Endlosschleifen auftreten• INTEGER-Ausdruck, der zu Beginn der Abarbeitung größer Null

sein muss• Muss bei jedem Schleifendurchlauf dekrementiert werden• Hat Schleifenvariante Null erreicht, so bricht die Schleife ab

Page 37: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

37

Gliederung

• Entstehungsgeschichte von Eiffel• Allgemeines zu Eiffel• Besondere Aspekte von Eiffel

– Einfach- und Mehrfachvererbung

– Dynamisches Binden und Polymorphismus

– Selektiver Export von Features

– Programming by Contract

– Fehlerbehandlung und Exceptions• Fazit

Page 38: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

38

Fehlerbehandlung und Exceptions

• Bei Auftreten eines Fehlers wird sog. Exception geworfen• Ohne spezielle Fehlerbehandlung führt Exception zu Abbruch

der betreffenden Routine• Ähnlich wie bei Java

Page 39: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

39

routine_1 is

rescue-- rescue-Block

ensure-- Nachbedingung

do-- Routinen-Quelltext

require-- Vorbedingung

end

• Fehlerbehandlung mittels sog. rescue-Block• Frei implementierbares Codestück einer Routine• Wird nur ausgeführt, wenn in betreffender Routine ein Fehler

aufgetreten ist• Geeignet z. B. zum erneuten Initialisieren von Variablen oder

Sicherstellen von Invarianten

Fehlerbehandlung

Page 40: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

40

Basis-Routine Routine 1 Routine 2 Routine 3

Routinenaufruf Routinenaufruf Routinenaufruf

XException

XException

XException

X

RescueBlock

RescueBlock

RescueBlock

RescueBlock

Organisierte Panik

Page 41: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

41

retry-Anweisung

• Darf nur innerhalb eines rescue-Blocks stehen• Bewirkt einen Neustart der gescheiterten Routine• Allerdings keine automatische Neu-Initialisierung der Variablen• Vor retry sollte in rescue-Block dafür gesorgt werden, dass

Vorbedingungen und Invarianten erfüllt sind

Page 42: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

42

Basis-Routine Routine 1 Routine 2 Routine 3

Routinenaufruf Routinenaufruf Routinenaufruf

X

RescueBlock

retry

retry-Anweisung

Page 43: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

43

RückmeldungRückmeldungRückmeldung

Basis-Routine Routine 1 Routine 2 Routine 3

Routinenaufruf Routinenaufruf Routinenaufruf

RescueBlock

retry

retry-Anweisung

Page 44: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

44

try_once_or_twice islocal

already_tried: BOOLEANdo

if not already_tried thenmethod_1

elsemethod_2

endrescue

if not already_tried thenalready_tried := trueretry

endend

Beispiel retry-Anweisung

Page 45: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

45

Gliederung

• Entstehungsgeschichte von Eiffel• Allgemeines zu Eiffel• Besondere Aspekte von Eiffel

– Einfach- und Mehrfachvererbung

– Dynamisches Binden und Polymorphismus

– Selektiver Export von Features

– Programming by Contract

– Fehlerbehandlung und Exceptions

• Fazit

Page 46: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

46

Fazit

• Mächtige Sprache• Dennoch schlanke, leicht erlernbare Syntax• Schwerpunkt liegt auf Korrektheit und Robustheit des erstellten

Codes• Gute Wiederverwendbarkeit und Erweiterbarkeit von

bestehendem Code

• sehr strenge Objektorientierung• sehr komplexe Vererbungsbeziehungen durch

Mehrfachvererbung

Page 47: Eiffel Ein Vortrag im Rahmen des Seminars Programmiersprachen Christian Niehaus.

Vielen Dank für Eure Aufmerksamkeit