Klasse (Objektorientierung)
Klassen werden von vielen Programmiersprachen genutzt, um das Objekt-Konzept der objektorientierten Programmierung zu implementieren.
Eine Klasse ist in der objektorientierten Programmierung die Zusammenfassung einer Datenstruktur und der darauf anwendbaren Methoden zu einer Einheit.
Eine Klasse bietet ein Schema, nach dem einzelne Objekte erzeugt werden. Man spricht auch von den Objekten als der Menge der Instanzen der Klasse. Da die Objekte einer Klasse alle die gleichen Merkmale besitzen, ist ihr Objektverhalten identisch In einigen objektorientierten Sprachen werden Klassen als spezielle Objekte, sogenannte Klassenobjekte, betrachtet.
Klassen können auch von anderen Klassen abgeleitet werden. In diesem Fall erbt die Klasse die Datenstruktur und Methoden der anderen Klasse (Basisklasse). Die abgeleitete Klasse kann Methoden der Basisklasse überschreiben (sofern diese es erlaubt; die Möglichkeit, dies zu verbieten, hängt von der Programmiersprache ab) und eigene Methoden und Daten hinzufügen. Ein Objekt der abgeleiteten Klasse kann überall verwendet werden, wo ein Objekt Basisklasse erwartet wird; überschriebene Methoden werden dann auf der abgeleiteten Klasse ausgeführt (Polymorphie).
In manchen Programmiersprachen gibt es zu jeder Klasse ein Objekt (Klassenobjekt), das diese Klasse repräsentiert; dieses Klassenobjekt ist dann zuständig für die Erzeugung von Objekten der Klasse und den Aufruf der korrekten Methode.
Praktisches Beispiel
Eine Klasse entspricht in etwa der Tabelle einer einfachen Datenbank. Ein Objekt ist dann ein einzelner Datensatz ( = Zeile ) in dieser Tabelle.
Man kann eine Klasse Bankkonto definieren, welche verschiedene Eigenschaften hat: Kontonummer -- Kontostand -- Datum -- Abhebung -- Einzahlung -- Betrag -- Info -- Tag der Kontoeinrichtung -- Name des Kontoinhabers
Man kann eine Klasse Kontoinhaber definieren, welche verschiedene Eigenschaften hat: Name -- Vorname -- Geburtstag - Adresse - Kontonummer
Eine Schulklasse ist eine Klasse, wenn man verschiedene Eigenschaften definiert: Name, Vorname, Geburtstag, Geschlecht, Adresse.
ein spezieller Schüler ist dann ein Objekt dieser Klasse, wenn seine Daten bekannt sind.
Programmbeispiele
Das folgende Beispiel ist in C++:
class Basisklasse { public: virtual void machwas() { std::cout << "Basisklasse::machwas\n"; } };
class abgeleitete_Klasse: public Basisklasse { public: virtual void machwas() { std::cout << "abgeleitete_Klasse::machwas\n"; } };
void mach_was_mit(Basisklasse& b) { b.machwas(); }
int main() { Basisklasse objekt1; abgeleitete_Klasse objekt2; mach_was_mit(objekt1); mach_was_mit(objekt2); }
Dieses Programm definiert eine Klasse Basisklasse und eine davon abgeleitete Klasse abgeleitete Klasse.
Die Basisklasse hat eine Methode namens machwas, welche Basisklasse::machwas ausgibt (dafür ist die Zeilen mit std::cout zuständig). virtual bedeutet in C++ "kann überschrieben werden". Das macht die abgeleitete Klasse dann auch, sie definiert die Methode um, so dass sie abgeleitete_Klasse::machwas ausgibt.
Anschließend folgt die Definition einer Funktion, die ein Objekt der Basisklasse als Argument bekommt. Auf diesem Objekt wird die Methode machwas gerufen.
Schließlich folgt das Hauptprogramm, welches je ein Objekt der Basisklasse (objekt1) als auch der abgeleiteten Klasse (objekt2) definiert, und dann mach_was_mit zuerst mit der Basisklasse, dann mit der abgeleiteten Klasse aufruft.
Wird dieses Programm kompiliert und ausgeführt, so gibt es
Basisklasse::machwas abgeleitete_Klasse::machwas
aus, obwohl die Funktion mach_was_mit nur ein Basisklassenobjekt erwartet (in der Tat hätte die abgeleitete Klasse sogar - in einer anderen Datei - geschrieben werden können, nachdem die Funktion mach_was_mit fertig kompiliert war). Dieses Verhalten nennt man Polymorphie.
Komentar Epischel Klassen sind Implementierungen von Objekten. Damit spiegeln sie die Eigenschaften von Objekten (Kapselung, Vererbung ...) wider. Das sollte im Artikel zum Ausdruck kommen. Die Eigenschaften eher bei Objekt erläutern. Bei Gelegenheit mehr...
Programmiersprachen mit Klassen
- Smalltalk
- Object Pascal, Delphi
- C++, Objective C, C#
- Java
- und viele andere