2. Vererbung und Polymorphie - TU Dresdenst.inf.tu-dresden.de/files/teaching/ss11/swt/... ·...

43
Softwaretechnologie, © Prof. Uwe Aßmann 1 2. Vererbung und Polymorphie Prof. Dr. rer. nat. Uwe Aßmann Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden Version 11-0.1, 04.04.11 1) Vererbung zwischen Klassen 2) Abstrakte Klassen und Schnittstellen 3) Polymorphie

Transcript of 2. Vererbung und Polymorphie - TU Dresdenst.inf.tu-dresden.de/files/teaching/ss11/swt/... ·...

  • Softwaretechnologie, © Prof. Uwe Aßmann 1

    2. Vererbung und Polymorphie

    Prof. Dr. rer. nat. Uwe AßmannLehrstuhl Softwaretechnologie

    Fakultät für InformatikTU Dresden

    Version 11-0.1, 04.04.11

    1) Vererbung zwischen Klassen

    2) Abstrakte Klassen und Schnittstellen

    3) Polymorphie

  • Prof. Uwe Aßmann, Softwaretechnologie 2

    Begleitende Literatur

    ► Das Vorlesungsbuch von Pearson: Softwaretechnologie für Einsteiger. Vorlesungsunterlage für die Veranstaltungen an der TU Dresden. Pearson Studium, 2009. Enthält ausgewählte Kapitel aus:

    ■ UML: Harald Störrle. UML für Studenten. Pearson 2005. Kompakte Einführung in UML 2.0.

    ■ Softwaretechnologie allgemein: W. Zuser, T. Grechenig, M. Köhle. Software Engineering mit UML und dem Unified Process. Pearson. 2004.

  • Prof. Uwe Aßmann, Softwaretechnologie 3

    Obligatorische Literatur

    ► Zuser Kap 7, Anhang A► Störrle, Kap. 5.2.6, 5.6► Java

    ■ Balzert LE 9-10■ Boles Kap. 7, 9, 11, 12

  • Prof. Uwe Aßmann, Softwaretechnologie 4

    Ziele

    ► Einfache Vererbung zwischen Klassen, konzeptuell und im Speicher► Abstrakte Klassen und Schnittstellen verstehen► Merkmalssuche in einer Klasse und in der Vererbungshierarchie

    aufwärts nachvollziehen können► Überschreiben von Merkmalen verstehen► Polymorphie im Speicher verstehen

  • Softwaretechnologie, © Prof. Uwe Aßmann 5

    2.1 Vererbung

    Ähnlichkeit zwischen Klassen und Objekten

  • Prof. Uwe Aßmann, Softwaretechnologie 66

    Einfache Vererbung

    eat()work()sleep()getName()

    ► Hier: Oberklasse Person enthält alle gemeinsamen Merkmale der UnterklasseEinfache Schreibweise: Professor < Person. Student < Person.

    ► Vererbung: Eine Klasse kann Merkmale von einer Oberklasse übernehmen

    ■ .. und teilt sie damit mit allen Geschwistern

    ■ Die Unterklasse ist damit ähnlich zu dem Elter und den Geschwistern

    ■ Vererbung drückt Ähnlichkeit bzw. Gemeinsamkeiten aus

    ■ Vererbung stellt is-a-Beziehung her► Einfache Vererbung

    ■ Jede Klasse hat nur eine Oberklasse■ Die Vererbungsrelation ist ein Baum

    Person

    giveLecture()

    Professor

    visitLecture()drinkBeer()

    Student

  • Prof. Uwe Aßmann, Softwaretechnologie 7

    Begriffshierarchien (Taxonomien)

    ► Klassifikationen enden oft in Begriffshierarchien■ Begriffsklassen besitzen nur Attribute und Invarianten■ Operationale Klassen auch Operationen

    name:Identifier;

    Class

    attributes:Attribute[];invariants:Invariant[];

    ConceptClass

    operations:Operation[]

    OperationalClass

    OperationalClass <ConceptClass <Class

  • Prof. Uwe Aßmann, Softwaretechnologie 8

    Bsp: Begriffshierarchie der Methodenarten► Wiederholung: Welche Arten von Methoden gibt es in einer Klasse?

    ZustandsinvarianteMethoden

    ZustandsveränderndeMethoden

    Anfrage (query) Checker Zustands-modifikatorenNetz-modifikatoren

    Methode

    Repräsentations-Wechsler

    AllgemeineMethoden

  • Prof. Uwe Aßmann, Softwaretechnologie 9

    Bsp. Taxonomie der Steuererklärungen

    ► Das deutsche Steuerrecht kennt viele Arten von Steuererklärungen► Eine Klassifikation führt zu einer Begriffshierarchie

    Einkommens-steuererklärung

    deadline:Date

    Vermögens-steuererklärung

    Erbschafts-steuererklärung

    Umsatzsteuer-Erklärung

    taxRatio:int

    Lohnsteuer-Jahresausgleich

    ReineEinkommens-steuererklärung

    Vorsteuer-erklärung

    Umsatzsteuer-Nachzahlung

    Steuererklärung

    sum: intaddress:Address

  • Prof. Uwe Aßmann, Softwaretechnologie 10

    Bsp. Erweiterung einer Begriffshierarchien hin zu Operationalen Klassen► Programmiert man eine Steuerberater-Software, muss man die

    Begriffshierachie der Steuererklärungen als Klassen einsetzen.► Daneben sind aber die Klassen um Operationen zu erweitern, denn

    innerhalb der Software müssen sie ja etwas tun.

    Steuererklärungsum: intaddress:Addressship()

    Einkommens-steuererklärungdeadline:DatecomputePayBack()

    Vermögens-steuererklärung

    Erbschafts-steuererklärung

    Umsatzsteuer-Erklärung

    taxRatio:int

    Lohnsteuer-Jahresausgleich

    ReineEinkommens-steuererklärung

    Vorsteuer-erklärung

    Umsatzsteuer-Nachzahlung

  • Prof. Uwe Aßmann, Softwaretechnologie 11

    Bsp. Begriffshierarchie verschiedener Zeiten im Lebenszyklus einer Software► Übersetzungszeit kennt hauptsächlich Klassen; Laufzeit kennt

    hauptsächlich Objekte

    Übersetzungszeit(compile time)

    Bindezeit(link time)

    Ladezeit(load, deploy-ment time)

    Laufzeit(run time)

    Generierungs-zeit(generation time)

    Reine Übersetzungs-zeit

    Startzeit(Allokations-zeit, allocation, creation time)

    Arbeits-/Lebenszeit(life time)

    Zeitabschnitt

    „dynamisch“„statisch“

    Rekonfigura-tionszeit

    Wartungszeit

  • Prof. Uwe Aßmann, Softwaretechnologie 12

    Vererbung im Speicher

    ► ... am Beispiel Steuerzahler

    name:StringmartialStatus:String

    work()

    Person

    taxnumber:intpay()fillIn()

    TaxPayerSteuerzahler

    earn()

    MoonlighterSchwarzarbeiter

  • Prof. Uwe Aßmann, Softwaretechnologie 13

    Vererbung im Speicher

    name:String == null

    Halde (Objektspeicher)

    maritalStatus:String == null010014018 methodTable:Method[]

    name:String

    maritalStatus:String144148

    156 prototype:Class

    Prototypen im statischen Speicher

    work()

    taxnumber:int

    022026030 methodTable:Method[] pay()

    fillIn()

    taxnumber:int == 12940152

    name:String

    maritalStatus:String132136

    prototype:Class140

    superClass:Class

    026030 methodTable:Method[]

    earn()

    superClass:Classname:String

    maritalStatus:String144148

    prototype:Class152

    ► Verzeigerung der Vererbungsrelation von Unter- zu Oberklassen■ Unterscheide davon die Objekt-Prototyp-Relation!

    ► Methoden werden zwischen den Klassen geteilt

    Vererbungs-relation

  • Prof. Uwe Aßmann, Softwaretechnologie 14

    Merkmalssuche im Vererbungsbaum

    eat()work()sleep()getName()

    Person

    giveLecture()

    Professor

    visitLecture()drinkBeer()

    Student

    salary

    Employee

    ProfessorEmeritus

    visitUniversity()drinkBeer()

    Alumnus

    visitNullCourse()

    Beginner

    salary

    LonglifeStudent

    ► Oberklassen sind allgemeiner als Unterklassen (Prinzip der Generalisierung)

    ► Unterklassen sind spezieller als Oberklassen (Spezialisierung)

    ■ Unterklassen erben alle Merkmale der Oberklassen

    ► Methoden- bzw. Merkmalssuche:

    ■ Wird ein Merkmal nicht in einer Klasse definiert, wird in der Oberklasse gesucht (method or feature resolution)

    Merkmalssuche„work()“

    Merkmalssuche„salary“

  • Prof. Uwe Aßmann, Softwaretechnologie 15

    Merkmalssuche im Speicher - Beispiele1) Suche Attribut name in Steuerzahler: direkt vorhanden2) Suche Methode pay() in Steuerzahler: Schlage Prototyp nach, finde in Methodentabelle des

    Prototyps3) Suche Methode work() in Steuerzahler: Schlage Prototyp nach, Schlage Oberklasse nach

    (Person), finde in Methodentabelle von Person4) Suche Methode payback() in Steuerzahler: Schlage Prototyp nach, Schlage Oberklasse

    nach (Person); exisitert nicht in Methodentabelle von Person. Da keine weitere Oberklasse existiert, wird ein Fehler ausgelöst “method not found” “message not understood”

    name:String == null

    Halde (Objektspeicher)

    maritalStatus:String == null

    010014018 methodTable:Method[]

    name:String

    maritalStatus:String

    144148

    156 prototype:Class

    Prototypen im statischen Speicher

    work()

    taxnumber:int

    022026030

    methodTable:Method[] pay()fillIn()

    taxnumber:int == 12940152

    name:StringmaritalStatus:String

    132136

    prototype:Class140

    superClass:Class

    026030 methodTable:Method[]

    earn()

    superClass:Classname:StringmaritalStatus:String

    144148

    prototype:Class152

  • Prof. Uwe Aßmann, Softwaretechnologie 16

    Beispiel als Venn-Diagramm

    Professor

    Schill:Professor

    Aßmann:Professor

    Härtig:Professor

    Student

    Schneider:Student

    Müller:Student

    Weckermann:Student

    Person

    ► Vererbung kann auch durch Enthaltensein von Rechtecken ausgedrückt werden

    ■ Einfach-Vererbung ergibt ein Diagramm ohne Überschneidungen► Für Objekt-Extents einer Klassenhierarchie gilt, dass jede Klasse die

    eigenen Objekte verwaltet■ Der Objekt-Extent einer Oberklasse ergibt sich aus der Vereinigung der

    Extents aller Unterklassen (Person aus Professor und Student). Genau das drückt das Venn-Diagramm aus

  • Prof. Uwe Aßmann, Softwaretechnologie 17

    Objekt-Extent im Speicher, mit Vererbung► Zu einer Klasse vereinige man alle Extents aller Unterklassen

    name:String == null

    maritalStatus:String == null

    010014018 methodTable:Method[]

    name:StringmaritalStatus:String

    144148

    156 prototype:Classtaxnumber:int

    022

    026030

    methodTable:Method[]

    taxnumber:int == 12940152

    name:String

    maritalStatus:String

    132136

    prototype:Class140

    superClass:Class

    034038

    methodTable:Method[]superClass:Class

    name:String

    maritalStatus:String

    160164

    prototype:Class168

    extent:List(Object)

    extent:List(Object)

    name:StringmaritalStatus:String

    172176

    prototype:Class180

    name:String

    maritalStatus:String

    184188

    196 prototype:Class

    taxnumber:int == 12941192

    extent:List(Object)

    042046050

  • Prof. Uwe Aßmann, Softwaretechnologie 18

    drinkBeer() { ... select Erdinger; enjoy();}

    Erweitern und Überschreiben von Merkmalen

    ► Eine Unterklasse kann neue Merkmale zu einer Oberklasse hinzufügen (Erweiterung, extension)

    ► Definiert eine Unterklasse ein Merkmal erneut, spricht man von einer Redefinition (Überschreiben, overriding)

    ■ Dieses Merkmal überschattet (verbirgt) das Merkmal der Oberklasse, da der Merkmals-suchalgorithmus in der Hierarchie von unten nach oben sucht.

    eat()work()drinkBeer()getName()

    Person

    giveLecture()drinkBeer()

    Professor

    visitLecture()drinkBeer()

    Student

    salary

    Employee

    ProfessorEmeritus

    drinkBeer()

    visitUniversity()drinkBeer()

    Alumnus

    drinkBeer() { ... select Leffe; enjoy();}

    drinkBeer() {}

    drinkBeer() { ... select Radeberger; enjoy();}

  • Prof. Uwe Aßmann, Softwaretechnologie 19

    Bemerkung

    ► Wir benutzen i.A. mehrere Darstellungen für Klassen- und Objektdiagramme

    ■ UML-Strukturdiagramme■ Venn-Diagramme (mengenorientiert)

    ► Venn-Diagramme haben den Vorteil, dass sie sowohl die Zugehörigkeit eines Objekts zu einer Klasse als auch Vererbung zwischen Klassen mit einem Einkapselung einheitlich beschreiben (mengentheoretischer und Ähnlichkeitsaspekt)

    ► Venn-Diagramme können sowohl die statischen Beziehungen von Klassen, als auch die dynamischen Beziehungen von Objekten und Klassen beschreiben

  • Softwaretechnologie, © Prof. Uwe Aßmann 20

    2.2 Schnittstellen und Abstrakte Klassen

  • Prof. Uwe Aßmann, Softwaretechnologie 21

    Schnittstellen und Klassen

    ► Operationale Klassen werden unterteilt in Klassen mit, ohne, und mit Implementierung einer Untermenge der Operationen

    ► Schnittstellen und Abstrakte Klassen dienen dem Teilen von Typen und partiellem Klassen-Code

    Schnittstelle(interface)- ohne Implementierung, nur Signaturen

    Abstrakte Klasse- partielle Implementierung

    (Konkrete) Klasse- mit Implementierung

    Klassenbegriff

  • Prof. Uwe Aßmann, Softwaretechnologie 22

    Schnittstellen und Klassen in UML

    ► In UML werden sog. Stereotypen vergeben, um Schnittstellen zu kennzeichnen ()

    ► Abstrakte Klassen werden mit einem speziellen Markierer (tagged value) gekennzeichnet ({abstract}) oder kursiv gemalt

    drinkBeer()

    Professor

    visitLecture()

    Student

    getSalary()

    Employee

    drinkBeer() { ... select Leffe; enjoy();}

    VisitLecture() { stepIn(); payAttention();}

    getName() { return name;}

    getName()

    NamedThing

    drinkBeer() { ... select Radeberger; enjoy();}

    getSalary() { ... goToBank() withDraw();}

    {abstract}Person

  • Prof. Uwe Aßmann, Softwaretechnologie 23

    Schnittstellen und Klassen in Java

    interface NamedThing { String getName(); // no implementation}abstract class Person implements NamedThing { String name; String getName() { return name; } // implementation exists abstract void drinkBeer(); // no implementation}abstract class Employee extends Person { abstract void getSalary(); // no implementation}class Professor extends Employee { // concrete class void getSalary() { goToBank(); withDraw(); } void drinkBeer() { .. select Leffe(); enjoy(); }}class Student extends Person { // concrete class void visitLecture() { stepIn(); payAttention(); } void drinkBeer() { .. select Radeberger(); enjoy(); }}

    interface NamedThing { String getName(); // no implementation}abstract class Person implements NamedThing { String name; String getName() { return name; } // implementation exists abstract void drinkBeer(); // no implementation}abstract class Employee extends Person { abstract void getSalary(); // no implementation}class Professor extends Employee { // concrete class void getSalary() { goToBank(); withDraw(); } void drinkBeer() { .. select Leffe(); enjoy(); }}class Student extends Person { // concrete class void visitLecture() { stepIn(); payAttention(); } void drinkBeer() { .. select Radeberger(); enjoy(); }}

  • Prof. Uwe Aßmann, Softwaretechnologie 24

    Abstrakte Klassen und Abstrakte Operationen

    class Teambesprechung extends Termin { ... boolean verschieben (Hour neu) { boolean ok = abstimmen(neu, dauer); if (ok) { beginn = neu; raumFestlegen(); }; return ok; };};

    abstract class Termin { ... String titel; Hour beginn; int dauer; ... abstract boolean verschieben (Hour neu);};

    Jede abstrakt deklarierte Methode muß in einer Unterklasse realisiert

    werden - sonst können keine Objekteder Unterklasse erzeugt werden!

  • Prof. Uwe Aßmann, Softwaretechnologie 25

    Einfache Vererbung von Typen durch Schnittstellen

    Team-besprechung

    Termin

    Vortrag

    Hausveranstaltung

    einladen()absagen()

    Hinweis: “Lutscher”-Notation (lollipop) für Schnittstellen „Klasse bietet Schnittstelle an“:

    Team-besprechung

    Haus-veranstaltung

    einladen()absagen()

    einladen()absagen()

  • Prof. Uwe Aßmann, Softwaretechnologie 26

    Schnittstellen und abstrakte Klassen

    Abstrakte Klasse Schnittstelle

    Enthält Attribute und Operationen

    Kann Default-Verhaltenfestlegen

    Default-Verhalten kann inUnterklassen überdefi niert

    werdenJava: Unterklasse kann nur

    von einer Klasse erben

    Enthält nur Operationen(und ggf. Konstante)

    Kann kein Default-Verhaltenfestlegen

    Redefi nition unsinnig

    Java: Eine Klasse kannmehrere Schnittstellen

    implementierenSchnittstelle ist eine spezielle

    Sicht auf eine Klasse

  • Softwaretechnologie, © Prof. Uwe Aßmann 27

    2.3. Polymorphie

  • Prof. Uwe Aßmann, Softwaretechnologie 28

    Vererbung und Polymorphie

    ► Welcher Begriff beschreibt das Objekt?► Welche Begriffshierarchie wird verwendet

    (Oberklassen/Unterklassen)?► Wie hängt das Verhalten des Objektes von der Hierarchie ab

    (spezieller vs allgemeiner)?

    Klasse:„Ampel“

    Vererbung:Sensorgesteuerte

    Ampel

    Polymorphie:Ampeln mit

    Sensorsteuerungreagieren anders als zeitgesteuerte

    Ampeln auf Zeittakt

    Klasse:„Ampel“

    Vererbung:Zeitgesteuerte

    Ampel

  • Prof. Uwe Aßmann, Softwaretechnologie 29

    Beispiel: Ampel-Klasse und Ampel-Objekte

    SensorAmpel ZeitAmpel

    Ampel

    DD-0X5A: SensorAmpel

    DD-0X5B: SensorAmpel DD-0Y3C: ZeitAmpel

    Instanz einer KlasseGeneralisierung (Vererbung)

    ► Jede Ampel reagiert auf den Zeittakt.■ Die Klasse Ampel schreibt vor, daß auf die Nachricht „Zeittakt“ reagiert

    werden muß.■ Verschiedene Reaktionen der Unterklassen

  • Prof. Uwe Aßmann, Softwaretechnologie 30

    Beispiel: Termin-Klasse und Termin-Objekte

    AR-12: Teambesprechung

    AR-13: Teambesprechung

    Figaro am 10.1.01: Theaterbesuch

    Teambesprechung Theaterbesuch

    Geschäftstermin Privater Termin

    Termin

    Kundenbesuch

    ► Jeder Termin kann verschoben werden.■ Die Klasse Termin schreibt vor, daß auf die Nachricht „verschiebeTermin“

    reagiert werden muß.► Unterklassen spezialisieren Oberklassen

  • Prof. Uwe Aßmann, Softwaretechnologie 31

    Polymorphie (polymorphism)

    ► Zur Laufzeit kann jedes Objekt einer Unterklasse ein Objekt einer Oberklasse vertreten. Das Objekt der Oberklasse ist damit vielgestaltig (polymorphic).

    Person

    visitLecture()drinkBeer()

    Student

    visitUniversity()drinkBeer()

    Alumnus

    Beginner LonglifeStudent

    PersonList

    John:BeginnerTUDList:PersonList

    John:Student

    John:LonglifeStudent

    John:Alumnus(4)

    (1)

    (2)

    (3)

  • Prof. Uwe Aßmann, Softwaretechnologie 32

    Wechsel der Gestalt (Polymorphie)

    ► Die genaue Unterklasse eines Objektes wird festgestellt■ Beim Erzeugen (der Allokation) des Objekts (Allokationszeit, oft in der

    Aufbauphase des Objektnetzes)■ Bei einer neuen Zuweisung (oft in einer Umbauphase des Objektnetzes)

    Person person;if (hasLeftUniversity)

    person = new Alumnus();else

    person = new Student();// which type has person here?....

    if (hasWorkedHardLongEnough)person = new Professor();

    // which type has person here?

    Person person;if (hasLeftUniversity)

    person = new Alumnus();else

    person = new Student();// which type has person here?....

    if (hasWorkedHardLongEnough)person = new Professor();

    // which type has person here?

  • Prof. Uwe Aßmann, Softwaretechnologie 33

    Dynamischer Aufruf (Dynamic dispatch)

    ► Dynamischer Aufruf (polymorpher Aufruf) realisiert Polymorphie zur Laufzeit

    ■ Aufruf an Objekte aus Vererbungshierarchien unter Einsatz von Merkmals-(Methoden-)suche (method resolution)

    ► Dynamischer Aufruf ist also Aufruf an Objekt + Methodensuche

    ■ Suche wird oft mit Tabellen realisiert (dispatch)

    name:StringdrinkBeer()

    Person

    giveLecture()

    Professor

    visitLecture()drinkBeer()

    Student

    salary

    Employee

    graduationYear:intdrinkBeer()

    Alumnus

    visitNullCourse()

    Beginner

    getSalary()drinkBeer()

    LonglifeStudent

    Merkmalssuche

    John:BeginnerdrinkBeer()

  • Prof. Uwe Aßmann, Softwaretechnologie 34

    Dynamischer Aufruf (Dynamic Dispatch)► Vom Aufrufer aus wird ein Suchalgorithmus gestartet, der die

    Vererbungshierarchie aufwärts läuft, um die rechte Methode zu finden■ Diese Suche kann teuer sein und muß vom Übersetzer optimiert werden

    (dispatch optimization)

    CallerObject

    dispatch

    Callee

    Callee Callee

  • Prof. Uwe Aßmann, Softwaretechnologie 35

    Was passiert beim polymorphen Aufruf im Speicher?► Frage: Welche Inkarnation der Methode drinkBeer() wird zu den

    verschiedenen Zeitpunkten im Leben Johns aufgerufen?

    name:String == nullmethodTable:Method[]

    name:String = „John Silver“prototype:Class == Beginner

    graduationYear:intmethodTable:Method[]

    name:Stringprototype:Class == Person

    superClass:Class

    methodTable:Method[]superClass:Class

    name:StringmaritalStatus:Stringprototype:Class == Student

    extent:List(Object)

    extent:List(Object)

    name:Stringprototype:Class == LonglifeStudent

    name:StringgraduationYear:int == 1997prototype:Class == Alumnus

    extent:List(Object)

    Person

    Alumnus

    Beginner

    methodTable:Method[]superClass:Class

    extent:List(Object)

    Student

    methodTable:Method[]superClass:Class

    extent:List(Object)

    LonglifeStudent

    drinkBeer()

    visitLecture()drinkBeer()

    visitNullCourse()

    getSalary()drinkBeer()

    John:Person

    drinkBeer()

    John:Beginner <Person

    John:Student <Person

    John:LonglifeStudent <Person

    John:Alumnus <Person

    1

    2

    3

    4

    5

  • Prof. Uwe Aßmann, Softwaretechnologie 36

    Polymorphe und monomorphe Methoden

    name:StringmartialStatus:String

    work()

    Man

    taxnumber:intpay()fillIn()

    TaxPayerSteuerzahler

    work()earn()

    MoonlighterSchwarzarbeiter

    ► Methoden, die nicht mit einer Oberklasse geteilt werden, können nicht polymorph sein

    ► Die Adresse einer solchen monomorphen Methode im Speicher kann statisch, d.h., vom Übersetzer ermittelt werden. Eine Merkmalssuche ist dann zur Laufzeit nicht nötig

    ► Frage: Welche der folgenden Methoden sind poly-, welche monomorph?

  • Prof. Uwe Aßmann, Softwaretechnologie 37

    Einsatz von Polymorphie

    ► Oft modellieren Unterklassen Rollen einer Oberklasse► Eine Rolle ist ein dynamischer Zustand eines Objekts: ein Objekt

    spielt eine Rolle für einige Zeit■ Akademiker spielen verschiedene Rollen bez. ihres Studentenlebens■ Männer können ledig, verheiratet, geschieden, wiederverheiratet sein■ Menschen können Kinder, Teenager, Erwachsene, Rentner sein■ Autos können fabrikneu, Jahreswagen, gebraucht, Wrack, oder Schrott

    sein► Man implementiert den Wechsel einer Rolle durch den Wechsel der

    entsprechenden Unterklasse durch■ Alloziere und fülle neues Objekt aus den Werten des alten Objektes

    heraus■ Setze Variable um auf neues Objekt■ (Dealloziere altes Objekt)

  • Prof. Uwe Aßmann, Softwaretechnologie 38

    Prinzipielle Vorteile von Objektorientierung

    Zuständigkeitsbereiche

    Hierarchie

    Baukastenprinzip

    Klare Schnittstellen

    Lokale Kombination vonDaten und Operationen,gekapselter Zustand

    Definiertes Objektverhalten,Nachrichten zwischen Objekten

    Vererbung und Polymorphie(Spezialisierung),Klassenschachtelung

    Benutzung vorgefertigterKlassenbibliotheken,Anpassung durch Spezialisierung(mittels Vererbung)

    Stabilität

    Wieder-verwendung

    Änderungs-freundlichkeit

  • Prof. Uwe Aßmann, Softwaretechnologie 39

    Klassen, Komplexe Objekte und Komponenten

    ► Komplexe Objekte bestehen aus vielen Teilobjekten► Komponenten sind Einheiten zur Wiederverwendung. Sie

    müssen aber keine Objekte sein, sondern können Fragmente, Spezifikationen etc. sein, statisch oder dynamisch

    ► Fragmentkomponenten sind (unvollständige) Komponenten bzw. Kompositionseinheiten (CBSE-Vorlesung)

    ■ Schablonen (templates) sind unvollständige, generische Fragmentkomponenten

    ► COTS-Komponenten (component-off-the-shelf) sind binäre kauffertige Komponenten (oder -klassen)

    Klasse KomplexeKlasseBinäre Komponenten-Klasse (COTS)

    ObjektKomplexesObjekt(Geschäftsobjekt)

    BinäreKomponente

    Komponente(nklasse)

    Schablone(Template)

    Fragment-Komponente

  • Prof. Uwe Aßmann, Softwaretechnologie 40

    Die Klasse "Object"

    ► java.lang.Object: allgemeine Eigenschaften aller Objekte.■ Jede Klasse ist Unterklasse von Object (“extends Object”).■ Diese Vererbung ist implizit (d.h. man kann “extends Object” weglassen).

    ► Jede Klasse kann die Standard-Operationen überdefinieren:■ equals: Objektgleichheit (Standard: Referenzgleichheit)■ hashCode: Zahlcodierung■ toString: Textdarstellung, z.B. für println()

    class Object {protected Object clone (); // kopiert das Objektpublic boolean equals (Object obj); // prüft auf Gleichheit zweier Objektepublic int hashCode(); // produce a unique identifierpublic String toString(); // produce string representationprotected void finalize(); // lets GC runClass getClass(); // gets prototype object

    }

  • Prof. Uwe Aßmann, Softwaretechnologie 41

    Vererbung von Object auf Anwendungsklassen

    drinkBeer() { ... select Erdinger; enjoy();}

    eat()work()drinkBeer()getName()

    Person

    giveLecture()drinkBeer()

    Professor

    visitLecture()drinkBeer()

    Student

    salary

    Employee

    ProfessorEmeritus

    drinkBeer()

    visitUniversity()drinkBeer()

    Alumnus

    drinkBeer() { ... select Leffe; enjoy();}

    drinkBeer() {}

    drinkBeer() { ... select Radeberger; enjoy();}

    Steuererklärungsum: int

    address:Addressship()

    Einkommens-steuererklärungdeadline:Date

    computePayBack()

    Vermögens-steuererklärung

    Erbschafts-steuererklärung

    Umsatzsteuer-Erklärung

    taxRatio:int

    Lohnsteuer-Jahresausgleich

    ReineEinkommens-

    steuererklärung

    Vorsteuer-erklärung

    Umsatzsteuer-Nachzahlung

    Object

    Object clone()String toString()

    ...

  • Prof. Uwe Aßmann, Softwaretechnologie 42

    Was haben wir gelernt?

    ► Vererbung zwischen Klassen erlaubt die Wiederbenutzung von Merkmalen aus Oberklassen, sowohl Schnittstellen als auch Implementierungen

    ■ Einfache Vererbung führt zu Vererbungshierarchien► Merkmalssuche löst die Bedeutung von Merkmalsnamen auf, in dem

    von den gegebenen Unterklassen aus aufwärts gesucht wird■ Polymorphie benutzt Merkmalssuche, um die Mehrdeutigkeit von Namen

    in einer Vererbungshierarchie aufzulösen■ Monomorphe Aufrufe sind schneller, weil die Merkmalssuche eingespart

    werden kann► Schnittstellen sind voll abstrakte Klassen► Die Klasse Object enthält als implizite Oberklasse der Java-

    Bibliothek gemeinsam nutzbare Funktionalität für alle Java-Klassen

  • Prof. Uwe Aßmann, Softwaretechnologie 43

    The End

    Slide 1Begleitende LiteraturSlide 3Slide 4Slide 5Single InheritanceSlide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Abstrakte Klassen und OperationenEinfache Vererbung durch SchnittstellenSchnittstellen und abstrakte Klassen Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Die Klasse "Object"Slide 41Slide 42Slide 43