Klasse (objektorientierte Programmierung)
aus Wikipedia, der freien Enzyklopädie
Klasse ist in der Objektorientierung ein abstrakter Oberbegriff für die Beschreibung der gemeinsamen Struktur und des gemeinsamen Verhaltens von Objekten (Klassifizierung). Sie dient dazu, Objekte zu abstrahieren. Im Zusammenspiel mit anderen Klassen ermöglichen sie die Modellierung eines abgegrenzten Systems in der objektorientierten Analyse und dem objektorientierten Design.
Die Struktur einer Klasse bilden die Attribute (auch Eigenschaften), das Verhalten die Methoden (auch Operation, Funktion, Prozedur) der Klasse.
Klassen können von anderen Klassen abgeleitet werden (Vererbung). Dabei erbt die Klasse einige oder alle Datenstrukturen (Attribute) und Methoden von der vererbenden Klasse (Basisklasse). Die abgeleitete Klasse (Subklasse) kann Methoden der Basisklasse überschreiben (sofern diese es erlaubt; die Möglichkeit, dies zu verbieten, hängt von der Programmiersprache ab), d.h. die Methode neu implementieren, und eigene Methoden und Daten (Attribute) hinzufügen. Ein Objekt der abgeleiteten Klasse kann überall verwendet werden, wo ein Objekt der Basisklasse erwartet wird (Liskovsches Substitutionsprinzip); überschriebene Methoden werden dann auf der abgeleiteten Klasse ausgeführt (Polymorphie). Weiterhin ist es auch möglich, die vorhandene Basismethode zu erweitern, d. h. den vorhandenen Code der Basisklasse nicht komplett zu überschreiben (durch Neuimplementierung), sondern durch Aufruf der Basisklassenfunktion weiter zu benutzen. Dabei muss dem Programm mittels der korrekten Notation mitgeteilt werden, dass man die Basisklasse aufrufen möchte (in Java z. B. durch Verwendung des Schlüsselwortes "super", in C++ wird der Klassenname der Basisklasse und zwei Doppelpunkte dem Funktionsaufruf vorangestellt).
[Bearbeiten] Beispiele
Eine Klasse Bankkonto
könnte beispielsweise mit folgenden Eigenschaften definiert werden:
- hat eine Kontonummer (Attribut)
- hat einen Kontoinhaber (Referenz auf einen Kunden)
- hat eine Liste von Buchungen (Liste von Referenzen auf Buchungen)
- hat einen Saldo (Attribut)
- kann eine Einzahlung durchführen (Methode)
- kann eine Auszahlung durchführen (Methode)
Jede Kontobewegung würde dann einem Methodenaufruf entsprechen und der Liste der Buchungen ein Element hinzufügen sowie den Saldo modifizieren.
Um eine Klasse Schüler
zu erzeugen, kann man verschiedene Eigenschaften definieren: Name, Vorname, Geburtstag, Geschlecht, Adresse.
Ein spezieller Schüler wird dann durch ein Objekt dieser Klasse vertreten, wenn für ihn eine Instanz erzeugt wurde und wenn seine Daten in die Instanzattribute eingetragen sind.
[Bearbeiten] Programmbeispiel
Das folgende Beispiel ist in der Programmiersprache C++ geschrieben:
#include <iostream> class Fahrzeug // Die Klasse "Fahrzeug" ist die Basisklasse. { public: virtual void bewegen() { std::cout << "Fahrzeug wird bewegt.\n"; } }; class Auto : public Fahrzeug // Die Klasse "Auto" ist die abgeleitete Klasse. { public: void bewegen() { std::cout << "Auto wird bewegt.\n"; } }; void aktion(Fahrzeug &f) { f.bewegen(); } int main() { Fahrzeug objekt1; Auto objekt2; objekt1.bewegen(); objekt2.bewegen(); aktion(objekt1); aktion(objekt2); return 0; }
Dieses Programm definiert eine Klasse Fahrzeug und eine davon abgeleitete Klasse Auto.
Die Basisklasse hat eine Methode namens bewegen(), die den Text "Fahrzeug wird bewegt.\n" auf dem Computerbildschirm ausgibt. Das Schlüsselwort virtual bedeutet in C++ an dieser Stelle "kann überschrieben werden". Das macht die abgeleitete Klasse dann auch, sie definiert die Methode um, so dass sie "Auto wird bewegt.\n" ausgibt.
Anschließend folgt die Definition einer eigenständigen Funktion aktion(), die ein Objekt der Basisklasse als Argument bekommt. Auf diesem Objekt wird die Methode bewegen() aufgerufen.
Schließlich folgt das Hauptprogramm, das sowohl ein Objekt der Basisklasse (objekt1) als auch der abgeleiteten Klasse (objekt2) definiert, und auf beide zuerst bewegen() aufruft und danach mit Hilfe von aktion() ebenfalls noch einmal bewegen() für beide Objekte aufruft.
Wird dieses Programm kompiliert und ausgeführt, so erscheint auf dem Bildschirm
Fahrzeug wird bewegt. Auto wird bewegt. Fahrzeug wird bewegt. Auto wird bewegt.
Auch erkennt man hier, obwohl die Funktion aktion() nur für die Basisklasse definiert ist, kann sie trotzdem mit abgeleiteten Klassen benutzt werden.
[Bearbeiten] Siehe auch
- Liste objektorientierter Programmiersprachen
- Schnittstelle (objektorientierte Programmierung)
- Abstrakte Klasse
- Entwurfsmuster Singleton als Spezialfall einer Klasse