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

64
Dennis Komm Programmieren und Problemlösen Weiterführende Objektorientierung Frühling 2019 – 11. März 2019

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

Page 1: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

Dennis Komm

Programmieren und ProblemlösenWeiterführende Objektorientierung

Frühling 2019 – 11. März 2019

Page 2: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

Wir erinnern uns. . .

Page 3: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

Beispiel – Erdbebendaten

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

Page 4: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

Beispiel – Erdbebendaten

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

Page 5: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 6: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 7: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 8: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 9: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 10: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 11: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 12: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 13: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 14: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 15: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 16: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 17: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 18: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 19: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 20: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 21: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

Weiterführende Konzepte derObjektorientierung

Page 22: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 23: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 24: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 25: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 26: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 27: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 28: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 29: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 30: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 31: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

Weiterführende Konzepte derObjektorientierung

Vererbung

Page 32: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 33: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 34: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 35: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 36: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 37: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 38: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 39: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 40: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 41: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 42: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 43: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 44: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 45: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 46: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 47: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

Weiterführende Konzepte derObjektorientierung

Abstrakte Klassen

Page 48: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 49: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 50: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 51: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 52: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 53: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 54: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 55: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 56: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 57: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 58: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 59: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 60: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 61: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 62: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 63: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

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

Page 64: Dennis Komm Programmieren und Problemlösen · Aufgabe – Erdbebenmessungen Implementiere das Klassendesign Erstelle eine Eingabeaufforderung zum Erstellen von drei Messungen Speichere

Danke für die Aufmerksamkeit