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