Wikipedia · einfach zusammengefasst · Stand
Klasse (Objektorientierung)
Die Klasse dient als Bauplan für die Abbildung von realen Objekten in Softwareobjekte und beschreibt Attribute (Eigenschaften) und Methoden (Verhaltensweisen) …
Inhalt5 Abschnitte
Grundidee einer Klasse
Eine Klasse, auch Objekttyp genannt, ist in der objektorientierten Programmierung ein abstraktes Modell oder Bauplan für eine Reihe ähnlicher Objekte. Sie hilft dabei, reale Dinge als Softwareobjekte abzubilden. Eine Klasse beschreibt dazu Attribute und Methoden: Attribute sind Eigenschaften eines Objekts, Methoden sind seine Verhaltensweisen. Verallgemeinernd entspricht eine Klasse dem Datentyp eines Objekts.
Aus einer Klasse können konkrete Objekte, auch Instanzen genannt, erzeugt werden. Mehrere Instanzen derselben Klasse besitzen die im Bauplan festgelegten Eigenschaften und können die dort beschriebenen Methoden verwenden, haben aber jeweils eigene Werte für ihre Attribute.
Vererbung und Polymorphie
Klassen können in hierarchischen Beziehungen stehen. Dieses grundlegende Konzept heißt Vererbung. Eine Basisklasse beschreibt allgemeine Eigenschaften und ist damit die Verallgemeinerung; abgeleitete Klassen sind Spezialisierungen dieser Basisklasse.
Beispielsweise ist Kraftfahrzeug eine Basisklasse für Auto, LKW, Motorrad und Traktor. Die abgeleiteten Klassen erben alle Eigenschaften und Methoden der Basisklasse. Ein Motorrad hat daher die Eigenschaften eines Kraftfahrzeugs und kann alles, was mit einem Kraftfahrzeug möglich ist. Zugleich dürfen abgeleitete Klassen zusätzliche Eigenschaften und Methoden einführen: Ein Motorrad kann etwa einen Gepäckträger besitzen, während ein Auto stattdessen einen Kofferraum hat.
Das Ruby-Beispiel zeigt außerdem Polymorphie. Die Basisklasse Fahrzeug besitzt die Methode bewegen(), die „Fahrzeug wird bewegt.“ ausgibt. Die abgeleitete Klasse Auto überschreibt diese Methode und gibt „Auto wird bewegt.“ aus. Die Funktion fahren(fahrzeug) ruft für ihr Argument bewegen() auf. Sie funktioniert sowohl mit einem Fahrzeug als auch mit einem Auto; bei einem Auto wird die überschriebene Methode verwendet. Dieses im Allgemeinen erwünschte Verhalten heißt Polymorphie: Eine für die Basisklasse bestimmte Behandlung funktioniert auch für Objekte aller abgeleiteten Klassen.
Klassen in C#
Die Klasse Lampe veranschaulicht Attribute und Methoden. Ihre Attribute sind gehaeusefarbe, gewicht, lichtfarbe, helligkeit und istEingeschaltet. Die Methoden einschalten() und ausschalten() setzen istEingeschaltet auf true beziehungsweise false. Eine sinnvolle Verhaltensweise ist hier ein Lichtschalter, weil sich mit Eigenschaften wie Farbe und Größe wenig operieren lässt.
Spezielle Lampenarten können Unterklassen von Lampe sein. Taschenlampe ergänzt beispielsweise maximaleLeuchtdauer und batterieLaden(); Autoscheinwerfer ergänzt istKippbar und fernlichtEinschalten(). Beide übernehmen die Attribute und Methoden von Lampe. Für sie ist Lampe die Basisklasse.
Eine Klasse kann auch als Datentyp für Attribute oder Methodenparameter dienen. Im Beispiel mit Parlament, Person, Partei und Abgeordneter ist Abgeordneter eine Unterklasse von Person und besitzt zusätzlich das Attribut partei sowie die Methode gibPartei(). Parlament hat das Attribut vorsitzender vom Typ Abgeordneter, eine Liste von Abgeordneten und die maximale Größe. setzeVorsitzenden(Abgeordneter abgeordneter) setzt den Vorsitzenden. gibAnzahlDerAbgeordneten(Partei partei) durchläuft die Liste und zählt diejenigen Abgeordneten, deren Partei mit dem übergebenen Parameter übereinstimmt.
Benennung und Vergleich mit Verbund
In vielen Programmiersprachen beginnt ein Klassenname üblicherweise mit einem Großbuchstaben und wird in Camel-Case-Notation geschrieben. Dies gilt als Namenskonvention etwa für Java, JavaScript, .NET, Objective-C, PHP, Perl, Python und Swift. Variablennamen beginnen in manchen Programmiersprachen dagegen mit einem Kleinbuchstaben.
Ein Verbund ist wie eine Klasse ein Werkzeug, um zusammengehörige Attribute zu verwalten. Er ist ein zusammengesetzter Datentyp aus verschiedenen anderen Datentypen; seine Komponenten können als Attribute des neuen Verbundtyps gelten. Wie stark er sich von einer Klasse unterscheidet, hängt von der Programmiersprache ab. Unterschiede können eigene Methoden und mögliche Arten von Methoden, Speicherverwaltung, das Verhalten bei Zuweisung – nur Referenz, flache Kopie oder tiefe Kopie –, Standardoperatoren, Vererbbarkeit, nicht öffentliche Sichtbarkeiten, Unions sowie die als Attribute zulässigen Typen betreffen.
Abstraktion, anonyme und innere Klassen
Erweiterungen oder Abstraktionen des Klassenkonzepts sind abstrakte Klassen und Metaklassen. Eine anonyme Klasse wird nur dort beschrieben, wo zugleich ein Objekt von ihr erzeugt wird. Sie besitzt keinen eigenen Namen, ist nicht als getrennte Komponente im Quellcode beschrieben und kann deshalb von anderen Programmteilen weder wiederverwendet noch gezielt angesprochen werden. Meist erbt sie von einer anderen Klasse, welche die wesentlichen Eigenschaften und Methoden vorgibt; die namenlose abgeleitete Klasse verändert das Verhalten häufig nur geringfügig.
Im Java-Beispiel wird zu einem Button ein Objekt hinzugefügt, das einem java.awt.event.ActionListener entspricht. Seine Methode actionPerformed wird so überschrieben, dass sie beim Anklicken „Hilfetext“ ausgibt. Das Objekt gehört wegen dieses spezialisierten Verhaltens zu einer abgeleiteten Klasse, aber es wird kein Klassenname angegeben. Danach kann es im Programm nur noch als ActionListener verwendet werden.
Eine innere Klasse ist innerhalb einer äußeren Klasse definiert. Ihr Sichtbarkeitsbereich unterscheidet sie zunächst von einer normalen Klasse. Ist sie privat, können nur Objekte der äußeren Klasse Objekte der inneren Klasse erzeugen und verwenden. Eine nicht-statische innere Klasse kann sogar nur abhängig von und über ein Objekt der äußeren Klasse erzeugt werden.
Manche Programmiersprachen erlauben Reflexion: Ein Programm kennt dann die Struktur seiner Klassen und kann Klassen zur Laufzeit verändern, etwa Eigenschaften oder Methoden hinzufügen oder entfernen. Reflexion sollte nur im Notfall eingesetzt werden, weil sie Programme schwer verständlich macht und Refactoring erschwert.
Lernvideos zu Klasse (Objektorientierung)
4:07
Minus rechnen - Klasse 1
Frau Ha · 608.058 Aufrufe
5:12
Klasse 1a schreibt das Wort Opa mit der Lauttabelle
Beate Leßmann · 566.432 Aufrufe
10:02
Umkehraufgaben Klasse 1
Frau Ha · 358.109 Aufrufe
9:30
NEGATIVE ZAHLEN addieren und subtrahieren einfach erklärt – 5. Klasse
MathemaTrick · 295.643 Aufrufe