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

Werbung
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger
Einführung in die
Programmierung mit Java
5. Vorlesung WS 2002/2003
Übersicht
• Objektorientierte Programmierung/Modellierung:
Grundbegriffe
– Klasse, Objekt, Kapselung, ...
• Klassen und Objekte
– Definition von Klassen
– Erzeugen von Objekten (Instanzen)
– Zugriff auf Attribute eines Objekts
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
2
Objektorientierte Prinzipien
• Klassenbildung
– Objekte mit gleichen Eigenschaften werden zu Klassen
zusammengefasst
– Objekte haben Attribute und Methoden
• Kapselung
– Zugriff auf Objekte nur über wohldefinierte Schnittstellen
(Methoden)
– Verbergen von unwichtigen Details
• Vererbung (später ... )
• Polymorphismus (später ... )
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
3
Klassen
• zunächst nur 'einfache' Klassen
– haben nur Attribute (Eigenschaften)
– keine Methoden (erst in nächster Stunde)
 zunächst keine Kapselung
• Klasse besteht aus
–
–
–
–
einem Klassennamen
beliebig vielen Attributen
Attribute haben einen (einfachen) Typ, z.B. int, double
Beispiel: Klasse „Punkt“ mit x- und y-Koordinate (Typ
double) und Nummer (Typ int).
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
4
Klassenname
Definition einer Klasse
Attribute werden deklariert
• Syntax:
wie Variablen, stehen
class Klassenname {
jedoch innerhalb einer Klasse.
Typ1 Variablenname1;
Typ2 Variablenname2;
...
Deklaration der Attribute: jede Instanz
}
(Objekt) der Klasse hat gleichnamige
Variablen (Attribute); die Werte können aber
für jedes Objekt individuell zugewiesen werden.
• Beispiel:
class Punkt {
double x_Koordinate;
double y_Koordinate;
int Punktnummer;
}
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
5
Forte: Hinzufügen einer neuen Klasse
• Rechtsklick auf Verzeichnis
mit "main"-Klasse
• New - Classes - Class
• Klassenamen eingeben
• Finish
• Ergebnis:
public class Punkt extends Object {
/** Creates new Punkt */
public Punkt() {
}
}
Attribute hinzufügen
• ... in einer Datei Punkt.java
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
6
Erzeugen von Objekten einer Klasse
• Syntax:
Klassenname Variable;
Variable = new Klassenname ();
// Deklaration
//Instantiierung
• Beispiel:
Punkt p1;
p1 = new Punkt();
//Deklaration der Variablen p1
// Erzeugung einer Instanz der
//Klasse Punkt; p1 ist eine
//Referenz auf die Instanz
Punkt p2;
p2 = new Punkt();
Punkt p3 = new Punkt();
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
7
Zugriff auf Attribute eines Objekts
class Punkt {
• Syntax:
double x_Koordinate;
Variablenname.Attributname
double y_Koordinate;
int Punktnummer;
• Beispiel:
}
Punkt p1;
p1 = new Punkt();
p1.x_Koordinate = 56987.43;
p1.y_Koordinate = 4365.43;
p1.Punktnummer = 6564;
double Abstand = ... + p1.x_Koordinate + ...
Attribute eines Objekts können genauso verwendet
werden wie andere Variablen desselben Typs
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
8
Beispiel: Rechteck
class Rechteck {
double breite;
double hoehe;
}
class XXXX {
Klassendefinition in Datei
Rechteck.java
Hauptprogramm in Datei
XXXX.java in Methode "main"
public static void main (String args[]) { // Hauptprogramm
Rechteck my_rechteck1;
// Deklaration einer Objektvariablen
my_rechteck1 = new Rechteck();
// Instantiierung eines Objekts
my_rechteck1.breite = 10.0;
// Zugriff auf Variablen der
my_rechteck1.hoehe = 5.0;
// Instanz (Zuweisung eines Werts)
Rechteck my_rechteck2 = new Rechteck(); // 2. Objekt dekl. & instant.
my_rechteck2.breite = my_rechteck1.breite - 2.0;
my_rechteck2.hoehe = 7.5;
}
}
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
9
Übungsaufgabe
• Definiert eine Klasse "Kreis" mit den Eigenschaften
eines Kreises (Radius, Mittelpunkt).
Erzeugt fünf Instanzen der Klasse mit gleichem
Mittelpunkt und verschiedenen Radien.
• Hinweise:
class Rechteck {
double breite;
double hoehe;
}
public static void main (String args[]) {
Rechteck my_rechteck1;
my_rechteck1 = new Rechteck();
my_rechteck1.breite = 10.0;
.......
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
10
Einschub: Arrays vom Typ einer Klasse
• Wie erhält man Arrays mit Instanzen einer Klasse,
z.B. Punkt?
• int
[ ] IntegerArray
= new int[6];
• Punkt [ ] PunktArray
= new Punkt[6];
• Typ der Arrayelemente ist Punkt (statt int)
• erforderlich: Instantiieren der einzelnen Punkte:
– PunktArray[0] = new Punkt();
– PunktArray[1] = new Punkt();
0 1 2 3 4 5
PunktArray
x = 0.0
y = 0.0
nummer = 0
x = 0.0
y = 0.0
nummer = 0
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
11
Zugriff auf Attribute von Instanzen in Array
• Zugriff auf Arrayelement: Arrayname[index]
– Beispiel: my_array[0];
• Zugriff auf Attribut: Referenzvariable.Attributname
– Beispiel: p1.X_Koordinate
• Kombination: Arrayname[index].Attributname
– Beispiel: PunktArray[0].X_Koordinate = 565.99;
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
12
Übungsaufgabe
• Speichert die in der vorherigen Übung erzeugten fünf
Instanzen der Klasse "Kreis" in einem Array ab.
• Hinweis zur Syntax:
– Punkt [ ] PunktArray = new Punkt[6];
– PunktArray[0] = new Punkt();
– PunktArray[0].X_Koordinate = 565.99;
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
13
Hausaufgabe
• Entwerft analog zur Definition von Rechtecken die
Klassendefinitionen für Dreiecke, Ellipsen und
Trapeze. Erzeugt mindestens eine Instanz jeder
Klasse weist ihnen sinnvolle Werte zu.
• Hinweis: Die Lösung umfasst mehrere .java-Dateien.
In jedem der Dateinamen (und auch Klassennamen)
muss Euer Nachname auftauchen (z.B.
SchmitzDreieck.java)
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03
14
Herunterladen