Objektinteraktion Quiz Eine Digitaluhr Abstraktion und

Werbung
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
Herunterladen