Einführung in Untertypen im Rahmen der Lehre des Programmierens. (Untertyp, Unter-typ, Subtyp, sub-typ), Lektion, Seite 721586
http://www.purl.org/stefan_ram/pub/formal_untertypen_de ist die kanonische URI dieser Seite.
Stefan-Ram-Startseite

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.

Von der Stefan-Ram-Startseite ausgehend finden sich oft noch mehr Informationen zu Themen, die auf einer Seite angesprochen wurden. (Eine Verbindung zur Stefan-Ram-Startseite befindet sich ganz oben auf dieser Seite.)  |   Seiteninformation und Impressum  |   Formular für diese Seite betreffende Mitteilungen an den Herausgeber  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. slrprd, PbclevtugFgrsnaEnz