26
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Embed Size (px)

Citation preview

Page 1: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Praktikum Entwicklung und Einsatz

von Geosoftware I-

Sitzung 3Klassen, Objekte, Arrays und

Kontrollstrukturen

Sommersemester 2003

Lars Bernard

Page 2: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Klassen und Objekte

• OO-Programmierung: Welche Objekte lassen sich identifizieren?

Was müssen diese Objekte können?

Objekte bestehen aus Methoden und Daten!

• Beispiel Geo (vereinfacht): Punkte (Point) müssen erzeugt und nach ihren Koordinaten gefragt

werden können.

Gezeichnet wird auf einem Bildschirm (Screen), der eine bestimmte Auflösung und einen Rahmen hat.

Gespeichert wird in einer Datei (Stream), die erzeugt oder gelesen wird.

Page 3: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Klassen und Objekte

• Klassen deklarieren (class...) Jede Klasse braucht (mindestens) einen Konstruktor:

• Die Methode, die speziell zur Initialisierung der Klassenattribute notwendig ist.

Methoden der Klasse deklarieren: • Wie spreche ich mit einem Objekt der Klasse? • Was will ich von dem Objekt?

Attribute (=Member-Variablen) von Klassen definieren:• Wie und wo speichere ich für das Objekt nötige Informationen?

• Der new-Operator erzeugt eine neue Instanz, also ein Objekt der Klasse.

Page 4: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Beispiel Number class Number { int number_;Number(int numberIn) {

number_ = numberIn;} int getNumber() {

return number_;}}

Attribute

Konstruktor

Methoden

Page 5: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Gültigkeitsbereiche der Variablen

Klassen- und Instanzvariablen

Page 6: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Sichtbarkeit/Bereich von Attributen und Methoden

• Zugriffs-Modifizierer

• static modifiziert zur beständigen Klassenvariable (= ‚für alle Klassen‘)

• final Konstante

• transient Marker für die Serialisierung

• volatile verhindert Optimierung

Specifier class subclass package world private X protected X X* X public X X X X package X X

Page 7: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Bezeichner von Klassen und Variablen

• Bezeichner dürfen keine Leer- oder Sonderzeichen enthalten.

• Bezeichner dürfen keine Schlüsselwörter sein.

• elementare Typen klein (int col)

• Klassen groß (class Point)

• sprechende Namen verwenden

• ausreichend und sinnvoll kommentieren

• entweder Englisch oder Deutsch

Page 8: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Referenzvariablen vs. elementare Variablen

• Elementare Variable: Speicherplatz für einen Wert int a = 5;

• Referenzvariable: Zeiger auf eine Instanz Point p1 = new Point(1.0, 5.0);

Page 9: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Arrays

• Arrays für elementare Datentypen int[] manyInts = new int[10];manyInts[0] = 0;manyInts[9] = 9;int l = manyInts.length; // => l = 10;

• Arrays für KlasseninstanzenPoint[] points = new Point[4];points[0].output();// => run time errorpoints[0] = new Point(0.0, 0.0);points[0].output();// => ok

Page 10: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Entwurf von Methoden (1)

• Nur die von der Methode zu lösende Aufgabe soll erledigt werden.

• Der Status des Objektes sollte sich durch die Methode nicht unerwartet ändern.

• Die Beschreibung der Methoden müssen klar sein (Kommentare!).

Page 11: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Entwurf von Methoden (2)

• Soll die Methode Ergebnisse liefern, muss ein Rückgabewert definiert werden (return-Anweisung).

• Methoden definieren Schnittstelle

„kapseln“ die Implementierung

Page 12: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Konstruktor

• Spezielle Methode, die beim Instanziieren einer Klasse aufgerufen wird: Eine neue Instanz der Klasse Point wird erzeugt

und die Referenz dieser Instanz in der Variablen p1 gespeichert:

p1 = new Point(1.0, 5.0); Eine neue Referenz auf ein (noch nicht intanziiertes)

Objekt der Klasse Point wird erzeugt: Point p1;

Page 13: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Methodendefinition

• Methoden werden beschrieben durch die Methodendeklaration:

• Rückgabetyp Methode( Parametertyp1 Parameter1, Parametertyp2 Parameter2,

etc.)

• z.B.: double getX();void setX(double xIn);

die Methodendefinition:• { lokalerTyp1 lokaleVariable1;

lokalerTyp2 lokaleVariable2; Anweisung; }

• z.B.: double getX() { return x; }void setX(double xIn) { x = xIn; }

Page 14: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Verwendung Methoden

• Die Methoden eines Objektes ruft man auf mit: InstanzName.methodenName( Variable1, ... );double myX = p1.getX();myX = 12.0;p1.setX( myX );

• Methoden werden importiert (durch die Klasse(n), in der die Methoden definiert sind):import PackageName.Klassenname; oderimport PackageName.*;

import java.util.*;

Page 15: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Programmfluss, Verzweigungen,

Schleifen

...und Modularisierung als Basis strukturierter Programmierung

Page 16: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Programmfluss

• Die Ausführung eines Programms beginnt mit der Methode main().

• Die Anweisungen in main() werden sequentiell („von oben nach unten“) ausgeführt.

• Bei einem Methodenaufruf springt der Interpreter in die erste Zeile der Methode.

• Programmende = letzte Anweisung in main()

Page 17: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Kontrollstrukturen für den Programmfluss

• Bedingungenif (Bedingung)

{

//Bedingung ist wahr

Anweisungen;

}

else

{

//Bedingung ist nicht wahr

Anweisungen;

}

Page 18: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Bedingungen: Java-Beispiel

boolean regen_in_muenster;

if (regen_in_muenster == false)

{

System.out.println(„Heute regnet es mal nicht!“);

}

else

{

System.out.println(„Heute regnet es mal wieder!“);

}

Page 19: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Vergleichsoperatoren für if ... else Konstruktionen

• <, <= (kleiner, kleiner gleich)

• >, >= (größer, größer gleich)

• = =, != (gleich, ungleich)

• Beispiel:

if ((a == b) && (a == c)) {

System.out.println („a, b und c sind identisch“);

}

Page 20: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Schleifentyp I: for

• Zweck: dieselbe Anweisung mehrmals durchführen

• Es wird eine Laufvariable verändert:

int i;

for (i = 1; i <= 100; i++)

{

System.out.println("Wert von i " + i + "\n");

}Ausgabe: Zahlen von 1 bis 100

Schleifenkopf

Page 21: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Schleifentyp II: while

• Zweck: dieselbe Anweisung mehrmals durchführen

• Überprüfung durch Vorbedingung (analog durch Nachbedingung)

int i = 1;

while (i <= 100)

{

System.out.println("Wert von i " + i);i++;

}Ausgabe: Zahlen von 1 bis 100

Schleifenrumpf

Vorbedingung

Page 22: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Entwurfsmuster: Iterator (1)

• Ein Iterator ist ein Objekt, das es ermöglicht, die Elemente eines Collection-Objekts (z.B. List) nacheinander zu durchlaufen. Als Collection-Objekt bezeichnet man ein Objekt, das eine

Sammlung (meist gleichartiger) Elemente eines Typs enthält.

• Ein Iterator implementiert folgende Methoden: hasNext() mit der überprüft wird, ob Elemente vorhanden sind, die

noch nicht besucht wurden. next(), die das nächste unbesuchte Element liefert.

• Methoden der Collection-Klasse (z.B. List): listIterator(): liefert den Iterator, der die gesamte Liste traversiert.

Page 23: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Entwurfsmuster: Iterator (2)

import java.util.*;

public class PointListExample {

public static void main(String[] args) { List points; points = new java.util.ArrayList(); for (int i = 1; i < 8; i++) { points.add(new Point2D(i+1.0, i+2.0));

} Iterator itr = points.listIterator(); while (itr.hasNext()) {

Point2D p =(Point2D)itr.next(); System.out.println("Current Point:

(" + p.getX() + "," + p.getY()+")" ); } }}

Page 24: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Zusammenfassung

• Programmerstellung (Klassen, Variablen, Methoden, Konstruktoren)

• Programmfluss und -kontrolle

• if ... else (Verzweigungen)

• Schleifen (for ..., while ...)

• Entwurfsmuster: Iterator

Page 25: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Halbrichtig oder falsch?

• Java lässt keine eigenen Typdefinitionen zu.

• Daten sind Variablen.

• Objekte und Instanzen sind Teile einer Klasse.

• Objekte/Instanzen sind die einzelnen Variablen der jeweiligen Klasse.

• Die Klasse beinhaltet Variablen und Methoden. Diese Variablen gehören zur gesamten Klasse und nicht zu der Instanz der Klasse.

• Das Institut für Geoinformatik ist ein Objekt der Klasse Uni.

• Mit einem Konstruktor legt man ein Objekt in der main-Methode an.

Page 26: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard

Geosoftware I – Lars Bernard

Aufgabe 2 und 3

• die HA 2 via e-mail an:

Lars Bernard ([email protected])Montag 12.05; 12.00 st

• die HA 3 anschauen und Fragen stellen:

Lars Bernard ([email protected])Montag 19.05; 12.00 st