[JAVA] L'équivalent d'un #define en java ?

L'équivalent d'un #define en java ? [JAVA] - Java - Programmation

Marsh Posté le 01-05-2003 à 21:41:42    

Bonsoir,
 
Je voudrais simplement savoir si il existe un équivalent d'un #define du C/C++ en java ?
 
Merci  :)

Reply

Marsh Posté le 01-05-2003 à 21:41:42   

Reply

Marsh Posté le 01-05-2003 à 21:49:53    

Ba ça dépend de ce que tu veux faire, mais a priori je te dirais que non.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 01-05-2003 à 21:56:04    

Je ne souhaite pas faire de define du type :
 
#define RELEASE(a) if (a!=NULL) {a->Release(), a=NULL; }
 
mais plutot du type :
 
#define ma_constante_qui_apparait_souvent  16354324;
 
est-ce possible ? ou est-on oblige d'allouer une variable en memoire ?

Reply

Marsh Posté le 01-05-2003 à 22:08:47    

ghiby a écrit :

Je ne souhaite pas faire de define du type :
 
#define RELEASE(a) if (a!=NULL) {a->Release(), a=NULL; }
 
mais plutot du type :
 
#define ma_constante_qui_apparait_souvent  16354324;
 
est-ce possible ? ou est-on oblige d'allouer une variable en memoire ?

faut passer par une variable
ça semble logique, étant donné que le compilo va sortir du bytecode qui devra être lu partout


---------------
http://runnerstats.net
Reply

Marsh Posté le 01-05-2003 à 22:29:42    

noldor a écrit :

faut passer par une variable
ça semble logique, étant donné que le compilo va sortir du bytecode qui devra être lu partout


 
 
le " #define toto 16;  " consiste a remplacer toutes les occurences de "toto" dans le prog par "16" AVANT compilation, ca n'a rien avoir. tanpis merci quand meme
 

Reply

Marsh Posté le 01-05-2003 à 22:39:36    

ghiby a écrit :


 
 
le " #define toto 16;  " consiste a remplacer toutes les occurences de "toto" dans le prog par "16" AVANT compilation, ca n'a rien avoir. tanpis merci quand meme
 
 

merci, je sais ce qu'est un #define et précompilateur, c'est mon métier
et moi je te dis que ça ne peut pas exister par rapport à la philosophie java, c est tou


---------------
http://runnerstats.net
Reply

Marsh Posté le 01-05-2003 à 22:46:53    

noldor a écrit :

merci, je sais ce qu'est un #define et précompilateur, c'est mon métier
et moi je te dis que ça ne peut pas exister par rapport à la philosophie java, c est tou


 
Je n'avais pas compris ta réponse en fait. Désolé :sarcastic:  
 
Je vais utiliser :
 
private final static int toto = 16 ;
 
qu'est ce que tu en penses ?
 
Je suis perdu avec les "final" "static" je comprends vaguement a quoi ils servent, suis-je en train de faire n'importe quoi ?

Reply

Marsh Posté le 01-05-2003 à 23:07:53    

Pour ce que tu veux faire, c'est OK.
final signifie que tu ne pourras pas modifier ta variable dans la suite du code. Genre si t'essaies de faire un toto = 12 dans une fonction quelconque, t'auras une erreur à la compil.
static, c'est pour dire que ta variable peut (et à la limite doit) être appelée sans passer par une instance de ta classe. Exemple (on suppose que ta classe s'appelle JolieClasse :D) :

Code :
  1. JolieClasse jc = new JolieClasse();
  2. // appel correct de toto (OK, elle est privée et donc ce que je fais n'est pas correct mais on s'en fout)
  3. int plouf = JolieClasse.toto;
  4. // appel non correct (mais qui compile quand même)
  5. int plouf2 = jc.toto;


 
Vala. Donc pour ton utilisation, t'es pas obligé de passer par un static mais le final semble logique.


Message édité par Taiche le 01-05-2003 à 23:18:51

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 01-05-2003 à 23:16:33    

ok merci  :)

Reply

Marsh Posté le 03-05-2003 à 12:38:36    

Si tu as beaucoup de constantes comme ça, je te conseille de faire une classe exprès, que tu appelles constantes par exemple.
Après dans le code tu peux y aller à grands coups de constantes.TOTO, constanes.TITI etc.

Reply

Marsh Posté le 03-05-2003 à 12:38:36   

Reply

Marsh Posté le 03-05-2003 à 15:14:46    

pour info si tu fais un  
private static final int XXX = 5;  
dans une classe, il sera remplacé au moment de la compilation (enfin ça depend peut etre du compilo?), si tu veux des preuves, décompile ta classe après ;)
edit: enfin, c'est l'utilisation de cette variable qui sera remplacée par "5", hein


Message édité par the real moins moins le 03-05-2003 à 15:15:10
Reply

Marsh Posté le 03-05-2003 à 15:15:47    

R3g a écrit :

Si tu as beaucoup de constantes comme ça, je te conseille de faire une classe exprès, que tu appelles constantes par exemple.
Après dans le code tu peux y aller à grands coups de constantes.TOTO, constanes.TITI etc.

ouais et moi je lui conseillerais plutot de voir s'il a pas envie de faire de la programmation objet plutot  :sarcastic:

Reply

Marsh Posté le 03-05-2003 à 15:34:26    

the real moins moins a écrit :

ouais et moi je lui conseillerais plutot de voir s'il a pas envie de faire de la programmation objet plutot  :sarcastic:  


Et ben quoi, c'est objet, une classe Constantes qui encapsule toutes les valeurs constantes :D

Reply

Marsh Posté le 04-05-2003 à 12:12:23    

R3g a écrit :


Et ben quoi, c'est objet, une classe Constantes qui encapsule toutes les valeurs constantes :D


Ta classe sans instance ?
Si tu avait un objet instance de cette classe :
Et tu écris quoi sur sa fiche de rôle ?
Il interragit avec quels autres objets ?
 
Une classe c'est pas un truc dans lequel on regroupe les fonction par ordre d'idée, le C, ADA, le fonctionnel etc. c'est fini en java.

Reply

Marsh Posté le 04-05-2003 à 12:22:02    

HS
 
pour revenir au C: sauf cas extremement precis, dus a des contraintes extérieures, il faut faire __sans__ macro
 
les récentes revisions du C ont donné jour au mot clef const
 
donc on remplace avangateusement un  
 
#define N 16
 
par
 
const int N=16;
 
si mes souvenirs sont bons, la seule contrainte est que la valeur de variable const doit pouvoir etre calculée à la compilation
 
 
quand au macro destinées à faire des petites fonctions rapides, typiquement
 
#define SQUARE(X) (X)*(X)
 
le C99 apporte également des améliorations avec le mot clef inline
 
inline int square(int x)
{
   return x*x;
}
 
qui comem son nom l'indique, permet au compilateur de faire de l'inlining plus judicieusement.
 
tout cela donne des perfs équivalents aux macros, avec le typage en plus, les problème s à la con des macros (définitons multiples, shawdoing, ifndef, etc,) en moins.
 
 
on a utilisé ces mécanismes en C pour pallier aux faiblesse du langage, ce ne sont que des grosses astuces, maintenant que les problèmes sont résolus, on devrait oublier tout ça... reste plsuq u'à avertir les enseignants...

Reply

Marsh Posté le 04-05-2003 à 15:30:34    

:jap:  je confirme tout ça on me la dit en cours cette anéée...:jap:

Reply

Marsh Posté le 04-05-2003 à 15:32:55    

artemice a écrit :

:jap:  je confirme tout ça on me la dit en cours cette anéée...:jap:  

sans deconner? un prof de C qui dit ça? je croyais que ça existait pas... t'es sur de pas avoir un prof qui adore VC++ pour qui C et C++ c'est bonnet blanc et blanc bonnet, d'ou le const et le inline?

Reply

Marsh Posté le 06-05-2003 à 15:50:05    

R3g a écrit :


Et ben quoi, c'est objet, une classe Constantes qui encapsule toutes les valeurs constantes :D


 
y a plus elegant, enfin depend du truc, par exemple si ces constantes sont similaires à une enumeration il peut utiliser un truc du style  
 

Code :
  1. package wc3t.tournoi;
  2. public class TypeDeJeu {
  3.    private static final String WAR3_NAME = "WAR3";
  4.    public static final TypeDeJeu WAR3 = new TypeDeJeu(WAR3_NAME);
  5.    private static final String W3XP_NAME = "W3XP";
  6.    public static final TypeDeJeu W3XP = new TypeDeJeu(W3XP_NAME);
  7.    private final String myName; // for debug only
  8.    private TypeDeJeu(String name) {
  9.       myName = name;
  10.    }
  11.    /**
  12.     * Renvoit le TypeDeJeu correspondant au nom passé en parametre
  13.     * Si le nom ne correspond à rien, renvoit null
  14.     * @param name nom du type de jeu (WAR3, W3XP)
  15.     * @return le TypeDeJeu correspondant au nom passé en parametre, si le nom ne correspond à rien, renvoit null
  16.     */
  17.    public static TypeDeJeu getTypeDeJeuByName(String name) {
  18.       if (WAR3_NAME.equals(name)) {
  19.          return WAR3;
  20.       }
  21.       if (W3XP_NAME.equals(name)) {
  22.          return W3XP;
  23.       }
  24.       return null;
  25.    }
  26.    public String toString() {
  27.       return myName;
  28.    }
  29. }


 
 
y a aussi moyen de faire une classe Configuration dérivé d'un Properties, enfin y a plein de solutions pour faire mumuse  :D  
 

Reply

Marsh Posté le 06-05-2003 à 17:01:05    

matthias a écrit :


Code :
  1. if (WAR3_NAME.equals(name)) {
  2.          return WAR3;
  3.       }
  4.       if (W3XP_NAME.equals(name)) {
  5.          return W3XP;
  6.       }
  7.       return null;




Je sais pas pourquoi mais j'aurais mis un Map ... peut être parce que ça a la même interface sans nécessiter de réecrire le moindre code lorsqu'on ajoute un jeu.

Reply

Marsh Posté le 06-05-2003 à 17:09:02    

nraynaud a écrit :


Je sais pas pourquoi mais j'aurais mis un Map ... peut être parce que ça a la même interface sans nécessiter de réecrire le moindre code lorsqu'on ajoute un jeu.


 
c'est une solution, mais ds mon esprit l'enumeration n'etait pas evolutive qd j'ai ecris le code.

Reply

Marsh Posté le 06-05-2003 à 17:10:21    

y a tout un tas de techniques pour les safe enums en Java

Reply

Marsh Posté le 06-05-2003 à 18:07:44    

matthias a écrit :


 
c'est une solution, mais ds mon esprit l'enumeration n'etait pas evolutive qd j'ai ecris le code.


alors types le bordel statiquement avec une sous-classe par valeur et une super-classe commune.

Reply

Marsh Posté le 06-05-2003 à 19:32:21    

pourquoi des sous-classe... c'est pas trés lisible et c la merde à maintenir :??:  

Reply

Marsh Posté le 06-05-2003 à 19:45:40    

artemice a écrit :

pourquoi des sous-classe... c'est pas trés lisible et c la merde à maintenir :??:  
 

gné? j'aurais le contraire moi

Reply

Marsh Posté le 06-05-2003 à 19:48:58    

un package,un fichier ... une classe c beau non?

Reply

Marsh Posté le 06-05-2003 à 19:53:51    

artemice a écrit :

pourquoi des sous-classe... c'est pas trés lisible et c la merde à maintenir :??:  


Des sous-classes : c'est le compilo qui se démerde avec le typage, si le typage statique de gonfle, tu peux faire du C++ void * powered ou du Smalltalk.
 
c'est moins lisible : pour moi donner un nom aux choses permet de mieux les apréhender.
 
La merde à maintenir : étendre sans revalider la moindre méthode existante et validée me parraît nettement plus viable que de haxoriser une série de if à chaque modification.

Reply

Marsh Posté le 06-05-2003 à 20:01:21    

the real moins moins a écrit :

ouais et moi je lui conseillerais plutot de voir s'il a pas envie de faire de la programmation objet plutot  :sarcastic:  

ça c'est un peu de l'intégrisme


---------------
http://runnerstats.net
Reply

Marsh Posté le 06-05-2003 à 20:22:04    

nraynaud a écrit :


alors types le bordel statiquement avec une sous-classe par valeur et une super-classe commune.


 
pour moi la creation d'une classe est la traduction de la definition d'un entite bien defini au niveau de l'analyse, donc la je trouve que cela se justifie pas

Reply

Marsh Posté le 06-05-2003 à 21:06:36    

matthias a écrit :


 
pour moi la creation d'une classe est la traduction de la definition d'un entite bien defini au niveau de l'analyse, donc la je trouve que cela se justifie pas


UML et les Design patterns (version française) Craig Larman CampusPress  2002 p.359 :

Citation :

Fabrication Pure
Solution : Affecter un ensemble de responsabilité fortement cohésif à une classe artificielle ou de comodité qui ne représente pas un concept du domaine ; il s'agit d'une entité fabriquée de toute pièces  pour prendre en charge la forte cohésion, le faible couplage et la réutilisation.
Une telle classe est une fabrication de l'imagination. [...]


Reply

Marsh Posté le 06-05-2003 à 22:02:45    

nraynaud a écrit :


UML et les Design patterns (version française) Craig Larman CampusPress  2002 p.359 :

Citation :

Fabrication Pure
Solution : Affecter un ensemble de responsabilité fortement cohésif à une classe artificielle ou de comodité qui ne représente pas un concept du domaine ; il s'agit d'une entité fabriquée de toute pièces  pour prendre en charge la forte cohésion, le faible couplage et la réutilisation.
Une telle classe est une fabrication de l'imagination. [...]


 


 
on est pas obligé d'aimer toutes les recettes de cuisines existantes  :D  (même si ce sont des recettes de grands chefs)


Message édité par matthias le 06-05-2003 à 22:03:54
Reply

Marsh Posté le 06-05-2003 à 22:13:14    

matthias a écrit :


 
on est pas obligé d'aimer toutes les recettes de cuisines existantes  :D  (même si ce sont des recettes de grands chefs)


Par contre on a pas le droit de faire un travail de porc uniquement pour contourner un pattern. Surtout que travailler uniquement avec des objets du domaines ça veut dire : pas de Factorys, pas d'interface graphique, un niveau de conception au raz des paquerettes ... En fait j'arrive même pas à imaginer jusqu'où va ce genre de comportement.
 
Alors que transformer les types énumérés en une classe abstraite possédant autant de sous-classes que de valeurs possibles est vraiment la base de la hiérarchie de types (2 étages).

Reply

Marsh Posté le 06-05-2003 à 22:17:49    

nraynaud a écrit :


 travailler uniquement avec des objets du domaines


 
j'ai jamais ecris ça que je sache  :o , bien sur qu'il faut utiliser les Factory, etc ... je parlais juste du cas de figure cité ci-dessus

Reply

Marsh Posté le 07-05-2003 à 03:05:02    

ghiby a écrit :


 
Je n'avais pas compris ta réponse en fait. Désolé :sarcastic:  
 
Je vais utiliser :
 
private final static int toto = 16 ;
 
qu'est ce que tu en penses ?
 
Je suis perdu avec les "final" "static" je comprends vaguement a quoi ils servent, suis-je en train de faire n'importe quoi ?


 
c un peu de la base de java ca :  
 
Static : la variable devient membre de la classe...et est existe indépendament des instances de cette classe
 
Final : idem, mais pour une constante
 
T pas obligé de mettre ta constante en private, vu l'attribut final elle est pas modifiable de toute façon...mais ca te permet d'y accéder plus facielement...


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 07-05-2003 à 03:07:28    

nraynaud a écrit :


UML et les Design patterns (version française) Craig Larman CampusPress  2002 p.359 :

Citation :

Fabrication Pure
Solution : Affecter un ensemble de responsabilité fortement cohésif à une classe artificielle ou de comodité qui ne représente pas un concept du domaine ; il s'agit d'une entité fabriquée de toute pièces  pour prendre en charge la forte cohésion, le faible couplage et la réutilisation.
Une telle classe est une fabrication de l'imagination. [...]


 


 
Pitié non, g une interro dessus le 14..;arghhh


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 07-05-2003 à 16:01:58    

Jubijub a écrit :


 
Pitié non, g une interro dessus le 14..;arghhh


T'as bien de la chance d'avoir une interro sur les Design-patterns, beaucoup de gens n'ont de cours que sur les diagrammes de classes et les Use-case. Alors que se sont des parties très "technique" qui n'ont rien d'intéressantes en soit mais les modèles sous-jacents il est rare de les étudier.

Reply

Marsh Posté le 07-05-2003 à 20:26:30    

le programme en design c l'ensemble de son bouquin...mais en anglais :D (erasmus roulaize)
 
ca et de l'analyse de ce qui fait un information system...


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 07-05-2003 à 20:28:42    

ski le prof??


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 09-05-2003 à 09:31:23    

nraynaud a écrit :


T'as bien de la chance d'avoir une interro sur les Design-patterns, beaucoup de gens n'ont de cours que sur les diagrammes de classes et les Use-case. Alors que se sont des parties très "technique" qui n'ont rien d'intéressantes en soit mais les modèles sous-jacents il est rare de les étudier.


 
Bein euh... Nous les DP on les donne dans le cadre de programmation objet, avec une breve intro a UML. Je ne sais pas comment ca se passe "ailleurs" mais je n'attends pas de mes etudiants qu'ils sachent coder une application (j'entends par la qu'on va tres peu voir du cote des APIs existantes) a la fin du semestre, mais qu'ils sachent penser objet, et manipuler la puissance de ce paradigme en l'appliquant a Java.
 
Bref premier semestre on apprend a reflechir, concevoir, gribouiller, inventer, deuxieme semestre ca code sec en utilisant ce qu'on a appris...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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