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 können. Man spricht auch von den Objekten als den 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 die 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
Um eine Klasse "Schueler" zu erzeugen, kann man verschiedene Eigenschaften definieren: Name, Vorname, Geburtstag, Geschlecht, Adresse. Ein spezieller Schüler ist dann ein Objekt dieser Klasse, wenn für ihn eine Instanz erzeugt wurde und wenn seine Daten in die Instanzattribute eingetragen 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 eigenständigen Funktion mach_was_mit(...) , die ein Objekt der Basisklasse als Argument bekommt. Auf diesem Objekt wird die Methode machwas() gerufen.
Schließlich folgt das Hauptprogramm, welches sowohl ein Objekt der Basisklasse (objekt1) als auch der abgeleiteten Klasse (objekt2) definiert, und dann mach_was_mit(...) zuerst mit einem Objekt der Basisklasse, dann mit einem Objekt 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 für ein Basisklassenobjekt als Argument definiert ist (in der Tat hätte die abgeleitete Klasse sogar in einer später dazu gefügten Quelldatei geschrieben werden können, nachdem die Funktion mach_was_mit(...) schon lange fertig kompiliert war). Dieses Verhalten nennt man Polymorphie.
Programmiersprachen mit Klassen
- Smalltalk
- Python
- Object Pascal, Delphi
- C++, Objective C, C#
- Java
- und viele andere