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

Sitzung 5: Polymorphismus

  • Upload
    barbie

  • View
    28

  • Download
    0

Embed Size (px)

DESCRIPTION

Sitzung 5: Polymorphismus. Anmerkungen Aufgabe 3. e-mail 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 - PowerPoint PPT Presentation

Citation preview

Page 1: Sitzung 5: Polymorphismus

18.05.2004 Sitzung 5

Sommersemester 2004Jan Drewnak

Entwicklung und Einsatzvon Geosoftware I

Praktikum

Sitzung 5: Polymorphismus

Page 2: Sitzung 5: Polymorphismus

18.05.2004 Polymorphismus

Anmerkungen Aufgabe 3

• e-mail 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

Page 3: Sitzung 5: Polymorphismus

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

Page 4: Sitzung 5: Polymorphismus

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

Page 5: Sitzung 5: Polymorphismus

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

Page 6: Sitzung 5: Polymorphismus

18.05.2004 Polymorphismus

Musterlösung Aufgabe 3 - Entwurf

• Darstellung des Entwurfs in der Unified Modeling Language (UML)

Klassenname

Attribute

Methoden

Klasse Assoziation ("besitzt Attribut vom Typ")

Page 7: Sitzung 5: Polymorphismus

18.05.2004 Polymorphismus

Musterlösung Aufgabe 3

public class BoundingBox {

//Attribute (bzw. Variable):private Point pointLowerLeft;private Point pointUpperRight;

//Constructorpublic 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);

}

Page 8: Sitzung 5: Polymorphismus

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

Page 9: Sitzung 5: Polymorphismus

18.05.2004 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 nullif((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 nullif((pointLowerLeft == null) || (pointUpperRight == null)){

return -1;}else{

return pointUpperRight.getX() - pointLowerLeft.getX();}

}} //Class BoundingBox

Page 10: Sitzung 5: Polymorphismus

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

}

Page 11: Sitzung 5: Polymorphismus

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

Page 12: Sitzung 5: Polymorphismus

18.05.2004 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

Point@119c082

Page 13: Sitzung 5: Polymorphismus

18.05.2004 Polymorphismus

Ziel heute

Begriff Polymorphismus verstehen

• Bedeutung

• Arten

• Realisierung in Java

• abstrakte Klassen

• Interfaces

Page 14: Sitzung 5: Polymorphismus

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

Page 15: Sitzung 5: Polymorphismus

18.05.2004 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

Page 16: Sitzung 5: Polymorphismus

18.05.2004 Polymorphismus

Was ist Polymorphismus ?

• Beispiel: Überschreiben der Methode toString()

class Point {…

public String toString() {return "x: "+getX()+"; y: "+getY();

}}

Page 17: Sitzung 5: Polymorphismus

18.05.2004 Polymorphismus

Dynamische Bindung

FigureInterface

+area()

Circle

+area()

Rectangle

+area()

FigureContainer

+cumulateArea()

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

Page 18: Sitzung 5: Polymorphismus

18.05.2004 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

Page 19: Sitzung 5: Polymorphismus

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

Page 20: Sitzung 5: Polymorphismus

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

Page 21: Sitzung 5: Polymorphismus

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

Page 22: Sitzung 5: Polymorphismus

18.05.2004 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

Page 23: Sitzung 5: Polymorphismus

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

Page 24: Sitzung 5: Polymorphismus

18.05.2004 Polymorphismus

Java Beispielinterface 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...

Page 25: Sitzung 5: Polymorphismus

18.05.2004 Polymorphismus

Java BeispielFigureInterface[] 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 );

Page 26: Sitzung 5: Polymorphismus

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

Page 27: Sitzung 5: Polymorphismus

18.05.2004 Polymorphismus

Aufgabe 4

• Vorab: Implementierung des Figure Beispiels

• die HA 4 via e-mail an:

Jan Drewnak ([email protected])& Arne Bröring ([email protected])

bis Samstag 29.05; 24.00 s.t.