Kein Folientitel - Institut für Geodäsie und Geoinformation der

Werbung
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger
Einführung in die
Programmierung mit Java
8. Vorlesung WS 2002/2003
Übersicht
• Klassen und Objekte: Vererbung
– Konzeptueller Hintergrund: Spezialisierung
– Modellierung mittels UML
– Vererben von Variablen
– Vererben von Methoden
• Überlagerung von Methoden
• Zugriff auf überlagerte Methoden
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
2
Klassenhierarchien
• konzeptueller Hintergrund:
Generalisierung  Spezialisierung
• Spezifikation in UML (Unified Modeling Language):
Unterklasse 1
(speziell)
Unterklasse 2
(speziell)
Unterklasse 3
(speziell)
Abstraktion
Oberklasse
(generell)
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
3
Beispiel zu Klassenhierarchien
Ein Student ist eine
Person
Ordentlicher
Student
Person
Dozent
Verwaltungsangestellter
spezieller
Student
Ein Dozent ist eine
Person
Gasthörer
Ein Gasthörer
ist ein Student
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
4
Klassenhierarchien in Java (I)
Syntax:
class Unterklasse extends Oberklasse {
...
}
Beispiel:
Datei Person.java:
class Person {
. . .
}
Datei Student.java:
class Student extends Person {
. . .
}
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
5
Klassenhierarchien in Java (II)
• Unterklassen haben genau eine Oberklasse
• Eine Oberklasse kann beliebig viele Unterklassen
besitzen
• Unterklassen können selber wieder Unterklassen
besitzen
• Die oberste Klasse in Java ist die Klasse Object
– alle Klassen sind direkt oder indirekt (wg. Transitivität)
Unterklassen von Object
– wird bei der Klassendefinition kein extends-Schlüsselwort
angegeben, so ist die neue Klasse automatisch direkte
Unterklasse von Object
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
6
Vererbung
• Eine Unterklasse erbt alle Eigenschaften ihrer
Oberklasse:
– Eine Unterklasse erbt alle Variablen ihrer Oberklasse
– Eine Unterklasse erbt alle Methoden ihrer Oberklasse
• Vererbungsbeziehung ist transitiv
– eine Unterklasse erbt die Eigenschaften aller
darüberliegenden Oberklassen
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
7
Bsp. für Vererbung von Variablen & Methoden
class A {
int aVar;
void aMethode(){...}
}
Variablen & Methoden der Klasse
aVar
aMethode()
class B extends A {
int bVar;
void bMethode(){...}
}
aVar, bVar
aMethode(), bMethode()
class C extends B {
int cVar;
void cMethode(){...}
}
aVar, bVar, cVar
aMethode(), bMethode(), cMethode()
class D extends C {
int dVar;
void dMethode(){...}
}
aVar, bVar, cVar, dVar
aMethode(), bMethode(),
cMethode(), dMethode()
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
8
Vorteile der Vererbung
• Implementation / Funktion einer Oberklasse kann zu einem
späteren Zeitpunkt „quasi von außen“ verbessert bzw. korrigiert
werden
– es wird eine entsprechende Unterklasse definiert, die die zu
ändernden Methoden und Variablen durch neue Versionen
überlagert
• Dadurch, dass Klassen durch Unterklassen in eigenen QuelltextDateien spezialisiert werden können, bleiben Programme langfristig
erweiterbar.
• Stufenweise Abstraktion der Klassenhierarchie ermöglicht die
Wiederverwendbarkeit der generelleren Klassen für andere
Projekte.
– In einzelnen Projekten werden dann speziellere Unterklassen
der eher generellen Klassen definiert.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
9
Übung im GIS-Labor
• Implementieren Sie die zwei Klassen Person und
Student als Ober- bzw. Unterklasse:
– Personen haben als Attribute (Instanzvariablen):
• Vor- und Nachname
• Straße und Hausnummer
• PLZ und Ort
– Studenten haben zusätzlich:
• Matrikelnummer
• Studiengang
• Datum des Erstsemesters
zur Erinnerung: class x extends y { ... }
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
10
Überlagerung (engl.: Overriding)
• Methoden einer Unterklasse können Methoden
gleicher Signatur (Name+Parameterliste) aus den
Oberklassen überlagern
– Zweck: Unterklassen modellieren speziellere Objekte;
Methoden der Oberklasse müssen häufig ebenfalls
spezialisiert werden
• Zugriff:
– im Normalfall wird die speziellste Methode verwendet
– expliziter Aufruf einer überlagerten Methode Name der
Oberklasse mittels: super.Name(. . .);
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
11
Beispiel zur Überlagerung von Methoden
class Person {
String vorname, nachname;
void ausgeben() {
System.out.println(vorname + nachname);
}
Ruft die überlagerte
}
die
Methode Überlagert
der Oberklasse
class Student extends Person {
gleichnamige
auf (welche
bereits für die
long matrikelnr;
Methode
Ausgabe der
darin der
void ausgeben() {
Oberklasse
definierten
Variablen sorgt)
super.ausgeben();
System.out.println(matrikelnr);
}
}
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
12
Typkompatibilität
• Einer Variablen der Klasse K dürfen Objekte der
Klasse K sowie aller ihrer Unterklassen zugewiesen
werden.
Über die Referenzvariable p
Beispiel:
Student s = new Student();
Person p = s;
kann nur auf die Methoden &
Instanzvariablen des
Studenten-Objekts zugegriffen
werden, die von Person vererbt
worden sind.
• Der umgekehrte Weg geht nicht:
– Einer Variablen der Unterklasse K kann kein Objekt ihrer
Oberklasse zugewiesen werden (dem Objekt fehlen die für
die Unterklasse spezifischen Eigenschaften)
Beispiel:
Student s = new Person();
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
13
Übungsaufgabe
• Ergänzen Sie die vorgestellten Klassen „Person“ und
„Student“ um die Unterklassen „Dozent“ und
„Verwaltungsangestellter“. Die Unterklasse „Dozent“
soll dabei noch weiter in „Professor“ und „Assistent“
unterschieden werden.
• Alle Klassen sollen eine Methode void ausgeben()
besitzen, die den Inhalt aller Instanzvariablen ausgibt.
(Die Methoden ausgeben() der Unterklasse überlagern
dann die gleichnamige Methode der Oberklasse(n))
• Erzeugen Sie ein Objekt jeder Klasse, initialisieren Sie sie mit
Beispieldaten und geben Sie die Objekte anschliessend
mittels der Methode ausgeben() aus.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
14
Herunterladen