Zum Inhalt springen

Klasse (Objektorientierung)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 25. September 2002 um 21:16 Uhr durch Fgb (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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.

Beispiele

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.

Kommentar rho Tur mir leid. Das Beispiel ist mir immer noch zu unverständlich. Ein praktisches Beispiel wäre gut. Kann man Klassen auch irgendwo im realen Leben wieder finden ? Was sind die Vorteile von Klassen gegenüber klassenlosen Programmiersprachen ? Anregung für praktische Beispiele: http://home.t-online.de/home/0926161717-0002/prgmini.htm

Programmiersprachen mit Klassen

Links