Übung Praktische Informatik I HWS 2008/2009 Hendrik Lemelson Lehrstuhl für Praktische Informatik IV Universität Mannheim lemelson@pi4.informatik.uni-mannheim.de 10.10.08 1-1
Themenübersicht Vererbung public, protected, private, Überschreiben geerbter Methoden Operatoren Unterschiede zwischen &&,&,, Post-/Präinkrement, Post-/Prädekrement Operatoren-Präzedenz Variablen-Kontexte Hinweise zum vierten Übungsblatt Die Methode Math.random() Die Klasse Scanner Das Programm javadoc 10.10.08 1-2
Vererbung Schlüsselwörter static: Bei dieser Methode oder Variable handelt es sich um eine Klassen- Methode oder Variable. Sie ist nicht an eine Instanz der Klasse gebunden und für diese Klasse eindeutig. public: Die Methode oder Variable ist von beliebigen anderen Klassen aus sicht- und zugreifbar. protected: Die Methode oder Variable ist von innerhalb der Klasse selbst, von Unterklassen sowie von Klassen aus dem selben Paket sicht- und zugreifbar. private: Die Methode oder Variable ist nur von innerhalb der Klasse in der sie definiert wurde sicht- und zugreifbar. (kein Schlüsselwort): Die Methode oder Variable ist von innerhalb der Klasse in der sie definiert wurde sowie von Klassen aus dem gleichen Paket sicht- und zugreifbar. Vorsicht: Diese Schlüsselwörter sind nur im Klassenrumpf erlaubt! 10.10.08 1-3
Überschreiben geerbter Methoden Methoden, die in einer Elternklasse definiert wurden und für Kindklassen sichtbar sind, können in den Kindklassen verwendet werden. Aber: In manchen Fällen soll zwar die Signatur aller Kindklassen gleich sein, aber je nach Kindklasse soll eine Methode andere Operationen ausführen. In so einem Fall kann eine geerbte Methode in der Kindklasse einfach überschrieben werden. Dazu wird in der Kindklasse einfach eine Methode mit gleichem Namen und gleicher Signatur definiert. Dieses Überschreiben kann man in Java auch erzwingen! Dazu wird die Elternklasse selbst und die Methode in der Elternklasse mit dem Schlüsselwort abstract deklariert. Diese Methode MUSS dann in allen abgeleiteten Klassen implementiert werden. 10.10.08 1-4
Code Beispiel 1 Fußballmannschaft 10.10.08 1-5
Operatoren Logisches UND: && - lazy Abarbeitung : Ist das zuerst betrachtete Element false, dann kann der gesamt Ausdruck nur noch false ergeben. Deshalb wird die Abarbeitung sofort abgebrochen und als Ergebnis false ausgegeben. & - komplette Abarbeitung: Der komplette Ausdruck wird weiter abgearbeitet, auch wenn das Ergebnis eigentlich schon feststeht. Diese Variante kann auch für Bitvektoren verwendet werden. Logisches ODER: - siehe && - siehe & Die einstelligen Varianten sind z.b. sinnvoll, wenn der bool'sche Wert Ergebnis einer Methode ist, die auf jeden Fall ausgeführt werden soll. 10.10.08 1-6
Operatoren (2) Post-/Prä-Inkrement / -Dekrement x++: Der Wert von x wird zuerst gelesen und danach um eins erhöht. Weitergearbeitet wird mit dem ursprünglichen Wert. ++x: Der Wert von x wird zuerst um eins erhöht und erst danach für die weitere Verwendung ausgelesen. x-- / --x: Das Gleiche, nur wird der Wert von x hier um eins verringert. Modulo-Operator (%) Der Modulo-Operator liefert den Rest einer Division mit Rest. In Java ist er für alle numerischen Datentypen erlaubt. Weitere Operatoren:!, (), *, /, +, -, >>, <<, >=, <=, ==,!=, ^, =,... 10.10.08 1-7
Operatoren (3) Die Reihenfolge in der Ausdrücke ausgewertet werden, hängt von den verwendeten Operatoren ab. Dies ist ähnlich zu der Regel Punkt vor Strich in der Mathematik. Es gilt: 1. unäres + oder -, (typecast) 2. *, /, % 3. +, - 4. <=, >=, <, > 5. ==,!= 6. && 7. Prinzipiell sollte man aber lieber zusätzliche Klammern verwenden, um so die Lesbarkeit des Quellcodes sicherzustellen. 10.10.08 1-8
Variablen Kontext Lokale Variablen sind nur innerhalb ihres jeweiligen Kontextes gültig. Der Kontext wird durch ein Paar geschweifte Klammern ({...}) festgelegt. Für Instanz- und Klassenvariablen wird der Gültigkeitsbereich über die Schlüsselwörter public, protected, private und festgelegt. Innerhalb ihres Gültigkeitsbereiches sind Variablennamen eindeutig. 10.10.08 1-9
Exkurs: Debugging in BlueJ Als Debugging bezeichnet man die Fehlersuche und -entfernung u.a. bei der Softwareentwicklung (engl. bug Laus, Käfer). Wichtiges Hilfsmittel beim Debugging sind so genannte Haltepunkte. An diesen Punkten wird die Code-Ausführung während des Debuggings unterbrochen. Der Entwickler hat dann Zugriff auf den aktuellen Zustand des Prozesses und kann diesen überprüfen bzw. unter Umständen auch verändern. BlueJ bietet dazu eine sehr komfortable Oberfläche. 10.10.08 1-10
Code Beispiel 2 Debugging und Operatoren 10.10.08 1-11
Das Programm javadoc Markierung und Parameter Dokumentation Verwendung in @author name Erzeugt einen Autoreneintrag. Klasse, Interface @version version Erzeugt einen Versionseintrag. Darf höchstens einmal je Klasse oder Interface verwendet werden. Klasse, Interface @since JDK-Version @see reference @param name description @return description @exception classname description @deprecated description Beschreibt, seit wann das beschriebene Feature existiert Erzeugt einen Querverweis auf eine andere Klasse, Methode oder einen beliebigen anderen Teil der Dokumentation. Gültige Verweise sind z.b.: @see java.util.vector @see Vector @see Vector#addElement Parameterbeschreibung einer Methode Beschreibung des Rückgabewerts einer Methode Beschreibung einer Ausnahme, die von dieser Methode geworfen wird Markiert eine veraltete Methode, die zukünftig nicht mehr verwendet werden sollte. Klasse, Interface Klasse, Interface, Instanzvariable, Methode Methode Methode Methode Methode Siehe auch: http://java.sun.com/j2se/javadoc/index.jsp 10.10.08 1-12
Code Beispiel 3 javadoc & die Berater Klasse 10.10.08 1-13
Hinweise zum Übungsblatt java.lang.math.random(): Die Methode Math.random() ist eine statische Methode, es muss also kein Math-Objekt erzeugt werden. Sie liefert als Ergebnis eine Zahl die größer oder gleich Null und kleiner als Eins ist! Frage: Wie bilde ich diesen Bereich auf einen beliebigen Bereich [x:y] mit x <= y ab? java.util.scanner (siehe auch Script 3.3-43): Scanner liest jeweils eine Eingabezeile ein Die eingelesenen Daten können in verschiedenen Formaten abgerufen werden. (Wichtig, falls mit der Eingabe z.b. gerechnet?! werden soll.) javadoc: Rufen Sie javadoc auf der Kommandozeile mit dem Parameter -help auf, um eine Übersicht der Optionen zu erhalten. 10.10.08 1-14