530 likes | 745 Views
I nstitut für K artographie und G eoinformation Prof.-Dr. Lutz Plümer , Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag. Einführung in die Programmierung mit Java. 5. Vorlesung WS 2002/2003. objektorientiertes Programmieren. Vorstellung wie in der realen Welt:. die Tür. Objekt.
E N D
Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003
objektorientiertes Programmieren Vorstellung wie in der realen Welt: die Tür Objekt IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
objektorientiertes Programmieren Vorstellung wie in der realen Welt: • Höhe = 2.0 m • Breite = 0.7 m • u.a.m hat die Tür Attribute Objekt IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
objektorientiertes Programmieren Vorstellung wie in der realen Welt: • Höhe = 2.0 m • Breite = 0.7 m • u.a.m • aufschließen • zuschließen • öffnen • schließen • u.a.m hat kann man die Tür Attribute Methoden Objekt IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
objektorientiertes Programmieren Vorstellung wie in der realen Welt: • Höhe = 2.0 m • Breite = 0.7 m • u.a.m • aufschließen • zuschließen • öffnen • schließen • u.a.m hat kann man die Tür Attribute Methoden Objekt Eigenschaften IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
objektorientiertes Programmieren- Prinzipien - 1. Abstraktion klare Trennung zwischen : Konzept Umsetzung jede Tür und diese Tür Klasse Objekt einer Klasse oder auch : alle Objekte mit gleichen Eigenschaften gehören zu einer Klasse Klassenbildung IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
objektorientiertes Programmieren- Prinzipien - 1. Abstraktion 2. Kapselung • Zugriff auf die Attribute eines Objektsi.d.R. nur über seine Methoden • Verbergen unwichtiger Details damit man z.B. eine abgeschlossene Tür nicht öffnen kann ohne sie aufzuschließen ! z.B. die genaue Konstruktion des Schlosses IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
objektorientiertes Programmieren- Prinzipien - 1. Abstraktion 2. Kapselung 3. Vererbung später ... 4. Polymorphismus IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen • Klassen besitzen : • einen Klassennamen • immer nur eine Klasse je Datei • der Dateiname ist immerKlassenname.java Syntax : classKlassenname{ ... } IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen • Klassen besitzen : • einen Klassennamen Syntax : Beispiel : classKlassenname{ ... } classPunkt2D{ ... } IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen- Deklaration von Attributen - • Klassen besitzen : • einen Klassennamen • beliebig viele Attribute Syntax : classKlassenname{ typattributsname; ... } IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Deklaration von Attributen - • Klassen besitzen : • einen Klassennamen • beliebig viele Attribute Syntax : classKlassenname{ typattributsname; ... } • Deklaration von Attributen • für jedes Objekt (Instanz) der Klasse: • gleiche Attributsnamen • aber individuelle Werte IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Deklaration von Attributen - • Klassen besitzen : • einen Klassennamen • beliebig viele Attribute Syntax : Beispiel : classKlassenname{ typattributsname; ... } classPunkt2D{ intnummer; doublex; doubley; } IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Definition von Methoden - • Klassen besitzen : • einen Klassennamen • beliebig viele Attribute • beliebig viele Methoden Syntax : classKlassenname{ // Attribute typmethodenname( Parameter){ Anweisung; ... } } IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Definition von Methoden - • Klassen besitzen : • einen Klassennamen • beliebig viele Attribute • beliebig viele Methoden Beispiel : classPunkt2D{ intnummer; doublex, y; doublegetX(){ return(x); } voidsetX(double wert){ x = wert; } } Syntax : classKlassenname{ // Attribute typmethodenname( Parameter){ Anweisung; ... } } IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Rückgabewerte von Methoden - Syntax : Beispiel : classKlassenname{ // Attribute typmethodenname( Parameter){ Anweisung; ... } } classPunkt2D{ intnummer; doublex, y; doublegetX(){ return(x); } voidsetX(double wert){ x = wert; } } Typ des Rückgabewertes IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Rückgabewerte von Methoden - Syntax : Beispiel : classKlassenname{ // Attribute typmethodenname( Parameter){ Anweisung; ... } } classPunkt2D{ intnummer; doublex, y; doublegetX(){ return(x); } voidsetX(double wert){ x = wert; } } Rückgabe eines Wertes IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Rückgabewerte von Methoden - Syntax : Beispiel : classKlassenname{ // Attribute typmethodenname( Parameter){ Anweisung; ... } } classPunkt2D{ intnummer; doublex, y; doublegetX(){ return(x); } voidsetX(double wert){ x = wert; } } Methoden ohne Rückgabe IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Parameter von Methoden - Beispiel : Syntax : classPunkt2D{ intnummer; doublex, y; doublegetX(){ return(x); } } classKlassenname{ // Attribute typmethodenname( Parameter){ Anweisung; ... } } eine Methode muss keine Parameter haben ! IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Parameter von Methoden - Beispiel : classPunkt2D{ intnummer; doublex, y; voidsetX(doublewert){ x = wert; } } Syntax eines Parameters: typ parametername IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Parameter von Methoden - Beispiel : classPunkt2D{ intnummer; doublex, y; voidsetPosition(doublewert_x,doublewert_y){ x = wert_x; y = wert_y; } } bei mehreren Parametern sind die einzelne Parameter durch ein Komma zu trennen ! IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Zugriff auf Attribute aus Methoden - Beispiel : classPunkt2D{ intnummer; doublex, y; voidsetPosition(doublewert_x,doublewert_y){ x = wert_x; y = wert_y; } } der Zugriff auf Attribute der Klasse aus ihren Methoden erfolgt genau wie bei Variablen der Methoden IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Erzeugen von Objekten einer Klasse - Syntax : Klassennameobjektname; objektname = newKlassenname(); // Deklaration // Instanziierung oder kurz : Klassennameobjektname = newKlassenname(); Beispiel : Punkt2Dtp_1001; tp_1001 = newPunkt2D(); IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Objekte - Zugriff auf die Attribute - Syntax : objektname.attributsname IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Objekte - Zugriff auf die Attribute - Syntax : objektname.attributsname Beispiel : Punkt2Dtp_1001 = newPunkt2D(); tp_1001.x = 56987.43; tp_1001.y = 4365.73; tp_1001.nummer = 1001; IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Objekte - Zugriff auf die Attribute - Syntax : objektname.attributsname Beispiel : Punkt2Dtp_1001 = newPunkt2D(); tp_1001.x = 56987.43; tp_1001.y = 4365.73; tp_1001.nummer = 1001; Attribute eines Objekts können genauso verwendet werden wie andere Variablen desselben Typs doubledelta_x = tp_1001.x - tp_1002.x; IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Objekte - im Arbeitsspeicher - tp_1001 Beispiel : Punkt2Dtp_1001 ; IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Objekte - im Arbeitsspeicher - tp_1001 Beispiel : Punkt2Dtp_1001 ; tp_1001 = newPunkt2D(); x = y = nummer = IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Objekte - im Arbeitsspeicher - tp_1001 Beispiel : Punkt2Dtp_1001 ; tp_1001 = newPunkt2D(); tp_1001.x = 56987.43; tp_1001.y = 4365.73; tp_1001.nummer = 1001; x = 56987.43 y = 4365.73 nummer = 1001 IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Objekte - im Arbeitsspeicher - tp_1001 Beispiel : Punkt2Dtp_1001 ; tp_1001 = newPunkt2D(); tp_1001.x = 56987.43; tp_1001.y = 4365.73; tp_1001.nummer = 1001; Punkt2Dtp_1002 ; x = 56987.43 y = 4365.73 nummer = 1001 tp_1002 IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Objekte - im Arbeitsspeicher - tp_1001 Beispiel : Punkt2Dtp_1001 ; tp_1001 = newPunkt2D(); tp_1001.x = 56987.43; tp_1001.y = 4365.73; tp_1001.nummer = 1001; Punkt2Dtp_1002 ; tp_1002 = tp_1001; x = 56987.43 y = 4365.73 nummer = 1001 tp_1002 IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Objekte vergleichen Punkt2D a = newPunkt2D(), b = newPunkt2D(); a.x= 1.0;b.x= 1.0; a.y= 2.0;b.y= 2.0; a.nummer = 1; b.nummer= 1; Was liefert a == b ? a b x = 1.0 y = 1.0 nummer = 1 x = 1.0 y = 1.0 nummer = 1 IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Objekte vergleichen Punkt2D a = newPunkt2D(), b = newPunkt2D(); a.x= 1.0;b.x= 1.0; a.y= 2.0;b.y= 2.0; a.nummer = 1; b.nummer= 1; Was liefert a == b ? false ! a b x = 1.0 y = 1.0 nummer = 1 x = 1.0 y = 1.0 nummer = 1 IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Objekte vergleichen Punkt2D a = newPunkt2D(), b = newPunkt2D(); a.x= 1.0;b.x= 1.0; a.y= 2.0;b.y= 2.0; a.nummer = 1; b.nummer= 1; Was liefert a == b ? false ! Was liefert a.x == b.x ? a b x = 1.0 y = 1.0 nummer = 1 x = 1.0 y = 1.0 nummer = 1 IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Objekte vergleichen Punkt2D a = newPunkt2D(), b = newPunkt2D(); a.x= 1.0;b.x= 1.0; a.y= 2.0;b.y= 2.0; a.nummer = 1; b.nummer= 1; Was liefert a == b ? false ! Was liefert a.x == b.x ? true ! a b x = 1.0 y = 1.0 nummer = 1 x = 1.0 y = 1.0 nummer = 1 IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Arrays - ein Array von Objekten - Syntax : Klassenname[ ]arrayname; arrayname = newKlassenname[groesse]; // Deklarieren // Instanziieren // eines Arrays ACHTUNG : jedes Arrayelement ist einzeln zu instanziieren // Instanziieren // eines Elements arrayname[index] = newKlassenname(); IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Arrays - ein Array von Objekten - Beispiel : linie Punkt2D[ ]linie; IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Arrays - ein Array von Objekten - Beispiel : linie Punkt2D[ ]linie; linie = newPunkt2D[2]; 0 1 IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Arrays - ein Array von Objekten - Beispiel : linie Punkt2D[ ]linie; linie = newPunkt2D[2]; linie[0] = newPunkt2D(); 0 1 x = y = nummer = IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Arrays - ein Array von Objekten - Beispiel : linie Punkt2D[ ]linie; linie = newPunkt2D[2]; linie[0] = newPunkt2D(); 0 1 linie[1] = newPunkt2D(); x = y = nummer = x = y = nummer = IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Arrays - Zugriff auf Objektattribute im Array - Syntax : arrayname[index].attributsname; IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Arrays - Zugriff auf Objektattribute im Array - Syntax : arrayname[index].attributsname; Beispiel : linie Punkt2D[ ]linie; linie = newPunkt2D[2]; 0 1 IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Arrays - Zugriff auf Objektattribute im Array - Syntax : arrayname[index].attributsname; Beispiel : linie Punkt2D[ ]linie; linie = newPunkt2D[2]; linie[0] = newPunkt2D(); 0 1 x = y = nummer = IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Arrays - Zugriff auf Objektattribute im Array - Syntax : arrayname[index].attributsname; Beispiel : linie Punkt2D[ ]linie; linie = newPunkt2D[2]; linie[0] = newPunkt2D(); 0 1 linie[0].x = 56743.43; x = 56743.43; y = nummer = IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Zusammenspiel von Klassen - Beispiel : Attribute vom Typ einer Klasse : classPunkt2D{ intnummer ; doublex; doubley; } classDreieck{ intnummer ; Punkt2D a, b, c; } zugehörige Datei : Punkt2D.java zugehörige Datei : Dreieck.java IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Zusammenspiel von Klassen - Beispiel : Variablen vom Typ einer Klasse : classPunkt2D{ intnummer ; doublex; doubley; } classBerechneStrecke2D{ static public void main(String arg[ ]){ Punkt2Danfang = newPoint2D(), ende = newPoint2D(); anfang.x = 10.0; anfang.y = 20.0; ende.x = -10.0; ende.y = -20.0; double delta_x = anfang.x – ende.x; double delta_y = anfang.y – ende.y; double strecke = Math.sqrt( delta_x * delta_x + delta_y * delta_y); } } Methode IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Java - Klassen - Anlegen einer neuen Klasse mit Forte - Kontextmenu zu einem Verzeichnis erreichbar über einen Klick mit der rechten Maustaste auf das Verzeichnis ( z.B. U:\JAVA ) New Classes Class weiter, genau wie immer ... IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Übungsaufgabe (1/2) • Definiert eine Klasse "Kreis" mit den Eigenschaften eines Kreises (Radius, Mittelpunkt). • Erzeugt fünf Instanzen der Klasse mit gleichem Mittelpunkt und verschiedenen Radien. Hinweis zu (2.) : Lege eine neue Klasse “Kreise“ an und innerhalb von main(...){ } geht‘s weiter ... IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Übungsaufgabe (2/2) • Definiert eine Klasse "Kreis" mit den Eigenschaften eines Kreises (Radius, Mittelpunkt). • Erzeugt fünf Instanzen der Klasse mit gleichem Mittelpunkt und verschiedenen Radien. • Speichert die fünf erzeugten Instanzen der Klasse "Kreis" in einem Array ab. IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04
Hausaufgabe • Entwerft analog zur Definition von Kreisen die Klassendefinitionen für Dreiecke, Ellipsen und Trapeze. Erzeugt mindestens eine Instanz jeder Klasse und 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. Schmitz_Dreieck.java) IKG Dörschlag, Gröger, Plümer – Einführung in die Programmierung mit Java – WS 03/04