Hello!

Inspiré(e) de prendre part à la discussion ? Ou de poser une question ou demander de l’aide ?

Alors bienvenues dans les grands sujets des forums de La Bulle : m’inscrire.

Cette partie du forum n’est pas compatible avec les bloqueurs publicitaires

Félicitations à vous, de préférer les accès payants plutôt que la gratuité par la publicité, c’est honnorable et cohérent de votre part. Malheureusement, l’accès payant par micropaiement (qui serait d’environ 1 cent pour 20 pages consultées) n’est pour l’instant pas encore mis en place, et l’accès gratuit sans publicité, est réservé aux membres actif(ve)s du forum. En attendant, si vous souhaitez poursuivre votre visite chez nous, vous pouvez ajouter le site à votre liste blanche, ou encore mieux, désactiver le bloqueur partout. Pour ajouter le site à votre liste blanche, pour Firefox (similaire pour les autres navigateurs), rendez‑vous en bas à gauche de la fenêtre de votre navigateur, et cliquez sur le menu comme dans l’exemple de l’image ci‑dessous, puis rechargez la page, en appuyant sur F5.

Définir un type privé comme un sous‑type
Auteur Message
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22201
Lun 6 Fév 2012 06:11
Message Définir un type privé comme un sous‑type
Une astuce en forme d’idiome.

Posons par exemple :

Source Ada : 

package P is
type Instance_Type is private;
type Interpretation_1_Type is …;
type Interpretation_2_Type is …;
-- And so on.
end P;


S’il est choisi que la définition complète de Instance_Type doit être celle de par exemple Interpretation_1_Type, nous ne pourrons pas l’écrire comme

Source Ada : 

package P is

private
subtype Instance_Type is Interpretation_1_Type;
end P;


Cette écriture n’est pas légale en Ada, comme le confirme la référence :
full_type_declaration [Ada RM 2005 3.2.1(3)].

On pourrait penser à la définition d’un type dérivé :

Source Ada : 

package P is

private
type Instance_Type is new Interpretation_1_Type;
end P;


Mais cela nécessitera des conversions de type envahissantes et omniprésentes.

L’astuce consiste à définir Instance_Type comme un type Enregistrement constitué d’un unique membre du type voulu initialement comme base du sous‑type.

Source Ada : 

package P is

private
type Instance_Type is record
Interprepretation : Interpretation_1_Type;
end record;
end P;


On pourra également abréger le nom du membre, si ça peut rendre la chose plus commode :

Source Ada : 

package P is

private
type Instance_Type is record
I : Interpretation_1_Type;
end record;
end P;


Bonus : si le type de donnée change peu souvent mais voit ses différentes représentations souvent accédées, on pourra même définir un enregistrement de plusieurs ou toutes ses représentations. Ce qui s’apparente en fait à de la mémoization (un anglicisme, sans équivalent en français stricte). Mais attention alors à se soucier que ses différents membres portant les différentes représentations, soient toujours synchronisés (plus facile à garantir avec la vue privée d’un type).

Exemple :

Source Ada : 

package P is

private
type Instance_Type is record
I1 : Interpretation_1_Type;
I2 : Interpretation_2_Type;
-- And so on.
end record;
end P;

Image
Hibou57

« La perversion de la cité commence par la fraude des mots » [Platon]
Profil Site Internet
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22201
Dim 11 Nov 2012 21:49
Message Re: Définir un type privé comme un sous‑type
Hibou a écrit : 
L’astuce consiste à définir Instance_Type comme un type Enregistrement constitué d’un unique membre du type voulu initialement comme base du sous‑type.

Et en bonus, ça peut même coller à une interprétation de la notion d’une catégorie de sous‑types. Quand on voit certains sous‑types comme des sous‑ensembles de ce qui compose un type de base, un type enregistrement peut en être une interprétation. Remarque : cette interprétation n’est pas applicable aux sous‑types dont le type de base est un type énuméré ou un type entier, car on ne peut pas représenter la restriction d’un intervalle par une sélection de membres ou de propriétés dans un type enregistrement. Ces sous‑types là s’interprèteraient plutôt comme des prédicats prédéfinis.

Image
Hibou57

« La perversion de la cité commence par la fraude des mots » [Platon]
Profil Site Internet