34
K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 5. Grundkonzepte der Objektorientierung (3): Vererbung Polymorphismus dynamisches Binden Java-Beispiel: Time2.java Version: 14. Dez. 2015

5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

5. Grundkonzepte der Objektorientierung (3):

Vererbung

Polymorphismus dynamisches Binden

Java-Beispiel:

Time2.java

Version: 14. Dez. 2015

Page 2: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

2 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Schwerpunkte • Vererbung

- Unterklassen (Subklassen) - Oberklassen (Superklassen) - Hierarchiebildung

• Einfachvererbung (Java) - Mehrfachvererbung (C++) • Noch einmal Sichtbarkeit: private, public, protected • Vererbungshierarchie und die Klasse 'Object' • Polymorphismus: Überschreiben von Methoden

(vgl.: Überladen/Overloading) • Dynamisches Binden: dynamische Methodensuche • Final-Methoden, Final-Klassen • Abstrakte Klassen

Page 3: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

3 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Vererbung:

- eine Beziehung (unter vielen) zwischen Klassen

- Modellierungselement in Software-Architekturen

- also: Vererbung nicht nur für Programmierung wesentlich, sondern auch besonders in anderen Phasen der SW-Entwicklung

Page 4: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

4 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Klassen: Wann werden sie entwickelt?

Spätestens: in der Entwurfsphase durch Analyse der Anforderungsdefinition

Ziel: bereits bei der 'Analyse und Definition' Klassen identifizieren (Klassen entsprechen Objekten des Problembereichs, z.B. Keyboard, Stack, Time)

Analyse und Definition:

Anforderungsdefinition

Entwurf: Software-Architektur

Implementation: Programm

Software-Entwicklung (Phasen):

Page 5: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

5 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Wie gewinnt man Klassen (Komponenten)?

durch Dekomposition des Problems

Anforderungsdefinition (Problem)

Teilproblem 1 Teilproblem 2 …

Komponente = Klasse

Software-Architektur: Menge von Komponenten (Klassen u.a.) und ihrer Beziehungen

Phase 'Analyse und Definition'

(z.B. Stack, Keyboard)

Page 6: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

6 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Softwarearchitekturen müssen vor der Programmierung geplant werden, sonst erhält

man soetwas …

Typisch für Alt-Systeme: Katastrophale Architektur, schlechte Wartbarkeit, Verständlichkeit zyklische Abhängigkeiten Reale Architektur des System XCTL

(Projekt für das Institut für Physik)

Page 7: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

7 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

a

b

Schicht 2 z.B. Benutzungs- oberfläche

Schicht 1 z.B. eigentliche Anwendung

Schicht 0 z.B. Hardware-Schicht: Zugriff auf Motoren, Detektoren

Komponente 2.1 Komponente 2.2 Komponente 2.3

Komponente 1.3 Komponente 1.2 Komponente 1.1

Komponente 0.1 Komponente 0.2 Komponente 0.3 Komponente 0.4

… und benötigt eigentlich eine Drei-Schichten-Architektur

a

b

Komponente i benutzt Komponente j Schicht A benutzt Schicht B

Legende:

XCTL

Bessere Wartbarkeit, Verständlichkeit einfache Abhängigkeiten

Page 8: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

8 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Art der Beziehungen zwischen den aus dem Problem heraus modellierten Klassen?

class C1 ...

class C2 ...

class C5 ...

class C6 ... class C3 ...

class C7 ... class C4 ... class C11 ...

class C8 ...

class C10 ...

class C9 ...

nutzt Dienste: - Instanzen bilden, - Methoden aufrufen (C7 “kennt” C8)

C7 nutzt C8

Page 9: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

9 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Beziehungen zwischen Klassen: Beispiel

class Stack { ... }

class Umkehrung { ... }

class Umkehrung2 { ... }

class Klammerstruktur { ... } Nutzt Dienste:

- Instanzen bilden, - Methoden aufrufen

Page 10: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

10 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Beziehungen zwischen den aus dem Problem heraus modellierten Klassen

Nutzung von Diensten, Vererbung, Assoziation, Aggregation …

Klasse 1: Daten, Methoden

Klasse 2: alle Daten und Methoden der Klasse 1 + weitere …

Klasse 1: • vererbt ihre Eigenschaften auf Klasse 2 • ist allgemeiner als Klasse 2 • ist Oberklasse von Klasse 2

Klasse 2: • erbt … • ist spezieller … • ist Unterklasse …

Vererbung

spezieller

allgemeiner

Page 11: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

11 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Beispiel für Vererbung: Immobilienverwaltung (Maklerbüro)

Haus Daten: Besitzer Adresse Baujahr Grundpreis

Operationen: Endpreis berechnen (inkl. Nebenkosten)

Wohnhaus Daten: Haustyp Wohnfläche Grundfläche

Geschäftshaus Daten: hat Aufzug hat Garage Operationen: Eignung für Firma prüfen

Richtung: Oberklasse

'erben von'

Notation: UML graphische Beschreibungssprache für SW-Architekturen

Page 12: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

12 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Beispiel für (Mehrfach-)Vererbung: Uhr

Uhr Daten: Stunde Minute

Digital-Uhr Daten: Anzeigengröße

Analog-Uhr Daten: Ziffernblatt Stundenanzeiger Minutenanzeiger

Digital-Analog-Uhr Daten: Anordnung der Digitalanzeige

Mehrfach-vererbung

In Java nicht unterstützt (aber in C++)

16 : 10

16 : 10

16 10

Page 13: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

13 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Beispiel für Vererbung: präzise Zeit

Time

Daten: int hour int minute

Operationen: void addMinutes(int m) void printTime() boolean before(Time t) void printTimeInMinutes() boolean after (Time t2)

PreciseTime Daten: int second

Operationen: void addSeconds(int s) void printTime()

überschrieben

bekannt neu

PreciseTime: Wie viele Variablen,

wie viele Methoden?

Page 14: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

14 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Vererbung in Java:

- extends

- protected

- super

Bis jetzt: unabhängig von Programmiersprache, nur Architektur des Systems in UML beschrieben

Page 15: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

15 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Vererbung in Java

Basisklasse (unverändert) class Time { private int hour, minute; public Time() ... public void addMinutes(...) public void printTime() }

class PreciseTime extends Time { private int second;*)

public PreciseTime(...) ... public void addSeconds(int s)*)

public void printTime() }

neuer Konstruktor

zum Überschreiben *) neu

?

Vererbung

Page 16: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

16 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Noch einmal: Sichtbarkeit

class PreciseTime extends Time { private int second;

public void printTime() { if ((hour == 0) && (minute == 0)) ... if (second < 10) ... }

class Time { private int hour, minute; }

protected int hour, minute;

Fehler! sichtbar in allen Unterklassen

?

sichtbar: nur in Klasse 'Time' public ?

Page 17: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

17 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Anwendung: abgeleitete Unterklasse class Time2 { public static void main(String[] args) { PreciseTime lunchtime = new PreciseTime(12, 1, 0); lunchtime.addMinutes(1); lunchtime.printTime(); lunchtime.addSeconds(-61); lunchtime.printTime(); lunchtime.addSeconds(1); lunchtime.printTime(); } }

% java Time2 12:02:00PM noon 12:01:00PM

geerbt von Oberklasse

neu

überschrieben

Page 18: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

18 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

super (1) Initialisierung mit Hilfe des Konstruktors der Oberklasse

public PreciseTime(int h, int m, int s) { super(h, m); *)

second = s; }

Time (h, m)

ohne *): (implizit) immer existierender 0-stelliger Konstruktor Time() der Oberklasse aufgerufen

Aufruf des Konstruktors der direkten Oberklasse: hour = h;

minute = m;

Page 19: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

19 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

super (2) Verweis auf Methoden der direkten Oberklasse

class Time { protected int hour, minute; . . . public void printTime () {…} }

class PreciseTime extends Time { private int second; public void printTime () { …} public void printTimeShort () { super.printTime(); } }

Ausgabe: nur ‘hour‘ und ‘minute

Vollständige Ausgabe: ‘hour‘, ‘minute‘, ‘second‘

Page 20: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

20 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Ohne Vererbung?

class Time { /* wie bisher */ }

class PreciseTime { private int hour, minute; private int second;

public PreciseTime(...) ... public addMinutes(...) public void addSeconds(...)

public void printTime() }

Beide Versionen äquivalent! (man kommt ohne Vererbung aus)

Aber: • Doppelter Code: • Modifikationen komplizierter, falls zu ändernder

Code doppelt (z.B. addminutes() in Oberklasse + abgeleiteten Klassen)

• Keine logischen Beziehungen zwischen Klassen widergespiegelt

Kommt man ohne Vererbung aus?

Konsequenzen?

Page 21: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

21 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

API: erster Eindruck von Vererbungsbeziehungen

(Anzahl der Methoden)

Object 11

Component > 100

Container > 50

Panel 1

Applet > 20

alle Klassen erben von Object

Davon 10 Klassen abgeleitet

Davon 8 Klassen abgeleitet

Applet: umfasst mehr als

170 Methoden

Page 22: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

22 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Klassenhierarchie:

- Hierarchiebildung durch Vererbung

- Rolle von 'Object'

Page 23: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

23 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Vererbungshierarchie

class Time ... class PreciseTime extends Time ... class MorePreciseTime extends PreciseTime ... class TimeWithSpecialPrintings extends Time ...

Time

PreciseTime TimeWithSpecialPrintings (z.B. engl. und dt. Zeitangaben)

MorePreciseTime (z.B. mit Millisekunden)

Page 24: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

24 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Vererbungshierarchie: Ober- u. Unterklassen

Time

PreciseTime TimeWithSpecialPrintings

MorePreciseTime

Oberklassen von MorePreciseTime: PreciseTime (direkte Oberklasse) Time

Unterklassen von Time: PreciseTime (direkte Unterklasse) MorePreciseTime TimeWithSpecialPrintings (direkte Unterklasse)

Page 25: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

25 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Klasse 'Object': Oberklasse aller anderen Klassen

Object

Time Stack String Dictionary

PreciseTime Hashtable

… Properties

… Java-API nutzerdefiniert

Java-API

Object: Oberklasse aller anderen Klassen

Page 26: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

26 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

java.lang Class Object java.lang.Object

public class Object

Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.

Since: JDK1.0

See Also: Class

Constructor Summary Object()

Method Summary protected Object

clone() Creates and returns a copy of this object.

boolean equals(Object obj) Indicates whether some other object is "equal to" this one.

protected void

finalize() Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.

Class getClass() Returns the runtime class of an object.

int hashCode() Returns a hash code value for the object.

void notify() Wakes up a single thread that is waiting on this object's monitor.

void notifyAll() Wakes up all threads that are waiting on this object's monitor.

String toString() Returns a string representation of the object.

void wait() Causes current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object.

void wait(long timeout) Causes current thread to wait until either another thread invokes the notify() method or the notifyAll() method for this object, or a specified amount of time has elapsed.

void wait(long timeout, int nanos) Causes current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object, or some other thread interrupts the current thread, or a certain amount of real time has elapsed.

API-Klasse java.lang.Object

Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.

Schlussfolgerung: Jede beliebige Klasse umfasst (erbt) auch diese 11 Methoden von Object: - Standardimplementation (z.B. equals

testet auf Identität der Objekte; clone kopiert ein Objekt) oder

- Überschreiben mit eigenem Algorithmus (z.B. equals testet of identischen Inhalt der Objekte)

Page 27: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

27 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Vererbungshierarchie: Kompatibilitätsregeln

Object

Time Stack String Dictionary

PreciseTime …

Kompatibilitätsregel: Objekte einer Unterklasse dürfen dort stehen, wo

Objekte von Oberklassen zugelassen sind.

Time t; t = new PreciseTime(12, 10, 1); t.printTime();

printTime() von PreciseTime

Page 28: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

28 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Kompatibilität mit „Object“

Object

Time Stack String Dictionary

PreciseTime …

Konsequenz: Variablen vom Typ 'Object' können Instanzen

beliebiger Klassen als Wert besitzen

Object o1, o2; o1 = new PreciseTime(12, 10, 1); o2 = new Stack(100);

Jede Klasse ist Unterklasse von Object

Page 29: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

29 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Polymorphismus:

- Ähnliche Operationen

- Dynamisches Binden

- Final

- Abstrakte Klassen

Page 30: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

30 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Polymorphismus: Grundidee (Polymorphismus: "viele Erscheinungsformen")

Time t1; PreciseTime t2; t1 = new Time(12, 10); t2 = new PreciseTime(0, 10, 1); t1.printTime(); t2.printTime();

Vergleiche: Overloading = derselbe Name bei Methoden mit unterschiedlichen Parameterlisten, z.B. Time(), Time(hour, minute)

Polymorphismus: Ähnliche Methoden mit derselben Signatur (Name, Parameterzahl, -typen)

Eine Methode ist polymorph, falls sie in verschiedenen Klassen die gleiche Signatur hat, jedoch jeweils neu implementiert ist.

Polymorphismus: Methoden können in einer Vererbungshierarchie überschrieben werden

Literatur: unterschiedliche Definitionen:

Page 31: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

31 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Polymorphismus: Auswahl der richtigen Methode?

Time t1; PreciseTime t2; t1 = new Time(12, 10); t2 = new PreciseTime(0, 10, 1); t1.printTime(); t2.printTime();

Auswahl der Methode abhängig vom Zielobjekt (z.B. t1, t2)

Wer wählt aus: Compiler o. Interpreter?

Ist das immer möglich?

hier: Compiler

Welches printtime()?

nein: Klasse steht zur Compilationszeit nicht immer fest

Page 32: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

32 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Dynamisches Binden: Methodensuche zur Laufzeit

Time t; char ch = Keyboard.readChar(); if (ch == 'T') t = new Time(12, 10); else t = new PreciseTime(12, 10, 1); t.printTime();

Compiler: kann es nicht entscheiden!

also: Auswahl der Methode erst zur Laufzeit – dynamisches Binden (kostet extra Laufzeit)

Aus Klasse Time oder PreciseTime?

Wer wählt aus: Compiler o. Interpreter?

Page 33: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

33 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Final: Einschränkung des Polymorphismus

• Methode darf in Unterklasse nicht überdefiniert werden

Idee: für stabile Semantik sorgen (Sicherheit)

• Klasse darf nicht erweitert werden z.B. Java-API

class Time { public final void addMinutes(...) { ... } public void printTime() }

public final class String;

Klasse außerhalb des Paketes sichtbar, in dem sie definiert ist

Page 34: 5. Grundkonzepte der Objektorientierung (3): Vererbung ... · K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 . Softwarearchitekturen müssen vor der Programmierung

34 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Abstrakte Klassen: enthalten Methoden ohne Implementation

‚berechne Flaeche‘: Methode ohne Implementation

Implementation muss in Unterklassen erfolgen

keine Instanzenbildung der Klasse ‚Figur‘ erlaubt

Sinn: logische Strukturierung von Klassen

Figur Rechteck, Dreieck, Ellipse …

abstract class Figur { protected int x, y, breite, hoehe; public void setzex(int xNeu) { x = xNeu; } // setzeY, setzeBreite, setzeHoehe ebenso public abstract float berechneFlaeche(); }

(x,y) breite

hoehe

Offen gelassen: Dreieck,

Rechteck, Ellipse

Mögliche Aufgabe: Man implementiere Dreieck, Rechteck, Ellipse ...

damit: Fläche hier unbekannt