260 likes | 415 Views
Sitzung 3: 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):
E N D
Sitzung 3: Klassen, Objekte, Arrays und Kontrollstrukturen Sitzung 3
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. 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. Klassen, Objekte, Arrays und Kontrollstrukturen
class Number { int number_; Number(int numberIn) { number_ = numberIn; } int getNumber() { return number_; } } Beispiel Number Attribute Konstruktor Methoden Klassen, Objekte, Arrays und Kontrollstrukturen
Gültigkeitsbereiche der Variablen Klassen- und Instanzvariablen 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 Beispiele: private int number_; public int getNumber(){…} 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 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); Klassen, Objekte, Arrays und Kontrollstrukturen
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 Arrays manyInts Typ Array! Variablenname Kapazität 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!). 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 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; Klassen, Objekte, Arrays und Kontrollstrukturen
Methodendefinition • Methoden werden beschrieben durch • die Methodendeklaration: • RückgabetypmethodenName(Parametertyp1 parameter1, Parametertyp2 parameter2, …) • z.B.: doublegetX()voidsetX(double xIn) • die Methodendefinition: • { lokalerTyp1 lokaleVariable1; lokalerTyp2 lokaleVariable2; Anweisung; } • z.B.: double getX() { return x; } void setX(double xIn) { x = xIn; } 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.*; Klassen, Objekte, Arrays und Kontrollstrukturen
...und Modularisierung als Basis strukturierter Programmierung Programmfluss, Verzweigungen, Schleifen 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() Klassen, Objekte, Arrays und Kontrollstrukturen
Bedingungen if (Bedingung) { //Bedingung ist wahr Anweisungen; } else { //Bedingung ist nicht wahr Anweisungen; } Kontrollstrukturen für den Programmfluss Klassen, Objekte, Arrays und Kontrollstrukturen
Bedingungen: Java-Beispiel boolean 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!“); } Klassen, Objekte, Arrays und Kontrollstrukturen
==, != (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“); } Vergleichsoperatoren für if ... else Konstruktionen Klassen, Objekte, Arrays und Kontrollstrukturen
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"); } Schleifentyp I: for Schleifenkopf Ausgabe: Zahlen von 1 bis 100 Klassen, Objekte, Arrays und Kontrollstrukturen
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++; } Schleifentyp II: while Vorbedingung Schleifenrumpf Ausgabe: Zahlen von 1 bis 100 Klassen, Objekte, Arrays und Kontrollstrukturen
Entwurfsmuster: Iterator (1) Iterator Collection > • 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. > > > 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()+")" ); } } } Klassen, Objekte, Arrays und Kontrollstrukturen
Zusammenfassung • Programmerstellung (Klassen, Variablen, Methoden, Konstruktoren) • Programmfluss und -kontrolle • if ... else (Verzweigungen) • Schleifen (for ..., while ...) • Entwurfsmuster: Iterator Klassen, Objekte, Arrays und Kontrollstrukturen
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. • Eine Klasse beinhaltet Variablen und Methoden. Die 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. Klassen, Objekte, Arrays und Kontrollstrukturen
Aufgabe 2 und 3 • die HA 2 via e-mail an: Jan Drewnak (drewnak@uni-muenster.de)& Arne Bröring (arneb@uni-muenster.de)bis Samstag, 08.05., 24.00h s.t. • die HA 3 anschauen und Fragen stellen: Jan Drewnak (drewnak@uni-muenster.de)& Arne Bröring (arneb@uni-muenster.de)bis Samstag, 15.05., 24.00h s.t. Klassen, Objekte, Arrays und Kontrollstrukturen