Kein Folientitel - Institut für Geodäsie und Geoinformation der

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