[Besoin Conseils] Coder de manière élégante
Bonjour à tous,
Je voulais poster ce message dans le thread "débat, java vs c++", mais il parait que je ne suis pas membre du club...
J'ai essayé de faire l'inscription, et ça renvoie sur l'inscription de ce forum. Bref, je n'ai pas dû tout comprendre.
Voila ma question :
J'ai fait un peu de java à la fac (Interfaces graphiques, classes à charger dans Oracle, ...), et j'ai dernièrement eu une formation accélérée de c++ en une semaine (orientée calculs financiers, méthode de monté-Carlo, Black & Scholes, etc).
Evidement, on nous a expliqué comment surcharger des opérateurs : à première vu, la syntaxe est tordue, mais finalement on s'y fait, puis les classes templates, toujours difficile au début, et puis on se dit "mais comment je faisais avant sans ça ?"
Donc en Java ?
Si je me crée une classe matrice (je ne doute pas qu'il en existe déjà, c'est pour l'exemple), écrire maMatrice.add(maMatrice2), c'est propre ?
Plus généralement, qu'est ce qui est propre en java, pour remplacer les classes templates et la surcharge des opérateurs ?
Merci beaucoup de m'avoir lu.
Re: [Besoin Conseils] Coder de manière élégante
Salut,
Les Generics de Java 5.0 (Tiger) permettent a peu près les mêmes choses que les Templates de C++
Tu trouvera plus d'information dans la section dédié de la Présentation de Tiger
Mais la syntaxe est relativement la même, malgré que les mecanisme sont différents (avec des incoviénient et des défauts pour chacun)...
En ce qui concerne la surcharges des opérateurs, ce n'est pas possible en Java et je pense bien que ce ne le sera jamais...
La seule exception en Java c'est l'opérateur + sur les String...
Le problème avec la surcharge des opérateurs c'est que cela cache le mecanisme aux developpeurs qui utilise tes classes, et que cela peut engendrer des effet de bord indésirables...
De plus cela s'éloigne un peu de la POO, et alors que le code semble tout simple, cela peut effectuer des traitements assez lours et cale implique la création d'éléments temporaires (avec tout ce que cela implique : constructeur de copie, etc...).
Lorsque tu fais :
Code:
1 2 3 4
| Matrice m = new Matrice();
Matrice n = new Matrice();
// ...
m = m + n; |
Cela revient à faire (en POO) :
Code:
1 2 3 4
| Matrice m = new Matrice();
Matrice n = new Matrice();
// ...
m = new Matrice(m).add(n); |
Et cela peut se relever très lourd dans certaines conditions (dans les boucles par exemples).
Alors qu'un simple appel de méthode est plus clair et explicite :
a++