Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das...

Post on 10-Aug-2019

217 views 0 download

Transcript of Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das...

Dennis Komm

Programmieren und ProblemlösenWeiterführende Objektorientierung

Frühling 2019 – 11. März 2019

Wir erinnern uns. . .

Beispiel – Erdbebendaten

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 1 / 22

Beispiel – Erdbebendaten

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 1 / 22

Klassendesign

Measurement

Private Felder

Coordinate coordinate

String date

String type

String appraisal

· · ·

Öffentliche Methoden

Getter / Setter

Konstruktoren

Coordinate

Private Felder

float latitude

float longitude

· · ·

Öffentliche Methoden

Getter / Setter

Konstruktoren

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 2 / 22

Aufgabe – Erdbebenmessungen

Implementiere das Klassendesign

Erstelle eine Eingabeaufforderungzum Erstellen von drei Messungen

Speichere diese drei Messungen ineinem Array

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 3 / 22

Erdbebenmessungen

public class Main {public static void main(String args[]) {

Measurement[] measurements = new Measurement[3];for (int i=0; i < measurements.length; ++i) {

Out.println("Measurement "+ i);Out.print("Longitude: "); float tmpLong = In.readFloat();Out.print("Latitude: "); float tmpLat = In.readFloat();Out.print("Date: "); String tmpDate = In.readString();...Out.println();Coordinate tmpCoordinate = new Coordinate(tmpLong,tmpLat);Measurement tmpMeasurement = new Measurement(tmpCoordinate,tmpDate,

tmpType,tmpAppraisal);measurements[i] = tmpMeasurement;

}}

}

tmpMeasurement ist Referenz auf i-tesObjekt; i-tes Element von measurementszeigt auf dasselbe Objekt; danach wirdtmpMeasurement überschrieben

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 4 / 22

Erdbebenmessungen

public class Main {public static void main(String args[]) {

Measurement[] measurements = new Measurement[3];for (int i=0; i < measurements.length; ++i) {

Out.println("Measurement "+ i);Out.print("Longitude: "); float tmpLong = In.readFloat();Out.print("Latitude: "); float tmpLat = In.readFloat();Out.print("Date: "); String tmpDate = In.readString();...Out.println();Coordinate tmpCoordinate = new Coordinate(tmpLong,tmpLat);Measurement tmpMeasurement = new Measurement(tmpCoordinate,tmpDate,

tmpType,tmpAppraisal);measurements[i] = tmpMeasurement;

}}

}

tmpMeasurement ist Referenz auf i-tesObjekt; i-tes Element von measurementszeigt auf dasselbe Objekt; danach wirdtmpMeasurement überschrieben

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 4 / 22

Erdbebenmessungen

Temporäre Referenz tmpMeasurement in jedem Schleifendurchlauf

Referenz wird „gerettet“, indem sie in Array kopiert wird

Problem: Array hat feste Grösse

ï Verwende dynamische Datenstruktur statt Array

Hier bietet Java eine grosse Menge an Optionen

ï Unterschiedliche Vor- und Nachteile

Wir verwenden hier Hash-Maps

Details und Alternativen besprechen wird später

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 5 / 22

Erdbebenmessungen

Temporäre Referenz tmpMeasurement in jedem Schleifendurchlauf

Referenz wird „gerettet“, indem sie in Array kopiert wird

Problem: Array hat feste Grösse

ï Verwende dynamische Datenstruktur statt Array

Hier bietet Java eine grosse Menge an Optionen

ï Unterschiedliche Vor- und Nachteile

Wir verwenden hier Hash-Maps

Details und Alternativen besprechen wird später

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 5 / 22

Erdbebenmessungen

Temporäre Referenz tmpMeasurement in jedem Schleifendurchlauf

Referenz wird „gerettet“, indem sie in Array kopiert wird

Problem: Array hat feste Grösse

ï Verwende dynamische Datenstruktur statt Array

Hier bietet Java eine grosse Menge an Optionen

ï Unterschiedliche Vor- und Nachteile

Wir verwenden hier Hash-Maps

Details und Alternativen besprechen wird später

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 5 / 22

Erdbebenmessungen

Temporäre Referenz tmpMeasurement in jedem Schleifendurchlauf

Referenz wird „gerettet“, indem sie in Array kopiert wird

Problem: Array hat feste Grösse

ï Verwende dynamische Datenstruktur statt Array

Hier bietet Java eine grosse Menge an Optionen

ï Unterschiedliche Vor- und Nachteile

Wir verwenden hier Hash-Maps

Details und Alternativen besprechen wird später

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 5 / 22

Erdbebenmessungen

Temporäre Referenz tmpMeasurement in jedem Schleifendurchlauf

Referenz wird „gerettet“, indem sie in Array kopiert wird

Problem: Array hat feste Grösse

ï Verwende dynamische Datenstruktur statt Array

Hier bietet Java eine grosse Menge an Optionen

ï Unterschiedliche Vor- und Nachteile

Wir verwenden hier Hash-Maps

Details und Alternativen besprechen wird später

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 5 / 22

Erdbebenmessungen

Temporäre Referenz tmpMeasurement in jedem Schleifendurchlauf

Referenz wird „gerettet“, indem sie in Array kopiert wird

Problem: Array hat feste Grösse

ï Verwende dynamische Datenstruktur statt Array

Hier bietet Java eine grosse Menge an Optionen

ï Unterschiedliche Vor- und Nachteile

Wir verwenden hier Hash-Maps

Details und Alternativen besprechen wird später

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 5 / 22

Arrays und Hash-Maps

Arrays

Daten sind indexiert über Zahlen 0, 1, . . .

Grösse ist fest

(Referenz kann anderem Array mit anderer Grösse zugewiesen werden)

Hash-Maps

Daten sind „indexiert“ über Schlüssel; können beliebigen Typ haben

ï Key-Value-Paar

Daten können beliebig hinzugefügt und entfernt werden

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 6 / 22

Arrays und Hash-Maps

Arrays

Daten sind indexiert über Zahlen 0, 1, . . .

Grösse ist fest

(Referenz kann anderem Array mit anderer Grösse zugewiesen werden)

Hash-Maps

Daten sind „indexiert“ über Schlüssel; können beliebigen Typ haben

ï Key-Value-Paar

Daten können beliebig hinzugefügt und entfernt werden

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 6 / 22

Arrays und Hash-Maps

Bei Initialisierung müssen Typen der Schlüssel und Daten angegeben werden

Dies geschieht über < und >

Hashmap<Integer,Measurement> measurements = new Hashmap<Integer,Measurement>();

Daten werden mit Schlüssel eingefügt

Funktion put, die beides erhält

measurements.put(5,tmpMeasurement);

Daten mit gegebenem Schlüssel können extrahiert werden

Funktion get, die Schlüssel erhält und Daten zurückgibt

Measurement tmpMeasurement = measurements.get(5);

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 7 / 22

Arrays und Hash-Maps

Bei Initialisierung müssen Typen der Schlüssel und Daten angegeben werden

Dies geschieht über < und >

Hashmap<Integer,Measurement> measurements = new Hashmap<Integer,Measurement>();

Daten werden mit Schlüssel eingefügt

Funktion put, die beides erhält

measurements.put(5,tmpMeasurement);

Daten mit gegebenem Schlüssel können extrahiert werden

Funktion get, die Schlüssel erhält und Daten zurückgibt

Measurement tmpMeasurement = measurements.get(5);

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 7 / 22

Arrays und Hash-Maps

Bei Initialisierung müssen Typen der Schlüssel und Daten angegeben werden

Dies geschieht über < und >

Hashmap<Integer,Measurement> measurements = new Hashmap<Integer,Measurement>();

Daten werden mit Schlüssel eingefügt

Funktion put, die beides erhält

measurements.put(5,tmpMeasurement);

Daten mit gegebenem Schlüssel können extrahiert werden

Funktion get, die Schlüssel erhält und Daten zurückgibt

Measurement tmpMeasurement = measurements.get(5);

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 7 / 22

Aufgabe – Erdbebenmessungen

Verwende Hash-Map anstatt Array

Erlaube Benutzer, Schleife zubeenden

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 8 / 22

Weiterführende Konzepte derObjektorientierung

Objektorientierung – Verschiedene Aspekte

Objekt-orientierung

Objekte

Daten

Code Vererbung

Typ-hierarchie

Unter-und Ober-klassen

Interfaces

KapselungAbstrakte

Daten-typen

Polymor-phismus

Methodenüber-

schreiben

Unter-klassen

zuweisen

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 9 / 22

Objektorientierung – Verschiedene Aspekte

Objekt-orientierung

Objekte

Daten

Code Vererbung

Typ-hierarchie

Unter-und Ober-klassen

Interfaces

KapselungAbstrakte

Daten-typen

Polymor-phismus

Methodenüber-

schreiben

Unter-klassen

zuweisen

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 9 / 22

Objektorientierung – Verschiedene Aspekte

Objekt-orientierung

Objekte

Daten

Code Vererbung

Typ-hierarchie

Unter-und Ober-klassen

Interfaces

KapselungAbstrakte

Daten-typen

Polymor-phismus

Methodenüber-

schreiben

Unter-klassen

zuweisen

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 9 / 22

Objektorientierung – Verschiedene Aspekte

Objekt-orientierung

Objekte

Daten

Code Vererbung

Typ-hierarchie

Unter-und Ober-klassen

Interfaces

KapselungAbstrakte

Daten-typen

Polymor-phismus

Methodenüber-

schreiben

Unter-klassen

zuweisen

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 9 / 22

Objektorientierung – Verschiedene Aspekte

Objekt-orientierung

Objekte

Daten

Code Vererbung

Typ-hierarchie

Unter-und Ober-klassen

Interfaces

KapselungAbstrakte

Daten-typen

Polymor-phismus

Methodenüber-

schreiben

Unter-klassen

zuweisen

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 9 / 22

Objektorientierung – Verschiedene Aspekte

Objekt-orientierung

Objekte

Daten

Code Vererbung

Typ-hierarchie

Unter-und Ober-klassen

Interfaces

KapselungAbstrakte

Daten-typen

Polymor-phismus

Methodenüber-

schreiben

Unter-klassen

zuweisen

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 9 / 22

Objektorientierung – Verschiedene Aspekte

Objekt-orientierung

Objekte

Daten

Code Vererbung

Typ-hierarchie

Unter-und Ober-klassen

Interfaces

KapselungAbstrakte

Daten-typen

Polymor-phismus

Methodenüber-

schreiben

Unter-klassen

zuweisen

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 9 / 22

Objektorientierung – Verschiedene Aspekte

Objekt-orientierung

Objekte

Daten

Code Vererbung

Typ-hierarchie

Unter-und Ober-klassen

Interfaces

KapselungAbstrakte

Daten-typen

Polymor-phismus

Methodenüber-

schreiben

Unter-klassen

zuweisen

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 9 / 22

Objektorientierung – Verschiedene Aspekte

Objekt-orientierung

Objekte

Daten

Code Vererbung

Typ-hierarchie

Unter-und Ober-klassen

Interfaces

KapselungAbstrakte

Daten-typen

Polymor-phismus

Methodenüber-

schreiben

Unter-klassen

zuweisen

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 9 / 22

Weiterführende Konzepte derObjektorientierung

Vererbung

Vererbung

Datentypen sind in eineTyphierarchieeingegliedert

Unterklassen(Subtypen) erbenDaten und Code ihrerOberklassen(Supertypen)

OberKlasse

fieldSuper

methodSuper

UnterKlasse1

fieldSuper

fieldSub1

methodSuper

methodSub1

UnterKlasse2

fieldSuper

fieldSub2

methodSuper

methodSub2

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 10 / 22

Vererbung

Datentypen sind in eineTyphierarchieeingegliedert

Unterklassen(Subtypen) erbenDaten und Code ihrerOberklassen(Supertypen)

OberKlasse

fieldSuper

methodSuper

UnterKlasse1

fieldSuper

fieldSub1

methodSuper

methodSub1

UnterKlasse2

fieldSuper

fieldSub2

methodSuper

methodSub2

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 10 / 22

Vererbung

Datentypen sind in eineTyphierarchieeingegliedert

Unterklassen(Subtypen) erbenDaten und Code ihrerOberklassen(Supertypen)

OberKlasse

fieldSuper

methodSuper

UnterKlasse1

fieldSuper

fieldSub1

methodSuper

methodSub1

UnterKlasse2

fieldSuper

fieldSub2

methodSuper

methodSub2

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 10 / 22

Vererbung

Datentypen sind in eineTyphierarchieeingegliedert

Unterklassen(Subtypen) erbenDaten und Code ihrerOberklassen(Supertypen)

OberKlasse

fieldSuper

methodSuper

UnterKlasse1

fieldSuper

fieldSub1

methodSuper

methodSub1

UnterKlasse2

fieldSuper

fieldSub2

methodSuper

methodSub2

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 10 / 22

Vererbung 6= Komposition

Komposition

Ein Objekt enthält Felder, welche Objekte von andere Typen referenzieren

Vererbung

Ein Objekt von einem Typ enthält zusätzliche Felder und Methoden, welchevon einem Supertyp geerbt wurden

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 11 / 22

Vererbung 6= Komposition

Komposition

Ein Objekt enthält Felder, welche Objekte von andere Typen referenzieren

Vererbung

Ein Objekt von einem Typ enthält zusätzliche Felder und Methoden, welchevon einem Supertyp geerbt wurden

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 11 / 22

Korrekter Einsatz von Vererbung

Wichtige Frage bei der Überlegung, ob DatenTyp1 von DatenTyp2 erbensoll: Ist DatenTyp1 ein DatenTyp2?

Beispiel

Ist ein „Student“ eine „Person“?

4

Ist ein „Apfel“ eine „Frucht“?

4

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 12 / 22

Korrekter Einsatz von Vererbung

Wichtige Frage bei der Überlegung, ob DatenTyp1 von DatenTyp2 erbensoll: Ist DatenTyp1 ein DatenTyp2?

Beispiel

Ist ein „Student“ eine „Person“?

4

Ist ein „Apfel“ eine „Frucht“?

4

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 12 / 22

Korrekter Einsatz von Vererbung

Wichtige Frage bei der Überlegung, ob DatenTyp1 von DatenTyp2 erbensoll: Ist DatenTyp1 ein DatenTyp2?

Beispiel

Ist ein „Student“ eine „Person“? 4

Ist ein „Apfel“ eine „Frucht“? 4

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 12 / 22

Korrekter Einsatz von Komposition

Wichtige Frage bei der Überlegung, ob DatenTyp1 DatenTyp2 als Komposi-tion enthalten soll: Hat DatenTyp1 einen DatenTyp2?

Beispiel

Hat ein „Student“ eine „Addresse“?

4

Hat ein „Apfel“ eine „Farbe“?

4

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 13 / 22

Korrekter Einsatz von Komposition

Wichtige Frage bei der Überlegung, ob DatenTyp1 DatenTyp2 als Komposi-tion enthalten soll: Hat DatenTyp1 einen DatenTyp2?

Beispiel

Hat ein „Student“ eine „Addresse“?

4

Hat ein „Apfel“ eine „Farbe“?

4

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 13 / 22

Korrekter Einsatz von Komposition

Wichtige Frage bei der Überlegung, ob DatenTyp1 DatenTyp2 als Komposi-tion enthalten soll: Hat DatenTyp1 einen DatenTyp2?

Beispiel

Hat ein „Student“ eine „Addresse“? 4

Hat ein „Apfel“ eine „Farbe“? 4

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 13 / 22

Vererbung – Das Schlüsselwort extends

class Measurement {LocalDateTime datetime;Koordinate position;

boolean alarm() {...}}

class TemperatureM extends Measurement {double temperature;

}

class WindM extends Measurement {double speed;double direction;

}

Measurement

LocalDateTime datetime

Koordinate position

boolean alarm()

TemperatureM

LocalDateTime datetime

Koordinate position

double temperature

boolean alarm()

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 14 / 22

Vererbung – Das Schlüsselwort extends

class Measurement {LocalDateTime datetime;Koordinate position;

boolean alarm() {...}}

class TemperatureM extends Measurement {double temperature;

}

class WindM extends Measurement {double speed;double direction;

}

Measurement

LocalDateTime datetime

Koordinate position

boolean alarm()

TemperatureM

LocalDateTime datetime

Koordinate position

double temperature

boolean alarm()

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 14 / 22

Beispiel für protected Sichtbarkeit

class Measurement {private LocalDateTime datetime;protected Koordinate position;

public boolean alarm() {...}}

class TemperatureM extends Measurement {private double temperature;

}

class WindM extends Measurement {private double speed;private double direction;

}

Measurement

private LocalDateTime datetime

protected Koordinate position

public boolean alarm()

TemperatureM

(not accessible: datetime)

protected Koordinate position

private double temperature

boolean alarm()

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 15 / 22

Weiterführende Konzepte derObjektorientierung

Abstrakte Klassen

Abstrakte Klassen

class Measurement {...// returns ’true’ if measurement is alarming, ’false’ otherwisepublic boolean alarm() {...}

}

Klasse Measurement bietet eine Methode alarm() an

Die Methode soll true zurückgeben, wenn die Messung alarmierend ist

. . . aber die Implementierung der Methode hängt von der Implementierung derdiversen Subtypen ab

ï Es ergibt keinen Sinn, Objekte vom Typ Measurement zu erstellen

Der Datentyp sollte abstrakt sein

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 16 / 22

Abstrakte Klassen

class Measurement {...// returns ’true’ if measurement is alarming, ’false’ otherwisepublic boolean alarm() {...}

}

Klasse Measurement bietet eine Methode alarm() an

Die Methode soll true zurückgeben, wenn die Messung alarmierend ist

. . . aber die Implementierung der Methode hängt von der Implementierung derdiversen Subtypen ab

ï Es ergibt keinen Sinn, Objekte vom Typ Measurement zu erstellen

Der Datentyp sollte abstrakt sein

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 16 / 22

Abstrakte Klassen

class Measurement {...// returns ’true’ if measurement is alarming, ’false’ otherwisepublic boolean alarm() {...}

}

Klasse Measurement bietet eine Methode alarm() an

Die Methode soll true zurückgeben, wenn die Messung alarmierend ist

. . . aber die Implementierung der Methode hängt von der Implementierung derdiversen Subtypen ab

ï Es ergibt keinen Sinn, Objekte vom Typ Measurement zu erstellen

Der Datentyp sollte abstrakt sein

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 16 / 22

Abstrakte Klassen

class Measurement {...// returns ’true’ if measurement is alarming, ’false’ otherwisepublic boolean alarm() {...}

}

Klasse Measurement bietet eine Methode alarm() an

Die Methode soll true zurückgeben, wenn die Messung alarmierend ist

. . . aber die Implementierung der Methode hängt von der Implementierung derdiversen Subtypen ab

ï Es ergibt keinen Sinn, Objekte vom Typ Measurement zu erstellen

Der Datentyp sollte abstrakt sein

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 16 / 22

Abstrakte Klassen – Keyword abstract

abstract class Measurement {...// returns ’true’ if measurement is alarming, ’false’ otherwiseabstract boolean alarm();

}

class TemperatureM extends Measurement {double temperature;

// Implement the abstract method from the supertypeboolean alarm() {

return temperature > 35;}

}

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 17 / 22

Abstrakte Klassen – Keyword abstract

abstract class Measurement {...// returns ’true’ if measurement is alarming, ’false’ otherwiseabstract boolean alarm();

}

class WindM extends Measurement {double speed;

// Implement the abstract method from the supertypeboolean alarm() {

return speed > 80;}

}

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 18 / 22

Abstrakte Klassen – Eigenschaften

Falls mindestens eine Methode abstract ist, d.h. nicht implementiert, mussdie ganze Klasse abstract deklariert sein

Abstrakte Klassen können nicht instanziert werden (new ...)

Abstrakte Klassen enthalten Daten und Code, welche von allen Subklassengeerbt werden; von den Unterschieden wird abstrahiert

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 19 / 22

Abstrakte Klassen – Eigenschaften

Falls mindestens eine Methode abstract ist, d.h. nicht implementiert, mussdie ganze Klasse abstract deklariert sein

Abstrakte Klassen können nicht instanziert werden (new ...)

Abstrakte Klassen enthalten Daten und Code, welche von allen Subklassengeerbt werden; von den Unterschieden wird abstrahiert

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 19 / 22

Abstrakte Klassen – Eigenschaften

Falls mindestens eine Methode abstract ist, d.h. nicht implementiert, mussdie ganze Klasse abstract deklariert sein

Abstrakte Klassen können nicht instanziert werden (new ...)

Abstrakte Klassen enthalten Daten und Code, welche von allen Subklassengeerbt werden; von den Unterschieden wird abstrahiert

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 19 / 22

Abstrakte Klassen – Verwendung

TemperatureM t = new TemperatureM(40);boolean b = t.alarm();

ï In diesem Beispiel wird die Variable b auf true gesetzt

Was passiert, wenn wir alarm() aus einer Methode aufrufen, die in KlasseMeasurement definiert ist?

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 20 / 22

Abstrakte Klassen – Verwendung

TemperatureM t = new TemperatureM(40);boolean b = t.alarm();

ï In diesem Beispiel wird die Variable b auf true gesetzt

Was passiert, wenn wir alarm() aus einer Methode aufrufen, die in KlasseMeasurement definiert ist?

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 20 / 22

Abstrakte Klassen – Verwendung

TemperatureM t = new TemperatureM(40);boolean b = t.alarm();

ï In diesem Beispiel wird die Variable b auf true gesetzt

Was passiert, wenn wir alarm() aus einer Methode aufrufen, die in KlasseMeasurement definiert ist?

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 20 / 22

Abstrakte Klassen – Dynamische Methodenbindung

abstract class Measurement {abstract boolean alarm();

String alarmOutput() {if (this.alarm()) {

Out.println("Alarm!");} else {

Out.println("Nominal");}

}}

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 21 / 22

Abstrakte Klassen – Dynamische Methodenbindung

TemperatureM t = new TemperatureM(40);t.alarmOutput();

Ausgabe: "Alarm!"

Das Objekt t vom Typ TemperatureM erbt Methode alarmOutput

In diesem Objekt ist die Implementierung der Methode alarm() aus KlasseTemperaturM an die abstrakte Methode alarm() gebunden

Deshalb wird alarmOutput() die Implementierung von alarm() aus KlasseTemperatureM aufrufen

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 22 / 22

Abstrakte Klassen – Dynamische Methodenbindung

TemperatureM t = new TemperatureM(40);t.alarmOutput();

Ausgabe: "Alarm!"

Das Objekt t vom Typ TemperatureM erbt Methode alarmOutput

In diesem Objekt ist die Implementierung der Methode alarm() aus KlasseTemperaturM an die abstrakte Methode alarm() gebunden

Deshalb wird alarmOutput() die Implementierung von alarm() aus KlasseTemperatureM aufrufen

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 22 / 22

Abstrakte Klassen – Dynamische Methodenbindung

TemperatureM t = new TemperatureM(40);t.alarmOutput();

Ausgabe: "Alarm!"

Das Objekt t vom Typ TemperatureM erbt Methode alarmOutput

In diesem Objekt ist die Implementierung der Methode alarm() aus KlasseTemperaturM an die abstrakte Methode alarm() gebunden

Deshalb wird alarmOutput() die Implementierung von alarm() aus KlasseTemperatureM aufrufen

Programmieren und Problemlösen – Weiterführende Objektorientierung Frühling 2019 Dennis Komm 22 / 22

Danke für die Aufmerksamkeit