Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum 18.05.2004 Sitzung 5 Sitzung 5: Polymorphismus."—  Präsentation transkript:

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

2 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

3 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;

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

5 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()

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

7 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 urx){ urx = pointCloud[i].getX(); } if( pointCloud[i].getY() > ury){ ury = pointCloud[i].getY(); } pointLowerLeft = new Point(llx, lly); pointUpperRight = new Point(urx, ury); }

8 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 + ")"; }

9 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

10 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()); }

11 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")

12 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

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

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

15 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

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

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

18 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

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

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

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

22 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

23 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 !

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

25 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 );

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

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


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

Ähnliche Präsentationen


Google-Anzeigen