Einführung in die Programmierung mit Java

14
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002

description

Einführung in die Programmierung mit Java. 9. Vorlesung WS 2001/2002. Übersicht. Klassen und Objekte: Vererbung Konzeptueller Hintergrund: Spezialisierung Modellierung mittels UML Vererben von Variablen Vererben von Methoden Überlagerung von Methoden Zugriff auf überlagerte Methoden. - PowerPoint PPT Presentation

Transcript of Einführung in die Programmierung mit Java

Page 1: Einführung in die Programmierung mit Java

Institut für Kartographie und GeoinformationProf. Dr. Lutz Plümer, Dr. Thomas H. Kolbe

Einführung in die Programmierung mit Java

9. Vorlesung WS 2001/2002

Page 2: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

2 2

Übersicht

• Klassen und Objekte: Vererbung

– Konzeptueller Hintergrund: Spezialisierung

– Modellierung mittels UML

– Vererben von Variablen

– Vererben von Methoden

• Überlagerung von Methoden

• Zugriff auf überlagerte Methoden

Page 3: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

3 3

Klassenhierarchien

• konzeptueller Hintergrund:

Generalisierung Spezialisierung

• Spezifikation in UML (Unified Modeling Language):

Abstra

ktionUnterklasse 1

(spez ie ll)Unterklasse 2

(spez ie ll)Unterklasse 3

(spez ie ll)

O berklasse(ge nere ll)

Page 4: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

4 4

Beispiel zu Klassenhierarchienspezie

ller

Student Dozent Verwaltungs-angestellter

Person

Ordentlicher Student

Gasthörer

Page 5: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

5 5

Klassenhierarchien in Java (I)

Syntax:

class Unterklasse extends Oberklasse { . . .}

Beispiel: Datei Person.java: class Person { . . .

}

Datei Student.java: class Student extends Person { . . .

}

Page 6: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

6 6

Klassenhierarchien in Java (II)

• Unterklassen haben genau eine Oberklasse

• Eine Oberklasse kann beliebig viele Unterklassenbesitzen

• 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

Page 7: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

7 7

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

Page 8: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

8 8

Bsp. für Vererbung von Variablen & Methoden

class A { int aVar; aVar void aMethode(){...} aMethode()}

class B extends A { int bVar; aVar, bVar void bMethode(){...} aMethode(), bMethode()}

class C extends B { int cVar; aVar, bVar, cVar void cMethode(){...} aMethode(), bMethode(), cMethode()}

class D extends C { int dVar; aVar, bVar, cVar, dVar void dMethode(){...} aMethode(), bMethode(), } cMethode(), dMethode()

Variablen & Methoden der Klasse

Page 9: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

9 9

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 Quelltext-Dateien 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.

Page 10: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

10 10

Ü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 { ... }

Page 11: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

11 11

Ü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(. . .);

Page 12: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

12 12

Beispiel zur Überlagerung von Methoden

class Person { String vorname, nachname; void ausgeben() { System.out.println(vorname + nachname); }}

class Student extends Person { long matrikelnr; void ausgeben() { super.ausgeben(); System.out.println(matrikelnr); }}

Überlagert die gleichnamigeMethode der Oberklasse

Überlagert die gleichnamigeMethode der Oberklasse

Ruft die überlagerte Methode der Oberklasse auf (welche bereits für die Ausgabe der darin definierten Variablen sorgt)

Ruft die überlagerte Methode der Oberklasse auf (welche bereits für die Ausgabe der darin definierten Variablen sorgt)

Page 13: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

13 13

Typkompatibilität

• Einer Variablen der Klasse K dürfen Objekte der Klasse K sowie aller ihrer Unterklassen zugewiesen werden.

Beispiel:

Student s = new Student();

Person p = s;

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

Über die Referenzvariable p kann nur auf die Methoden & Instanzvariablen des Studenten-Objekts zugegriffen werden, die von Person vererbt worden sind.

Über die Referenzvariable p kann nur auf die Methoden & Instanzvariablen des Studenten-Objekts zugegriffen werden, die von Person vererbt worden sind.

Page 14: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

14 14

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