Klasse (OOP): Unterschied zwischen den Versionen
Kowa (Diskussion | Beiträge) |
Kowa (Diskussion | Beiträge) |
||
Zeile 1: | Zeile 1: | ||
=Definitionen (von W. Kowarschick)<ref>[[Kowarschick, W.: Multimedia-Programmierung]]</ref>= | =Definitionen (von W. Kowarschick)<ref>[[Kowarschick, W.: Multimedia-Programmierung]]</ref>= | ||
[[Medium:UMLClass.jpg|miniatur|rechts|504px|UML-Klassendiagramm: Zwei Klassen mit Klassenschema]] | |||
Eine '''Klasse''' dient (im Sinne des [[objektorientierte Programmierung|objektorienten Paradigmas]]) dazu, die [[Schnittstell]]en und evtl. auch eine oder gar mehrere [[Implementierung]]en von „gleichartigen“ [[Objekt (OOP)|Objekt]]en ganz oder zumindest teilweise festzulegen. | Eine '''Klasse''' dient (im Sinne des [[objektorientierte Programmierung|objektorienten Paradigmas]]) dazu, die [[Schnittstell]]en und evtl. auch eine oder gar mehrere [[Implementierung]]en von „gleichartigen“ [[Objekt (OOP)|Objekt]]en ganz oder zumindest teilweise festzulegen. | ||
Zeile 12: | Zeile 13: | ||
*den [[Klassenmethode]]n ([[statische Methode]]n): Eine Klasse verhält sich wie ein spezielles [[Objekt (OOP)|Objekt]]) und kann daher eigene (Klassen-)Methoden und (Klassen-)Attribute enthalten. Überlicherweise gibt es zumindest Methoden zur Verwaltung der Klassenextension, d.h. zum Erzeugen ([[Konstruktor]]en) und evtl. auch zum Zerstören ([[Destruktor]]en) von zugeordneten Objekten. | *den [[Klassenmethode]]n ([[statische Methode]]n): Eine Klasse verhält sich wie ein spezielles [[Objekt (OOP)|Objekt]]) und kann daher eigene (Klassen-)Methoden und (Klassen-)Attribute enthalten. Überlicherweise gibt es zumindest Methoden zur Verwaltung der Klassenextension, d.h. zum Erzeugen ([[Konstruktor]]en) und evtl. auch zum Zerstören ([[Destruktor]]en) von zugeordneten Objekten. | ||
{{Absatz}} | |||
==Abstrakte Klasse== | ==Abstrakte Klasse== | ||
[[Medium:UMLAbstractClass.jpg|miniatur|rechts|224px|UML-Klassendiagramm: Abstrakte Klasse]] | |||
Eine Klasse, für es Klassenimplementierungen gibt, die die im Klassenschema definierten Methoden nicht vollständig implementieren, heisst '''abstrakte Klasse'''. | Eine Klasse, für es Klassenimplementierungen gibt, die die im Klassenschema definierten Methoden nicht vollständig implementieren, heisst '''abstrakte Klasse'''. | ||
{{Absatz}} | |||
==Schnittstelle (Interface)== | ==Schnittstelle (Interface)== | ||
[[Medium:UMLInterface.jpg|miniatur|rechts|266px|UML-Klassendiagramm: Interface]] | |||
Eine Klasse, für die es keine Klassenimplementierung gibt, heißt '''Schnittstelle''' oder '''Interface'''. | Eine Klasse, für die es keine Klassenimplementierung gibt, heißt '''Schnittstelle''' oder '''Interface'''. | ||
Zeile 25: | Zeile 30: | ||
Dies wurde aber in der obigen Definition nicht explizit gefordert. | Dies wurde aber in der obigen Definition nicht explizit gefordert. | ||
{{Absatz}} | |||
==Metaklasse== | ==Metaklasse== | ||
[[Medium:UMLInterface.jpg|miniatur|rechts|128px|UML-Klassendiagramm: Metaklasse]] | |||
Eine Klasse, deren Extension zu jedem Zeitpunkt ausschließlich Klassen(objekte) enthält, heißt '''[[Metaklasse]]'''. | Eine Klasse, deren Extension zu jedem Zeitpunkt ausschließlich Klassen(objekte) enthält, heißt '''[[Metaklasse]]'''. | ||
Zeile 37: | Zeile 44: | ||
Und so weiter ... | Und so weiter ... | ||
{{Absatz}} | |||
==Singleton-Klasse== | ==Singleton-Klasse== | ||
Eine Klasse, deren Extension genau ein Objekt enthält, heißt '''Singleton-Klasse''' oder kurz '''Singleton'''. | Eine Klasse, deren Extension genau ein Objekt enthält, heißt '''Singleton-Klasse''' oder kurz '''Singleton'''. | ||
[[Medium:UMLSingleton.jpg|miniatur|rechts|228px|UML-Klassendiagramm: Singleton-Klasse]] | |||
{{Absatz}} | |||
==Subklasse== | ==Subklasse== | ||
[[Medium:UMLSubclss.jpg|miniatur|rechts|409px|UML-Klassendiagramm: Zwei Subklassen]] | |||
Eine Klasse B heißt '''Subklasse''' der Klasse A, wenn die Extension von B eine Teilmenge der Extension von A ist und wenn | 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: | die Integritätsbedingungen der Klasse A logisch aus den Integritätsbedingungen der Klasse B folgen: | ||
[[Medium:UMLInterface.jpg|miniatur|rechts|128px|UML-Klassendiagramm: Metaklasse]] | |||
Integritätsbedingungen(B) ⇒ Integritätsbedingungen(A) | Integritätsbedingungen(B) ⇒ Integritätsbedingungen(A) |
Version vom 27. Februar 2011, 17:02 Uhr
Definitionen (von W. Kowarschick)[1]
miniatur|rechts|504px|UML-Klassendiagramm: Zwei Klassen mit Klassenschema 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 ist eine (i. Allg. endliche) Menge, die zu jedem Zeitpunkt genau diejenigen Objekte, die der Klasse zugeordnet sind, enthält.
- einem Klassenschema: Das Klassenschema umfasst eine (endliche) Menge von Integritätsbedingungen, die alle zugehörigen Objekte (d.h. alle in der Klassenextension enthaltenen Elemente) zu jedem Zeitpunkt erfüllen müssen. Das Schema deklariert insbesondere die Methoden, die für jedes Objekt der Klassenextension jederzeit als Kommunikationsschnittstelle zur Verfügungstehen müssen.
- 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
miniatur|rechts|224px|UML-Klassendiagramm: Abstrakte Klasse
Eine Klasse, für es Klassenimplementierungen gibt, die die im Klassenschema definierten Methoden nicht vollständig implementieren, heisst abstrakte Klasse.
Schnittstelle (Interface)
miniatur|rechts|266px|UML-Klassendiagramm: Interface Eine Klasse, für die es keine Klassenimplementierung gibt, heißt Schnittstelle oder Interface.
Anmerkung
Jede Schnittstelle ist auch eine abstrakte Klasse.
Interfaces unterstützen i. Allg. auch keine Klassenmethoden. Dies wurde aber in der obigen Definition nicht explizit gefordert.
Metaklasse
miniatur|rechts|128px|UML-Klassendiagramm: Metaklasse
Eine Klasse, deren Extension zu jedem Zeitpunkt ausschließlich Klassen(objekte) enthält, heißt Metaklasse.
Metametaklasse
Eine Klasse, deren Extension zu jedem Zeitpunkt 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. miniatur|rechts|228px|UML-Klassendiagramm: Singleton-Klasse
Subklasse
miniatur|rechts|409px|UML-Klassendiagramm: Zwei Subklassen 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: miniatur|rechts|128px|UML-Klassendiagramm: Metaklasse
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
Superklasse
Eine Klasse A heißt Superklasse der Klasse B genau dann wenn die Klasse B Subklasse der Klasse A ist.
Siehe auch: Vererbung
Quellen
- Kowarschick, W.: Multimedia-Programmierung
- Kowarschick, W. (2002): Multimedia-Programmierung - Objektorientierte Grundlagen
- Kowarschick, W. (2002): Skriptum zur Vorlesung Multimedia Softwareentwicklung II
Siehe auch
Wikipedia: Klasse (objektorientierte Programmierung)