Fachkonzept - Klasse
Was ist eine Klasse?
Der Begriff "Klasse" wird hier im Sinne von Klassifizieren benutzt. Du weißt sicher, was das heißt: Wenn man klassifiziert, dann versucht man, Gemeinsamkeiten von Objekten herauszustellen.
Die Klasse "Schuh" beschreibt Objekte, die man als Fußbekleidung nutzt - und somit an- und ausziehen sowie tragen kann - und die bestimmte Eigenschaften (wie Modell, Größe, Farbe und Verschluss) aufweisen.
Wer Schuhe herstellen will, muss sich (mehr oder weniger) an der Klassenbeschreibung für Schuhe orientieren, damit das, was hergestellt wird, auch wirklich Schuhe sind. Es macht sicher keinen Sinn, sich an der Klassenbeschreibung für Hosen oder Pullover zu orientieren. Eine Klassenbeschreibung für Schuhe kann somit als eine Art Bauplan für Schuhe aufgefasst werden.
Diese Sichtweise können wir verallgemeinern und auf Software-Objekte übertragen. Damit (Software-)Objekte einer bestimmten Sorte erzeugt werden können, benötigt man eine passende Klassenbeschreibung in Form eines Bauplans.
Fachkonzept Klasse
Eine Klasse ist ein Bauplan für Objekte. Dieser Bauplan legt genau fest, welche Attribute die zu konstruierenden Objekte haben sollen und welche Methoden sie ausführen können sollen.
Das folgende Klassendiagramm zeigt die Struktur der Klasse Ampel
,
die als Bauplan für Ampelobjekte dienen soll.
Objekte der Klasse Ampel
verfügen also über die Attribute lampeRot
, lampeGelb
und
lampeGruen
. Zudem können sie die Methoden
setLampen(...)
, getLampen()
und schalten()
.
Die Methode Ampel()
ist eine besondere Methode, deren Bedeutung unten geklärt wird.
Beachte, dass im Klassendiagramm auch die Typen der Attribute (und - sofern vorhanden - Parameter) spezifiziert werden.
Objekt als Exemplar einer Klasse
Ein Objekt (als Exemplar einer Klasse) ist eine Einheit, die nach dem Bauplan der zugeordneten Klasse erzeugt wurde. Ein Objekt verfügt somit über die Attribute, die in der Klasse festgelegt sind. Diesen Attributen können - im Unterschied zur Klasse - Attributwerte zugewiesen werden. Ein Objekt kann zudem sämtliche Methoden der Klasse ausführen. Ausgenommen bleibt hier nur die Methode, deren Name mit dem Klassennamen übereinstimmt (s. u.). Objekte können mit Namen versehen werden, über die sie dann gezielt angesprochen werden können.
Das folgende Objekt- und Klassendiagramm zeigt eine Situation, in der zwei verschiedene
Ampel
-Objekte erzeugt wurden.
Beachte, dass man bei der Darstellung der Objekte die
aktuellen Attributwerte angibt. Beachte auch, dass man die von den Objekten ausführbaren Methoden weglässt,
da sie durch die Zuordnung zur Klasse klar sind.
Objektnamen werden unterstrichen und mit Doppelpunkt der zugehörige Klassennamen angegeben (z.B. ampel1: Ampel).
Ist die zugehörige Klasse aus dem Kontext klar ersichtlich, kann der Klassennamen beim Objekt auch entfallen.
Erzeugung und Vernichtung von Objekten
Ein Software-Objekt hat - wie viele Objekte der realen Welt - eine bestimmte Lebensdauer. Es muss erzeugt werden, bevor es in Aktion treten kann, und kann auch wieder vernichtet werden.
Zur Erzeugung von Objekten verfügt eine Klasse über eine spezielle Methode, die sogenannte Konstruktormethode.
In einem Klassendiagramm wird eine Konstruktormethode dadurch gekennzeichnet, dass sie denselben Namen wie die Klasse selbst trägt. Oft wird diese spezielle Methode in Klassendiagrammen aber auch weggelassen. Beachte, dass ein Objekt eine Konstruktormethode nicht ausführen kann.
Die oben im Objekt- und Klassendiagramm gezeigte Situation lässt sich wie folgt herstellen.
Eine Zuweisung der Gestalt ampel1 = Ampel()
ruft den Konstruktor der Klasse Ampel
auf und erzeugt so ein Objekt der Klasse Ampel
.
Zusätzlich bindet diese Zuweisung den Namen ampel1
an das neu erzeugte Objekt. Anschließend können
die Attributwerte des Objekts ampel1
mit Hilfe der Operation setLampen(...)
geeignet initialisiert werden.
Entsprechend erzeugt eine Zuweisung ampel2 = Ampel()
ein Objekt der Klasse Ampel
und bindet es an den Namen ampel2
.
Zur Vernichtung von Objekten verfügt eine Klasse über eine sogenannte Destruktormethode.
Moderne Programmiersysteme sorgen selbst für die Vernichtung nicht mehr benötigter Objekte, so dass man sich um diese Vernichtung in der Regel nicht kümmern muss.
Quellen
- [1]: Schuhe1 - Urheber: Kris from Seattle - Lizenz: Creative Commons BY 2.0
- [2]: Schuhe2 - Urheber: Thomas Steiner - Lizenz: Creative Commons BY-SA 3.0
- [3]: Schuhe3 - Urheber: van Gogh (Maler) / Fotograf unbekannt - Lizenz: Public Domain