Re: function ... return <objet li mité>;

Thomas De Contes <[email protected]>
Newsgroups gmane.comp.lang.ada.france
Message-ID <[email protected]>
Le 17 déc. 07 à 11:12, Jean-Pierre Rosen a écrit :

> Thomas De Contes a écrit :
>
>>>> Je me suis donné comme règle de programmation de ne jamais  
>>>> utiliser de pointeurs dans la partie publique des paquetages
>>> Oui, mais il ne faut pas confondre pointeur et référence. C'est  
>>> en celà qu'un accès anonyme est différent d'un type accès explicite.
>> donc
>> type machin is access truc;
>> ça fait un type pointeur, cad que toutes les variables de type  
>> machin sont des pointeurs,
>> alors que si on voit "access truc" en paramètre d'une procédure,  
>> sans que le type machin soit cité,
>> c'est une référence,
>> c'est bien ça ?
> Oui.

ok :-)


>> ça veut dire que je peux utiliser "access truc" autant que je veux  
>> dans la partie publique des paquetages,
>> tant que je ne déclare pas de type machin (dans le code  
>> utilisateur non plus, bien entendu),
>> je peux utiliser le paquetage comme je veux sans faire attention,
>> il n'y a pas de risque de se retrouver dans un état absurde  
>> (référence qui pointe sur rien) ?
> Et pas de Unchecked_Access bien sûr

merci de me le rappeler :-)


merci bcp, c'est super :-))
(ça va me simplifier un petit tas de trucs :-) )


Il me reste qqes petites inquiétudes, concernant la facilité et le  
"bien programmer" :

>> generic
>> 	type objetLimite is limited private;
>> package objetNonLimites is
>> 	type objetNonLimite is private;
>> 	function contenu (onl : objetNonLimite) return objetLimite;
>> private
>> 	type objetNonLimite is record
>> 		p : access objetLimite;
>> 	end record;
>> end objetNonLimites;


function accesContenu (onl : objetNonLimite) return not null access  
objetLimite;

Par exemple, si :
- on a une fonction qui renvoie un objet de type objetNonLimite
- on met la sortie de cette fonction comme paramètre d'une procédure,  
de mode "in" bien sur
- on utilise accesContenu pour modifier objetLimite (on a le droit  
puisque c'est une référence (non ?))

Qu'est ce qu'il se passe ?
Est ce que la variable créée par la 1ere fonction est modifiée "à la  
volée", puis est détruite des que la procédure se termine, sans faire  
aucune erreur ? ou autre chose ?



>> tu parlais de "généralisation des accès anonymes en Ada2005",
>> ça veut dire que maintenant on peut mettre "access truc" à des  
>> endroits où on pouvait pas avant ?
> Oui.

ok :-)

>> par exemple, comme type renvoyé par une fonction ?
> Oui, et aussi comme type d'un champ de record (plus besoin de faire  
> de type retardé pour faire une liste chainée par exemple).


ok :-)

Par contre, comment fais tu avec ça ?
Parce qu'il faut bien faire un type pointeur pour pouvoir désallouer  
l'espace, quand on a fait une allocation, non ?

Est ce que tu fais une spécification la plus simple possible (avec  
accès anonyme) dans le but qu'elle soit le plus lisible possible,
et ensuite tu fais un type pointeur dans le corps pour pouvoir  
instancier la procédure de désallocation, que t'utilises avec une  
conversion explicite ?

(Est ce que les types retardés ont des inconvenients en particulier ?)


-- 
j'agis contre l'assistanat, je travaille dans une SCOP !


_______________________________________________
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.