Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Microsoft et Java

295 réponses
Avatar
Wykaaa
Microsoft semble reconnaître que Java permet de développer plus
rapidement que C# et qu'il y a moins de failles de sécurité dans Java
que dans .net :
http://dsi.silicon.fr/nouveautes/microsoft-java-forever%E2%80%A6-1366

10 réponses

Avatar
JKB
Le Sat, 18 Jun 2011 12:47:57 +0200,
Tonton Th écrivait :
On 06/18/2011 12:35 AM, Aéris wrote:

machine. Et je peux les intégrer en 4 lignes de XML à mon propre projet.



https://bitbucket.org/aeris/openpki/src/b97fbbff9598/pom.xml



Je vais aller vomir... Un makefile, c'est simpliste à côté...

Le XML c'est comme la violence : si ça ne marche pas,
c'est que tu n'en as pas utilisé assez.



;-)

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 09:56, JKB a écrit :
Gnî ? Et les #ifdef dans les .h, c'est fait pour les chiens ?
Quant aux variables globales, les seules fois où j'en utilise, c'est
uniquement pour gérer des choses dans des gestionnaires
d'interruption.

Euh... Mauvais .h, changer .h. Les autotools ne sont pas là pour
gérer ce genre de problèmes. Les trucs comme
autoconf/automake/autoheader sont là pour assurer l'inclusion des
bon fichiers d'en-tête sur des architectures bizarres en fonction
des bibliothèques installées. L'inclusion croisée des en-têtes ne
peut être réglée que par des primitives de préprocesseur dans ces
en-têtes.

JKB



Et tu ne trouves pas génant d'avoir à gérer le compilateur dans ton code ?
On en arrive même souvent à devoir splitter (sans autre raison de «
conception » que le compilo nous emmerde) un fichier .h en 2 pour s'en
sortir, à galérer avec des early declarations pour les mêmes raisons, ou
même pire à casser une architecture propre pour faire plaisir au
compilateur…

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/I85AAoJEK8zQvxDY4P9IxEH/RaHCFvb7gbuq4pVUEiXOmai
3ewfb+aGQJIcyf6xs9YaxEp4UMVErcefFrz872PJjyw6vRd/7A9NbuRhTT6lXKlR
FHa/FE4uQmSnesQV4JpXBkYJiMvjqIamPSzbmdXyqo08/+FwOh5aAzui4SD2bfN5
6Nj5/92wgBsgQwIlLKulF/2RzoJRoeeWBjkxNf3cU7odBSNMxZ+v603gQmt+72um
rVXHR1QNP/tlPsoy6rxmbNXre58qZh8R88ivbu9mzCQfOPMdUcL18dOLAHoXGjpX
toWXkESXfRkzzJpG1oqb9c3U/6ITpvVMe4r3+Wl+co3LLU8r+76Y1ktcKh8XTj8 çL1
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 12:46, Tonton Th a écrit :
En quoi l'utilisation raisonnable des variables globales
est-elle un "tricks" ?



Je n'ai que très peu d'exemples voire pas du tout où une variable
globale est réellement justifiable.
Et très souvent, commencer à mettre une varglo, c'est la porte ouverte à
voir la moitié du code en varglo à plus ou moins long terme.

Après je suis en partie d'accord que le problème viendra le plus souvent
du développeur, mais le langage n'aide pas à éviter ce genre de tricks.

Les autotools n'ont rien à voir avec le langage. Et non, sur
un projet bien construit, les inclusions "croisées" de .h
ne posent pas de problèmes.



Correction, les .h croisés ne sont *plus* un problème une fois le projet
fini.
Mais ne me fait pas croire que tu n'as jamais lutté avec ce genre de
problème.
D'autant plus que les #ifdef/#define n'ont aucune justification dans le
code et ne sont là que pour faire plaisir au compilateur.

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/JBCAAoJEK8zQvxDY4P9k+0H/2RXUN0Wm8OeEtpVd3FQQKAo
/Je8bRYCpt2qlB01ux7X5Y0PPhr5uZGJ+9LxtfVPHrld7uvhmwspuz4OUF1DJQll
8/iQTpGTnU4Z5x/TI750hfcJ7dL1cqeS7npk/HRNCCvMaLJm1OCEc0mtxvF4/zHQ
PDHdimJfEsUYfLH4+8lr3K6B+O/PvzladguyrccX6jcfUc+Mcvfu1tZc435/jLk+
YOj27kLnsP3RpSTFhFASDfpiQbbYRbJapdaW73yK2RCgG0Ww72Oj1lqaEE/mSEC3
XF2bubhy0Sv7ucBJsf6g95QpTdsSRCDvTuomi8qUjiQaCkpUhQr22TRic7lAbIg =s65q
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 09:53, JKB a écrit :
Certes, je parle de développement objet en général. Pour avoir bien
réfléchi au problème, je crois de plus en plus que le concept objet
a été conçu pour avoir sur le marché des tas de développeurs
médiocres capables de faire des applications rapidement, le concept
d'objet étant un garde-fou.



Inventé non, mais mal maîtrisé je +1
Mais je persiste qu'un dev non compétent fera plus de connerie avec du C
et du C⁺⁺ (ne serait-ce que .h croisé ou gestion de la mémoire) qu'avec
du Java.

Certainement. Sauf que depuis quelque temps, je trouve que les
développeurs qui codent en objet (et qui n'ont jamais vu que ça)
sont des branques et ne conçoivent pas correctement leurs soft.
Rajouter un bout de code dedans est trop souvent une gageure.



Dans un code mal conçu, on ne s'en sortira pas effectivement.

Déjà fait, et qui plus est assez modulaire pour être réutilisable.



J'ai pas dis que c'était impossible, juste que le ratio (temps passé +
taille du code) / (modularité + évolutivité) est largement meilleur en Java.

Java, ce serait intéressant s'il n'y avait pas obligatoirement de
l'objet. C'est pour cela que le C++ lui sera toujours supérieur. En
C++, tu peux parfaitement faire de la programmation fonctionnelle
(qui est amha largement supérieure lorsqu'elle est correctement
faite à la programmation objet).



La POO apporte quand même des notions extrèmement utiles comme
l'héritage et le polymorphisme.
Sans cela, tu vas devoir passer des heures et allonger ton code d'autant
pour parvenir au même résultat…

Foo {doIt() { code1 } }
Bar : Foo { doIt() { code2 } }
List<Foo> list = { new Foo(), new Bar() }
for ( Foo foo : list ) foo.doIt()

Rien que cela en programmation fonctionnel, c'est une usine-à-gaz
immonde, puisque la fonction « doIt » va se transformer en une platrée
de if en cascade et prendre un gros « object » en paramètre, afin de
gérer le comportement alternatif en fonction du « type »…


En Java, c'est beaucoup plus
difficile.



Au pire rien ne t'empèche de prendre les classes pour des namespaces et
de faire uniquement des méthodes statiques hein =)

Quant à gérer efficacement les ressources comme la
mémoire ou les fils d'exécution, Java ne sait carrément pas faire.



Ça c'est un problème de développeur, pas du langage.
Tu peux très bien gérer ça très proprement.

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/JLkAAoJEK8zQvxDY4P9LoAH/2hJzbyd0FCkmvr7+/V3w0OR
e9Yu371ExfacD2h4BEXu59WfLkiEK7xiB70RMomujYRrVzNGY1c+iQacgGbrwjTj
C95G/eqXeUcqtlraBkQ/aE5gr44wRVGt33RugpGfidR/KPj/0eJlD/Gdl3rZENeb
X6MppreqIiXsyI+8ew2y8RV9Gs2TcVohtOfdJqKdYByUnB+I4V+GXnpdCINidfWs
tg8eZypSBZjupmUrDtzojIe06xlFX8BQ/04a0QPMc0FHdywIJo0i8oPlFLtK+V+o
5tX6dFVI/ujhOM0gRKyreQnZIpugYU+Q4302Cd+V2FEWaKbAzsHdu6x2e70E4cg Sp
-----END PGP SIGNATURE-----
Avatar
JKB
Le Sat, 18 Jun 2011 13:42:56 +0200,
Aéris écrivait :

Le 18/06/2011 09:56, JKB a écrit :
Gnî ? Et les #ifdef dans les .h, c'est fait pour les chiens ?
Quant aux variables globales, les seules fois où j'en utilise, c'est
uniquement pour gérer des choses dans des gestionnaires
d'interruption.

Euh... Mauvais .h, changer .h. Les autotools ne sont pas là pour
gérer ce genre de problèmes. Les trucs comme
autoconf/automake/autoheader sont là pour assurer l'inclusion des
bon fichiers d'en-tête sur des architectures bizarres en fonction
des bibliothèques installées. L'inclusion croisée des en-têtes ne
peut être réglée que par des primitives de préprocesseur dans ces
en-têtes.

JKB



Et tu ne trouves pas génant d'avoir à gérer le compilateur dans ton code ?



Je ne gère pas le compilateur dans mon code. Je ne gère que les
fichiers d'en-têtes nécessaires à mon code dans mon code (je ne suis
pas assez fou pour utiliser des #pragma qui nuisent à la
portabilité).

On en arrive même souvent à devoir splitter (sans autre raison de «
conception » que le compilo nous emmerde) un fichier .h en 2 pour s'en
sortir, à galérer avec des early declarations pour les mêmes raisons, ou
même pire à casser une architecture propre pour faire plaisir au
compilateur…



Non, c'est faux (sauf si les fichiers d'en-têtes du système sont
moisis et ne gèrent pas les dépendances). Je n'ai plus vu ça depuis
très longtemps. Pour être exact, le dernier compilo qui m'a posé des
problèmes (en dehors de la mouture gcc/OpenBSD), c'est le compilo de
Sun Studio, et c'était il y a _très_ longtemps.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
JKB
Le Sat, 18 Jun 2011 13:47:14 +0200,
Aéris écrivait :

Le 18/06/2011 12:46, Tonton Th a écrit :
En quoi l'utilisation raisonnable des variables globales
est-elle un "tricks" ?



Je n'ai que très peu d'exemples voire pas du tout où une variable
globale est réellement justifiable.



Une variable globale est nécessaire dès que tu installes un
gestionnaire de signal. Si tu sais faire sans, ça m'intéresse.
Il y a d'autres cas où une variable globale est nécessaire.

Et très souvent, commencer à mettre une varglo, c'est la porte ouverte à
voir la moitié du code en varglo à plus ou moins long terme.

Après je suis en partie d'accord que le problème viendra le plus souvent
du développeur, mais le langage n'aide pas à éviter ce genre de tricks.



Et alors ? Il y a des cas où tu ne peux t'en sortir qu'avec des
variables globales. Ce n'est pas pour cela qu'il faut utiliser ces
variables partout.

Les autotools n'ont rien à voir avec le langage. Et non, sur
un projet bien construit, les inclusions "croisées" de .h
ne posent pas de problèmes.



Correction, les .h croisés ne sont *plus* un problème une fois le projet
fini.
Mais ne me fait pas croire que tu n'as jamais lutté avec ce genre de
problème.



Rarement, et à chaque fois, c'était un .h du système qui posait
problème.

D'autant plus que les #ifdef/#define n'ont aucune justification dans le
code et ne sont là que pour faire plaisir au compilateur.



Ça n'a aucun sens. Si le #ifdef n'était pas là, le compilateur
risque fort de râler. Ils sont donc là pour faire plaisir au
compilateur.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 10:13, JKB a écrit :
Avec des outils standardisés comme Graddle ou Maven, je peux recompiler
la plupart des projets Java du monde sans aucun prérequis sur ma
machine.



On fait la même chose avec tous les autres langage. Regarde un peu
pkgsrc sous NetBSD. Ce n'est pas une histoire de langage, mais de
protocole de compilation.



Sauf que Java n'est justement pas que son langage mais la foultitude
d'outils intégrés.

Je n'ai jamais compris pourquoi il fallait du XML dans des choses
comme ant ni pourquoi un makefile des familles ne fonctionne pas
pour compiler du Java.



Avec Maven, si tu préfères un POM en YAML ou en Groovy, c'est possible =)

Et ? C'est encore quelque chose qui n'est _pas_ intrisèque au
langage.



Si
L'utilisation de ces outils a été standardisé dans Java et quasiment
plus aucun projet ne se fait sans eux.

Dans ce cas, c'est que le type chargé d'écrire le makefile (ou la
version autoconf/automake) est un branque. Le makefile (ou le
configure) doit s'arrêter en signalant ce qu'il manque.
Généralement, ces bouts manquants sont disponibles dans les dépôts.



Quand je vois que Maven va aller te chercher dans un dépôt la dépendance
manquante ainsi que ses dépendances transitives et te mettre ça bien au
chaud sur ton disque (~/.m2) sans pourrir ton système, et ce quelque
soit ton système (Windows, BSD, Linux, Mac)…
Effectivement, tous les devs de Makefile sont des branques comme tu dis.

Je vais te donner un exemple tout bête :
https://bitbucket.org/aeris/openpki/src



Beuah... Déjà, lorsque je vois tous ces répertoires imbriqués les
uns dans les autres, j'ai envie de vomir.



Ça c'est l'IDE qui le gère.
Et si tu ne veux pas de répertoires imbriqués, c'est totalement possible.
Sauf que tu t'exposerais à des conflits avec tes dépendances si tes
dépendances fonctionnaient aussi comme ça.
En effet, comment faire la différence entre CollectionUtils.class de
Apache Commons et la mienne si tout est au même niveau ? Alors que chez
moi pas de soucis, une est dans fr.imirhil.openpki.utils.CollectionUtils
et l'autre dans org.apache.commons.utils.CollectionUtils. Rien que cela
t'évite les saloperies d'écrasement qu'on peut connaître avec C/C⁺⁺.

Et ? Si j'avais le temps, je te ferais la même chose en C (quitte à
utiliser à fond cpp ou m4 et un patchwork de bibliohtèques bien senties).
Et pour ta gouverne, le nombre de lignes n'est pas un facteur discriminant.
Le nombre d'instructions le serait déjà un peu plus.



502 statements si tu préfères =)

Portabilité limitée aux systèmes qui embarquent une JVM conforme. Ça
s'est considérablement amélioré ces derniers temps avec openjkd,
mais durant très longtemps, les seules cibles étaient celles qui
avaient une JVM Sun officielles. Avec C/C++/Fortran, ça compile
partout ou presque. Avec Java, j'ai eu des tas de problèmes avec
blackdown, J9, Superwaka et autres. La portabilité Java, c'est de la
poudre aux yeux, d'autant que lorsque tu commences à faires de
choses subtiles, il faut _aussi_ trouver les paquets à importer.



http://mvnrepository.com/ ?
162.000 librairies qui n'attendent que toi…
Toutes disponibles en 4 lignes de XML dans le POM.

Tu m'en fais de même en C ou en C⁺⁺ ?



Oui si j'en avait le temps et l'envie.

En si peu de code ?



À peu près.

En si peu de temps (un week-end) ?



Certainement pas, mais ce serait réutilisable et portable.



Alors là je demande à voir =)

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/JZMAAoJEK8zQvxDY4P9cXcIALf9NOzMXF9DIsDqcOHj+VcE
24Aty1cr2R6EQZ27WnK7vrWO3US4HA7bOrgnmE3uTwf81sqr2qRQ76nN3h4o0wNh
KySQeQuOrJz+cDT+BK0Gcg8g3cPZch7D36bKu3pOFjzZsrJWuXEkCUip2joiXZup
6hSf3k+EOKKtyTVKkmFN5rSJ9X6vBAQzsPzkHPlmOQmEecEHoQUbzCX1aEkg8ldO
77gGAk86wW+VBdtNAsNoPVbhfubQCPGzeeOOL/NCtV/STNfK8QSZFc3itb1F9gh7
Xqee6inlxCbwh+akB61Vo7EtO5aAJlcjSsdo8djO6KYGkNQc3ZWLS5p0JLVSZ6U =ulUO
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 12:49, JKB a écrit :
Je vais aller vomir... Un makefile, c'est simpliste à côté...



C'est certes verbeux, mais c'est beaucoup plus concis au final que le
Makefile puisque je ne m'occupe que de lister ce que j'ai besoin (4
lignes pour chaque dépendence à intégrer).
Maven se charge de TOUT le reste (téléchargement, intégration au projet,
compilation, test, site web, déployement, versionning…).

Et l'IDE est aussi là pour t'aider en te masquant le XML au final :
http://blog.frankel.ch/wp-content/resources/top-eclipse-plugins-i-wouldnt-go-without/m2eclipse-overview-tab.jpg
http://www.jussimononen.info/wp-content/uploads/2010/03/maven_pom_editor.png

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/JfTAAoJEK8zQvxDY4P9yn8H/ignAVxKZW+ZOe2L19gajUsz
Je7c7nJ+9AMdtE7plOS2zuWapI4RM61zwTU1yT3ND9NIDMsL2Afjw12yR1UEFS3a
S9kGCULuGTpxP97ll2/VJ4/plwdgSbrf89QCzRlccTYgpn2nthW9FrYVYbbLW9dH
l/2qCuCcBausperxIMoJ3quK/hzby0gJxp+1xiuM6J8WCL0a07sKiAd1t+YfOLKX
beDk6zJo1ER+QznUxzuJ2nEmDMaugtMC/mnTKEqsFV64Z54i1AvOpCB/urYU6Mxx
7Aw1VfuaxnFoI4h/Ib/AuzKDWozgQXVnpy9c5KqY5M27TWIw21z3ptExI5E0nFI =+jSf
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 18/06/2011 10:00, JKB a écrit :
Le rapport avec la choucroute ? Et si je préfère Netbeans ?



Netbeans s'intègre très bien aussi

Et si au
contraire je suis un vimiste tendance fanatique ?



Pas de soucis non plus, c'est ce que j'utilise sur les serveurs sans X

Un langage est bon
ou mauvais indépendamment de l'IDE utilisée. S'il faut un IDE, il y
a déjà AMHA un problème.



L'IDE n'est pas obligatoire, il n'est là que pour aider à aller vite
(complétion automatique, intégration de Maven…)

Pas seulement au démarrage. Avec java (et tous les trucs objets), il
te faut un architecte du début à la fin. Mon expérience de vieux con
me dit que :
1/ commencer un projet en fonctionnel est très dur, mais plus on
arrive à la fin et plus c'est facile ;
2/ terminer un projet en objet est très dur, plus on arrive à la fin
et plus les conneries du début entravent le développement.




J'ai jamais eu aucun de ce genre de soucis en dev Java.
Et une fois l'architecture (standard donc qui se retrouve sur chaque
projet ensuite) bien entrée dans la tête des devs (y compris débutant),
ça roule généralement tout seul.
Dans ma boîte, la formation aux outils Java est estimée à 3 semaines,
après quoi ils sont autonomes sur TOUS les projets Java.
Et la formation est « productive » au sens où elle a lieu sur de vrais
projets en cours, donc sans perte de temps, et avec des exemples
concrets d'application.

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/JkrAAoJEK8zQvxDY4P9JeQH/RJE/IQI6CbTb7FbqsTipcAq
gsLonjmlUXKywOw7vnOXki0UsGQeSzaE9ZFAn86WcpWxQyjiFthqTHJMPdn2lzAy
1C44F3OJSJLdznsI3AfXIXNLKCWYKYLC3AMzTGCmQhqxJauGqW0RALoA411AcLZO
DD+RWE7oBGMy7x3sHDkgBha3U8sF21Zb9Ttb9UR8qZyo6mwnGItyigpDc8i39RuI
oKhOUHSxuyzrNsLPp2hY9dKyuKXKRuLWzwZ4lQBjqEAjiCKK7dy16B5HrcGMXaZn
FTKGiVZ730qcx7EEWoUzaVLgIdbdhmpvt7iGFKivtzU3nUq2RLtzCIJ9pIKJ8x0 ì8S
-----END PGP SIGNATURE-----
Avatar
JKB
Le Sat, 18 Jun 2011 13:58:34 +0200,
Aéris écrivait :

Le 18/06/2011 09:53, JKB a écrit :
Certes, je parle de développement objet en général. Pour avoir bien
réfléchi au problème, je crois de plus en plus que le concept objet
a été conçu pour avoir sur le marché des tas de développeurs
médiocres capables de faire des applications rapidement, le concept
d'objet étant un garde-fou.



Inventé non, mais mal maîtrisé je +1
Mais je persiste qu'un dev non compétent fera plus de connerie avec du C
et du C⁺⁺ (ne serait-ce que .h croisé ou gestion de la mémoire) qu'avec
du Java.



C'est très exactement ce que je te dis. On trouve aujourd'hui des
dévs Java qui seraient incapables de commencer le moindre projet en
C ou en C++. Ce langage cristalise les mauvais devs parce qu'ils
arrivent toujours à faire un truc qui marchotte.

Certainement. Sauf que depuis quelque temps, je trouve que les
développeurs qui codent en objet (et qui n'ont jamais vu que ça)
sont des branques et ne conçoivent pas correctement leurs soft.
Rajouter un bout de code dedans est trop souvent une gageure.



Dans un code mal conçu, on ne s'en sortira pas effectivement.

Déjà fait, et qui plus est assez modulaire pour être réutilisable.



J'ai pas dis que c'était impossible, juste que le ratio (temps passé +
taille du code) / (modularité + évolutivité) est largement meilleur en Java.



Ça reste à prouver. Pour ma part, je suis convaincu du contraire
parce qu'un code à interface fonctionnelle sera réutilisable
beaucoup plus facilement. Si la mise au point est plus longue, sa
durée de vie sera aussi supérieure. Je n'ai encore jamais vu un code
java réutilisé plusieurs années après sa conception initiale.
Généralement, les projets repartent presque d'une feuille blanche et
le code ancien n'est pas réutilisé.

Java, ce serait intéressant s'il n'y avait pas obligatoirement de
l'objet. C'est pour cela que le C++ lui sera toujours supérieur. En
C++, tu peux parfaitement faire de la programmation fonctionnelle
(qui est amha largement supérieure lorsqu'elle est correctement
faite à la programmation objet).



La POO apporte quand même des notions extrèmement utiles comme
l'héritage et le polymorphisme.



Ouaips. L'héritage pour que ça deviennent un goufre à mémoire ou à
ressource, pour que les classes soient constellées de fonctions
virtuelles qui ne servent qu'à la compilation et qui ne font rien.
Quant au polymorphisme, j'ai toujours préféré la généricité façon C,
avec des unions, des structs et des void *.

Sans cela, tu vas devoir passer des heures et allonger ton code d'autant
pour parvenir au même résultat…

Foo {doIt() { code1 } }
Bar : Foo { doIt() { code2 } }
List<Foo> list = { new Foo(), new Bar() }
for ( Foo foo : list ) foo.doIt()

Rien que cela en programmation fonctionnel, c'est une usine-à-gaz
immonde, puisque la fonction « doIt » va se transformer en une platrée
de if en cascade et prendre un gros « object » en paramètre, afin de
gérer le comportement alternatif en fonction du « type »…



Ce n'est certainement pas plus immonde que ce qui est écrit plus
haut. En tout cas, ça n'est certainement pas plus compliqué et ça se
fait avec quelques macros en C.

En Java, c'est beaucoup plus
difficile.



Au pire rien ne t'empèche de prendre les classes pour des namespaces et
de faire uniquement des méthodes statiques hein =)



En Java, peut-être. En C++, certainement pas, parce que
l'utilisation de classes et de méthodes statiques implique un
certain nombre de conséquences.

Quant à gérer efficacement les ressources comme la
mémoire ou les fils d'exécution, Java ne sait carrément pas faire.



Ça c'est un problème de développeur, pas du langage.
Tu peux très bien gérer ça très proprement.



Non. Je suis convaincu que les types qui développent boost sont très
bons. Ce n'est pas pour cela que ce n'est pas un goufre à mémoire.
Quand tu veux faire quelque chose de générique, avec des classes qui
héritent les unes des autres, tu te retrouves toujours à gâcher de
la mémoire.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr