Type

Instruction. Définition d'une nouvelle entité.

Instruction. Définition d'un paramètre de type de données.

Syntaxe

Type NomDuType ParametrageDuType HeritageType
InflexionType
ListeDeComposantsDUnType
Fin Type

Type NomDuType Recursif ;

Type NomDuType = TypeElementaire ContrainteType ;

Description

L'instruction Type permet de construire un nouveau type de données à partir des types de données déjà existants.

Il s'agit soit de :

Pour les nouvelle entités, il existe deux sortes de caractéristiques d'un type de données : les propriétés et les méthodes. Les propriétés sont des données typées. Les méthodes sont des traitements propres au type en cours de définition. Une propriété ou une méthode ne peut être utilisé qu'à travers un objet du type.

Il est possible de rendre le contenu d'un objet du type variable en créant une définition polymorphe du type au moyen de l'instruction Selon : en fonction de la valeur d'une propriété d'un type, certaines caractéristiques sont disponibles, d'autres sont indisponibles. Par défaut, toutes les caractéristiques sont simultanément disponibles.

Un type peut posséder des opérateurs implicites. Cela s'effectue au moyen de l'attribut Defaut. Ainsi, le type possède automatiquement les opérateurs =, == et !=.

Un type peut hériter des propriétés et des méthodes d'un autre type. Cela s'effectue au moyen de l'instruction-attribut HeriteDe. Ainsi, si le type A hérite du type B, tout objet de type A possède les mêmes caractéristiques que tout objet de type B et les méthodes de B peuvent être surchargées par des méthodes de A.

Un type peut implémenter des interfaces définies par l'instruction Interface. Cela s'effectue au moyen de l'instruction-attribut Implemente. Ainsi, si le type A implémente l'interface B, tout objet de type A possède les mêmes caractéristiques que tout objet de type B et chaque méthode de B sont implémentées par une méthode de A.

Par défaut, un autre type pourra hériter du type en cours de définition. Il est néanmoins possible d'interdire l'héritage de ce type au moyen du mot-clé Final.

L'accès aux propriétés et aux méthodes peut être restreint de la sorte qu'il est par exemple interdit d'utiliser une propriété ou une méthode en dehors des méthodes du type ou en dehors du type héritant. Cela s'effectue respectivement au moyen des instructions Prive et Protege. Par défaut, l'accès aux propriétés et aux méthodes du type est Public, ce qui signifie qu'ils sont utilisables dans les méthodes du type, dans un type héritant ou en dehors du type.

L'héritage d'un type peut être également contrôlé à l'aide de ces même instructions.

Un type peut être paramétré afin de le rendre générique. Les types de paramètres admissibles sont Constante, Enumere et Type. Un type paramétré peut servir à définir des objets génériques s'il n'y a pas de paramètre de déclarés ou spécifiques s'il y a des paramètres de déclarés. En ce cas, lors de la déclaration d'un objet d'un type paramétré, il est nécessaire d'instancier les paramètres en respectant leur nombre et leur sémantique.

Il est possible de définir les opérateurs standards pour un type. Ainsi, un type appelé Complexe permettra l'addition, la soustraction, la comparaison, l'affectation, etc.

Il est possible de définir des constructeurs du type au moyen de l'instruction Constructeur. Un constructeur est une méthode spéciale permettant de construire un objet du type. Si le type comporte un constructeur implicite, c'est-à-dire un constructeur sans paramètre, alors il sera possible de déclarer des objets de ce type qui seront automatiquement initialisés par la valeur renvoyée par ce constructeur. Si le type ne comporte pas de constructeur implicite, les objets de ce type ne peuvent être automatiquement initialisés et en ce cas leur déclaration doit comporter Nul Ou.

Il est possible de définir comment les objets du type doivent être gérés en mémoire. L'allocation et la libération des objets est réalisée par Up ! Compiler statiquement ou dynamiquement selon le contexte. L'allocation dynamique est gérée par défaut par le ramasse miettes du noyau d'exécution. Il est néanmoins possible de se définir un propre système d'allocation au moyen des méthodes spéciales Allouer et Liberer.

Lorsque les types du modèles de données s'utilisent les uns les autres, il est nécessaire de définir certain type comme étant récursifs. Pour plus de précisions, veuillez vous référer à Recursif.

L'instruction Type permet de dénommer un type élémentaire. Ce nouveau type est plus qu'un synonyme qui améliore la lisibilité du programme : il permet d'être certain que toutes les déclarations qui doivent être homogènes sont bien du même type.

L'instruction Type permet de restreindre les types de base Caractere, Entier et Reel en posant une contrainte. Par exemple, il est possible de définir les entiers naturels à partir de Entier.

L'instruction Type permet également de déclarer un paramètre à un type de type de données. Ce paramètre peut être employé pour déclarer une propriété du type ou un paramètre d'une méthode. Le type passé en paramètre est supposé ne pas avoir de constructeur implicite, donc les propriétés ou les paramètres des méthodes de type ce paramètre doivent être déclaré avec les instructions Nul Ou. Tous les constructeurs d'un type possédant des paramètres ont comme premiers paramètres implicites les paramètres du type. De fait, un type paramétré ne peut avoir de constructeur implicite.

Il est possible de définir l'entrepôt dans lequel seront rangés par défaut les objets de ce type ainsi que les propriétés des objets de ce type. Cela s'effectue au moyen de l'instruction Entrepot. Si aucun entrepôt n'est précisée, alors les objets sont rangés dans le premièr entrepôt utilisateur.

Il est possible de définir le nombre maximal d'objets à allouer simultanément lorsque Up ! Object Management System doit allouer un objet de ce type et qu'il n'y a plus d'objet en réserve. Cela s'effectue au moyen de l'instruction TailleSegmentMax. Si aucune limite n'est précisée, alors le type ne dispose pas de son propre espace d'allocation.

Il est possible de spécifier que les objets du type pourront avoir des propriétés dynamiques en plus des propriétés statiques provenant de la définition du type. Cela s'effectue au moyen de l'instruction ProprietesDynamiques.

Il est possible de spécifier que les modifications des objets du type seront gérées en transaction. Cela s'effectue au moyen de l'instruction Transactionnel.

Exemple

Type A
/****/
/* Définition du type A. */
Protege : Prive : Fin Type

Type B
/****/
Fin Type

Interface C
/*********/
Protege : Fin Interface

Type D Implemente C
/*****************/
/* Le type 'D' implemente l'interface 'C'. */
Protege : Fin Type

Type E Implemente C
/*****************/
/* Le type 'E' implemente l'interface 'C'. */
Protege : Fin Type

Type P(P1 : Constante, P2 : Enumere, P3 : Type)
/*********************************************/
/* Le type P est paramétré par une constante entière, un énuméré et un type qui ne peut être nul. */
Fin Type

Type ListeDeA = ListeDe A;
/************************/
/* Définition d'un type correspondant à une liste de A. */

Type EntierNaturel = Entier Contrainte Objet >= 0;
/************************************************/
/* Définition d'un type correspondant aux entiers naturels. */

Variable
/******/
Principal
/*******/
V1=P(10,Booleen,Entier);
/* Création d'un objet de P. */
Fin Principal

Voir aussi

Binaire, Caractere, Date, Entier, Fichier et Reel pour connaître les autres types de base possibles.

ListeDe pour définir une liste. ReferenceDe pour définir une référence. Selon pour définir une partie polymorphique d'un type. Contrainte pour poser une contrainte sur un type de base.

Interface pour définir une interface.

Metier pour définir un type métier.

Traduction

---------