Klasse (Programmierung)

Klasse (Programmierung)

Unter einer Klasse (auch Objekttyp genannt) versteht man in der objektorientierten Programmierung ein abstraktes Modell bzw. einen Bauplan für eine Reihe von ähnlichen Objekten.

Die Klasse dient als Bauplan für die Abbildung von realen Objekten in Softwareobjekte und beschreibt Attribute (Eigenschaften) und Methoden (Verhaltensweisen) der Objekte. Verallgemeinernd könnte man auch sagen, dass eine Klasse dem Datentyp eines Objekts entspricht. Formal gesehen belegt eine Klasse somit zur Programm-Ausführungszeit keinen Arbeitsspeicher, sondern immer nur die Objekte, die von ihr instanziiert wurden.

In vielen Programmiersprachen ist es üblich, dass der Name einer Klasse mit einem Großbuchstaben beginnt, Variablennamen dagegen mit einem Kleinbuchstaben.

Inhaltsverzeichnis

Vererbung

Klassen können miteinander in hierarchischen Beziehungen stehen und zu komplexen Strukturen werden. Die Gesetzmäßigkeiten, nach denen diese gebildet werden, beschreibt das grundlegende Konzept der Vererbung. Hier sind weiterhin die Begriffe Basisklasse und abgeleitete Klasse von Bedeutung, um die Verhältnisse der Klassen untereinander zu charakterisieren. Dabei beschreibt die Basisklasse allgemeine Eigenschaften, ist also eine Verallgemeinerung der abgeleiteten Klassen; diese sind somit Spezialisierungen der Basisklasse.

Beispiel: Basisklasse Kraftfahrzeug ist Verallgemeinerung der abgeleiteten Klassen (Spezialisierungen) Auto, LKW, Motorrad und Traktor.

Dabei erben die abgeleiteten Klassen alle Eigenschaften und Methoden der Basisklasse (d.h. ein Motorrad hat alle Eigenschaften eines Kraftfahrzeugs, und man kann alles mit ihm machen, das man mit einem Kraftfahrzeug machen kann). Zusätzlich führt die abgeleitete Klasse zusätzliche Eigenschaften und Methoden ein, die bei ihren Objekten möglich sind. (Das Motorrad hat z.B. einen Gepäckträger, ein Auto nicht, dafür aber einen Kofferraum.)

Verbund

Ähnlich der Klasse ist der Verbund ein Werkzeug zum Verwalten von zusammengehörigen Attributen. Er ist ein zusammengesetzter Datentyp aus verschiedenen anderer Datentypen. Die einzelnen Komponenten können als Attribute des neuen Verbundtyps betrachtet werden - in ihm sind jedoch keine Methoden beschrieben.

Beispiel

Als Beispiel soll eine Lampe dienen. Eine Lampe kann verschiedene Eigenschaften (Attribute) besitzen, zum Beispiel Farbe, Gewicht und ob sie leuchtet. Da man mit den Eigenschaften Farbe und Größe wenig operieren kann, wäre eine sinnvolle Verhaltensweise demnach eine Lichtschalter-Methode, die den jeweiligen Zustand von an und aus beeinflusst. Eine abstrakte Notation könnte so aussehen:

  class Lampe {
      // Eigenschaften
      farbe;              // Typ: { ZAHL, ZAHL, ZAHL }  für  { rot, grün, blau }
      gewicht;            // ZAHL
      lichtfarbe;         // Typ: { ZAHL, ZAHL, ZAHL }  für  { rot, grün, blau }
      helligkeit;         // ZAHL
 
      // Methoden
      einschalten();
      ausschalten();
  }

Konzepte wie die Vererbung ließen sich dadurch beschreiben, dass es verschiedene Arten von Lampen gibt, z. B. Straßenlampen, Taschenlampen oder Autoscheinwerfer. Diese spezielle Lampen wären dann Unterklassen, d. h. sie würden erweiterte Attribute (z. B. Taschenlampe.maximaleLeuchtdauer, Autoscheinwerfer.Kippbarkeit) und Methoden (z. B. Taschenlampe.batterieLaden(), Autoscheinwerfer.fernlichtEinschalten()) besitzen.

Programmbeispiel

Coding-Beispiel in Python

Das folgende Beispiel ist in der Programmiersprache Python geschrieben:


class Fahrzeug(object): 
    #Die Klasse "Fahrzeug" ist die Basisklasse.
 
    def bewegen(self):
        print "Fahrzeug wird bewegt"
    #end bewegen
#end class Fahrzeug
 
class Auto(Fahrzeug):
    #Die Klasse "Auto" ist die abgeleitete Klasse. 
 
    def bewegen(self):
        print "Auto wird bewegt"
    #end bewegen
#end class Auto
 
def fahren(fahrzeug):
    #zur Verdeutlichung der sog. "Polymorphie"
    fahrzeug.bewegen();
#end fahren
 
#--Hauptprogramm--
fahrzeug = Fahrzeug()
auto = Auto()
 
fahrzeug.bewegen()
auto.bewegen()
 
#Polymorphie: Methode 'fahren'
fahren(fahrzeug)
fahren(auto)
#--end Hauptprogramm--

Erklärung

Dieses Programm definiert eine Klasse Fahrzeug und eine davon abgeleitete Klasse Auto.

Die Basisklasse besitzt eine Methode namens bewegen(), die den Text „Fahrzeug wird bewegt.“ auf dem Computerbildschirm ausgibt. Die von Fahrzeug abgeleitete Klasse Auto hat ebenfalls eine Methode bewegen() und überschreibt die Methode von Fahrzeug. Die von ihr erzeugte Ausgabe lautet „Auto wird bewegt.“.

Anschließend folgt die Definition einer eigenständigen Funktion fahren(), 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 (fahrzeug) als auch der abgeleiteten Klasse (auto) erzeugt, und auf beide zuerst bewegen() aufruft und danach mit Hilfe von fahren() ebenfalls noch einmal bewegen() für beide Objekte ausführt.

Wird dieses Programm ausgeführt, so erscheint auf dem Bildschirm

  Fahrzeug wird bewegt.
  Auto wird bewegt.
  Fahrzeug wird bewegt.
  Auto wird bewegt.

Es ist zu erkennen, dass obwohl die Funktion fahren() für ein Fahrzeug definiert ist, sie auch für ein Auto funktioniert und die überschriebene Methode aufgerufen wird. D.h. sie funktioniert für Objekte der Basisklasse sowie für Objekte aller abgeleiteter Klassen (diese erben ja die Eigenschaften und „können“ somit auch alles, was die Basisklasse „kann“). Dieses (i.A. gewünschte) Verhalten nennt man Polymorphie.

Erweiterung

Eine Erweiterung bzw. Abstraktion dieses Konzepts findet sich in dem Modell der abstrakten Klassen und der Metaklassen.

Möglich ist auch eine sogenannte anonyme Klasse. Dabei wird eine Klasse nur an genau der Stelle beschrieben, an der ein Objekt von ihr erzeugt wird; sie ist nicht getrennt (z.B. in einer eigenen Datei) als eigenständige Komponente im Quellcode beschrieben, und kann daher auch von anderen Programmteilen nicht wiederverwendet oder gezielt angesprochen werden. Die Klasse erhält auch keinen eigenen Namen. I.A. erbt sie jedoch von einer anderen - diese beschreibt dann die Haupteigenschaften und -methoden des Objekts für seine spätere Verwendung. Die abgeleitete, namenlose Klasse modifiziert das Verhalten meist nur geringfügig.

Beispiel (Java):

  // Deklaration einer Variablen, um ein Objekt der Klasse "Button" aufzunehmen
  java.awt.Button hilfeButton ;
 
  // Erzeugen eines Button-Objekts, speichern in hilfeButton
  hilfeButton = new java.awt.Button("Hilfe"); // "Hilfe" ist die Beschriftung des Buttons
  // Dem Button ein Objekt zuweisen, das eine Methode "actionPerformed" besitzt
  // (wird aufgerufen, wenn der Button angeklickt wird).
  hilfeButton.addActionListener( new java.awt.event.ActionListener() {
    void actionPerformed(ActionEvent e) 
    {
      System.out.println( "Hilfetext" );
    }
  } ); // end anonymous class

Es wird mit new ein Objekt erzeugt, das in Hauptsache einem java.awt.event.ActionListener entspricht (zwar keine Basisklasse, aber ein Interface). Als spezielle Verhaltensweise genau diesen Objekts wird die Methode actionPerformed so überschrieben, dass sie Hilfetext auf dem Bildschirm ausgibt. Da ein spezialisiertes Verhalten definiert wurde, ist das Objekt von einer abgeleiteten Klasse, also nicht von ActionListener direkt - es wurde aber kein Klassenname angegeben. Im nachfolgenden Programm kann das Objekt nur noch als ActionListener verwendet werden (Polymorphie).

Manche Programmiersprachen erlauben das Verändern von Klassen zur Laufzeit, sowie das nachträgliche Ändern der Struktur eines Objekts (hinzufügen/entfernen von Eigenschaften oder Methoden). Diese sogenannte „Reflexion“ sollte nur im Notfall verwendet werden, da das Programm dadurch sehr schwer verständlich wird.

Literatur

  • Laura Lemay und Charles L. Perkins: Java in 21 Tagen, 2000, ISBN 3-8272-5578-3
  • Peter Pepper: Programmieren lernen - Eine grundlegende Einführung mit Java, Springer, 2007, ISBN 978-3-540-72363-9
  • Katharina Morik und Volker Klingspor: Informatik kompakt: Eine grundlegende Einführung mit Java, Springer, 2006, ISBN 3-540-24304-6

Weblinks


Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Klasse — (v. lat. classis „Herbeirufung“, „herbeigerufene Volksmasse“, „Flotte“) steht für: Klasse (Soziologie), Gruppierung der Bevölkerung nach ökonomischen und sozialen Merkmalen Klasse (Biologie), Gruppe von Lebewesen mit gemeinsamen Eigenschaften… …   Deutsch Wikipedia

  • Klasse (objektorientierte Programmierung) — Klasse ist in der Objektorientierung ein abstrakter Oberbegriff für die Beschreibung der gemeinsamen Struktur und des gemeinsamen Verhaltens von realen Objekten (Klassifizierung) im Softwaredesign: reale Objekte werden auf die für die Software… …   Deutsch Wikipedia

  • Klasse — Stand; Gruppe; Personenkreis; Kaste; Gesellschaftsschicht; Kohorte; Schicht; Grad; Qualität; Stufe; Rang; Jahrgangsstufe; …   Universal-Lexikon

  • klasse — der Hit (umgangssprachlich); spitze (umgangssprachlich); fantastisch; sauber (umgangssprachlich); cool (umgangssprachlich); geil (umgangssprachlich); nicht schlecht ( …   Universal-Lexikon

  • Schnittstelle (Programmierung) — Eine Schnittstelle (englisch interface) dient in der objektorientierten Programmierung der Vereinbarung gemeinsamer Signaturen von Methoden, welche in unterschiedlichen Klassen implementiert werden. Die Schnittstelle gibt dabei an, welche… …   Deutsch Wikipedia

  • Vererbung (objektorientierte Programmierung) — Vererbung dargestellt mittels UML. Die abgeleitete Klasse hat die Attribute x und y und verfügt über die Methoden a und b (im UML Sprachgebrauch Operationen a und b). Die Vererbung (engl. Inheritance) ist eines der grundlegenden Konzepte der… …   Deutsch Wikipedia

  • Methode (objektorientierte Programmierung) — Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee der objektorientierten Programmierung ist, Daten und Funktionen, die auf diese Daten angewandt werden… …   Deutsch Wikipedia

  • Vererbung (Programmierung) — Vererbung dargestellt mittels UML. Die abgeleitete Klasse hat die Attribute x und y und verfügt über die Methoden a und b (im UML Sprachgebrauch Operationen a und b). Die Vererbung (engl. Inheritance) ist eines der grundlegenden Konzepte der… …   Deutsch Wikipedia

  • Objektorientierte Programmierung — Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee dabei ist, Daten und Funktionen, die auf diese Daten angewandt werden können, möglichst eng in einem… …   Deutsch Wikipedia

  • Kapselung (objektorientierte Programmierung) — Die Objektorientierung, kurz OO, ist ein Ansatz zur Entwicklung von Software, der darauf beruht, die zu verarbeitenden Daten anhand ihrer Eigenschaften und der möglichen Operationen zu klassifizieren. Im Vergleich zu Ansätzen, bei denen… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”