2. vererbung und polymorphie - tu dresdenst.inf.tu-dresden.de/files/teaching/ss11/swt/... ·...
TRANSCRIPT
-
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