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