Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit.

Ähnliche Präsentationen


Präsentation zum Thema: "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit."—  Präsentation transkript:

1 Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit Java 8. Vorlesung WS 2003/2004

2 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/042 Übersicht Generalisierung/ Spezialisierung –Modellierung mittels UML (vgl. GIS I) –Vererben von Variablen –Vererben von Methoden –Vererbung und Arrays –Typkonvertierung

3 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/043 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

4 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/044 Besprechung: Summe der Dreiecksumfänge class Dreieck{.... static double summeDerUmfaenge = 0; //Konstruktor Dreieck(double p1x, double p1y, double p2x,...){.... summeDerUmfaenge = summeDerUmfaenge + umfang(); } double umfang(){...} static double summeUmfaenge(){return summeDerUmfaenge;} } //Benutzung: System.out.println(Dreieck.summeUmfaenge()); //liefert 0 Dreieck d1 = new Dreieck(1.7,6.4,5.8,4.3,6.2,9.4); Dreieck d2 = new Dreieck(6.2,1.4,3.9,7.4,8.2,1.8); System.out.println(Dreieck.summeUmfaenge()); //liefert Summe //der Umfänge der Dreiecke d1 und d2

5 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/045 Klassenhierarchien (Generalisierung) konzeptueller Hintergrund: Generalisierung  Spezialisierung Spezifikation in UML (Unified Modeling Language): Abstraktion

6 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/046 Beispiel zu Klassenhierarchien spezieller StudentDozent Verwaltungs- angestellter Person Ordentlicher Student Gasthörer Ein Student ist eine Person Ein Dozent ist eine Person Ein Gasthörer ist ein Student

7 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/047 Klassenhierarchien in Java: Syntax Syntax: class Unterklasse extends Oberklasse {... } Beispiel: Datei Person.java: class Person {... } Datei Student.java: class Student extends Person {... }

8 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/048 Klassenhierarchien in Java: Allgemeines Eine Klasse hat höchstens eine Oberklasse (Einfachvererbung) Eine Klasse 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

9 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/049 Vererbung Konsequenz aus Spezialisierung Eine Unterklasse erbt alle Eigenschaften ihrer Oberklasse: –Eine Unterklasse erbt alle Attribute 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 C Unterklasse von B ist und B Unterklasse von A, dann erbt C auch von A A B C

10 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0410 Bsp. für Vererbung von Attributen & Methoden class A { int aAtt; aAtt void aMethode(){...} aMethode() } class B extends A { int bAtt; aAtt, bAtt void bMethode(){...} aMethode(), bMethode() } class C extends B { int cAtt; aAtt, bAtt, cAtt void cMethode(){...} aMethode(), bMethode(), cMethode() } class D extends C { int dAtt; aAtt, bAtt, cAtt, dAtt void dMethode(){...} aMethode(), bMethode(), } cMethode(), dMethode() Attribute & Methoden der Klasse A B C D

11 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0411 Konstruktoren bei Spezialisierung: 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

12 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0412 Konstruktoren bei Spezialisierung: 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() Der super() -Aufruf muss im Konstruktor immer die erste Anweisung sein und darf maximal einmal je Konstruktor benutzt werden

13 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0413 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(nach); matrikelnr = matr;} } super(....) ruft den Konstruktor der Oberklasse auf, der dieselbe Anzahl/Typ von Parametern hat. ruft Person() auf ruft Person(nach) auf

14 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0414 Übung im GIS-Labor Implementiert die Klassen Person, Student und Mitarbeiter mit entsprechenden Konstruktoren, 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 {... } Der super() -Aufruf muss im Konstruktor immer die erste Anweisung sein und darf maximal einmal je Konstruktor benutzt werden

15 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0415 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

16 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0416 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 angesehen Student s2 = p;//geht nicht, da nicht jede Person //ein Student ist

17 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0417 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 angesehen p.nachname = "Schmitz"; //OK, da nachname Attribut //von Person ist p.matrikelnr = ; //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.

18 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0418 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.equals("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

19 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0419 Exkurs: Gleichheit von Strings Beispiel: String a = "Abc"; String b = "Abc"; if( a == b ).... // a == b muss nicht gelten (hängt // vonCompiler/Interpreter ab) Problem: "==" überprüft Gleichheit der Referenz (des String-Objekts), nicht des Werts (der Zeichenkette) Besser: Methode equals von String: if( a.equals(b) ) // wahr, wenn beide Zeichenketten // gleich sind

21 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0421 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.equals("Schulz"))... //OK Person hat Attribut "name" Funktioniert dank Vererbung (Mitarbeiter und Student sind Unterklasse von Person) Auch Mitarbeiter und Student werden als Person angesehen

22 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0422 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?

23 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0423 Ermittlung der Klassenzugehörigkeit Wie ermittelt man, ob ein Objekt zu einer bestimmten Klasse gehört? boolescher 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 true if( o instanceof Student )... //liefert false o = s; if( o instanceof Person )... //liefert true if( o instanceof Student )... //liefert true Object Person Student

24 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0424 Bsp: Suchen nach Matrikelnummer Beispiel: In dem Hochulsportarray (Elementtyp: Person) soll der Student mit der Matrikelnummer 1234 gesucht werden Person [] hsspArray = new Person[200]; hsspArray[0] = new Student("Schmitz"); hsspArray[1] = new Mitarbeiter("Meyer"); hsspArray[2] = new Person("Schulz"); //Durchsuchen nach Student mit Matrikelnr 1234 for(int i = 0 ; i < hsspArray.length ; i = i + 1) { if( hsspArray[i] instanceof Student) { Student s = (Student) hsspArray[i]; //Typkonvert. if( s.matrikelnr == 1234 ).... }

25 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0425 Ü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");

26 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/0426 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.


Herunterladen ppt "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit."

Ähnliche Präsentationen


Google-Anzeigen