1 / 27

Sitzung 5: Polymorphismus

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

barbie
Download Presentation

Sitzung 5: Polymorphismus

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sitzung 5: Polymorphismus Sitzung 5

  2. 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 Polymorphismus

  3. Musterlösung Aufgabe 3 - Entwurf • Wie soll die Klasse heißen? • Was repräsentiert sie? Eine BoundingBox! • 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

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

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

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

  7. 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); } Musterlösung Aufgabe 3 Polymorphismus

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

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

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

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

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

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

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

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

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

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

  18. x:1.0; y:2.0  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()); Polymorphismus

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

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

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

  22. Abstrakte Klassen .... abstractclass AbstractClass {abstractvoid 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

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

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

  25. 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] = testCircledouble areaSum = 0;for (int i=0; i < figures.length; i++) { areaSum += figures[i].area();}System.out.println("Cummulated area: " + areaSum ); Polymorphismus

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

  27. Aufgabe 4 • Vorab: Implementierung des Figure Beispiels • die HA 4 via e-mail an: Jan Drewnak (drewnak@uni-muenster.de)& Arne Bröring (arneb@uni-muenster.de)bis Samstag 29.05; 24.00 s.t. Polymorphismus

More Related