220 likes | 324 Views
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).
E N D
Sitzung 4: Vererbung Sitzung 4
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
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
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
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
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
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
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
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
Ziel der heutigen Sitzung Begriff Vererbung (im OO Sinne) einführen • Metapher des Vererbens • Arten von Vererbung in der Objektorientierung • Vererbung in Java Vererbung
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
Beispiel Vererbung
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
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
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
Was kann vererbt werden ? • Verhalten • d.h. Operationen (Methoden) • z.B. Gehaltsberechnung • Struktur • d.h. Attribute • z.B. Alter Vererbung
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
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
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
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
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
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