Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 6. Vorlesung WS 2001/2002 Übersicht • Besprechung der Übungsaufgabe • Referenzvariablen • Methoden im Detail – Parameterübergabe – Lokale Variablen – Konstruktoren • Klassen aus verschiedenen Dateien verwenden T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 2 1. Übungsaufgabe vom 21. 11. 2001 1. Entwerfen und Implementieren Sie analog zur Definition von Rechtecken die Klassendefinitionen für Dreiecke, Kreise, Ellipsen und Trapeze. Als Methoden sollten mindestens die Flächenberechnung und die textuelle Ausgabe der Variableninhalte zur Verfügung gestellt werden. Lösungsansatz: Wiederverwendung großer Teile der Klasse Rechteck. T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 3 Lösung zur 1. Aufgabe: Ausgangspunkt ist die Klasse Rechteck Diese Stellen müssen für die Erstellung der Klassen Dreieck, Kreis etc. // Methode zur Berechnung des Flächeninhalts double fläche () { // keine Parameter; Rückgabewert vom Typ double angepasst werden. double flächeninhalt; // lokale Variable (ex. nur in der Methode) class Rechteck { double breite, höhe; // Instanzvariablen (jedes Objekt der Klasse // Rechteck hat jeweils eigene Variablen) flächeninhalt=breite*höhe; // Berechnung anhand der Instanzvariablen return flächeninhalt; // Rückgabe des berechneten Wertes } // Methode zur Ausgabe des Objekts (als Text) void ausgeben() { // keine Parameter; kein Rückgabewert System.out.println("Dieses Rechteck hat folgende Eigenschaften:"); System.out.print("Breite: "); System.out.println(breite); System.out.print("Höhe: "); System.out.println(höhe); System.out.print("Fläche: "); System.out.println(fläche()); // hier steckt ein Methodenaufruf! } } T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 4 Lösung zur 1. Aufgabe: Klasse Kreis class Kreis { double radius; // Instanzvariable (jedes Objekt der Klasse // Rechteck hat jeweils eine eigene Variable) // Methode zur Berechnung des Flächeninhalts double fläche () { // keine Parameter; Rückgabewert vom Typ double double flächeninhalt; // lokale Variable (ex. nur in der Methode) flächeninhalt=Math.PI*radius*radius; return flächeninhalt; // Rückgabe des berechneten Wertes } // Methode zur Ausgabe des Objekts (als Text) void ausgeben() { // keine Parameter; kein Rückgabewert System.out.println("Dieser Kreis hat folgende Eigenschaften:"); System.out.print("Radius: "); System.out.println(radius); System.out.print("Fläche: "); System.out.println(fläche()); // hier steckt ein Methodenaufruf! } } T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 5 2. Übungsaufgabe vom 21. 11. 2001 2. Entwerfen Sie die Klasse Student, die alle zur Verwaltung eines Studentenregisters wesentlichen Informationen beinhaltet. a) Welche Methoden können Sie sich dazu vorstellen? b) Welche Informationen (Variablen & Methoden) sind auch auf Dozenten oder Verwaltungsangestellte anwendbar? T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 6 Wdh.: Klassen und Objekte • Klassen definieren allgemeine Eigenschaften (z.B. Definition geometrischer Figuren oder den Bauplan für ein Haus) • Von einer Klasse können Objekte (Instanzen) erzeugt werden (konkrete Ausprägung einer Klasse, z.B.: Rechteck mit Seitenlängen 10 und 7.5; oder das Beethoven-Haus) T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 7 Referenzvariablen • Bisher: normale Variablen – Stehen als Platzhalter für Werte – Normale Variable beinhaltet ihren Wert radius 2.7 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 8 Referenzvariablen • Bisher: normale Variablen – Stehen als Platzhalter für Werte – Normale Variable beinhaltet ihren Wert • Referenzvariablen zeigen auf Objekte; sie enthalten nicht selber das Objekt radius 2.7 kreis1 ? Instanz von Kreis radius 2.7 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 9 Referenzvariablen • Bisher: normale Variablen – Stehen als Platzhalter für Werte – Normale Variable beinhaltet ihren Wert • Referenzvariablen zeigen auf Objekte; sie enthalten nicht selber das Objekt – Referenzvariablen, die auf kein konkretes Objekt verweisen, sollte der Wert null zugewiesen werden (z.B. direkt bei der Deklaration) Beispiel: Kreis kreis2 = null; radius 2.7 kreis1 ? Instanz von Kreis radius 2.7 kreis2 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 10 Referenzvariablen - Beispiel Beispiel: Kreis kreis1, kreis2; kreis1 = new Kreis(); kreis1.radius = 1.0; kreis2 = kreis1; kreis2.radius = 2.5; kreis1.ausgeben(); kreis1 kreis2 ? ? Fazit: Deklaration zweier Wert • ZumNeuer Kopieren von für Objekten Instantiierung Referenzvariablen oderInstanzvariable, Erzeugen neuer Objekte da Initialisierung der eines Objekts reicht es nicht, die Referenzen kreis2 und kreis1 Kopieren der Referenz Instanzvariablen zu kopieren dasselbe (nicht desObjekte Objekts!!!) • ZumAusgabe: Vergleich zweier bezeichnen!!! unterschiedlicher Objekte2.5 Kreis hat Radius reicht es nicht auf Gleichheit der Referenzen zu prüfen Instanz von Kreis 2.5 radius 1.0 ? T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 11 Methoden im Detail T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 12 Methoden - Lokale Variablen • Variablen, die innerhalb von Methoden deklariert werden heißen lokale Variablen. • Lokale Variablen werden bei jedem Aufruf einer Methode neu angelegt und existieren nur für die Zeitdauer der Abarbeitung der Methode. • Im Gegensatz: Die evtl. innerhalb einer Methode erzeugten Objekte bestehen fort über die Methodenabarbeitung hinaus. – Aber: sollten alle Referenzen auf neue Objekte entfallen, weil am Ende einer Methode alle lokalen Referenzvariablen Aufhören zu existieren, so werden auch diese Objekte gelöscht. T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 13 Methoden - Parameterübergabe • Definition der Parameterliste • Formale Parameter • Aktuelle Parameter • Rückgabewerte T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 14 Konstruktoren (I) • Konstruktoren sind spezielle Methoden, die implizit bei der Erzeugung von Objekten aufgerufen werden Zweck: Initialisierungen (u.a. von Instanzvariablen) – Methodenname entspricht dem Klassennamen – keine Angabe des Rückgabewerts • Beispiel: Konstruktor für die Klasse Kreis Kreis(double r) { radius = r; } T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 15 Konstruktoren (II) • Aufruf von Konstruktoren geschieht automatisch bei der Instantiierung von Objekten • Beispiel: Kreis kreis1; kreis1 = new Kreis(3.5); • Wird kein Konstruktor definiert, so verwendet Java den voreingestellten eingebauten Standardkonstruktor – Aufruf mit leerer Parameterliste: kreis1 = new Kreis(); Anmerkung zu Forté: Bei der Neuerstellung einer Klasse in Forté wird automatisch das Gerüst für einen Konstruktor mitgeneriert. T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 16 Programme mit mehreren Klassen T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 17 Übungsaufgabe • Verbinden Sie die beiden Programme „Autsch“ und „Textuelle Zahlenausgabe“ der 3. bzw. 5. Vorlesung. Entwickeln Sie dazu zwei Klassen in eigenen Dateien: – Die Klasse „Zahlenobjekt“ soll Objekte für ganzzahlige Zahlen zwischen 0 und 999 bereitstellen. Die textuelle Ausgabe soll über eine Methode aufrufbar sein. – Die Klasse „Autsch“ soll anstelle einer int-Zahl und der Methode System.out.print auf die Klasse „Zahlenobjekt“ zurückgreifen. T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 18