Le seul langage à ma connaissance qui
offre un support complet pour la programmation par contrats est Eiffel,
et si tu veux en savoir plus à ce sujet je t'invite à lire Bertrand
Meyer - "Object-Oriented Software Construction" (évidemment, les
exemples sont en Eiffel).
Au delà de la programmation par contrat c'est un excellent bouquin sur
Le seul langage à ma connaissance qui
offre un support complet pour la programmation par contrats est Eiffel,
et si tu veux en savoir plus à ce sujet je t'invite à lire Bertrand
Meyer - "Object-Oriented Software Construction" (évidemment, les
exemples sont en Eiffel).
Au delà de la programmation par contrat c'est un excellent bouquin sur
Le seul langage à ma connaissance qui
offre un support complet pour la programmation par contrats est Eiffel,
et si tu veux en savoir plus à ce sujet je t'invite à lire Bertrand
Meyer - "Object-Oriented Software Construction" (évidemment, les
exemples sont en Eiffel).
Au delà de la programmation par contrat c'est un excellent bouquin sur
Endymion wrote:wrote in message
news:...- En C++, on définit beaucoup de types avec une sémantique de
valeur : quand on déclare une variable de type T, c'est
réelement de la place d'un T qui est alloué par le compilateur ;
il n'y a pas d'histoire de faire des new.
"Il n'y a pas d'histoire de new" : tu veux dire qu'on ne peut pas
caster un champ pour qu'il change de type ? ou que la création d'un
objet ne s'écrie pas par Objet o = new Objet(); ?
non, ça s'écrit simplement Objet o; (comme tu déclares un int ou un
float). Et tu peux bien sûr écrire Objet *o=new Objet(); pour avoir un
objet avec identité.
- En C++, on distingue en général entre les erreurs à traiter
localement (indiquer par des valeurs de retour d'une fonction),
les erreurs à traiter globalement (les exceptions), et les
erreurs qui ne doivent en aucun cas se produire, et où il faut
avorter (les échecs d'assertion). Java traite tout par des
exceptions, ce qui le rend extrèmement difficile, sinon
impossible, à écrire un programme qui est réelement correct --
pour pouvoir se comporter d'une façon correcte lors d'une
exception, il faut qu'il y a certaines opérations qui ne peuvent
pas lever une exception. Or, en Java, même des chose comme une
erreur dans la machine virtuelle donne lieu à une exception.
Je ne compremd pas l'importance de la différenciation : si tu mets
dans ton exception un catch{System.exit(0);}, le programme quitte
s'il rencontre cette erreur.
Si j'ai bien retenu ce qui a été dit lors de ma dernière discussion
avec James sur ce sujet, il ressort qu'il est parfois pire de lever
une exception (qui exécutera un certain nombre de destructeurs et
d'opérations sur la pile, pouvant créer des dégats importants) que
d'arrêter tout brutalement. Et en l'occurrence, comme tu ne sais pas
vraiment quand est-ce que ta machine virtuelle peut avoir une erreur
(ça peut dépendre de beaucoup de choses, y compris un problème
matériel), il est très imprudent de lever une exception qui peut
provoquer des dégats importants plutôt que de faire un arrêt brutal,
beaucoup moins dangereux.
- Java pose des problèmes pour la programmation par contrat. En
C++, c'est plutôt l'exception d'avoir une fonction virtuelle
publique -- la plupart en sont privée. En Java, on ne peut pas
déclarer une fonction privée virtuelle. Du coup, c'est
extrèmement difficile à forcer que tous les appels de la
fonction passent par une fonction non-virtuelle (final, en Java)
dans la classe de base ; fonction qui vérifie que le contrat est
maintenu.
Je suppose que la programmation par contrat consiste à créer une
classe abstraite avec des méthodes abstraites, ce qui force tous
ceux qui doivent créer des sous-classes de cette classe à définir un
certain nombre de méthodes.
Non. Ca consiste à définir dans ta classe de base toutes les
préconditions, postconditions, invariants que doit respecter ta classe
et chacune de ses méthodes (et par conséquent chacune de ses classes
dérivées).
En c++, il n'y a aucun mécanisme natif pour gérer cela, mais des
styles d'écriture qui le permettent (de manière peu élégante à mon
goût, le résultat est moyen (AMHA, il y'a certaines choses que je n'ai
jamais réussi à faire, mais peut-être que ça vient plus de mon
incompétence :) )).
Endymion wrote:
kanze@gabi-soft.fr wrote in message
news:<d6652001.0307250505.2aa2a95@posting.google.com>...
- En C++, on définit beaucoup de types avec une sémantique de
valeur : quand on déclare une variable de type T, c'est
réelement de la place d'un T qui est alloué par le compilateur ;
il n'y a pas d'histoire de faire des new.
"Il n'y a pas d'histoire de new" : tu veux dire qu'on ne peut pas
caster un champ pour qu'il change de type ? ou que la création d'un
objet ne s'écrie pas par Objet o = new Objet(); ?
non, ça s'écrit simplement Objet o; (comme tu déclares un int ou un
float). Et tu peux bien sûr écrire Objet *o=new Objet(); pour avoir un
objet avec identité.
- En C++, on distingue en général entre les erreurs à traiter
localement (indiquer par des valeurs de retour d'une fonction),
les erreurs à traiter globalement (les exceptions), et les
erreurs qui ne doivent en aucun cas se produire, et où il faut
avorter (les échecs d'assertion). Java traite tout par des
exceptions, ce qui le rend extrèmement difficile, sinon
impossible, à écrire un programme qui est réelement correct --
pour pouvoir se comporter d'une façon correcte lors d'une
exception, il faut qu'il y a certaines opérations qui ne peuvent
pas lever une exception. Or, en Java, même des chose comme une
erreur dans la machine virtuelle donne lieu à une exception.
Je ne compremd pas l'importance de la différenciation : si tu mets
dans ton exception un catch{System.exit(0);}, le programme quitte
s'il rencontre cette erreur.
Si j'ai bien retenu ce qui a été dit lors de ma dernière discussion
avec James sur ce sujet, il ressort qu'il est parfois pire de lever
une exception (qui exécutera un certain nombre de destructeurs et
d'opérations sur la pile, pouvant créer des dégats importants) que
d'arrêter tout brutalement. Et en l'occurrence, comme tu ne sais pas
vraiment quand est-ce que ta machine virtuelle peut avoir une erreur
(ça peut dépendre de beaucoup de choses, y compris un problème
matériel), il est très imprudent de lever une exception qui peut
provoquer des dégats importants plutôt que de faire un arrêt brutal,
beaucoup moins dangereux.
- Java pose des problèmes pour la programmation par contrat. En
C++, c'est plutôt l'exception d'avoir une fonction virtuelle
publique -- la plupart en sont privée. En Java, on ne peut pas
déclarer une fonction privée virtuelle. Du coup, c'est
extrèmement difficile à forcer que tous les appels de la
fonction passent par une fonction non-virtuelle (final, en Java)
dans la classe de base ; fonction qui vérifie que le contrat est
maintenu.
Je suppose que la programmation par contrat consiste à créer une
classe abstraite avec des méthodes abstraites, ce qui force tous
ceux qui doivent créer des sous-classes de cette classe à définir un
certain nombre de méthodes.
Non. Ca consiste à définir dans ta classe de base toutes les
préconditions, postconditions, invariants que doit respecter ta classe
et chacune de ses méthodes (et par conséquent chacune de ses classes
dérivées).
En c++, il n'y a aucun mécanisme natif pour gérer cela, mais des
styles d'écriture qui le permettent (de manière peu élégante à mon
goût, le résultat est moyen (AMHA, il y'a certaines choses que je n'ai
jamais réussi à faire, mais peut-être que ça vient plus de mon
incompétence :) )).
Endymion wrote:wrote in message
news:...- En C++, on définit beaucoup de types avec une sémantique de
valeur : quand on déclare une variable de type T, c'est
réelement de la place d'un T qui est alloué par le compilateur ;
il n'y a pas d'histoire de faire des new.
"Il n'y a pas d'histoire de new" : tu veux dire qu'on ne peut pas
caster un champ pour qu'il change de type ? ou que la création d'un
objet ne s'écrie pas par Objet o = new Objet(); ?
non, ça s'écrit simplement Objet o; (comme tu déclares un int ou un
float). Et tu peux bien sûr écrire Objet *o=new Objet(); pour avoir un
objet avec identité.
- En C++, on distingue en général entre les erreurs à traiter
localement (indiquer par des valeurs de retour d'une fonction),
les erreurs à traiter globalement (les exceptions), et les
erreurs qui ne doivent en aucun cas se produire, et où il faut
avorter (les échecs d'assertion). Java traite tout par des
exceptions, ce qui le rend extrèmement difficile, sinon
impossible, à écrire un programme qui est réelement correct --
pour pouvoir se comporter d'une façon correcte lors d'une
exception, il faut qu'il y a certaines opérations qui ne peuvent
pas lever une exception. Or, en Java, même des chose comme une
erreur dans la machine virtuelle donne lieu à une exception.
Je ne compremd pas l'importance de la différenciation : si tu mets
dans ton exception un catch{System.exit(0);}, le programme quitte
s'il rencontre cette erreur.
Si j'ai bien retenu ce qui a été dit lors de ma dernière discussion
avec James sur ce sujet, il ressort qu'il est parfois pire de lever
une exception (qui exécutera un certain nombre de destructeurs et
d'opérations sur la pile, pouvant créer des dégats importants) que
d'arrêter tout brutalement. Et en l'occurrence, comme tu ne sais pas
vraiment quand est-ce que ta machine virtuelle peut avoir une erreur
(ça peut dépendre de beaucoup de choses, y compris un problème
matériel), il est très imprudent de lever une exception qui peut
provoquer des dégats importants plutôt que de faire un arrêt brutal,
beaucoup moins dangereux.
- Java pose des problèmes pour la programmation par contrat. En
C++, c'est plutôt l'exception d'avoir une fonction virtuelle
publique -- la plupart en sont privée. En Java, on ne peut pas
déclarer une fonction privée virtuelle. Du coup, c'est
extrèmement difficile à forcer que tous les appels de la
fonction passent par une fonction non-virtuelle (final, en Java)
dans la classe de base ; fonction qui vérifie que le contrat est
maintenu.
Je suppose que la programmation par contrat consiste à créer une
classe abstraite avec des méthodes abstraites, ce qui force tous
ceux qui doivent créer des sous-classes de cette classe à définir un
certain nombre de méthodes.
Non. Ca consiste à définir dans ta classe de base toutes les
préconditions, postconditions, invariants que doit respecter ta classe
et chacune de ses méthodes (et par conséquent chacune de ses classes
dérivées).
En c++, il n'y a aucun mécanisme natif pour gérer cela, mais des
styles d'écriture qui le permettent (de manière peu élégante à mon
goût, le résultat est moyen (AMHA, il y'a certaines choses que je n'ai
jamais réussi à faire, mais peut-être que ça vient plus de mon
incompétence :) )).
wrote in message news:...Ça dépend de ce qu'on veut faire. Si on a un style de programmation
résoluement OO, ils se ressemblent pour certaines choses. Sinon : C++
permet d'autres idiomes aussi, ce qui n'est pas le cas de Java.
Je ne sais pas ce qu'est le style OO. Du coup, je ne suis pas sûr de
connaître différents styles de programmation.
- En C++, on définit beaucoup de types avec une sémantique de valeur :
quand on déclare une variable de type T, c'est réelement de la place
d'un T qui est alloué par le compilateur ; il n'y a pas d'histoire
de faire des new.
"Il n'y a pas d'histoire de new" : tu veux dire qu'on ne peut pas
caster un champ pour qu'il change de type ? ou que la création d'un
objet ne s'écrie pas par Objet o = new Objet(); ?
- En C++, on utilise des destructeurs pour faire le menage. En Java,
les bloc de finally. La différence est, encore une fois,
fondamental. En C++, c'est la classe qui gère la ressource ou la
cohérence qui impose l'execution du nettoyage ; en Java, c'est
l'utilisateur de cette classe qui doit le faire explicitement -- et
je n'ai jamais vu un programme Java où il n'en manquait pas de bloc
de finally.
Ma question est hors sujet (je devrais la poser sur .lang.java) mais
comme tu en parles : qu'est-ce qu'un bloc finally ? (question qui
prouve que je programme sans faire le ménage comme tu le fais
remarquer ci-dessus)
try
- En C++, on distingue en général entre les erreurs à traiter
localement (indiquer par des valeurs de retour d'une fonction), les
erreurs à traiter globalement (les exceptions), et les erreurs qui
ne doivent en aucun cas se produire, et où il faut avorter (les
échecs d'assertion). Java traite tout par des exceptions, ce qui le
rend extrèmement difficile, sinon impossible, à écrire un programme
qui est réelement correct -- pour pouvoir se comporter d'une façon
correcte lors d'une exception, il faut qu'il y a certaines
opérations qui ne peuvent pas lever une exception. Or, en Java, même
des chose comme une erreur dans la machine virtuelle donne lieu à
une exception.
Je ne compremd pas l'importance de la différenciation : si tu mets
dans ton exception un catch{System.exit(0);}, le programme quitte s'il
rencontre cette erreur.
C'est encore un cas de programmation auquel tu n'as pas du être
- Java pose des problèmes pour la programmation par contrat. En C++,
c'est plutôt l'exception d'avoir une fonction virtuelle publique --
la plupart en sont privée. En Java, on ne peut pas déclarer une
fonction privée virtuelle. Du coup, c'est extrèmement difficile à
forcer que tous les appels de la fonction passent par une fonction
non-virtuelle (final, en Java) dans la classe de base ; fonction qui
vérifie que le contrat est maintenu.
Je suppose que la programmation par contrat consiste à créer une
classe abstraite avec des méthodes abstraites, ce qui force tous ceux
qui doivent créer des sous-classes de cette classe à définir un
certain nombre de méthodes.
Pas exactement l'idée c'est plutôt de s'assurer que le contrat de
- Java, au moins dans les implémentations que je connais, impose un
certain dynamisme, qui n'est pas toujours souhaitable. En C++, si tu
veux, tu peux découper ton programme en objets dynamiques (DLL's
sous Windows, objets partagés sous Unix, mais dans les deux cas, ce
qui fait la différence, c'est que l'édition de liens se fait lors de
l'execution.) Or, globalement, un objet dynamique n'est qu'une chose
de plus que tu ne contrôles pas complètement lors de l'execution. On
les évite autant que possible, à cause des erreurs qui en
proviennent.
C'est une approche très industrielle de la chose. Disons que selon les
Il n'y a donc pas d'équivalents Java des dlls ?
En fait en java tout ce comporte un peu comme des DLL dans la mesure
kanze@gabi-soft.fr wrote in message news:<d6652001.0307250505.2aa2a95@posting.google.com>...
Ça dépend de ce qu'on veut faire. Si on a un style de programmation
résoluement OO, ils se ressemblent pour certaines choses. Sinon : C++
permet d'autres idiomes aussi, ce qui n'est pas le cas de Java.
Je ne sais pas ce qu'est le style OO. Du coup, je ne suis pas sûr de
connaître différents styles de programmation.
- En C++, on définit beaucoup de types avec une sémantique de valeur :
quand on déclare une variable de type T, c'est réelement de la place
d'un T qui est alloué par le compilateur ; il n'y a pas d'histoire
de faire des new.
"Il n'y a pas d'histoire de new" : tu veux dire qu'on ne peut pas
caster un champ pour qu'il change de type ? ou que la création d'un
objet ne s'écrie pas par Objet o = new Objet(); ?
- En C++, on utilise des destructeurs pour faire le menage. En Java,
les bloc de finally. La différence est, encore une fois,
fondamental. En C++, c'est la classe qui gère la ressource ou la
cohérence qui impose l'execution du nettoyage ; en Java, c'est
l'utilisateur de cette classe qui doit le faire explicitement -- et
je n'ai jamais vu un programme Java où il n'en manquait pas de bloc
de finally.
Ma question est hors sujet (je devrais la poser sur .lang.java) mais
comme tu en parles : qu'est-ce qu'un bloc finally ? (question qui
prouve que je programme sans faire le ménage comme tu le fais
remarquer ci-dessus)
try
- En C++, on distingue en général entre les erreurs à traiter
localement (indiquer par des valeurs de retour d'une fonction), les
erreurs à traiter globalement (les exceptions), et les erreurs qui
ne doivent en aucun cas se produire, et où il faut avorter (les
échecs d'assertion). Java traite tout par des exceptions, ce qui le
rend extrèmement difficile, sinon impossible, à écrire un programme
qui est réelement correct -- pour pouvoir se comporter d'une façon
correcte lors d'une exception, il faut qu'il y a certaines
opérations qui ne peuvent pas lever une exception. Or, en Java, même
des chose comme une erreur dans la machine virtuelle donne lieu à
une exception.
Je ne compremd pas l'importance de la différenciation : si tu mets
dans ton exception un catch{System.exit(0);}, le programme quitte s'il
rencontre cette erreur.
C'est encore un cas de programmation auquel tu n'as pas du être
- Java pose des problèmes pour la programmation par contrat. En C++,
c'est plutôt l'exception d'avoir une fonction virtuelle publique --
la plupart en sont privée. En Java, on ne peut pas déclarer une
fonction privée virtuelle. Du coup, c'est extrèmement difficile à
forcer que tous les appels de la fonction passent par une fonction
non-virtuelle (final, en Java) dans la classe de base ; fonction qui
vérifie que le contrat est maintenu.
Je suppose que la programmation par contrat consiste à créer une
classe abstraite avec des méthodes abstraites, ce qui force tous ceux
qui doivent créer des sous-classes de cette classe à définir un
certain nombre de méthodes.
Pas exactement l'idée c'est plutôt de s'assurer que le contrat de
- Java, au moins dans les implémentations que je connais, impose un
certain dynamisme, qui n'est pas toujours souhaitable. En C++, si tu
veux, tu peux découper ton programme en objets dynamiques (DLL's
sous Windows, objets partagés sous Unix, mais dans les deux cas, ce
qui fait la différence, c'est que l'édition de liens se fait lors de
l'execution.) Or, globalement, un objet dynamique n'est qu'une chose
de plus que tu ne contrôles pas complètement lors de l'execution. On
les évite autant que possible, à cause des erreurs qui en
proviennent.
C'est une approche très industrielle de la chose. Disons que selon les
Il n'y a donc pas d'équivalents Java des dlls ?
En fait en java tout ce comporte un peu comme des DLL dans la mesure
wrote in message news:...Ça dépend de ce qu'on veut faire. Si on a un style de programmation
résoluement OO, ils se ressemblent pour certaines choses. Sinon : C++
permet d'autres idiomes aussi, ce qui n'est pas le cas de Java.
Je ne sais pas ce qu'est le style OO. Du coup, je ne suis pas sûr de
connaître différents styles de programmation.
- En C++, on définit beaucoup de types avec une sémantique de valeur :
quand on déclare une variable de type T, c'est réelement de la place
d'un T qui est alloué par le compilateur ; il n'y a pas d'histoire
de faire des new.
"Il n'y a pas d'histoire de new" : tu veux dire qu'on ne peut pas
caster un champ pour qu'il change de type ? ou que la création d'un
objet ne s'écrie pas par Objet o = new Objet(); ?
- En C++, on utilise des destructeurs pour faire le menage. En Java,
les bloc de finally. La différence est, encore une fois,
fondamental. En C++, c'est la classe qui gère la ressource ou la
cohérence qui impose l'execution du nettoyage ; en Java, c'est
l'utilisateur de cette classe qui doit le faire explicitement -- et
je n'ai jamais vu un programme Java où il n'en manquait pas de bloc
de finally.
Ma question est hors sujet (je devrais la poser sur .lang.java) mais
comme tu en parles : qu'est-ce qu'un bloc finally ? (question qui
prouve que je programme sans faire le ménage comme tu le fais
remarquer ci-dessus)
try
- En C++, on distingue en général entre les erreurs à traiter
localement (indiquer par des valeurs de retour d'une fonction), les
erreurs à traiter globalement (les exceptions), et les erreurs qui
ne doivent en aucun cas se produire, et où il faut avorter (les
échecs d'assertion). Java traite tout par des exceptions, ce qui le
rend extrèmement difficile, sinon impossible, à écrire un programme
qui est réelement correct -- pour pouvoir se comporter d'une façon
correcte lors d'une exception, il faut qu'il y a certaines
opérations qui ne peuvent pas lever une exception. Or, en Java, même
des chose comme une erreur dans la machine virtuelle donne lieu à
une exception.
Je ne compremd pas l'importance de la différenciation : si tu mets
dans ton exception un catch{System.exit(0);}, le programme quitte s'il
rencontre cette erreur.
C'est encore un cas de programmation auquel tu n'as pas du être
- Java pose des problèmes pour la programmation par contrat. En C++,
c'est plutôt l'exception d'avoir une fonction virtuelle publique --
la plupart en sont privée. En Java, on ne peut pas déclarer une
fonction privée virtuelle. Du coup, c'est extrèmement difficile à
forcer que tous les appels de la fonction passent par une fonction
non-virtuelle (final, en Java) dans la classe de base ; fonction qui
vérifie que le contrat est maintenu.
Je suppose que la programmation par contrat consiste à créer une
classe abstraite avec des méthodes abstraites, ce qui force tous ceux
qui doivent créer des sous-classes de cette classe à définir un
certain nombre de méthodes.
Pas exactement l'idée c'est plutôt de s'assurer que le contrat de
- Java, au moins dans les implémentations que je connais, impose un
certain dynamisme, qui n'est pas toujours souhaitable. En C++, si tu
veux, tu peux découper ton programme en objets dynamiques (DLL's
sous Windows, objets partagés sous Unix, mais dans les deux cas, ce
qui fait la différence, c'est que l'édition de liens se fait lors de
l'execution.) Or, globalement, un objet dynamique n'est qu'une chose
de plus que tu ne contrôles pas complètement lors de l'execution. On
les évite autant que possible, à cause des erreurs qui en
proviennent.
C'est une approche très industrielle de la chose. Disons que selon les
Il n'y a donc pas d'équivalents Java des dlls ?
En fait en java tout ce comporte un peu comme des DLL dans la mesure
(Endymion) wrote in message
news:...Vu d'un néophyte (pas débutant, mais pas très bon), quelles
différences y a-t-il entre Java et C++, mis à part quelques petites
particularités syntaxiques (syntaxe de création d'un tableau,
l'utilisation de destructeur d'objet, l'initialisation par défaut des
champs) ? Est-ce que l'héritage multiple change vraiment quelque chose
?
Ça dépend de ce qu'on veut faire. Si on a un style de programmation
résoluement OO, ils se ressemblent pour certaines choses. Sinon : C++
permet d'autres idiomes aussi, ce qui n'est pas le cas de Java.
La manque de l'héritage multiple gène parfois, mais dans l'ensemble,
c'est une différence mineur -- en C++, je l'utilise, mais pas dans
chaque hièrarchie non plus. Du point de vue de l'utilisateur, je vois
surtout les différences suivantes :
- En C++, on définit beaucoup de types avec une sémantique de valeur :
quand on déclare une variable de type T, c'est réelement de la place
d'un T qui est alloué par le compilateur ; il n'y a pas d'histoire
de faire des new. Pour les classes à sémantique de valeur (comme une
chaîne de caractères, des complexes, etc.), c'est beaucoup plus
simple (mais pas forcement trivial non plus) à faire correctement en
C++.
En Java, il faut déclarer la classe final, et s'assurer qu'aucune
fonction n'en modifie l'état (comme c'est le cas dans
java.lang.String). L'orientation de Java, c'est de privileger les
objets d'entité de l'application.
C'est probablement LA différence fondamentale. Elle est pervasive.
Même quand on utilise un style très OO, il s'avère qu'environ la
moitié des classes représentent des valeurs.
C'est une des différences fondamentales, mais pas forcément la plus
- Bien moins important (sauf quand tu en as besoin) : C++ a du
surcharge des opérateurs, qui permet à émuler un type de base. C'est
un épée à double tranchant -- c'est incroyablement facile à en
abuser (et comme en Java, la bibliothèque standard n'est pas
toujours un bon modèle). Mais supposons que pour des raisons
juridiques, tu sois obligé à tenir des valeurs monétaires en décimal
(c'est généralement le cas), est-ce mieux d'avoir à écrire :
total = prixHorsTax + prixHorsTax * tva ;
comme en C++, ou :
total = prixHorsTax.add( prixHorsTax.mult( tva ) ) ;
comme en Java.
Vite dit:
- Java, au moins dans ces premières versions, n'avait pas de
génériques. Ce qui limiter des prédicats sur le type que pouvait
enforcer le compilateur : en C++, si tu déclare un std::vector, tu
dis au compilateur le type que tu veux y mettre, et le compilateur
l'enforce. En Java, tu écris un commentaire qui dit le type qu'il
doit contenir, et en cas d'erreur, tu as une exception à
l'execution.
Là encore c'est une commodité syntaxique (qui sera incluse dans la
- Java pose des problèmes pour la programmation par contrat. En C++,
c'est plutôt l'exception d'avoir une fonction virtuelle publique --
la plupart en sont privée. En Java, on ne peut pas déclarer une
fonction privée virtuelle.
Euh? Privée virtuelle = protected (sauf que protected est accessible
Du coup, c'est extrèmement difficile à
forcer que tous les appels de la fonction passent par une fonction
non-virtuelle (final, en Java) dans la classe de base ; fonction qui
vérifie que le contrat est maintenu.
public abstract class AbstractTest
- C++ permet la separation de l'implémentation et de l'interface. En
C++, c'est permis de définir des fonctions dans la définition de la
classe, comme on fait en Java, mais on constate très vite que c'est
une mauvaise idée. En Java, on n'a pas le choix. (Le moyen
qu'utilise C++ pour faire cette separation, l'inclusion textuelle,
est probablement le pire qu
En fait on peut très bien le faire en définissant une interface
- Java, au moins dans les implémentations que je connais, impose un
certain dynamisme, qui n'est pas toujours souhaitable. En C++, si tu
veux, tu peux découper ton programme en objets dynamiques (DLL's
sous Windows, objets partagés sous Unix, mais dans les deux cas, ce
qui fait la différence, c'est que l'édition de liens se fait lors de
l'execution.) Or, globalement, un objet dynamique n'est qu'une chose
de plus que tu ne contrôles pas complètement lors de l'execution. On
les évite autant que possible, à cause des erreurs qui en
proviennent.
En faveur de Java, évidemment, ce sont des bibliothèques standard pour à
peu près tout, et dans certains cas, comme les JSP, l'environement
applicatif.Où puis-je trouver un document clair (français ou anglais) qui me
permette de faire la transition (j'ai lu un article disant que C/C++
était plus rapide que Java et nécessitait moins de lignes) ?
Ça dépend de ce que tu fais. Il y a aussi des benchmark qui tournent
plus vite en Java qu'en C++. Dans la plupart des applications, en
revanche, j'imagine que le fait que C++ ait des véritables valeurs,
qu'on peut allouer sur la pile, ou mettre directement dans une
collection, fait que le C++ serait plus rapide.
Effectivement, mais ce gain de performance dépend de la qualité du
Plus important, pour des
applications d'une certaine taille, je trouve qu'on les développe plus
rapidement en C++.
Je n'en suis pas convaincu, mais c'est normal ce genre de chose est
pr.nm@laposte.net (Endymion) wrote in message
news:<4219ae8a.0307242127.6e18880c@posting.google.com>...
Vu d'un néophyte (pas débutant, mais pas très bon), quelles
différences y a-t-il entre Java et C++, mis à part quelques petites
particularités syntaxiques (syntaxe de création d'un tableau,
l'utilisation de destructeur d'objet, l'initialisation par défaut des
champs) ? Est-ce que l'héritage multiple change vraiment quelque chose
?
Ça dépend de ce qu'on veut faire. Si on a un style de programmation
résoluement OO, ils se ressemblent pour certaines choses. Sinon : C++
permet d'autres idiomes aussi, ce qui n'est pas le cas de Java.
La manque de l'héritage multiple gène parfois, mais dans l'ensemble,
c'est une différence mineur -- en C++, je l'utilise, mais pas dans
chaque hièrarchie non plus. Du point de vue de l'utilisateur, je vois
surtout les différences suivantes :
- En C++, on définit beaucoup de types avec une sémantique de valeur :
quand on déclare une variable de type T, c'est réelement de la place
d'un T qui est alloué par le compilateur ; il n'y a pas d'histoire
de faire des new. Pour les classes à sémantique de valeur (comme une
chaîne de caractères, des complexes, etc.), c'est beaucoup plus
simple (mais pas forcement trivial non plus) à faire correctement en
C++.
En Java, il faut déclarer la classe final, et s'assurer qu'aucune
fonction n'en modifie l'état (comme c'est le cas dans
java.lang.String). L'orientation de Java, c'est de privileger les
objets d'entité de l'application.
C'est probablement LA différence fondamentale. Elle est pervasive.
Même quand on utilise un style très OO, il s'avère qu'environ la
moitié des classes représentent des valeurs.
C'est une des différences fondamentales, mais pas forcément la plus
- Bien moins important (sauf quand tu en as besoin) : C++ a du
surcharge des opérateurs, qui permet à émuler un type de base. C'est
un épée à double tranchant -- c'est incroyablement facile à en
abuser (et comme en Java, la bibliothèque standard n'est pas
toujours un bon modèle). Mais supposons que pour des raisons
juridiques, tu sois obligé à tenir des valeurs monétaires en décimal
(c'est généralement le cas), est-ce mieux d'avoir à écrire :
total = prixHorsTax + prixHorsTax * tva ;
comme en C++, ou :
total = prixHorsTax.add( prixHorsTax.mult( tva ) ) ;
comme en Java.
Vite dit:
- Java, au moins dans ces premières versions, n'avait pas de
génériques. Ce qui limiter des prédicats sur le type que pouvait
enforcer le compilateur : en C++, si tu déclare un std::vector, tu
dis au compilateur le type que tu veux y mettre, et le compilateur
l'enforce. En Java, tu écris un commentaire qui dit le type qu'il
doit contenir, et en cas d'erreur, tu as une exception à
l'execution.
Là encore c'est une commodité syntaxique (qui sera incluse dans la
- Java pose des problèmes pour la programmation par contrat. En C++,
c'est plutôt l'exception d'avoir une fonction virtuelle publique --
la plupart en sont privée. En Java, on ne peut pas déclarer une
fonction privée virtuelle.
Euh? Privée virtuelle = protected (sauf que protected est accessible
Du coup, c'est extrèmement difficile à
forcer que tous les appels de la fonction passent par une fonction
non-virtuelle (final, en Java) dans la classe de base ; fonction qui
vérifie que le contrat est maintenu.
public abstract class AbstractTest
- C++ permet la separation de l'implémentation et de l'interface. En
C++, c'est permis de définir des fonctions dans la définition de la
classe, comme on fait en Java, mais on constate très vite que c'est
une mauvaise idée. En Java, on n'a pas le choix. (Le moyen
qu'utilise C++ pour faire cette separation, l'inclusion textuelle,
est probablement le pire qu
En fait on peut très bien le faire en définissant une interface
- Java, au moins dans les implémentations que je connais, impose un
certain dynamisme, qui n'est pas toujours souhaitable. En C++, si tu
veux, tu peux découper ton programme en objets dynamiques (DLL's
sous Windows, objets partagés sous Unix, mais dans les deux cas, ce
qui fait la différence, c'est que l'édition de liens se fait lors de
l'execution.) Or, globalement, un objet dynamique n'est qu'une chose
de plus que tu ne contrôles pas complètement lors de l'execution. On
les évite autant que possible, à cause des erreurs qui en
proviennent.
En faveur de Java, évidemment, ce sont des bibliothèques standard pour à
peu près tout, et dans certains cas, comme les JSP, l'environement
applicatif.
Où puis-je trouver un document clair (français ou anglais) qui me
permette de faire la transition (j'ai lu un article disant que C/C++
était plus rapide que Java et nécessitait moins de lignes) ?
Ça dépend de ce que tu fais. Il y a aussi des benchmark qui tournent
plus vite en Java qu'en C++. Dans la plupart des applications, en
revanche, j'imagine que le fait que C++ ait des véritables valeurs,
qu'on peut allouer sur la pile, ou mettre directement dans une
collection, fait que le C++ serait plus rapide.
Effectivement, mais ce gain de performance dépend de la qualité du
Plus important, pour des
applications d'une certaine taille, je trouve qu'on les développe plus
rapidement en C++.
Je n'en suis pas convaincu, mais c'est normal ce genre de chose est
(Endymion) wrote in message
news:...Vu d'un néophyte (pas débutant, mais pas très bon), quelles
différences y a-t-il entre Java et C++, mis à part quelques petites
particularités syntaxiques (syntaxe de création d'un tableau,
l'utilisation de destructeur d'objet, l'initialisation par défaut des
champs) ? Est-ce que l'héritage multiple change vraiment quelque chose
?
Ça dépend de ce qu'on veut faire. Si on a un style de programmation
résoluement OO, ils se ressemblent pour certaines choses. Sinon : C++
permet d'autres idiomes aussi, ce qui n'est pas le cas de Java.
La manque de l'héritage multiple gène parfois, mais dans l'ensemble,
c'est une différence mineur -- en C++, je l'utilise, mais pas dans
chaque hièrarchie non plus. Du point de vue de l'utilisateur, je vois
surtout les différences suivantes :
- En C++, on définit beaucoup de types avec une sémantique de valeur :
quand on déclare une variable de type T, c'est réelement de la place
d'un T qui est alloué par le compilateur ; il n'y a pas d'histoire
de faire des new. Pour les classes à sémantique de valeur (comme une
chaîne de caractères, des complexes, etc.), c'est beaucoup plus
simple (mais pas forcement trivial non plus) à faire correctement en
C++.
En Java, il faut déclarer la classe final, et s'assurer qu'aucune
fonction n'en modifie l'état (comme c'est le cas dans
java.lang.String). L'orientation de Java, c'est de privileger les
objets d'entité de l'application.
C'est probablement LA différence fondamentale. Elle est pervasive.
Même quand on utilise un style très OO, il s'avère qu'environ la
moitié des classes représentent des valeurs.
C'est une des différences fondamentales, mais pas forcément la plus
- Bien moins important (sauf quand tu en as besoin) : C++ a du
surcharge des opérateurs, qui permet à émuler un type de base. C'est
un épée à double tranchant -- c'est incroyablement facile à en
abuser (et comme en Java, la bibliothèque standard n'est pas
toujours un bon modèle). Mais supposons que pour des raisons
juridiques, tu sois obligé à tenir des valeurs monétaires en décimal
(c'est généralement le cas), est-ce mieux d'avoir à écrire :
total = prixHorsTax + prixHorsTax * tva ;
comme en C++, ou :
total = prixHorsTax.add( prixHorsTax.mult( tva ) ) ;
comme en Java.
Vite dit:
- Java, au moins dans ces premières versions, n'avait pas de
génériques. Ce qui limiter des prédicats sur le type que pouvait
enforcer le compilateur : en C++, si tu déclare un std::vector, tu
dis au compilateur le type que tu veux y mettre, et le compilateur
l'enforce. En Java, tu écris un commentaire qui dit le type qu'il
doit contenir, et en cas d'erreur, tu as une exception à
l'execution.
Là encore c'est une commodité syntaxique (qui sera incluse dans la
- Java pose des problèmes pour la programmation par contrat. En C++,
c'est plutôt l'exception d'avoir une fonction virtuelle publique --
la plupart en sont privée. En Java, on ne peut pas déclarer une
fonction privée virtuelle.
Euh? Privée virtuelle = protected (sauf que protected est accessible
Du coup, c'est extrèmement difficile à
forcer que tous les appels de la fonction passent par une fonction
non-virtuelle (final, en Java) dans la classe de base ; fonction qui
vérifie que le contrat est maintenu.
public abstract class AbstractTest
- C++ permet la separation de l'implémentation et de l'interface. En
C++, c'est permis de définir des fonctions dans la définition de la
classe, comme on fait en Java, mais on constate très vite que c'est
une mauvaise idée. En Java, on n'a pas le choix. (Le moyen
qu'utilise C++ pour faire cette separation, l'inclusion textuelle,
est probablement le pire qu
En fait on peut très bien le faire en définissant une interface
- Java, au moins dans les implémentations que je connais, impose un
certain dynamisme, qui n'est pas toujours souhaitable. En C++, si tu
veux, tu peux découper ton programme en objets dynamiques (DLL's
sous Windows, objets partagés sous Unix, mais dans les deux cas, ce
qui fait la différence, c'est que l'édition de liens se fait lors de
l'execution.) Or, globalement, un objet dynamique n'est qu'une chose
de plus que tu ne contrôles pas complètement lors de l'execution. On
les évite autant que possible, à cause des erreurs qui en
proviennent.
En faveur de Java, évidemment, ce sont des bibliothèques standard pour à
peu près tout, et dans certains cas, comme les JSP, l'environement
applicatif.Où puis-je trouver un document clair (français ou anglais) qui me
permette de faire la transition (j'ai lu un article disant que C/C++
était plus rapide que Java et nécessitait moins de lignes) ?
Ça dépend de ce que tu fais. Il y a aussi des benchmark qui tournent
plus vite en Java qu'en C++. Dans la plupart des applications, en
revanche, j'imagine que le fait que C++ ait des véritables valeurs,
qu'on peut allouer sur la pile, ou mettre directement dans une
collection, fait que le C++ serait plus rapide.
Effectivement, mais ce gain de performance dépend de la qualité du
Plus important, pour des
applications d'une certaine taille, je trouve qu'on les développe plus
rapidement en C++.
Je n'en suis pas convaincu, mais c'est normal ce genre de chose est
- Java pose des problèmes pour la programmation par contrat. En
C++, c'est plutôt l'exception d'avoir une fonction virtuelle
publique --
la plupart en sont privée. En Java, on ne peut pas déclarer une
fonction privée virtuelle.
Euh? Privée virtuelle = protected (sauf que protected est accessible
aussi depuis le package, mais en principe on n'authorise personne de
non fiable à écrire dans son package).Du coup, c'est extrèmement difficile à
forcer que tous les appels de la fonction passent par une
fonction non-virtuelle (final, en Java) dans la classe de base ;
fonction qui vérifie que le contrat est maintenu.
public abstract class AbstractTest
{
public final void faire_truc()
{
pre_condition();
faire_vraiment_truc();
post_condition();
}
private void pre_condition();
private void post_condition();
protected abstract void faire_vraiment_truc();
}
- Java pose des problèmes pour la programmation par contrat. En
C++, c'est plutôt l'exception d'avoir une fonction virtuelle
publique --
la plupart en sont privée. En Java, on ne peut pas déclarer une
fonction privée virtuelle.
Euh? Privée virtuelle = protected (sauf que protected est accessible
aussi depuis le package, mais en principe on n'authorise personne de
non fiable à écrire dans son package).
Du coup, c'est extrèmement difficile à
forcer que tous les appels de la fonction passent par une
fonction non-virtuelle (final, en Java) dans la classe de base ;
fonction qui vérifie que le contrat est maintenu.
public abstract class AbstractTest
{
public final void faire_truc()
{
pre_condition();
faire_vraiment_truc();
post_condition();
}
private void pre_condition();
private void post_condition();
protected abstract void faire_vraiment_truc();
}
- Java pose des problèmes pour la programmation par contrat. En
C++, c'est plutôt l'exception d'avoir une fonction virtuelle
publique --
la plupart en sont privée. En Java, on ne peut pas déclarer une
fonction privée virtuelle.
Euh? Privée virtuelle = protected (sauf que protected est accessible
aussi depuis le package, mais en principe on n'authorise personne de
non fiable à écrire dans son package).Du coup, c'est extrèmement difficile à
forcer que tous les appels de la fonction passent par une
fonction non-virtuelle (final, en Java) dans la classe de base ;
fonction qui vérifie que le contrat est maintenu.
public abstract class AbstractTest
{
public final void faire_truc()
{
pre_condition();
faire_vraiment_truc();
post_condition();
}
private void pre_condition();
private void post_condition();
protected abstract void faire_vraiment_truc();
}
Vu d'un néophyte (pas débutant, mais pas très bon), quelles
différences y a-t-il entre Java et C++, mis à part quelques petites
particularités syntaxiques (syntaxe de création d'un tableau,
l'utilisation de destructeur d'objet, l'initialisation par défaut des
champs) ?
C'est l'arbre qui cache la forêt, ces différences syntaxiques sont la
Est-ce que l'héritage multiple change vraiment quelque chose
?
D'abord en java tu peux faire de l'héritage multiple d'interfaces (une
(j'ai lu un article disant que C/C++
était plus rapide que Java
Dans l'absolu, c'est vrai.
et nécessitait moins de lignes) ?
Vu d'un néophyte (pas débutant, mais pas très bon), quelles
différences y a-t-il entre Java et C++, mis à part quelques petites
particularités syntaxiques (syntaxe de création d'un tableau,
l'utilisation de destructeur d'objet, l'initialisation par défaut des
champs) ?
C'est l'arbre qui cache la forêt, ces différences syntaxiques sont la
Est-ce que l'héritage multiple change vraiment quelque chose
?
D'abord en java tu peux faire de l'héritage multiple d'interfaces (une
(j'ai lu un article disant que C/C++
était plus rapide que Java
Dans l'absolu, c'est vrai.
et nécessitait moins de lignes) ?
Vu d'un néophyte (pas débutant, mais pas très bon), quelles
différences y a-t-il entre Java et C++, mis à part quelques petites
particularités syntaxiques (syntaxe de création d'un tableau,
l'utilisation de destructeur d'objet, l'initialisation par défaut des
champs) ?
C'est l'arbre qui cache la forêt, ces différences syntaxiques sont la
Est-ce que l'héritage multiple change vraiment quelque chose
?
D'abord en java tu peux faire de l'héritage multiple d'interfaces (une
(j'ai lu un article disant que C/C++
était plus rapide que Java
Dans l'absolu, c'est vrai.
et nécessitait moins de lignes) ?
James Kanze wrote:Sans parler de l'aspect risque. Quand j'étais à la Dresdner
Bank, ils ont décidé de réécrire toute une application en
Java, parce que la bibliothèque de fenêtrage sur laquelle elle
était basée était retirée du marché.
D'ou l'interet de l'open-source...
(Et c'est pourquoi je préfère WxWindows a Qt, trop restrictif a mon gout)
C'est bien joli l'open source, mais honnêtement peu d'entreprises
James Kanze wrote:
Sans parler de l'aspect risque. Quand j'étais à la Dresdner
Bank, ils ont décidé de réécrire toute une application en
Java, parce que la bibliothèque de fenêtrage sur laquelle elle
était basée était retirée du marché.
D'ou l'interet de l'open-source...
(Et c'est pourquoi je préfère WxWindows a Qt, trop restrictif a mon gout)
C'est bien joli l'open source, mais honnêtement peu d'entreprises
James Kanze wrote:Sans parler de l'aspect risque. Quand j'étais à la Dresdner
Bank, ils ont décidé de réécrire toute une application en
Java, parce que la bibliothèque de fenêtrage sur laquelle elle
était basée était retirée du marché.
D'ou l'interet de l'open-source...
(Et c'est pourquoi je préfère WxWindows a Qt, trop restrictif a mon gout)
C'est bien joli l'open source, mais honnêtement peu d'entreprises
Certes, et je crois qu'un des arguments valables contre la
normalisation d'une interface graphique est (ou au moins aurait
été lors de la dernière normalisation) que la technologie
n'est pas encore stable -- que nous ne savons pas trop ce qu'il faut
normaliser. Une norme se doit d'être stable, et il ne faut pas
oublier que si Swing n'est pas trop mal, il est aussi la troisième
version de l'interface graphique de Java.
Euh? Tu crois vraiment qu'un jour on sera vraiment plus fixé
Certes, et je crois qu'un des arguments valables contre la
normalisation d'une interface graphique est (ou au moins aurait
été lors de la dernière normalisation) que la technologie
n'est pas encore stable -- que nous ne savons pas trop ce qu'il faut
normaliser. Une norme se doit d'être stable, et il ne faut pas
oublier que si Swing n'est pas trop mal, il est aussi la troisième
version de l'interface graphique de Java.
Euh? Tu crois vraiment qu'un jour on sera vraiment plus fixé
Certes, et je crois qu'un des arguments valables contre la
normalisation d'une interface graphique est (ou au moins aurait
été lors de la dernière normalisation) que la technologie
n'est pas encore stable -- que nous ne savons pas trop ce qu'il faut
normaliser. Une norme se doit d'être stable, et il ne faut pas
oublier que si Swing n'est pas trop mal, il est aussi la troisième
version de l'interface graphique de Java.
Euh? Tu crois vraiment qu'un jour on sera vraiment plus fixé
La je ne suis trompé je voulais dire "java c'est tout sauf graphique". Les
bibliotheque graphiques de java ont encore du retard par rapport à ceux de
c++ (trop pour moi)
Tu utilises quoi comme MFC??? Personnelement je trouve que les MFC se
La je ne suis trompé je voulais dire "java c'est tout sauf graphique". Les
bibliotheque graphiques de java ont encore du retard par rapport à ceux de
c++ (trop pour moi)
Tu utilises quoi comme MFC??? Personnelement je trouve que les MFC se
La je ne suis trompé je voulais dire "java c'est tout sauf graphique". Les
bibliotheque graphiques de java ont encore du retard par rapport à ceux de
c++ (trop pour moi)
Tu utilises quoi comme MFC??? Personnelement je trouve que les MFC se
Dany wrote:Voila j'ai pas fait une liste exaustive, je ne t'ai surement pas parlé des
différences techniques, mais c'est comme ça que je le voi.
tu oublies un truc important : Java, ca rame, ca rame, ca n'arrette pas
de ramer...
Le temps de lancer la VM (et encore ça à bien évolué) et de faire la
Java gere un garbage collector, souvent buggé dès que tu veux faire de
la gestion memoire poussée (ton appli se met a consomer 100 Mo alors que
tu a aloué puis supprimé 10 Mo 10 fois, hum... et hop, d'un coup ton
appli freeze le temps de purger, et tu ne peux rien y faire...)
Soit tu es Marseillais, soit tu es très malchanceux, soit tu
Java, dès que tu sors des componsants classique a afficher (pour
dessiner par exemple), suivant le JDK installé (meme des versions
differentes d'une meme boite), ben ca s'affiche compeletement
differement, une horreur.
Avec le look and feel portable (Metal), non. A l'exception de quelques
On est loin d'un wxWindows ou Qt...
Bref Java sert pour faire du code a afficher par page web (intranet,
internet), mais a eviter si on peut prendre autre chose (pas forcement c++)
Si les aspect d'un programmes s'arrêtait à la vélocité et à l'ihm ça
Sinon, en utilisant les bonnes lib (wxWindows perso, ou Borland Kilix
pour les flemmard), une interface graphique avec de la programmation C++
est tout aussi portable, au prix d'une compilation par plateforme.
Comparer la portabilité de wxWindows avec java, me semble pencher en
Bref :
- developpement Web --> Java
simpliste.
- developpement d'un logiciel --> Pas java : Perl, python, C, C++ etc...
En tant que chef de projet tu oserais faire une appli autre qu'un truc
Dany wrote:
Voila j'ai pas fait une liste exaustive, je ne t'ai surement pas parlé des
différences techniques, mais c'est comme ça que je le voi.
tu oublies un truc important : Java, ca rame, ca rame, ca n'arrette pas
de ramer...
Le temps de lancer la VM (et encore ça à bien évolué) et de faire la
Java gere un garbage collector, souvent buggé dès que tu veux faire de
la gestion memoire poussée (ton appli se met a consomer 100 Mo alors que
tu a aloué puis supprimé 10 Mo 10 fois, hum... et hop, d'un coup ton
appli freeze le temps de purger, et tu ne peux rien y faire...)
Soit tu es Marseillais, soit tu es très malchanceux, soit tu
Java, dès que tu sors des componsants classique a afficher (pour
dessiner par exemple), suivant le JDK installé (meme des versions
differentes d'une meme boite), ben ca s'affiche compeletement
differement, une horreur.
Avec le look and feel portable (Metal), non. A l'exception de quelques
On est loin d'un wxWindows ou Qt...
Bref Java sert pour faire du code a afficher par page web (intranet,
internet), mais a eviter si on peut prendre autre chose (pas forcement c++)
Si les aspect d'un programmes s'arrêtait à la vélocité et à l'ihm ça
Sinon, en utilisant les bonnes lib (wxWindows perso, ou Borland Kilix
pour les flemmard), une interface graphique avec de la programmation C++
est tout aussi portable, au prix d'une compilation par plateforme.
Comparer la portabilité de wxWindows avec java, me semble pencher en
Bref :
- developpement Web --> Java
simpliste.
- developpement d'un logiciel --> Pas java : Perl, python, C, C++ etc...
En tant que chef de projet tu oserais faire une appli autre qu'un truc
Dany wrote:Voila j'ai pas fait une liste exaustive, je ne t'ai surement pas parlé des
différences techniques, mais c'est comme ça que je le voi.
tu oublies un truc important : Java, ca rame, ca rame, ca n'arrette pas
de ramer...
Le temps de lancer la VM (et encore ça à bien évolué) et de faire la
Java gere un garbage collector, souvent buggé dès que tu veux faire de
la gestion memoire poussée (ton appli se met a consomer 100 Mo alors que
tu a aloué puis supprimé 10 Mo 10 fois, hum... et hop, d'un coup ton
appli freeze le temps de purger, et tu ne peux rien y faire...)
Soit tu es Marseillais, soit tu es très malchanceux, soit tu
Java, dès que tu sors des componsants classique a afficher (pour
dessiner par exemple), suivant le JDK installé (meme des versions
differentes d'une meme boite), ben ca s'affiche compeletement
differement, une horreur.
Avec le look and feel portable (Metal), non. A l'exception de quelques
On est loin d'un wxWindows ou Qt...
Bref Java sert pour faire du code a afficher par page web (intranet,
internet), mais a eviter si on peut prendre autre chose (pas forcement c++)
Si les aspect d'un programmes s'arrêtait à la vélocité et à l'ihm ça
Sinon, en utilisant les bonnes lib (wxWindows perso, ou Borland Kilix
pour les flemmard), une interface graphique avec de la programmation C++
est tout aussi portable, au prix d'une compilation par plateforme.
Comparer la portabilité de wxWindows avec java, me semble pencher en
Bref :
- developpement Web --> Java
simpliste.
- developpement d'un logiciel --> Pas java : Perl, python, C, C++ etc...
En tant que chef de projet tu oserais faire une appli autre qu'un truc