sommersemester 2004 jan drewnak entwicklung und einsatz von geosoftware i praktikum 04.05.2004...
TRANSCRIPT
•
04.05.2004 Sitzung 3
Sommersemester 2004Jan Drewnak
Entwicklung und Einsatzvon Geosoftware I
Praktikum
Sitzung 3: Klassen, Objekte, Arrays und Kontrollstrukturen
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
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.
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Klassen und Objekte• Klassen deklarieren (class...)
• Jede Klasse braucht (mindestens) einen Konstruktor:
• Die Methode, die speziell zur Initialisierung der Klassenattribute notwendig ist.
• Bsp.: Punkt mit 2 Koordinaten initialisieren
• Methoden der Klasse deklarieren:
• Wie spreche ich mit einem Objekt der Klasse?
• Was will ich von dem Objekt?
• Bsp.: Distanz zwischen zwei Punkten berechnen
• Attribute (=Member-Variablen) von Klassen definieren:
• Wie und wo speichere ich für das Objekt nötige Informationen?
• Bsp.: X- und Y-Koordinate eines Punktes
• Der new-Operator erzeugt eine neue Instanz, also ein Objekt der Klasse.
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Methoden
Konstruktor
Attribute
Beispiel Number
class Number {
int number_;
Number(int numberIn) {
number_ = numberIn;
}
int getNumber() {
return number_;
}
}
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Gültigkeitsbereiche der Variablen
Klassen- und Instanzvariablen
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Sichtbarkeit/Bereich von Attributen und Methoden
• Zugriffs-Modifizierer
• static modifiziert zur beständigen Klassenvariable (= ‚für alle Instanzen‘)
• 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
Beispiele:
private int number_;
public int getNumber(){…}
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
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
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Referenzvariablen vs. elementare Variablen
•Elementare Variable:
= Variablen elementarer Datentypen (int, long, double,…)
• Speicherplatz für einen Wert
int size = 5;
•Referenzvariable:
= Variablen für Objekte
• Zeiger auf eine Instanz
Point center = new Point(1.0, 5.0);
5
3.14
@37dc
5
3.14
@37dc
Programm-Stack
5.0
1.0
5.0
1.0
Hauptspeicher
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Arrays
• Arrays für elementare Datentypen
int[] manyInts = new int[5];manyInts[0] = 0;manyInts[4] = 4;int size = manyInts.length; // => size == 5;
• Arrays für Klasseninstanzen
Point[] points = new Point[4];points[0].output();// => run time errorpoints[0] = new Point(0.0, 0.0);
points[0].output();// => ok
[0] 0
[1]
[2]
[3]
[4] 4
manyIntsTyp Array! Variablenname Kapazität
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
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 muss klar sein (Kommentare!).
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Entwurf von Methoden (2)
• Soll die Methode Ergebnisse liefern, muss ein Rückgabewert definiert werden (return-Anweisung).
• Methoden
• definieren Schnittstelle
• „kapseln“ die Implementierung
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
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 center gespeichert:
center = new Point(1.0, 5.0);
• Eine neue Referenz auf ein (noch nicht intanziiertes) Objekt der Klasse Point wird erzeugt:
Point center;
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Methodendefinition
• Methoden werden beschrieben durch
• die Methodendeklaration:
• Rückgabetyp methodenName(Parametertyp1 parameter1, Parametertyp2 parameter2,
…)
• 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; }
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Verwendung Methoden
• Die Methoden eines Objektes ruft man auf mit: InstanzName.methodenName( Variable1, ... );
p1.getX();int xCoord = 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.*;
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Programmfluss, Verzweigungen, Schleifen
...und Modularisierung als Basis strukturierter Programmierung
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
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()
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Kontrollstrukturen für den Programmfluss
• Bedingungen
if (Bedingung)
{
//Bedingung ist wahr
Anweisungen;
}
else
{
//Bedingung ist nicht wahr
Anweisungen;
}
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Bedingungen: Java-Beispielboolean regen_in_muenster;
… regen_in_muenster = true;…
if (regen_in_muenster == false)
{
System.out.println(„Heute regnet es mal nicht!“);
}
else
{
System.out.println(„Heute regnet es mal wieder!“);
}
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Vergleichsoperatoren für if ... else Konstruktionen
• ==, != (gleich, ungleich)
• <, <= (kleiner, kleiner gleich)
• >, >= (größer, größer gleich)
• &&, || (und, oder)
• Beispiel:
if ((a == b) && (a == c)) {
System.out.println („a, b und c sind identisch“);
}
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
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
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
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
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
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.
point2
point4
point10
point3
-
-
-
CollectionIterator>>>>
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
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.iterator(); while (itr.hasNext()) {
Point2D p =(Point2D)itr.next(); System.out.println("Current Point:
(" + p.getX() + "," + p.getY()+")" ); } }}
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Zusammenfassung
• Programmerstellung (Klassen, Variablen, Methoden, Konstruktoren)
• Programmfluss und -kontrolle
• if ... else (Verzweigungen)
• Schleifen (for ..., while ...)
• Entwurfsmuster: Iterator
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Halbrichtig oder falsch?1. Java lässt keine eigenen Typdefinitionen zu.
2. Daten sind Variablen.
3. Objekte und Instanzen sind Teile einer Klasse.
4. Objekte/Instanzen sind die einzelnen Variablen der jeweiligen Klasse.
5. Eine Klasse beinhaltet Variablen und Methoden. Die Variablen gehören zur gesamten Klasse und nicht zu der Instanz der Klasse.
6. Das Institut für Geoinformatik ist ein Objekt der Klasse Uni.
7. Mit einem Konstruktor legt man ein Objekt in der main-Methode an.
04.05.2004 Klassen, Objekte, Arrays und Kontrollstrukturen
Aufgabe 2 und 3
• die HA 2 via e-mail an:
Jan Drewnak ([email protected])& Arne Bröring ([email protected])
bis Samstag, 08.05., 24.00h s.t.
• die HA 3 anschauen und Fragen stellen:
Jan Drewnak ([email protected])& Arne Bröring ([email protected])
bis Samstag, 15.05., 24.00h s.t.