Re: Notation objet préfixée en Ada 20 05 (bis).
Jean-Pierre Rosen <[email protected]>
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Message-ID | <[email protected]> |
Pascal a écrit :
> Bonjour, je ne cherchais pas au bon endroit.
> "The designator of the subprogram shall not be the same as that of a
> component of the tagged type visible at the point of the
> selected_component."
> Cela ne dis pas quel comportement attendre dans le cas contraire.
Bien que ce ne soit pas lumineux, le manuel dit que le composant sélecté
ne peut pas désigner le sous-programme dans ce cas. Donc il désigne le
composant, sans ambiguité. CQFD.
> Par ailleurs, en poursuivant ma lecture "Les langages à objets", je suis
> tombé sur la description de "constructeurs".
> L'exemple est le suivant:
> Tour = classe Pile {
> champs
> sommet : entier;
> pile : tableau [1..N] de entier;
> méthodes
> constructeur Tour (taille : entier);
J'aime beaucoup le Tour de taille :-)
> 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