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