Re: Notation objet préfixée en Ada 20 05 (bis).

Pascal <[email protected]>
Newsgroups gmane.comp.lang.ada.france
Message-ID <[email protected]>
Bonjour.
En effet, j'ai pensé après coup (cette nuit) au discriminant qui  
s'applique également au type étiquetté :-)
En effet (bis), ma présentation était inexacte, je PEUX définir une  
fonction:
   function Constructor (N : Entier; X, Y : Entier) return TourG;
mais je DOIS également redéfinir la fonction:
   function Constructor (N : Entier) return TourG;
Assez lourd, passons.

Je vois bien le code de la première:
   function Constructor (N : Entier; X, Y : Entier) return TourG is
   T : TourG := Constructor (N);
   begin
   T.X := X; T.Y := Y;
   return T;
   end;

Par contre, je ne suis pas satisfait pour la seconde:
   function Constructor (N : Entier) return TourG is
   T : TourG;
   begin
   Tour.Tour(T).Initialiser (N);
   return T;
   end;
Où:
   procedure Initialiser (T : in out Tour; N : Entier);
fait la même chose que:
   function Constructor (N : Entier) return Tour;
J'aurais préféré ne pas dupliquer le code pour appeler Constructor de  
Tour directement.
Comment ?

Merci pour les précisions, Pascal Pignard.
http://blady.pagesperso-orange.fr




Le 28 déc. 07 à 10:08, Jean-Pierre Rosen a écrit :

> Pascal a écrit :
>>         destructeur Tour ();
>>     }
>> ...
>> {
>> T : Tour (10); -- appel constructeur
>> ...
>> } -- appel destructeur
>> Cela rappelle l'unité Ada.Finalization.
>> Si le destructeur est similaire à la procédure Finalize, la  
>> procédure Initialize ne sait pas prendre de paramètres comme ici  
>> "taille".
>> J'ai essayé une fonction telle que:
>>   function Constructor (N : Entier) return Tour;
>> Seulement lorsque je dérive Tour, GNAT demande la superposition de  
>> la fonction Constructor, jusque là ok, mais avec les mêmes  
>> paramètres!
>> J'aurais aimer en ajouter d'autres:
>>   type TourG is new Tour with record
>>     X, Y : Entier;
>>     end record;
>>   function Constructor (N : Entier; X, Y : Entier) return TourG;  
>> -- refus !?
>> Y a-t-il un moyen "Ada" équivalent au constructeur pour  
>> initialiser un objet ?
>
> Normalement, une simple fonction fait l'affaire. On peut même dire  
> que les constructeurs ne sont qu'un moyen ad-hoc de compenser, et  
> encore seulement pour l'initialisation, l'absence de fonction  
> renvoyant une classe avec une sémantique de valeur.
>
> Dans ton cas, ou bien si la donnée est simple (comme la taille de  
> la pile), le mieux est d'utiliser un discriminant. Sinon, faire une  
> fonction comme tu proposes. Qu'est-ce qui ne va pas? Il est  
> parfaitement possible de faire la fonction que tu proposes:
>    function Constructor (N : Entier; X, Y : Entier) return TourG;
>
> Mais bien sûr, cela ne te dispense pas de redéfinir le constructeur  
> simple.
>
> ---------------------------------------------------------
>            J-P. Rosen ([email protected])
> Visit Adalog's web site at http://www.adalog.fr
>

_______________________________________________
Site WWW de l'association Ada-France: http://www.ada-france.org/
[email protected]
http://www.ada-france.org/mailman/listinfo/ada-france
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.