1 / 22

Sitzung 4: Vererbung

Sitzung 4: Vererbung. Lessons learned (1). Objekt-orientiertes Programmieren bedeutet: Typen (Klassen) definieren und implementieren Definieren: Methoden und Attribute festlegen Implementieren: Methoden und Konstruktoren mit Leben füllen. Lessons learned (2.1).

akeem-pitts
Download Presentation

Sitzung 4: Vererbung

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 4: Vererbung Sitzung 4

  2. Lessons learned (1) • Objekt-orientiertes Programmieren bedeutet: Typen (Klassen) definieren und implementieren • Definieren: Methoden und Attribute festlegen • Implementieren: Methoden und Konstruktoren mit Leben füllen Vererbung

  3. Lessons learned (2.1) • Objekte sind Instanzen von Typen (Klassen) • Bsp.: Der Punkt mit den Koordinaten 2.0;2.5 ist Instanz der Klasse Punkt • Objekte können durch Variablen repräsentiert werden • Bsp: punkt1, myPoint, … • Variablen besitzen einen Typ • Deklaration: Point myPoint; • Instanzen einer Klasse werden mit dem new-Operator erzeugt • Instanzierung: myPoint = new Point(2.0, 2.5); Vererbung

  4. Lessons learned (2.2) class Point { … public Point(double xIn, double yIn){ //initialisiere Punkt } … } • Mit new wird der Konstruktor einer Klasse aufgerufen • Deklaration und Initialisierung in einem: Point myPoint; myPoint = new Point(2.0, 2.5);  Point myPoint = new Point(2.0, 2.5); Vererbung

  5. Aufgabe 2 • Anmerkungen • Methodennamen == Vertrag mit dem Nutzer • Bsp: int distanz(int a, int b) {…} distanz(1,3) == ? distanz(3,1) == ? • Rad nicht neu erfinden: • Bsp: keine Methoden zum Subtrahieren von Zahlen Gibts schon: - • Algorithmen testen! Vererbung

  6. Aufgabe 2 • Tipps • explizite Testklasse zum Ausprobieren eines neuen Typen (Klasse) schreiben • class XYZTest • enthält main-Methode • erzeugt Objekte vom neuen Typ class Point { // Attribute // Konstruktoren // Methoden } class PointTest { public static void main(String[] args) { Point point1 = new Point(2.0,2.5); point1.doSomething(); … } } Vererbung

  7. Aufgabe 2 • Tipps • Klassennamen: Point, UTMPoint • Plural nur für „Sammlungsklasse“ • Variablennamen: pointA, pointOfNoReturn • Methodennamen: getX(), setY(…), distance(…), • Attribute einer Klasse immer als private deklarieren class Point { private double x; private double y; // Konstruktoren // Methoden } Vererbung

  8. Aufgabe 2 Tipps • Codeformatierung: • Neue Blöcke einrücken (Tabulator, nicht Space) class Point { public Point(double xIn, double yIn) { x = xIn; y = yIn; if (x < 0) { System.out.println(„Negativer Wert!“); } else { … } } } Klasse Konstruktor w f Vererbung

  9. Sonstiges • Aufgaben schicken an Arne und mich • Musterlösungen im Netz • Verlegung 25.Mai  24. Mai hinfällig (wenn‘s geht…) Stattdessen: 8. Juni  7. Juni? Vererbung

  10. Ziel der heutigen Sitzung Begriff Vererbung (im OO Sinne) einführen • Metapher des Vererbens • Arten von Vererbung in der Objektorientierung • Vererbung in Java Vererbung

  11. Was ist Vererbung ? • Eine Metapher • aus der Biologie • dort ihrerseits als Metapher aus dem Recht (Hinterlassenschaft) • Bedeutung in der OOP • Weitergabe von Eigenschaften von Klasse zu Klasse • in Hierarchien von Klassen Vererbung

  12. Beispiel Vererbung

  13. Wozu Vererbung ? • Abstraktion durch Generalisierung • IS-A Beziehung zwischen Klassen • StudentIn IS-A Uni-Angehörige(r) • nicht verwechseln mit Instanz-Beziehung • Karl Muster ist ein Student • dadurch • konzeptionelle Klarheit • weniger Programmier-Aufwand • alle Uni-Angehörigen haben einen Namen • alle MitarbeiterInnen haben ein Gehalt Vererbung

  14. Wozu Vererbung ? • Organisation des Programm-Codes • in Klassenhierarchien • statt in Schritten eines Programmablaufs • Überladen (overloading) von Operations-Namen • z.B. “+” als Operatorname • für Addition von Integern, Float und Double • aber auch für Konkatenation von Strings  Polymorphismus (s. nächste Woche) Vererbung

  15. Wozu Vererbung ? • Wiederverwendbarkeit • neue Klassen können aus bestehenden gebildet werden • eine SH ist ein(e) MitarbeiterIn, der/die studiert • ein(e) Geoinformatik-StudentIn ist ein(e) StudentIn, der/die an 2 Fachbereichen studiert • die Definition von Methoden kann angepasst werden • das Gehalt von SH und WH berechnet sich nach Wochenstunden, jenes von WM nach Bruchteilen Vererbung

  16. Was kann vererbt werden ? • Verhalten • d.h. Operationen (Methoden) • z.B. Gehaltsberechnung • Struktur • d.h. Attribute • z.B. Alter Vererbung

  17. Wie wird vererbt ? • In Hierarchien von Klassen • vgl. Taxonomien in der Biologie • erbende Klassen sind Subtypen der Superklasse(n) • Durch Spezialisierung der Klassen • zusätzliche Methoden • zusätzliche Variablen • Einfach oder mehrfach • Mehrfachvererbung: mehrere Superklassen Vererbung

  18. Bsp zur Vererbung in Java: Ein Punkt mit Namen class NamedPoint extends Point{ private String name; NamedPoint(double xIn, double yIn, String nameIn) { // Aufruf constructor der Superklasse: super(xIn,yIn); name = nameIn; } String getName(){return name;} void setName(String nameIn) {name = nameIn;} } double x; double y; public Point (double xIn, double yIn) {…} double getX() {…} double getY() {…} double distance(Point otherPoint) {…} Vererbung

  19. Bsp. Java: Punkt mit Name import java.util.*; public class NamedPointExample { public static void main(String[] args) { Point aPoint = new Point(1,2); NamedPoint aNamedPoint = new NamedPoint (3,4,"Test"); System.out.println("A point: ("+ aPoint.getX() + ", "+ aPoint.getY() + ")" ); System.out.println("A named point: ("+ aNamedPoint.getX() + ", „ + aNamedPoint.getY() + ", " + aNamedPoint.getName() + ")" ); // Java supports (automatic) down & up cast: aPoint = aNamedPoint; // "up cast" System.out.println("A point: ("+ aPoint.getX() + ", "+ aPoint.getY() + ")" ); aPoint = new NamedPoint (5,6,"TestAgain"); aNamedPoint = (NamedPoint)aPoint; // „down cast" System.out.println("A named point: ("+ aNamedPoint.getX() + ", „ + aNamedPoint.getY()+ ", "+ aNamedPoint.getName() + ")" ); } } Vererbung

  20. Zusammenfassung • Vererbung ist ein wesentliches Konzept der Objektorientierung. Es dient • zur Abstraktion beim Entwurf • zur Organisation des Codes • zur Wiederverwendung des Codes • Ausblick: • Polymorphismus: eine Methode hat verschiedene Formen • Interfaces: Polymorphismus in Java Vererbung

  21. Aufgabe 3 • die HA 3 via e-mail an: Jan Drewnak (drewnak@uni-muenster.de)& Arne Bröring (arneb@uni-muenster.de)bis Samstag 15.05; 24.00 s.t. Vererbung

  22. public class Point{ private double x; private double y; public Point(double xIn, double yIn){ x = xIn; y = yIn; } public double getX(){ return x; } public double getY(){ return y; } public double distance(Point p){ double result; result = java.lang.Math.sqrt( java.lang.Math.pow((getX()-p.getX()),2)+ java.lang.Math.pow((getY()-p.getY()),2) ); return result; } public String toString(){ return "[" + getX() + ", " + getY() + "]"; } } class PointApplication{ public static void main(String[] args) { Point p1 = new Point(1.0, 2.0); Point p2 = new Point(4.0, 6.0); System.out.println("p1= " + p1.toString()); System.out.println("p2= " + p2.toString()); System.out.println("Der Abstand zwischen p1 und p2 betraegt: " + p1.distance(p2)); } } Attribute Konstruktor Methoden Vererbung

More Related