Untertypen
Für die folgenden Beispiele für Untertypen wird der Typ "Mathtype" verwendet.
Der formale Typ "Mathtype"sin( double a )
tan( double a )
cos( double a )Der semantische Typ "Mathtype"double sin( double a )
Returns the trigonometric sine of an angle.
double tan( double a )
Returns the trigonometric tangent of an angle.
double cos( double a )
Returns the trigonometric cosine of an angle.
Formaler Untertyp
Eine formaler Untertyp eines formalen Typs ist eine Obermenge dieses formalen Typs.
Der formale Typ "Mathplustype" ist beispielsweise ein formaler Untertyp des formalen Typs "Mathtype".
Der formale Typ "Mathplustype"sin( double a )
tan( double a )
cos( double a )
acos( double a )
asin( double a )
atan( double a )
Semantischer Untertyp
Eine semantischer Untertyp eines semantischen Typs ist eine Obermenge dieses semantischen Typs.
Der semantische Typ "Mathplustype" ist beispielsweise ein semantischer Untertyp des semantischen Typs "Mathtype".
Der semantische Typ "Mathplustype"double sin( double a )
Returns the trigonometric sine of an angle.
double tan( double a )
Returns the trigonometric tangent of an angle.
double cos( double a )
Returns the trigonometric cosine of an angle.
static double acos( double a )
Returns the arc cosine of an angle, in the range of 0.0
through pi.
static double asin( double a )
Returns the arc sine of an angle, in the range of -pi/2
through pi/2.
static double atan( double a )
Returns the arc tangent of an angle, in the range of -pi/2
through pi/2.
Deklarierter Untertypen
Ein deklarierter Untertyp ist ein Typ der mit den Mitteln einer Programmiersprache als Untertyp eines anderen Typs gekennzeichnet wurde.
Eine Programmiersprache stellt bei deklarierten Untertypen in der Regel sicher, daß der deklarierte Untertyp auch ein formaler Untertyp ist.
Sie kann jedoch nicht sicherstellen, daß ein deklarierter Untertyp auch ein semantischer Untertyp ist.
Beispiel Auto-Typen
Das Verhältnis zwischen einem Typ und einem Untertyp läßt sich schon im Alltag beobachten.
Ein bestimmter Auto-Typ habe eine Schnittstelle aus drei Pedalen: Kupplung, Bremse und Gas. Die Pedale entsprechen den Methoden. Den Namen der Methoden entspricht die Position (links, mitte, rechts) der Pedale. Den Parametern entspricht die Möglichkeit der Pedale mehr oder weniger stark gedrückt zu werden. Die Spezifikation der Pedale beschreibt dann ihre unterschiedlichen Wirkungen, etwa daß die Bremse die Reifendrehung verlangsamt.
Auto [Spezifikation]Auto
Kupplung( Durchtritttiefe )
Bei ausreichender Durchtrietttiefe wird die Kupplung geloest.
Bremse( Durchtritttiefe )
Entsprechend der Durchtritttiefe werden die Raeder gebremst.
Gas( Durchtritttiefe )
Entsprechend der Durchtritttiefe wird Treibstoff zugefuehrt.Ein Auto-Typ.------------------------.
| |
| Auto |
| |
|------------------------|
|------------------------|
| + Kupplung |
| + Bremse |
| + Gas |
'------------------------'
Ein bestimmter Luxusauto-Typ enthält alle Fähigkeiten des Auto-Typs und dann noch zusätzlich ein Radio und eine Klimaanlage.
Wenn ein Luxusauto auch ein Kupplungspedal, Bremspedal und ein Gaspedal hat, ist es ein formaler Untertyp eines Auto.
Wenn das Kupplungspedal, das Bremspedal und das Gaspedal die Spezifikation des Autos erfüllen, dann ist das Luxusauto ein semantischer Untertyp eines Autos.
Wenn der Hersteller des Luxusautos zusichert, daß dies auch ein Auto ist, dann ist das Luxusauto ein deklarierter Untertyp eines Autos.
Wenn der Typ „Luxusauto“ nur ein formaler Untertyp, aber kein semantischer Untertyp, des Typs „Auto“ ist, dann hat er zwar auch drei Pedale namens „Kupplung“, „Bremse“ und „Gas“, aber diese machen dann nicht dasselbe wie bei einem Auto. Das ist natürlich gefährlich. Genauso schlecht ist es, wenn formale Untertypen verwendet werden, die keine eigentlichen Untertypen sind.
Ein Typ und ein Untertyp.------------------------.
| |
| Auto |
| |
|------------------------|
|------------------------|
| + Kupplung |
| + Bremse |
| + Gas |
'------------------------'
|
| ist-ein-semantischer-Untertyp-von ^
|
.------------------------.
| |
| Luxusauto |
| |
|------------------------|
|------------------------|
| + Kupplung |
| + Bremse |
| + Gas |
| + Radio |
| + Klimaanlage |
'------------------------'
Untertypen
Wenn von einem „Untertyp“ gesprochen wird, ohne daß festgelegt wird, ob dieser formal, semantisch oder deklariert ist, dann muß dem Zusammenhang entnommen werden, was für ein Untertyp gemeint ist, hierbei kann es aber auch zu Mißverständnissen kommen. In Zusammenhang mit einer Programmiersprache ist oft ein deklarierter Untertyp gemeint.
Um auszudrücken, daß B ein Untertyp des Obertyps A ist, kann man auch sagen, der Typ B sei ein A -Typ. Man kann beispielsweise sagen, der Typ „Luxusauto“ sei ein „Auto-Typ“, d.h. ein Untertyp des Typs „Auto“.
Nicht-semantische Untertypen sind schädlich und deswegen sollte jeder Programmierer darauf achten, daß von ihm deklarierte Untertypen nicht nur formale Untertypen, sondern immer auch semantische Untertypen sind.
Wenn dieser Empfehlung gefolgt wird, dann muß zwischen den verschiedenen Arten von Untertypen nicht unterschieden werden, da sie dann alle zusammenfallen. Dann kann also die Bezeichnung „Untertyp“ verwendet werden, ohne genauer zu sagen, welche Art von Untertyp gemeint ist.