11. Java Klassen

Werbung
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
Herunterladen