Klasse
Aus 4webmaster.de
|
Eine Klasse definiert für ihre Objekte (also ihre konkreten Exemplare) die folgenden Fragen:
| Struktur | Welche Attribute besitzt jedes Objekt? |
| Verhalten | Welche Methoden / Operationen beherrscht jedes Objekt? Was passiert genau beim Ausführen der Operation? |
| Lebenszyklus | Wie wird ein neues Objekt konstruiert? Wie wird ein Objekt wieder zerstört? |
Jedes Objekt ist eine Instanz einer Klasse, und zwar genau einer Klasse. Beispiel: Das Objekt, mit dem Sophie Meinerhoff modelliert wird, ist eine Instanz der Klasse Person. Die Klasse Person besitzt die Attribute name und alter. Jedes Objekt der Klasse Person kann die Methoden gehen() und sprechen() ausführen.
Eine Klasse ist nicht identisch mit der Menge aller ihrer Instanzen. Stattdessen bildet eine Klasse eine Art Schablone zum Erzeugen von Objekten mit gleichartigen Eigenschaften.
Als Name einer Klasse hat sich die Singularform bewährt. Klassennamen werden mit großen Anfangsbuchstaben geschrieben (im Gegensatz zu Objektnamen und Attributbezeichnungen, deren Anfangsbuchstabe i.d.R. klein ist). Unterstriche im Klassennamen sind verpönt (sie verhindern die Umformung von CamelCase in camel_case).
In Datenbanksystemen werden Klassen meist als Tabellen repräsentiert.
Darstellung von Klassen in UML
Die UML-Darstellung einer Klasse (z.B. in einem Klassendiagramm) besteht aus drei Teilen:
| Name | In UML werden Klassennamen fett und zentriert dargestellt. Das Feld kann ggf. mit einer Beschreibung von Stereotypen oder einer Liste der Eigenschaften ergänzt werden. Schnittstellen, also abstrakte Klassen und Interfaces sind außerdem noch kursiv. Interfaces werden zusätzlich mit «Interface» gekennzeichnet. |
| Struktur | Liste relevanter Attribute. Alternativ kann die Struktur auch als »inneres« Klassendiagramm dargestellt werden, wenn die Klasse aus mehreren Teilen besteht (siehe Aggregation / Kompositionsstrukturdiagramm) |
| Verhalten | Liste relevanter Operationen / Methoden |
Beispiel: (Leider kann das hier verwendeten Tool (Graphiz) die Klassennamen nicht fett ausgeben, was die korrekte Darstellung wäre):

Klassenattribute und Klassenmethoden
Eine Klasse kann auch selbst Attribute besitzen (Klassenattribute oder sog. statische Attribute). Auch kann eine Klasse selbst Methoden beherrschen (Klassenmethoden oder sog. statische Methoden).
Schnittstellen und abstrakte Klassen
Eine Schnittstelle ist das nach außen Sichtbare einer Komponente. Oft wird für ähnliche Klassen eine gemeinsame Schnittstelle angelegt. Dazu gibt es in Java zwei Möglichkeiten:
| Abstrakte Klasse: | Die ähnlichen Klassen erben Methoden von einer abstrakten Klasse |
| Interface: | Die ähnlichen Klassen implementieren das gleiche interface |
Abstrakte Klasse
Eine abstrakte Klasse dient nur zur Vererbung ihres Inhaltes. Sie kann keine eigenen Instanzen haben. So wird sie deklariert:
abstract class MeineSchnittstelle { // diese Methode ist direkt für alle Instanzen der Subklassen einsatzfähig public void nutzeMichSofort() { .. .. } // diese Methode ist abstrakt, d.h. sie ist nicht implementiert, // sondern existiert nur als Methodenkopf. // Abstrakte Methoden *müssen* von allen Subklassen implementiert werden. public abstract void implementiereMichErst(); }
Da in Java eine Klasse nur von einer einzigen Superklasse erben kann, ist die Nutzbarbeit abstrakter Klassen recht beschränkt. Aber so wird sie eingesetzt:
class MeineKlasse extends MeineSchnittstelle { // Implementierung der geforderten Methode public void implementiereMichErst() { .. .. } }
Interface
Ein Interface erzwingt die Implementierung bestimmter Methoden in einer Klasse. Interfaces haben natürlich auch keine Instanzen. Beispiel einer Schnittstellendeklaration:
interface IMeineSchnittstelle { // Alle hier deklarierten Methoden sind public und abstract, // daher können die Schlüsselwörter weggelassen werden. void implementiereMichErst(); }
class MeineKlasse extends WhatEver implements IMeineSchnittstelle { // Implementierung der geforderten Methode public void implementiereMichErst() { .. .. } }
Verwendung von Schnittstellen
Schlecht: Auf eine Implementierung programmieren:
Pferd ferdi = new Pferd(); ferdi.reiten();
Besser: Auf eine Schnittstelle programmieren:
Tier tirtir = new Pferd(); tirtir.fortbewegen();
Noch besser: Das Factory-Muster zur Objekterzeugung nutzen:
tirtir = getTier(); tirtir.fortbewegen();
Darstellung von Schnittstellen in UML
Abstrakte Klassen und Interfaces werden in UML wie Klassen dargestellt, nur sind die Namen kursiv. Abstrakte Methoden werden ebenfalls kursiv dargestellt. Interfaces werden zusätzlich mit dem Stereotyp «Interface» gekennzeichnet, außerdem werden die Generalisierungspfeile unterbrochen dargestellt.
Mit dem hier verwendeten Tool (Graphviz) ist eine genau standardkonforme Darstellung nicht möglich. Das folgende Diagramm zeigt die wesentlichen Merkmale der UML-Darstellung:


Siehe auch
- Kompositionsstrukturdiagramm, zeigt das "Innenleben" einer Klasse
- Vererbung