28
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

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

Embed Size (px)

Citation preview

Page 1: 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

Institut für Kartographie und GeoinformationProf. Dr. Lutz Plümer, Dr. Gerhard Gröger

Einführung in die Programmierung mit Java

8. Vorlesung WS 2002/2003

Page 2: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 2

Übersicht

• Besprechung der Hausaufgabe(n)

• Generalisierung/ Spezialisierung

– Modellierung mittels UML (vgl. GIS I)

– Vererben von Variablen

– Vererben von Methoden

– Vererbung und Arrays

– Typkonvertierung

Page 3: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 3

Hausaufgabe: Summe der Dreiecksumfänge

• Ergänzt die Klasse "Dreieck" so, dass mit einer Methode die Summe der Umfänge aller bisher erzeugten Dreiecke ermittelt und zurückgegeben werden kann. Erzeugt drei Dreiecke und gebt die Summe der Umfänge vorher und nachher aus.

• Hinweis:– es bietet sich an, die Summe der Umfänge in einem

statischen Attribut zu speichern

Page 4: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 4

Besprechung: Summe der Dreiecksumfängeclass Dreieck{

....static double summeDerUmfaenge = 0;

//KonstruktorDreieck(double p1x, double p1y, double p2x,...){....summeDerUmfaenge = summeDerUmfaenge + umfang();}double umfang(){...}static double summeUmfaenge(){return summeDerUmfaenge;}

}//Benutzung:System.out.println(Dreieck.summeUmfaenge()); //liefert 0Dreieck d1 = new Dreieck(1.7,4.3,6.2);Dreieck d2 = new Dreieck(6.2,1.4,3.9);System.out.println(Dreieck.summeUmfaenge()); //liefert Summe

//der Umfänge der Dreiecke d1 und d2

Page 5: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 5

Besprechung der Hausaufgabe: Strings• Ersetzt in einem String jedes Vorkommen von ä,ö,ü,ß

durch ae, oe, ue, ss• 1. Schritt: Ersetzten eines Vorkommens von ä,ö,ü,ß:

String s = ...;int i = s.indexOf("ö");if(i != -1) {

s = s.substring(0,i) + "oe" + s.substring(i+1,s.length());}

Page 6: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 6

Besprechung der Hausaufgabe: Strings

• Ersetzt in einem String jedes Vorkommen von ä,ö,ü,ß durch ae, oe, ue, ss

• 2. Schritt: Ersetzten aller Vorkommen von ä,ö,ü,ß:String s = ...;

int i = s.indexOf("ö");if(i != -1) { s = s.substring(0,i) + "oe" + s.substring(i+1,s.length());

}i = s.indexOf("ä");if(i != -1) { s = s.substring(0,i) + "ae" + s.substring(i+1,s.length());

}

Page 7: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 7

Besprechung der Hausaufgabe: Strings

• Ersetzt in einem String jedes Vorkommen von ä,ö,ü,ß durch ae, oe, ue, ss

• 2. Schritt: Ersetzten aller Vorkommen von ä,ö,ü,ß:String s = ...;boolean ende = false;while ( ! ende ){ ende = true; int i = s.indexOf("ö");

if(i != -1) { s = s.substring(0,i) + "oe" + s.substring(i+1,s.length());

ende = false;}i = s.indexOf("ä");if(i != -1) { s = s.substring(0,i) + "ae" + s.substring(i+1,s.length()); ende = false;}}

Page 8: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 8

Klassenhierarchien

• konzeptueller Hintergrund: Generalisierung Spezialisierung

• Spezifikation in UML (Unified Modeling Language):

AbstraktionUnterklasse 1(spez ie ll)

Unterklasse 2(spez ie ll)

Unterklasse 3(spez ie ll)

O berklasse(ge nere ll)

Page 9: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 9

Beispiel zu Klassenhierarchienspezieller

Student Dozent Verwaltungs-angestellter

Person

Ordentlicher Student

Gasthörer

Ein Student ist eine Person

Ein Dozent ist eine Person

Ein Gasthörer ist ein Student

Page 10: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 10

Klassenhierarchien in Java: SyntaxSyntax:

class Unterklasse extends Oberklasse { . . .}

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

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

Page 11: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 11

Klassenhierarchien in Java: Allgemeines• Eine Klasse hat höchstens eine Oberklasse

(Einfachvererbung)

• Eine Klasse 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 12: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 12

Vererbung• Konsequenz aus Spezialisierung• 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 Variablen und Methoden aller darüber liegenden Oberklassen

• wenn A Unterklasse von B ist und B Unterklasse von C, dann erbt A auch von C

Page 13: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 13

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 14: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 14

Übung im GIS-Labor

• Implementiert die Klassen Person, Student und Mitarbeiter, wobei Person Oberklasse der beiden anderen Klassen ist:– Personen haben als Attribute:

• Vor- und Nachname– Studenten haben zusätzlich:

• Matrikelnummer• Studiengang

– Mitarbeiter haben zusätzlich• Namen des Instituts

zur Erinnerung: class Unter extends Ober { ... }

Page 15: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 15

Konstruktoren: Beispiel• class Person{

String nachname;Person(){nachname = "unbekannt";}Person(String nach){nachname = nach;}}class Student extends Person{long matnr;Student() {nachname = "unbekannt"; matnr = -999;}Student(String nach, long matr){ nachname = nach; matrikelnr = matr;} }

• Problem: Konstruktoren der Unterklasse wiederholen Befehle der Konstruktoren der Oberklasse

Page 16: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 16

Konstruktoren: Beispiel• class Person{

String nachname;Person(){nachname = "unbekannt";}Person(String nach){nachname = nach;}}class Student extends Person{long matnr;Student() {nachname = "unbekannt"; matnr = -999;}Student(String nach, long matr){ nachname = nach; matrikelnr = matr;} }

• Bessere Lösung: Konstruktoren der Unterklasse rufen Konstruktoren der Oberklasse auf

• Verwendung der Methode super()

Page 17: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 17

Konstruktoren: Beispiel mit Methode super• class Person{

String nachname;Person(){nachname = "unbekannt";}Person(String nach){nachname = nach;}}class Student extends Person{long matnr;Student() {super(); matnr = -999;}Student(String nach, long matr){ super(nachname); matrikelnr = matr;} }

• super() ruft den Konstruktor der Oberklasse auf, der dieselbe Anzahl/Typ von Parametern hat.

ruft Person() auf

ruft Person(nachname) auf

Page 18: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 18

Typkompatibilität I

• Referenzvariablen gehören zu Klassen und Objekte gehören zu Klassen

• Frage: Welche Objekte dürfen welchen Referenzvariablen zugewiesen werden?

• Antwort: Einer Referenzvariablen der Klasse K dürfen Objekte der Klasse K sowie aller Unterklassen von K zugewiesen werden.

• Beispiel:

Student s = new Student();Person p = s; //OK, da Person Oberklasse von

//Student ist

Page 19: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 19

Typkompatibilität II

• 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 1: Person p = new Person();Student s = p; //geht nicht, da nicht jede Person

//ein Student ist

• Beispiel 2:Student s1 = new Student();Person p = s1; //s1 wird als Person angesehenStudent s2 = p; //geht nicht, da nicht jede Person

//ein Student ist

Page 20: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 20

Typkompatibilität: Zulässige Attribute/Methoden• Welche Attribute/Methoden können verwendet werden?• Es können nur die Attribute/Methoden der Klasse der Referenzvariablen verwendet werden, nicht die der Klasse des

Objekts• Beispiel:

Student s = new Student();Person p = s; //Student p wird als Person angesehenp.nachname = "Schmitz"; //OK, da nachname Attribut //von Person istp.matrikelnr = 123456; //geht nicht, da matrikelnr //kein Attribut von Person //ist– p zeigt zwar auf ein Objekt der Klasse Student (mit matrikelnr), dieses Objekt wird jedoch wie eine Person behandelt. Personen haben i. Allg.

keine matrikelnr.

Page 21: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 21

Vererbung und Arrayelemente: Beispiel• Für die Verwaltung des Hochschulsports sollen Studenten, Mitarbeiter und

Externe in einem Array gespeichert werden.• Welchen Elementtyp hat das Array? • 1. Ansatz: Elementtyp Object:

Object [] hsspArray = new Object[200];hsspArray[0] = new Student("Schmitz");hsspArray[1] = new Mitarbeiter("Meyer");hsspArray[2] = new Person("Schulz");//Durchsuchen nach Person namens "Schulz":for(int i = 0 ; i < 3 ; i = i + 1)

if( hsspArray[i].name == "Schulz") ... //geht nicht• Problem I: Object hat kein Attribut "name"• Problem II: in Array kann alles (jede Unterklasse von Object)

hereingesteckt werden• Klasse zu allgemein

Page 22: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 22

Vererbung und Arrayelemente: Beispiel• Für die Verwaltung des Hochschulsports sollen Studenten, Mitarbeiter

und Externe in einem Array gespeichert werden.• Welchen Elementtyp hat das Array? • 2. Ansatz: Elementtyp Student

Student [] hsspArray = new Student[200];hsspArray[0] = new Student("Schmitz");hsspArray[1] = new Mitarbeiter("Meyer"); //geht nicht

• Problem: ein Mitarbeiter ist kein Student• Klasse zu speziell

Page 23: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 23

Vererbung und Arrayelemente: Beispiel• Für die Verwaltung des Hochschulsports sollen Studenten, Mitarbeiter und

Externe in einem Array gespeichert werden.• Welchen Elementtyp hat das Array? • 3. Ansatz: Elementtyp Person:

Person [] hsspArray = new Person[200];hsspArray[0] = new Student("Schmitz");hsspArray[1] = new Mitarbeiter("Meyer");hsspArray[2] = new Person("Schulz");//Durchsuchen nach Person namens "Schulz":for(int i = 0 ; i < 3 ; i = i + 1)

if( hsspArray[i].name == "Schulz") ... //OK• Person hat Attribut "name"• Funktioniert dank Vererbung (Mitarbeiter und Student sind Unterklasse von

Person)• Auch Mitarbeiter und Student werden als Person angesehen

Page 24: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 24

Typkonvertierung zwischen Klassen• Beispiel: In dem Hochschulsportarray (Elementtyp: Person) soll der

Student mit der Matrikelnummer 1234 gesucht werden• Problem: Personen haben keine Matrikelnummer• Lösung: Typkonvertierung von Person zu Student:

Person [] hsspArray = new Person[200];.......Student s = (Student) hsspArray[i];if( s.matrikelnr == 1234 ) ...}

• Vgl. Typkonvertierung von double zu int in Vorlesung 2• Vorsicht: Typkonvertierung ist nur erlaubt, wenn Referenzvariable

(hsspArray[i])tatsächlich auf ein Objekt vom Typ Student (oder einer Unterklasse von Student) verweist

• Wie ermittelt man, ob ein Objekt zu einer bestimmten Klasse gehört?

Page 25: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 25

Ermittlung der Klassenzugehörigkeit• Wie ermittelt man, ob ein Objekt zu einer bestimmten Klasse gehört?• Operator instanceof• Syntax: referenzvariable instanceof Klassenname• liefert true, wenn referenzvariable auf ein Objekt der Klasse

Klassenname oder einer Unterklasse von Klassenname verweist• Beispiel (Student Unterklasse von Person):

Person p = new Person();Student s = new Student();Object o = p;if( o instanceof Person ) ... //liefert trueif( o instanceof Student ) ... //liefert falseo = s;if( o instanceof Person ) ... //liefert trueif( o instanceof Student ) ... //liefert true

Object

Person

Student

Page 26: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 26

Bsp: Suchen nach Matrikelnummer• Beispiel: In dem Hochulsportarray (Elementtyp: Person) soll der Student mit der

Matrikelnummer 1234 gesucht werdenPerson [] hsspArray = new Person[200];hsspArray[0] = new Student("Schmitz");hsspArray[1] = new Mitarbeiter("Meyer");hsspArray[2] = new Person("Schulz");....................//Durchsuchen nach Student mit Matrikelnr 1234for(int i = 0 ; i < hsspArray.length ; i = i + 1){

if( hsspArray[i] instanceof Student){Student s = (Student) hsspArray[i]; //Typkonvert. if( s.matrikelnr == 1234 ) .... }

}

Page 27: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 27

Übungsaufgabe

• Schreibt ein Programm, das in dem Hochschulsportarray (Elementtyp: Person) die Anzahl der Studenten ermittelt.

• Hinweise:– Person [] hsspArray = new Person[200];– hsspArray[0] = new Student("Schmitz");

Page 28: 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

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 28

Hausaufgabe

• Ergänzt die vorgestellten Klassen „Person“, „Student“ und "Mitarbeiter" um die Klasse „Dozent“ (Unterklassen von Person). Die Unterklasse „Dozent“ soll dabei noch weiter in „Professor“ und „Assistent“ unterschieden werden.

• Erzeugt ein Objekt jeder Klasse und initialisiert dieses mit Beispieldaten.

• Erzeugt ein Array, das Professoren und Assistenten speichert. Füllt dieses mit einigen Objekten.