Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum 18.05.2004 Sitzung 5 Sitzung 5: Polymorphismus.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
der Universität Oldenburg
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Einführung in die Programmierung Zusammenfassung
Kritische Betrachtung
Kapselung , toString , equals , Java API
der Universität Oldenburg
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Abstrakte Klassen.
Polymorphie (Vielgestaltigkeit)
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 4 Vererbung Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung X1 Sitzung X1: Packages & Wiederholung.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Klassen 02 - Klassen.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Vererbung Einfache Vererbung – Erben von abstrakten Klassen – Implementieren eines Interfaces.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sitzung 3: Klassen, Objekte, Arrays und Kontrollstrukturen
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 6 Sitzung 6: Model-View-Controller als Grundlage.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Objektorientiertes Programmieren
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
ObjektOrientiertes Programmieren
Objektorientiertes Konstruieren
EPROG Tutorium #4 Philipp Effenberger
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Programmiervorkurs WS 2014/15 Instanzmethoden
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003 Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger,
Objektorientierte (OO) Programmierung
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Einführung in die Programmierung mit Java
 Präsentation transkript:

Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 5 Sitzung 5: Polymorphismus

Polymorphismus Anmerkungen Aufgabe 3 mit Lösungen (an Arne und mich): nur Source-Dateien (*.java), keine kompilierten Klassendateien alle Klassen, die zum Kompilieren notwendig sind (z.B. Punktklasse) ab jetzt: Jede Klasse in einer eigenen.java-Datei Tabulator zum Einrücken verwenden, nicht Leertaste(Space) Kapselung: erstmal: alle Member einer Klasse (Attribute + Operationen) private dann: welche Operationen (fast nie: Attribute) sollen von außen nutzbar sein? public

Polymorphismus Musterlösung Aufgabe 3 - Entwurf Wie soll die Klasse heißen? 1.Was repräsentiert sie? Eine BoundingBox! 2.Was steht in der Aufgabe? BoundingBox! Welche Attribute hat eine BoundingBox? ist ein Rechteck; wird definiert durch zwei Punkte (links unten und rechts oben): Point lowerLeft; Point upperRight;

Polymorphismus Musterlösung Aufgabe 3 - Entwurf Welche Konstruktoren braucht eine BBox? = Wie kann ich eine BoundingBox anlegen? = Welche Angaben werden zum Anlegen einer BoundingBox benötigt? Variante A: 2 Punkte public BoundingBox(Point lowerLeft, Point upperRight) Variante B: Punkt-Liste ( Aufgabenstellung!!!) public BoundingBox(Point[] pointList) Variante C: …

Polymorphismus Musterlösung Aufgabe 3 - Entwurf Welche Operationen möchte ich mit der BBox durchführen können? ( Aufgabenstellung!!!) Eckpunkte abfragen public Point getLowerLeft() public Point getUpperRight() Höhe und Breite ermitteln public double getHeight() public double getWidth() Textuelle Repräsentation abrufen (zur Ausgabe auf der Konsole etc.) public String toString()

Polymorphismus Musterlösung Aufgabe 3 - Entwurf Darstellung des Entwurfs in der Unified Modeling Language (UML) Klassenname Attribute Methoden Klasse Assoziation ("besitzt Attribut vom Typ")

Polymorphismus Musterlösung Aufgabe 3 public class BoundingBox { //Attribute (bzw. Variable): private Point pointLowerLeft; private Point pointUpperRight; //Constructor public BoundingBox(Point[] pointCloud){ double llx = pointCloud[0].getX(); double lly = pointCloud[0].getY(); double urx = pointCloud[0].getX(); double ury = pointCloud[0].getY(); for(int i=0; i<pointCloud.length; i++){ if( pointCloud[i].getX() < llx){ llx = pointCloud[i].getX(); } if( pointCloud[i].getY() < lly){ lly = pointCloud[i].getY(); } if( pointCloud[i].getX() > urx){ urx = pointCloud[i].getX(); } if( pointCloud[i].getY() > ury){ ury = pointCloud[i].getY(); } pointLowerLeft = new Point(llx, lly); pointUpperRight = new Point(urx, ury); }

Polymorphismus Musterlösung Aufgabe 3 /** * gibt den linken, unteren Eckpunkt der BoundingBox zurück. */ public Point getLowerLeft(){ return pointLowerLeft; } /** * gibt den rechten, oberen Eckpunkt der BoundingBox zurück. */ public Point getUpperRight(){ return pointUpperRight; } /** * gibt ein String-Format der BoundingBox zurück. */ public String toString(){ return "(" + pointLowerLeft + ", " + pointUpperRight + ")"; }

Polymorphismus Musterlösung Aufgabe 3 /** * liefert die Hoehe der BoundingBox. * Falls die BoundingBox nicht korrekt intanziert wurde liefert die Methode -1. */ public double getHeight(){ //Fall: BoundingBox wurde nicht korrekt intanziert -> die Eckpunkte sind null if((pointLowerLeft == null) || (pointUpperRight == null)){ return -1; } else{ return pointUpperRight.getY() - pointLowerLeft.getY(); } /** * liefert die Breite der BoundingBox. * Falls die BoundingBox nicht korrekt intanziert wurde liefert die Methode -1. */ public double getWidth(){ //Fall: BoundingBox wurde nicht korrekt intanziert -> die Eckpunkte sind null if((pointLowerLeft == null) || (pointUpperRight == null)){ return -1; } else{ return pointUpperRight.getX() - pointLowerLeft.getX(); } } //Class BoundingBox

Polymorphismus Musterlösung Aufgabe 3 class BoundingBoxApplication{ public static void main(String[] args) { Point p1 = new Point(1.0, 2.0); Point p2 = new Point(4.0, 6.0); Point p3 = new Point(3.0, 5.0); Point[] pCloud = new Point[3]; pCloud[0] = p1; pCloud[1] = p2; pCloud[2] = p3; BoundingBox bBox = new BoundingBox(pCloud); System.out.println("bBox= " + bBox.toString()); System.out.println("Hoehe von bBox= " + bBox.getHeight()); System.out.println("Breite von bBox= " + bBox.getWidth()); System.out.println("Eckpunkt 'pointLowerLeft': " + bBox.getPointLowerLeft()); System.out.println("Eckpunkt 'pointUpperRight': " + bBox.getPointUpperRight()); }

Polymorphismus Wiederholung: Vererbung Point nPoint = new NamedPoint(1.0, 1.0, "Punkt1"); double xCoord = nPoint.getX(); class NamedPoint extends Point { // NamedPoint-spezifische // Attribute und Methoden … } extends ("is-a")

Polymorphismus Wiederholung: Vererbung Alle Klassen, die Sie schreiben, erben implizit von java.lang.Object ! … und damit alle Methoden der Klasse Point p1 = new Point(1.0, 1.0); System.out.println(p1.toString()); Methoden u.a.: String toString() Gibt eine Textrepräsentation des Objekts zurück

Polymorphismus Ziel heute Begriff Polymorphismus verstehen Bedeutung Arten Realisierung in Java abstrakte Klassen Interfaces

Polymorphismus Was ist Polymorphismus ? Bedeutung des Wortes polymorph = vielgestaltig (mehrere Formen) vgl. Polymorphismus in Biologie und Chemie: Unterschiedliche Formen von Lebewesen derselben Art Körper oder Stoffe, die abhängig von der Umgebung (z.B. Temperatur) unterschiedliche (poly-) Formen (-morph) annehmen können (z.B. Wasser)

Polymorphismus Was ist Polymorphismus ? Bedeutung in der OOP Eine Operation (Operator, Methode) ist für verschiedene Typen (Objektklassen) zulässig. Jedes Objekt weiß selbst, wie es die Operation auszuführen hat. Deklaration genereller Eigenschaften durch abstrakte Klassen und Interfaces. Überschreibung vordeklarierter Methoden

Polymorphismus Was ist Polymorphismus ? Beispiel: Überschreiben der Methode toString() class Point { … public String toString() { return "x: "+getX()+"; y: "+getY(); }

Polymorphismus Dynamische Bindung Die Entscheidung für die benötigte Methode wird zur Laufzeit getroffen. Das wird als dynamische Bindung bezeichnet.

Polymorphismus Was ist Polymorphismus ? Beispiel: Überschreiben der Methode toString() class Point { … public String toString() { return "x: "+getX()+"; y: "+getY(); } Object instanz = new Point(1.0, 2.0); System.out.println(intanz.toString()); x:1.0; y:2.0

Polymorphismus Wozu Polymorphismus ? Erweiterbarkeit Das grundsätzliche Verhalten eines Objektes wird durch die Methoden-Deklarationen der Superklasse festgelegt: toString(), textuelle Repräsentation eines Objekts area(), Berechnung und Rückgabe der Flächengröße Die Implementierung der Methode erfolgt jedoch erst in einer speziellen Klasse (= Überschreiben) - also an der Stelle, wo das Wissen über die Eigenschaften der Objekte ist.

Polymorphismus Wozu Polymorphismus ? Fördert die klare Konzeption Verwendung einheitlicher Namen für Operationen Es kann zunächst (abstrakt) beschrieben was zu tun ist und erst später wie es für einzelne Objekttypen (=Klassen) zu tun ist. Der (geschickte) Einsatz des Polymorphismus erlaubt eine sehr elegante objektorientierte Entwicklung..., bedarf jedoch auch einiger Erfahrung.

Polymorphismus Polymorphismus in Java Beschreibung des abstrakten Verhaltens durch a) abstrakte Methoden b) Interfaceklassen Die abstrakten Methoden bzw. die Methoden der Interfaceklassen müssen in den abgeleiteten Klassen überschrieben und implementiert werden.

Polymorphismus Abstrakte Klassen.... abstract class AbstractClass { abstract void abstractMethod(); /* Muß überschrieben werden. */ void baseMethod() { /* Kann überschrieben werden */ }; } Können implementierte und abstrakte (zu überschreibende) Methoden enthalten Ableitung via extends Keine Mehrfachvererbung möglich

Polymorphismus.... und Interfaces interface AbstractClass { int useArrayList = 1; /*...usw.*/ void baseMethod(); /* Muß in der abgeleiteten Klasse überschrieben und implementiert werden. */ } Kann als Attribute lediglich Konstanten enthalten (flags) und alle Methoden müssen überschrieben werden (Ableitung via implements) Mehrfachvererbung von Interfaceklassen ist möglich - Aber selten notwendig !

Polymorphismus Java Beispiel interface FigureInterface { public double area(); } class Rectangle implements FigureInterface{ Rectangle(double widthIn, double heightIn) { width_ = widthIn; height_ = heightIn; } public double area(){ // überschreibe area()für Rechteck: return (width_*height_); } double width_, height_; } für Circle analog...

Polymorphismus Java Beispiel FigureInterface[] figures; figures = new FigureInterface[2]; Figure testRectangle = new Rectangle(1.0,2.0); Figure testCircle = new Circle(3.0); figures[0] = testRectangle; figures[1] = testCircle double areaSum = 0; for (int i=0; i < figures.length; i++) { areaSum += figures[i].area(); } System.out.println("Cummulated area: " + areaSum );

Polymorphismus Zusammenfassung Polymorphismus ist ein wesentliches Konzept der Objektorientierung. Es dient der Abstraktion bei Entwurf und Implementierung gleiche Namen für gleiches Verhalten Trennung von Verhalten und Implementierung (= Form) der Implementierung von Methoden an der Stelle, wo das Wissen um die Eigenschaften eines Objektes vorhanden ist.

Polymorphismus Aufgabe 4 Vorab: Implementierung des Figure Beispiels die HA 4 via an: Jan Drewnak & Arne Bröring bis Samstag 29.05; s.t.