[C --> Java] Quel est l'équivalent d'un enum

Quel est l'équivalent d'un enum [C --> Java] - Java - Programmation

Marsh Posté le 13-06-2002 à 14:18:08    

En C, il existe enum.
enum, c'est la possibilité de définir un type et des entier constants en même temps. Je m'explique.
Là, je veut gérer des droits d'accès pour une classe "Utilisateur".
En C++, j'aurai fait:

Code :
  1. enum rights {kAll, kRead, kReadWrite};


ça, ça défini le type "rights", qui peut prendre les 3 valeurs kAll, kRead, et kReadWrite (ce sont en fait des entier constants, qui valent respectivement 0,1, et 2, ms on s'en fout).
C vachement pratique, parce que, du coup, j'aurai mis "rights droitUtilisateur" comme membre privé de ma classe Utilisateur.
et j'aurai pu mettre les accèsseurs:

Code :
  1. void setRights (rights droits);
  2. rights getRights ();


C propre, c clean. J'aime.:D
Mais en java, comme je peux faire pr faire un truc équivalent (sans non plus créer une classe "Rights", ça vaut pas le coup) ?

Reply

Marsh Posté le 13-06-2002 à 14:18:08   

Reply

Marsh Posté le 13-06-2002 à 14:20:34    

C => langage imperatif
Java => langage objet
 
donc si tu fais du java tu creees une classe :)


---------------
Narf... It is broken...
Reply

Marsh Posté le 13-06-2002 à 14:23:25    

DLR a écrit a écrit :

C => langage imperatif
Java => langage objet
 
donc si tu fais du java tu creees une classe :)  




 
c pas parce que c objet qu'on créé des classes tout l'temps à tout va, sans réfléchir...

Reply

Marsh Posté le 13-06-2002 à 14:24:36    

el_gringo a écrit a écrit :

 
 
c pas parce que c objet qu'on créé des classes tout l'temps à tout va, sans réfléchir...  




 
euh t'es gentil mais faut pas pousser qd meme! C'est un langauge orienté objet donc tu travailles avec des objets. Et un objet est défini par sa classe.
 
Donc il faut passer par un objet, DLR a raison.


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2002 à 14:25:32    

---> Enfin du moins une partie d'objet. Je ne pense pas que DLR voulait que tu crées un objet rien que pour ça ..


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2002 à 14:25:51    

DarkLord a écrit a écrit :

 
 
euh t'es gentil mais faut pas pousser qd meme! C'est un langauge orienté objet donc tu travailles avec des objets. Et un objet est défini par sa classe.
 
Donc il faut passer par un objet, DLR a raison.  




:jap:
 
SmallTalk RuLeZ


---------------
Narf... It is broken...
Reply

Marsh Posté le 13-06-2002 à 14:27:37    

DarkLord a écrit a écrit :

---> Enfin du moins une partie d'objet. Je ne pense pas que DLR voulait que tu crées un objet rien que pour ça ..  




:D
moi je ferai pas comme il fait mais c son choix :)
enum existe pas en java donc forcement...
taka faire une interface 'enum' ;)


---------------
Narf... It is broken...
Reply

Marsh Posté le 13-06-2002 à 14:27:59    

DarkLord a écrit a écrit :

---> Enfin du moins une partie d'objet. Je ne pense pas que DLR voulait que tu crées un objet rien que pour ça ..  




 
Comment ça une "partie" d'objet !?

Reply

Marsh Posté le 13-06-2002 à 14:32:23    

el_gringo a écrit a écrit :

 
 
Comment ça une "partie" d'objet !?  




 
bin je connais pas enum en C mais un objet peut offrir cette foncionnalité tout en offrant d'autres fonctionnalités.
 
Enfin bref ...De toutes façons que veux tu faire d'autre qu'un objet ?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2002 à 14:34:33    

DarkLord a écrit a écrit :

 
 
bin je connais pas enum en C mais un objet peut offrir cette foncionnalité tout en offrant d'autres fonctionnalités.
 
Enfin bref ...De toutes façons que veux tu faire d'autre qu'un objet ?  




 
Bah je savais pas justement ! C bien pour ça que j'posais la question !
Pour une fois, le Java est moins pratique que le C++. Une fois n'est pas coutume.

Reply

Marsh Posté le 13-06-2002 à 14:34:33   

Reply

Marsh Posté le 13-06-2002 à 14:37:56    

el_gringo a écrit a écrit :

 
 
Bah je savais pas justement ! C bien pour ça que j'posais la question !
Pour une fois, le Java est moins pratique que le C++. Une fois n'est pas coutume.  




question de point de vue, car C++ c mi objet mi imperatif
si tu veux faire du vrai objet tu tests smallTalk tu va voir c marrant...
Java c entre le C++ et smalltalk
 

Code :
  1. Public class Droit{
  2. public static final int kAll = 1;
  3. public static final int kRead = 2;
  4. public static final int kWrite = 3;
  5. int[] allowedVars = {kAll,kRead,kWrite}
  6. private int droit;
  7. Public Droit(int d){
  8. int i;
  9. for(i=0;i<allowedVars.length;i++)if(d ==allowedVar[i]){
  10. droit = d;
  11. }
  12. throw new Exception("Valeur incorrecte" );
  13. }
  14. Public int getDroit(){return d;}
  15. }


Message édité par DLR le 13-06-2002 à 15:05:32

---------------
Narf... It is broken...
Reply

Marsh Posté le 13-06-2002 à 14:38:06    

il y a une différence entre pratique et rigoureux ...   [:titprem]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2002 à 14:42:07    

DarkLord a écrit a écrit :

il y a une différence entre pratique et rigoureux ...   [:titprem]  




:D
 
chuuut!


---------------
Narf... It is broken...
Reply

Marsh Posté le 13-06-2002 à 15:04:09    

DarkLord a écrit a écrit :

il y a une différence entre pratique et rigoureux ...   [:titprem]  




 
c rigoureux un enum.
Imagine que toi c une facilité d'écriture pour créer une classe que Mister dlr à faite. (merci au passage).

Reply

Marsh Posté le 13-06-2002 à 15:06:24    

el_gringo a écrit a écrit :

 
 
c rigoureux un enum.
Imagine que toi c une facilité d'écriture pour créer une classe que Mister dlr à faite. (merci au passage).  




de rien, fais gaffe g fait un edit sur les static int g rajoute le final :)
public static final int = constante publique de classe comme une valeur enum en fait


---------------
Narf... It is broken...
Reply

Marsh Posté le 13-06-2002 à 15:19:44    

el_gringo a écrit a écrit :

 
 
c rigoureux un enum.
Imagine que toi c une facilité d'écriture pour créer une classe que Mister dlr à faite. (merci au passage).  




 
ct une boutade :) je rigolais, promis


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2002 à 15:22:32    

on peut faire de l'objet sans classes
eheh ;)
 
LeGreg

Reply

Marsh Posté le 13-06-2002 à 15:23:27    

legreg a écrit a écrit :

on peut faire de l'objet sans classes
eheh ;)
 
LeGreg  




 
en C oui, mais en java c un peu cho non?
 
XDR RPC RuLeZ?


---------------
Narf... [:dlr_ninja]  
Reply

Marsh Posté le 13-06-2002 à 15:23:54    

oups


---------------
Narf... It is broken...
Reply

Marsh Posté le 13-06-2002 à 15:43:18    

DLR_Ninja a écrit a écrit :

 
en C oui, mais en java c un peu cho non?




 
je ne pensais pas au java
mais plus au javascript
(meme si ca ne doit pas etre le seul)
 
exemple en javascript tu ajoutes une nouvelle methode a un objet a la volee  
this.newMethod = maMethode;
(et this est passé implicitement a maMethode)
 
LeGreg

Reply

Marsh Posté le 13-06-2002 à 18:40:12    

Si tu veux dte faire un truc bien objet, tu peux utiliser un singleton (ou plutot un triteton en l'occurence) :
 

Code :
  1. public class Right {
  2.    public static final Right ALL = new Right();
  3.    public static final Right READ = new Right();
  4.    public static final Right READ_WRITE = new Right();
  5.    private Right () {}
  6. }


 
et tu l'utilises comme ca :
 

Code :
  1. truc.setRight(Right.ALL);
  2.    //...
  3.    if (truc.getRight() == Right.READ) {
  4.       //...  
  5.    }

Reply

Marsh Posté le 14-06-2002 à 08:36:28    

benou a écrit a écrit :

Si tu veux dte faire un truc bien objet, tu peux utiliser un singleton (ou plutot un triteton en l'occurence) :
 

Code :
  1. public class Right {
  2.    public static final Right ALL = new Right();
  3.    public static final Right READ = new Right();
  4.    public static final Right READ_WRITE = new Right();
  5.    private Right () {}
  6. }


 
et tu l'utilises comme ca :
 

Code :
  1. truc.setRight(Right.ALL);
  2.    //...
  3.    if (truc.getRight() == Right.READ) {
  4.       //...  
  5.    }

 




 
Haa... ça, ça me plait bien !
Merci Benou. :jap:

Reply

Marsh Posté le 14-06-2002 à 08:38:23    

you're welcome :jap:

Reply

Marsh Posté le 14-06-2002 à 08:47:27    

yeas benou j'aime bien ton code c'est bien propre :)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 14-06-2002 à 09:06:28    

merci :)

Reply

Marsh Posté le 14-06-2002 à 09:13:47    

benou a écrit a écrit :

merci :)  




 
non je viens encore de relire c'est vraiment très astucieux comme système :)
 
Moi j'utilise des constantes mais bon :/
 

Code :
  1. public static final int UNAVAILABLE = -1;
  2. public static final int UP = 1;


 
etc.


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 14-06-2002 à 09:33:05    

ouais, les static final int ca sert à ca aussi ... l'avantage des objets, c'est que tu peux par la suite les "améliorer". Par exemple, mettre un toString plus explicite, ou ajouter des méthodes de comparaison de droits, etc ...
 
d'ailleurs, je fais une petite rectification à mon exemple d'utilisation : il vaut mieux utiliser le equals plutot que le ==. Pour le moment, ca revient exactement au même, mais ca permettra par la suite de redefinir le equals si la classe Right est amenée à changer...
 

Code :
  1. if (truc.getRight().equals(Right.READ)) {
  2.      //...   
  3.   }

Reply

Marsh Posté le 17-06-2002 à 13:34:11    

De plus, l'avantage d'utiliser une classe avec un constructeur privé, c'est que cela interdit à l'utilisateur de créer ses propres instances de cette classe, donc d'enrichir l'enum en douce...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed