dennis komm programmieren und problemlösen · aufgabe – erdbebenmessungen implementiere das...
TRANSCRIPT
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