Quiz • Schreiben Sie die Signatur eines Konstruktors, der zu folgendem Objektkreationsausdruck passt: Objektinteraktion Kooperation zwischen Objekten new Editor("readme.txt", –1) 4.0 ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Abstraktion und Modularisierung Eine Digitaluhr • Abstraktion ist die Fähigkeit, Details der Teile zu ignorieren, um sich auf eine höhere Ebene eine Problems zu konzentrieren. • Modularisierung ist der Prozess, ein Ganzes in wohldefinierte Teile zu zerlegen, die unabhängig voneinander konstruiert und verstanden werden können, und die in wohldefinierter Weise interagieren. ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Modularisierung der Uhrenanzeige Eine vierstellige Anzeige? Oder zwei zweistellige Anzeigen? ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Implementierung NumberDisplay public class NumberDisplay { private int limit; private int value; } Constructor and methods omitted. ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Implementierung ClockDisplay Objektdiagramm public class ClockDisplay { private NumberDisplay hours; private NumberDisplay minutes; } Constructor and methods omitted. ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Klassendiagramm ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Quelltext: NumberDisplay public NumberDisplay(int rollOverLimit) { limit = rollOverLimit; value = 0; } public void increment() { value = (value + 1) % limit; } ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Der Modulo-Operator • Der Divisionsoperator (/) liefert, wenn er auf int-Operanden angewandt wird, das Ergebnis einer Integerdivision. • Der Modulo-Operator (%) liefert den Rest der Integerdivision. • Z.B.: 17 / 5 = Ergebnis 3, Rest 2 • In Java: 17 / 5 = 3 17 % 5 = 2 ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Quiz • Was ist das Ergebnis des Ausdrucks (8 % 3) • Was sind alle möglichen Ergebnisse des Ausdrucks (n % 5)? ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Quiz Aufgabe public void increment() { value = (value + 1) % limit; } • Was sind alle möglichen Ergebnisse des Ausdrucks (n % m)? • Schreiben Sie die incrementMethode um, so dass sie ein ifStatement benutzt, statt des Modulo-Operators. ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Quelltext: NumberDisplay public String getDisplayValue() { if(value < 10) { return "0" + value; } else { return "" + value; } } Objekte erzeugen Objekte public class ClockDisplay { private NumberDisplay hours; private NumberDisplay minutes; private String displayString; } ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling public ClockDisplay() { hours = new NumberDisplay(24); minutes = new NumberDisplay(60); updateDisplay(); } ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling ClockDisplay Objektdiagramm null • null ist ein besonderer Wert in Java • Alle Objektvariablen werden auf null initialisiert. • Man kann null zuweisen, und für null testen: private NumberDisplay hours; if(hours == null) { ... } hours = null; ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Objekte erzeugen Objekte in Klasse NumberDisplay: public NumberDisplay(int rollOverLimit); Formaler Parameter in Klasse ClockDisplay: hours = new NumberDisplay(24); Methodenaufruf public void timeTick() { minutes.increment(); if(minutes.getValue() == 0) { // it just rolled over! hours.increment(); } updateDisplay(); } Aktueller Parameter ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Interne Methode /** * Update the internal string that * represents the display. */ private void updateDisplay() { displayString = hours.getDisplayValue() + ":" + minutes.getDisplayValue(); } ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling Konzepte • Abstraktion • Modularisierung • Klassen definieren Typen • Klassendiagramm • Objektdiagramm • Objektreferenzen Primitive Typen Objekttypen Objekterzeugung ‘Overloading’ Interne und externe Methodenaufrufe •! Debugger •! •! •! •! •! ProInformatik III: Objektorientierte Programmierung, © David J. Barnes, Michael Kölling