Klassen - Technisch Eine Klasse ist eine Einheit mit einem Namen, die Daten und Funktionalität beinhaltet Die Klasse definiert einen neuen Datentyp. 11. Java Klassen Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische Felder und Methoden Name Daten sind Variablen und heissen Felder oder Attribute. Feld 1 Funktionalität ist vorhanden in Form von Methoden, die in der Klasse definiert sind. ··· Klassen sind separate .java Dateien mit gleichem Namen 282 Klassen - Konzeptuell Feld 2 Methode 1 Methode 2 ··· 283 Klassen - Beispiel: Erdbebendaten Klassen erlauben es, Daten, die inhaltlich zusammengehören, zu einem Datentyp zusammenzufassen. Klassen bieten Funktionalitäten an, welche Abfragen basierend auf den Daten oder Operationen auf den Daten ermöglichen. 284 285 Klasse für Messwert - Erster Versuch Objekte: Instanzen von Klassen Datei Messwert.java: Klassen beschreiben den Aufbau von Objekten, eine Art Bauplan public class Messwert { Messwert String datum; String zeit ; String datum String zeit Objekte werden instanziert nach Bauplan und enthalten nun Werte. float breitengrad float breitengrad; float laengengrad; } ⇒ Vergleichbar mit den Kopfdaten aus dem CSV. ⇒ Vergleichbar mit den einzelnen Datenzeilen aus dem CSV. float laengengrad float magnitude float magnitude; 287 286 Objektinstanzierung: Das Schlüsselwort new Dereferenzierung: Zugriff auf Felder Variable “w” vom Typ “Messwert” w w Messwert w; w = new Messwert(); datum zeit Instanzierung eines Objekts vom Typ Messwert Messwert w; Messwert ∅ w = new Messwert(); ∅ breitengrad 0.0f laengengrad 0.0f magnitude 0.0f w.datum = "2001/01/03"; w.zeit = "11:11:20.4" ; w.breitengrad = 46.446f; w.laengengrad = 9.982f; w.magnitude = 2.36f; Messwert zeit breitengrad 46.446f laengengrad 9.982f magnitude 288 ’2’ ’0’ ’0’ ’1’ ’/’ datum ’1’ ’1’ ’:’ ’1’ ’1’ 2.36f 289 Objekte sind Referenztypen: Aliasing Moment mal! ... w Messwert w; w = new Messwert(); Messwert ’2’ datum w2 Klassen erlauben es, Daten, die inhaltlich zusammengehören, zu einem Datentyp zusammenzufassen. zeit Messwert w2 = w; w2.magintude = 5.2f; System.out.println(w.magnitude); breitengrad 46.446f laengengrad 9.982f magnitude ’1’ 5.2f 290 Ist das ein gutes Klassendesign? 291 Klasse für Messwert: Zweiter Versuch java.time.LocalDateTime Messwert String datum String zeit float breitengrad float laengengrad float magnitude Messwert Es geht vielleicht besser! LocalDateTime datum_zeit Datum und Zeit gehören gehören in einen eigene Klasse: Java bietet das schon an: ··· Koordinate position float magnitude java.time.LocalDateTime Koordinate Breitengrad und Längengrad gehören in einen Datentyp Koordinate. float breitengrad float laengengrad float distanz(Koordinate other) 292 293 Methoden in Klassen Methodenaufruf - Setting public class Koordinate { Koordinate matterhorn, bietschhorn; // ... Instanzieren und Setzen von Werten d = matterhorn.distanz(bietschhorn); float breitengrad; float laengengrad; } /∗∗ ∗ Berechnet die Distanz zur uebergebenen ∗ Koordinate ’other’ in Kilometer. ∗/ float distanz(Koordinate other){ float dl = this.laengengrad − other.laengengrad; // Rest als Uebung... } matterhorn bietschhorn Koordinate breitengrad 45.97 laengengrad 7.65 Koordinate breitengrad 46.39 laengengrad 7.85 294 Schlüsselwort this Im Kontext der Methode float distanz(Koordinate other){ float dl = this.laengengrad − other.laengengrad; // ... matterhorn bietschhorn 295 Koordinate breitengrad 45.97 laengengrad 7.65 this other this erlaubt, innerhalb Methoden einer Klasse, auf das aktuelle Objekt zuzugreifen. Koordinate breitengrad 46.39 laengengrad 7.85 296 297 Konstruktoren - Anwendung Konstruktoren - Definition Erstellen einer Koordinate ist relativ umständlich: public class Koordinate{ float breitengrad; float laengengrad; Koordinate k = new Koordinate(); k.breitengrad = 45.97f k.laengengrad = 7.65f // Konstruktor fuer gegebene Koordinaten Koordinate(float b, float l){ this .breitengrad = b; this .laengengrad = l; } Konstruktoren erlauben es, einfacher die Initialwerte der Felder einer Klasse zu setzen! Koordinate k = new Koordinate(45.97f, 7.65f); } // Standard−Konstruktor ohne Parameter Koordinate(){} 299 298 Beispiel: Die Math Klasse Statische Felder und Methoden float f = Math.sqrt(g) Mit dem Schlüsselwort static deklariert. Ist definiert in der Klasse Math: public class Math { public static float sqrt( float value){ // ... } Existieren nur einmal pro Klasse. Werden direkt über die Klasse aufgerufen, nicht auf Objekten der Klasse. Beobachtung: die main Methode ist statisch! public static void main(String[] args) } 300 // ... 301