On Sun, Jun 23, 2002 at 11:08:53AM +0200, Torgue Philippe wrote:
> Bonjour,
>
> Voilà, je veux construire une fonction qui retourne
> un type énumérée.
> En C on peut facilement construire le type énumérée, le nommer, et
> contraindre une fonction à retourner des valeurs de ce type.
>
> Cependant, je ne retrouve pas le type énumérée en Java.
> [...]
C est un langage imperatif, Java un langage oriente-objet.
Le concept de type en objet n'est pas celui classique que l'on rencontre
dans la programmation procedurale.
En Objet, le typage est associe a la notion d'objet. A un objet est
associe un type qui est defini par la hierarchie des interfaces des
classes (donc, grosso-modo, de l'interface globale de la classe
generatrice de l'objet.) En Objet, une interface est définie par les
proprietes visibles de la ou les classes (une classe etant une
implementation d'une interface.)
Le probleme en Java est que cette definition n'est pas si evidente du
fait que le langage implemente la notion d'interface en sus de celle de
classe afin de proposer, comme ObjC, un mecanisme permettant de
/simuler/ l'heritage multiple (heritage d'interface).
Donc, pour un type enumere, elle peut etre definie par une classe qui
n'engendre que des instances ayant des valeurs particulieres. Maintenant,
est-ce exact du point de vue objet ... je ne le crois pas car en Objet,
un objet est une entite qui evolue au gres des interactions. Un objet
est caracterise par un etat et un ensemble de comportements. L'etat est
defini par l'ensemble des resultats des interactions issues sur l'objet
et le comportement defini l'ensemble des interactions qui peuvent etre
appliquer a l'objet. En fait, le terme de comportement est un abus de
langage issu des implementations du paradigme objet dans des langages de
programmation. Le terme exact est /propriete/. Donc, si un objet ne
possede qu'une valuer (son etat ne prend qu'une valeur), il y a un pb de
modelisation objet quelque part.
Tu devrais reflechir sur qui a besoin de cette enumeration de valeur.
La classe d'objet necessitant cette enumeration pour des traitements
internes devrait etre celle qui fournit cette enumeration. Un exemple :
public class HTTPConnector {
// enumeration
public static int HTTP_OK = 200;
public static int HTTP_ACCEPTED = 202;
...
// renvoie le code de retour de la response a la requete
// HTTP precedement envoyee.
// Ok, c'est un int, mais les valeurs sont celles proposees
// dans l'enumeration
public int responseCode () {...}
Desole d'avoir ete trop long, d'autant plus que je ne sais pas si ca
repond a ta question.
--
Miguel Moquillon <miguel.moquillon@???>
http://miguel.moquillon.free.fr