3. Klassen Was sind Klassen? - www2.inf.h

Werbung
3. Klassen
Klassen als strukturierter Datentyp
3. Klassen
• Die Komponentenvariablen heißen hier Instanzvariablen.
• Eine Klasse kann als Bauplan für Objekte verstanden werden.
• Eine konkrete Realisierung einer Klasse K bezeichnen wir als Instanz der Klasse
K bzw. als Objekt der Klasse K .
• Jedes Objekt verfügt über eine separate Version der Instanzvariablen.
• Komponentenvariablen, die in der Deklaration mit static versehen sind, sind dagegen Klassenvariablen (siehe voriges Kapitel).
• Klassenvariablen beschreiben üblicherweise eine Eigenschaft der Klasse, nicht eines einzelnen Objektes (später mehr).
Klassen als strukturierte Datentypen
Klassen als Konzept zur Kapselung
Instanzmethoden
Konstruktoren
statische Komponenten von Klassen
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
53
3. Klassen
Klassen als strukturierter Datentyp
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
3. Klassen
Was sind Klassen?
• selbst definierter Datentyp (Referenzdatentyp)
• Modellierung neuer Strukturen
• Sammlung von Variablen verschiedener Typen
• Beispiel: Adresse
• Eine Adresse soll als Ganzes repräsentiert werden können.
• Teile des Ganzen haben unterschiedliche Datentypen.
• Eine Klasse fasst die Komponentenvariablen zusammen.
• Darstellung: UML-Klassendiagramm
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
Klassen als strukturierter Datentyp
Erläuterungen und Terminologie:
Wir werden schrittweise unser Verständnis über Klassen erweitern:
•
•
•
•
•
3. Klassen
radius
farbe
Adresse
name:
strasse:
hausnummer:
postleitzahl:
wohnort:
mail:
kommentar:
55
Klassen als strukturierter Datentyp
radius = 1.0
farbe = blau
Kreis a
radius = 0.5
farbe = grün
Kreis b
radius = 1.3
farbe = rot
Kreis c
class Kreis
String
String
int
int
String
String
String
54
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
56
3. Klassen
Klassen als strukturierter Datentyp
3. Klassen
Klassen als strukturierter Datentyp
Deklaration von Klassen
Syntax zur Deklaration von Klassen
(vorläufig):
public class Klassenname {
Variablendeklaration
...
Variablendeklaration
}
Instanziierung von Objekten
Beispiel:
public class Adresse {
String name;
String strasse;
int hausnummer;
int postleitzahl;
String wohnort;
String mail;
String kommentar;
}
Instanzen einer Klasse erzeugen wir mit dem new-Operator:
Variablenname = new Klassenname();
Man bezeichnet dies als Instanziierung.
Beispiel:
Adresse a;
a = new Adresse();
1. Wir schreiben die Deklaration der Klasse Adresse in die Datei Adresse.java.
Natürlich ist es auch möglich, Variablendeklaration und Instanziierung in einer Anweisung zu formulieren:
2. Wir compilieren Adresse.java. Damit entsteht Adresse.class.
Adresse a = new Adresse();
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
3. Klassen
57
Klassen als strukturierter Datentyp
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
3. Klassen
59
Klassen als strukturierter Datentyp
Initialisierung von Instanzvariablen
3. Nun steht uns der neue Datentyp Adresse zur Verfügung. Eine Variablendeklaration der Form:
Adresse a;
a
ist nun möglich.
name
☞ Instanzvariablen werden (automatisch) initialisiert wie Komponenten
von Feldern.
☞ Mit Klassen sind stets Referenzdatentypen verbunden.
☞ Also steht uns nach
Adresse a;
Hier:
noch kein Objekt der Klasse Adresse zur Verfügung.
• postleitzahl, hausnummer: 0
• und alle anderen Komponeten: null,
da Referenzdatentypen.
a
strasse
hausnummer
0
postleitzahl
0
wohnort
mail
kommentar
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
58
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
60
3. Klassen
Klassen als strukturierter Datentyp
3. Klassen
Zugriff auf Instanzvariablen
Felder von Objekten
Natürlich können wir auch Felder deklarieren, die
als Komponententyp eine Klasse haben.
Adresse[] adressen = new Adresse[20];
Zugriff auf Komponenten eines Objekts:
Variablenname.Komponentenname
Adresse a = new Adresse();
a.wohnort = "Musterhausen";
a.postleitzahl = 47111;
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
3. Klassen
61
Klassen als strukturierter Datentyp
a
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
adressen[18]
adressen[19]
63
Prinzipien der objektorientierten Programmierung
• Objekte waren bisher nichts weiter als schlichte Datenspeicher, Klassen die Baupläne dieser Datenspeicher.
• In der objektorientierten Programmierung wird diese Sicht erweitert.
• Objekte sind hier mehr als reine Datenspeicher, sie haben insbesondere:
– einen Zustand und
– weisen ein bestimmtes Verhalten auf.
• Eine Klasse beschreibt die möglichen Zustände und das Verhalten der zugehörigen Instanzen. Sie ist eine abstrakte Beschreibung der Objekte (Instanzen).
name
• Klassen definieren Referenzdatentypen.
• Konsequenz: Eine Zuweisung sorgt
nicht dafür, daß ein Objekt kopiert
wird.
• Analog zu Feldern: Nur die Referenz
wird kopiert!
adressen[17]
Prinzipien der objektorientierten Programmierung
Objekte und Referenzen
b
adressen[2]
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
3. Klassen
adressen[0]
adressen[1]
for (int i=0 ; i<20 ; i++)
adressen[i] = new Adresse();
System.out.println( "PLZ: " + a.postleitzahl );
System.out.println( "Ort: " + a.wohnort );
a = new Adresse();
b = a;
adressen
• Der obige Aufruf erzeugt nur das Feld für
die Referenzen auf Instanzen von Adresse,
nicht die Objekte selbst.
• Die Feldkomponenten sind mit null initialisiert (siehe rechts).
• Erzeugung der Objekte:
Beispiele:
Adresse a;
Adresse b;
Klassen als strukturierter Datentyp
strasse
hausnummer
0
postleitzahl
0
wohnort
mail
kommentar
62
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
64
3. Klassen
Prinzipien der objektorientierten Programmierung
3. Klassen
Prinzipien der objektorientierten Programmierung
Klassen als Modelle
Vorteile des objektorientierten Ansatzes
• In der Softwareentwicklung transferieren wir die Problemwelt auf den Computer,
indem wir ein Modell der Problemwelt erstellen.
• Klassen sind wesentliche Bestandteile dieses Modells. Jede Klasse ist ein Modell
für eine Gruppe gleichartiger Objekte der Problemwelt.
• Durch die Instanziierung von Klassen erhalten wir Objekte. Diese Objekte stellen
auf dem Rechner das Äquivalent zu Gegenständen, Eigenschaften oder Personen
unserer Problemwelt dar.
• Ein Entwurf wird in unabhängige Komponenten (Klassen/Objekte) unterteilt, die
zusammen das Gesamtsystem bilden.
• Wie die Einzelteile eines Modellbaukastens werden diese Objekte zu einer Gesamtheit zusammengefügt.
Vorteile:
1. Durch die Aufteilung in (kleine) unabhängige Komponenten wird die Komplexität
verringert.
2. Die einzelnen Komponenten können unabhängig entwickelt und getestet werden.
3. Der Anbau weiterer Komponenten ist ohne besondere Probleme möglich.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
3. Klassen
65
Prinzipien der objektorientierten Programmierung
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
3. Klassen
67
Prinzipien der objektorientierten Programmierung
Grundpfeiler der objektorientierten Programmierung
•
•
•
•
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
66
Generalisierung
Vererbung
Kapselung
Polymorphismus
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
68
3. Klassen
Prinzipien der objektorientierten Programmierung
Kapselung
Grundidee der Kapselung: Vgl. Hinweis auf der Rückseite eines Fernsehgeräts:
Gerät steht unter Spannung und darf nur vom Fachmann geöffnet werden!
1. Das Öffnen des Geräts ist für Unbefugte nicht ungefährlich. Wollen Sie sich von
einem Fernsehmechaniker am Blinddarm operieren lassen?
2. Normale Benutzer sollten nicht wissen müssen, wie der Fernseher intern funktioniert. Hierzu dienen die Bedienelemente als Schnittstelle zur Außenwelt.
In der objektorientierten Programmierung:
1. Der interne Aufbau einer Klasse bleibt verborgen (Data Hiding). Zur Benutzung der
Klasse reichen Kenntnisse über deren Schnittstelle.
2. Der interne Aufbau einer Klasse kann geändert werden, ohne daß dies Auswirkungen auf andere Teile der Software hat.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
69
Herunterladen