OVH Cloud OVH Cloud

Surcharge d'opérateurs de comparaison

6 réponses
Avatar
marmotte
Bonjour à tout le monde !

Je suis débutant en java.
Je voudrais savoir si on peut surcharger les opérateurs de comparaisons
<, >, =, pour leur permettre de prendre en compte une approximation
Epsilon fixée. J'aimerais faire cela pour une programmation CAO, qui se
doit de gérer ce genre d'approximation. J'ai cherché sur google, mais je
n'ai pas trouvé de réponses sur ce sujet (que de la surcharge de
fonctions membres, ce que je connais).
Merci pour vos réponses.

En cas de réponses négatives, est-ce que créer une classe Operateurs
avec à l'intérieur des fonctions membres ayant les fonction de <,>,=
avec prise en compte de l'approximation est une bonne idée ? Existe-t-il
un moyen plus propre?

Merci encore!

marmotte

6 réponses

Avatar
Bernard Koninckx
Bonjour,

Je pense pas que la surcharge d'opérateurs soit possible en Java. Je sais
par contre que C++ le permet.

Bernard

"marmotte" a écrit dans le message de
news:
Bonjour à tout le monde !

Je suis débutant en java.
Je voudrais savoir si on peut surcharger les opérateurs de comparaisons
<, >, =, pour leur permettre de prendre en compte une approximation
Epsilon fixée. J'aimerais faire cela pour une programmation CAO, qui se
doit de gérer ce genre d'approximation. J'ai cherché sur google, mais je
n'ai pas trouvé de réponses sur ce sujet (que de la surcharge de
fonctions membres, ce que je connais).
Merci pour vos réponses.

En cas de réponses négatives, est-ce que créer une classe Operateurs
avec à l'intérieur des fonctions membres ayant les fonction de <,>, > avec prise en compte de l'approximation est une bonne idée ? Existe-t-il
un moyen plus propre?

Merci encore!

marmotte


Avatar
GLH
"marmotte" a écrit dans le message de
news:
Bonjour à tout le monde !

Je suis débutant en java.
Je voudrais savoir si on peut surcharger les opérateurs de comparaisons
<, >, =, pour leur permettre de prendre en compte une approximation
Epsilon fixée. J'aimerais faire cela pour une programmation CAO, qui se
doit de gérer ce genre d'approximation. J'ai cherché sur google, mais je
n'ai pas trouvé de réponses sur ce sujet (que de la surcharge de
fonctions membres, ce que je connais).
Merci pour vos réponses.

En cas de réponses négatives, est-ce que créer une classe Operateurs
avec à l'intérieur des fonctions membres ayant les fonction de <,>, > avec prise en compte de l'approximation est une bonne idée ? Existe-t-il
un moyen plus propre?

Merci encore!

marmotte


non, ce n'est pas possible mais l'interface Comparable pourra peut etre etre
une bonne piste
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Comparable.html

si tu dois comparer des types primitifs genre float, double, int, il faudra
alors passer par les wrapper Float,Double,Integer .......

GLH

Avatar
Bruno Nogent
c# egalement le permet

"Bernard Koninckx" wrote in message
news:403ca615$0$307$
Bonjour,

Je pense pas que la surcharge d'opérateurs soit possible en Java. Je sais
par contre que C++ le permet.

Bernard

"marmotte" a écrit dans le message de
news:
Bonjour à tout le monde !

Je suis débutant en java.
Je voudrais savoir si on peut surcharger les opérateurs de comparaisons
<, >, =, pour leur permettre de prendre en compte une approximation
Epsilon fixée. J'aimerais faire cela pour une programmation CAO, qui se
doit de gérer ce genre d'approximation. J'ai cherché sur google, mais je
n'ai pas trouvé de réponses sur ce sujet (que de la surcharge de
fonctions membres, ce que je connais).
Merci pour vos réponses.

En cas de réponses négatives, est-ce que créer une classe Operateurs
avec à l'intérieur des fonctions membres ayant les fonction de <,>, > > avec prise en compte de l'approximation est une bonne idée ? Existe-t-il
un moyen plus propre?

Merci encore!

marmotte






Avatar
TestMan
Je voudrais savoir si on peut surcharger les opérateurs de comparaisons
<, >, =, pour leur permettre de prendre en compte une approximation
Epsilon fixée. J'aimerais faire cela pour une programmation CAO, qui se
doit de gérer ce genre d'approximation. J'ai cherché sur google, mais je
n'ai pas trouvé de réponses sur ce sujet (que de la surcharge de
fonctions membres, ce que je connais).


La surcharge des opérateurs n'est pas permit en Java. Celà ne veut pas
dire qu'elle n'existe pas mais tout simplement que l'utilisateur ne peut
pas la redéfinir. C'est un choix de conception.

Ainsi il a été jugé que seul les types simples vont réagir aux
opérateurs (+,-,*,/,&,|...).

Une exception notable existe, le "+" sur un membre de gauche de type
String qui concatenne le premier avec le second membre :)

Les surcharges d'operateurs sont souvent utilisées avec abus, ainsi
souvent la sémantique réelle sous-jacente est cachée par la surcharge
qui n'est pas explicite. Celà tourne au cauchemard si l'on utilises du
polymorphisme et autres classes amies sans oublier des template !

En Java on remplacera la surcharge d'operateurs par de simple méthodes :

class Truc{
int i;
public Truc(int i){
this.i=i;
}

public Truc add (Truc b){
assert(b!=null);
this.i=b.i + 100;
return this;
}

}

class Test{
public static final void main(String[] args){
System.out.println(new Truc(100).add(new Truc(0)));
}
}



Merci pour vos réponses.

En cas de réponses négatives, est-ce que créer une classe Operateurs
avec à l'intérieur des fonctions membres ayant les fonction de <,>, > avec prise en compte de l'approximation est une bonne idée ? Existe-t-il
un moyen plus propre?


Le plus simple est effectivement de definit tes propres "methodes
operateur" mais tu ne peux pas utiliser de symboles ...

A+

TM

Avatar
Ryogi
"TestMan" a écrit dans le message de news:
408a960e$0$26426$
Je voudrais savoir si on peut surcharger les opérateurs de comparaisons
<, >, =, pour leur permettre de prendre en compte une approximation
Epsilon fixée. J'aimerais faire cela pour une programmation CAO, qui se
doit de gérer ce genre d'approximation. J'ai cherché sur google, mais je
n'ai pas trouvé de réponses sur ce sujet (que de la surcharge de
fonctions membres, ce que je connais).


La surcharge des opérateurs n'est pas permit en Java. Celà ne veut pas
dire qu'elle n'existe pas mais tout simplement que l'utilisateur ne peut
pas la redéfinir. C'est un choix de conception.

Ainsi il a été jugé que seul les types simples vont réagir aux
opérateurs (+,-,*,/,&,|...).

Une exception notable existe, le "+" sur un membre de gauche de type
String qui concatenne le premier avec le second membre :)

Les surcharges d'operateurs sont souvent utilisées avec abus, ainsi
souvent la sémantique réelle sous-jacente est cachée par la surcharge
qui n'est pas explicite. Celà tourne au cauchemard si l'on utilises du
polymorphisme et autres classes amies sans oublier des template !

En Java on remplacera la surcharge d'operateurs par de simple méthodes :

class Truc{
int i;
public Truc(int i){
this.i=i;
}

public Truc add (Truc b){
assert(b!=null);
this.i=b.i + 100;
return this;
}

}

class Test{
public static final void main(String[] args){
System.out.println(new Truc(100).add(new Truc(0)));
}
}



Merci pour vos réponses.

En cas de réponses négatives, est-ce que créer une classe Operateurs
avec à l'intérieur des fonctions membres ayant les fonction de <,>, > > avec prise en compte de l'approximation est une bonne idée ? Existe-t-il
un moyen plus propre?


Le plus simple est effectivement de definit tes propres "methodes
operateur" mais tu ne peux pas utiliser de symboles ...

A+

TM


A savoir que la surcharge d'opérateurs sera permise à partir de la version
1.5 du JDK :)


Avatar
Jacques-Olivier Haenni
Bonjour,

Ryogi wrote:
A savoir que la surcharge d'opérateurs sera permise à partir de la version
1.5 du JDK :)


Cela me surprend, car je n'ai encore vu aucune mention à cette
possibilité dans les docs que j'ai consultées sur le jdk 1.5.

Auriez-vous une référence vers un document qui en parle s-v-p ?

Merci, et bonne journée,

Jacques-Olivier Haenni