Klasse (OOP)

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg

Definition (von W. Kowarschick)[1]

Eine Klasse dient (im Sinne des objektorienten Paradigmas) dazu, die Schnittstellen und evtl. auch eine oder gar mehrere Implementierungen von „gleichartigen“ Objekten ganz oder zumindest teilweise festzulegen.

Eine Klasse besteht aus folgenden Teilen:

  • einer Klassenextension: Die Klassenextension enthält zu jedem Zeitpunkt alle Objekte, die der Klasse zugeordnet sind.
  • beliebig vielen (0, 1, 2, ...) Klassenimplementierungen: Diese implementieren die im Klassenschema deklarierten Methoden teilweise oder vollständig und garantieren dabei die stete Erfüllung aller im Klassenschema definierten Integritätsbedingungen. Unterschiedliche Implementierungen können sich in Hinblick auf Performanz-Aspekte unterscheiden.
  • den Klassenmethoden (statische Methoden): Eine Klasse verhält sich wie ein spezielles Objekt) und kann daher eigene (Klassen-)Methoden und (Klassen-)Attribute enthalten. Überlicherweise gibt es zumindest Methoden zur Verwaltung der Klassenextension, d.h. zum Erzeugen (Konstruktoren) und evtl. auch zum Zerstören (Destruktoren) von zugeordneten Objekten.

Abstrakte Klasse

Eine Klasse, für es Klassenimplementierungen gibt, die die im Klassenschema definierten Methoden nicht vollständig implementieren, heisst abstrakte Klasse.

Schnittstelle (Interface)

Eine Klasse, für die es keine Klassenimplementierung gibt, heißt Schnittstelle oder Interface.

Metaklasse

Eine Klasse, deren Extension jederzeit ausschließlich Klassen(objekte) enthält, heißt Metaklasse.

Metametaklasse

Eine Klasse, deren Extension jederzeit ausschließlich Metaklassen(objekte) enthält, heißt Metametaklasse.

Metametametaklasse

Und so weiter ...

Singleton-Klasse

Eine Klasse, deren Extension genau ein Objekt enthält, heißt Singleton-Klasse oder kurz Singleton.

Subklasse

Eine Klasse B heißt Subklasse der Klasse A, wenn die Extension von B eine Teilmenge der Extension von A ist und wenn die Integritätsbedingungen der Klasse A logisch aus den Integritätsbedingungen der Klasse B folgen:

Integritätsbedingungen(B) ⇒ Integritätsbedingungen(A)

Das heißt, jedes Objekt aus der Extension von B liegt nicht nur auch in der Extension von A, sondern erfüllt auch alle Integritätsbedingungen von A.

Siehe auch: Vererbung (OOP)

Bemerkungen

Klassenextension

Die meisten objektorientierten Programmiersprachen verwalten die Klassenextension nur intern. Das heißt, ein Programmierer kann nicht direkt darauf zugreifen. Es ist allerdings problemlos möglich, die Verwaltung einer Klassenextension mit Hilfe von Klassenzustandsvariablen und -methoden zu realisieren (siehe nachfolgendes Beispiel).

Objektorientierte Datenbanksysteme machen die Klassenextension dagegen immer allen Benutzern zugänglich, die die entsprechenden Rechte haben. In derartigen Systemen wird an Stelle des Begriffs Klassenextension üblicherweise der Begriff Tabelle verwendet. Die dauerhafte Speicherung von Daten in Tabellen ist die wesentliche Aufgabe eines jeden Datenbanksystems.

Beispiel

Im folgenden Beispiel wird die Extension der Klasse Person in einem statischen Attribut extension (der Art Dictionary) zur Verfügung gestellt. Jedes Mal, wenn ein neues Objekt erzeugt wird, fügt der Konstruktor dieses neue Objekt automatisch in die Extension ein. Das automatische Löschen von Elementen aus der Extension ist in Sprachen mit Garbage Collection etwas mühsam, in Sprachen wie C++ kann diese Aufgabe jedoch problemlos von Destruktor übernommen werden.

public class Person
{
  private static var sv_extension: Dictionary = new Dictionary();
    
  public static function get extension(): Dictionary
  {
    return sv_extension;
  }
    
  public function Person(...)
  {
    sv_extension[this] = this;
    ...
  }
}

Metaklassen

Viele objektorientierten Systeme unterstützen keine Metaklassen. In diesen Systemen wird eine Klasse als ein spezielles Objekt aufgefasst, das direkt, d.h. ohne Zuhilfenahme einer anderen Klasse, definiert werden muss. Dies stellt jedoch keinen Widerspruch zum hier verwendeten Objektbegriff dar (siehe dort insb. den Abschnitt „Klassen“).

Andere objektorientierte Systeme unterstützen genau eine Metaklasse, die häufig den Namen Class hat und deren Extension alle Klassenobjekte (evtl. sogar Class selbst) enthält.

Komplexere Metaklassenhierachien oder gar Metametaklassen gibt es dagegen nur sehr selten.

Quellen

Siehe auch

Wikipedia: Klasse (objektorientierte Programmierung)


Dieser Artikel ist GlossarWiki-konform.