IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

[choix langage] calcul,graphiques,portabilite: java ou c++?


Sujet :

Langages de programmation

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut [choix langage] calcul,graphiques,portabilite: java ou c++?
    Bonjour,

    J'ai recupéré un projet écrit en c++. Il s'agit d'un lourd calcul plutot complexe qu'il n'est donc pas question de recoder.
    Pour l'instant, une interface graphique simple en c++ permet de choisir un fichier de données et lancer le calcul dessus, on a en sortie un nouveau fichier texte qui contient une matrice. Cette matrice doit ensuite être affichée sous forme d'une carte de points, dont la couleur varie selon la valeur dans la matrice (genre carte des profondeurs maritimes, etc...). Actuellement, il faut utliser R pour afficher la matrice, ce qui se fait en quelques lignes.

    Le but est de proposer une interface qui va elle-même pouvoir afficher la carte resultat. l'idéal serait que l'interface soit portable windows/linux (actuellement tout est codé sous windows).

    Je me pose déjà une question : est-ce que des calculs purs en c++ peuvent ne pas etre portables entre windows et linux, ou est-ce que c'est uniquement l'interface graphique qui peut poser problème?

    Ensuite, pour le choix du langage, au vu de ce que j'ai lu sur le forum et trouve sur internet, j'hésite entre 2 solutions :
    * garder tout en c++ et utiliser wxwidgets
    * faire une interface en java et utiliser JNI uniquement pour lancer le gros calcul.

    Je ne connais ni wxwidgets ni jni, j'ai l'impression que pour chacun il faut coder le c++ de manière spécifique : est-ce qu'il y aurait beaucoup de modifications à faire dans le code? lequel serait le plus simple selon vous?

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    Par défaut
    Tout dépends du (des) programmeur(s) initiaux du projet. Si ils ont bien veiller a respecter le plus que possible le standard et n'ont pas utilisé de libraire exotique il n'y a guère que l'interface qui risque de ne pas être portable. A ce moment là les wxWidgets sont u nbon choix. Quant aux performances, je ne suis pas convaincu que le Java soit plus performant que le C++, je ne code toutefois pas en Java mais qu'en C++ donc je ne peux pas vraiment te conseiller là-dessus.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    En fait si j'avais pensé à utiliser java c'était uniquement pour la portabilité (aussi parce que je connais bien java et pas trop c++ mais c'est pas le plus important ).

    Je me disais que ça éviterait d'avoir à recompiler le programme pour chaque OS, mais en fait il faudra de toutes manières le faire pour la partie en c++...

    Je vais essayer de compiler le code sous linux voir si ça a l'air compatible, puis si c'est bon je vais donc me plonger dans les wxWidgets...

    merci de ta réponse!

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    Les librairies utilisées sont :
    fstream
    iostream
    stdlib
    math
    iomanip
    string
    time

    Aucune "exotique"?

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Que du standard.
    Bien que je me serais attendu à du blitz ou du boost (voire MTL) qui sont des références en matières de calcul matriciel hautes performances (équivalentes à du fortran optimisé, mais avec une forte expressivité : M = N * X + Y...)

    Perso je conseillerai de garder le C++ pour la partie mathématique.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    Je ne m'y connais pas assez pour te répondre...
    Le programmeur initial était un thésard et son maitre de stage m'a dit que le programme était optimisé à fond niveau mathématiques, maintenant peut-être qu'il était possible de faire mieux...

    Là je suis en train de me plonger dans son interface actuelle (winapi) en essayant de piger un peu les appels au programme prncipal pour transformer tout ça avec wxWidgets... mais aucune ligne de commentaire je galère un peu

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    "petit" détail auquel je n'avais pas pensé : pour afficher la carte, je vais essayer de trouver une librairie mais elle risque de ne pas être portable windows/linux... ou alors il faut que je recode tout avec wxWidgets..
    Je vais faire un nouveau topic dans le forum c++ je pense que ce sera plus à sa place.

    **Julien, qui a trop l'habitude du java avec aucune question à se poser sur la portabilité **

  8. #8
    mat.M
    Invité(e)
    Par défaut
    Je me pose déjà une question : est-ce que des calculs purs en c++ peuvent ne pas etre portables entre windows et linux, ou est-ce que c'est uniquement l'interface graphique qui peut poser problème?
    Permet-moi d'être un peu arrogant mais ça c'est une question idiote !
    Je te répondrai qu'évidemment pour faire un bon programme ,il faut séparer la couche calcul de la couche interface graphique !
    Donc dans le language de ton choix tu développes des classes purement destinées aux calculs et traitements mathématiques et d'autres des classes spécifiques à l'interface graphique de ton choix ( Linux , Windows....)
    Il faut le plus de modularité possible désolé de sortir cette banalité .

    Par exemple le jeu de stratégie que j'ai développé destiné à tourner sous Windows avec Direct X je me suis aperçu qu'au bout du compte tout ce qui concerné véritablement l'OS ne représentait que quelque chose comme 30 % de la totalité du code , le reste étant du pur code C/C++!

    Si tu prends les sources d'un jeu vidéo commercial tu t'apercevras qu'il ya plusieurs "couches" : l'IA , l'interface utilisateur UI , les entrées-sorties.
    Donc pour un soft destiné à effectuer des calculs ce devrait être pareil

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    En fait ce n'était pas vraiment ça ma question.
    La partie calculs en C++ est déjà réalisée et je ne dois faire que l'interface graphique. Evidemment, je la fais dans un module séparé...

    Mais pour moi il y avait deux options :
    * soit le module calcul est portable sous windows et linux. Alors j'essaye de faire un module interface portable lui aussi.
    * soit de toutes façons le calcul lui-même à la base n'est pas portable. Alors je n'aurais pas particulièrement cherché à faire une interface portable, puisque de toutes façons le logiciel n'aurait pas pu marcher sous autre chose que windows, et que c'est trop de boulot de modifier la partie calcul pour l'adapter (surtout que la portabilité est un plus, mais n'est pas indispensable...).

    Sinon pour les dernières news, j'ai commencé l'interface en wxwidgets et ça se passe bien (juste eu du mal à configurer visual c++, j'ai du copier un fichier projet exemple et l'éditer...). Pas encore essayé de compiler le truc sous linux mais à priori ça devrait aller (le thésard qui s'est occupé de la partie calcul a réussi à la compiler sous linux en changeant quelques trucs...)

  10. #10
    Membre régulier Avatar de kaisse
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 100
    Points : 117
    Points
    117
    Par défaut
    Je me pose déjà une question : est-ce que des calculs purs en c++ peuvent ne pas etre portables entre windows et linux, ou est-ce que c'est uniquement l'interface graphique qui peut poser problème?
    A priori c'est portable entre les OS, mais pas forcément entre les architectures. Je m'explique. Si tu utilises juste les opérateurs classiques, même de manière complexe, alors c'est compatible. Maintenant, tu as dit que la partie mathématique était optimisée à fond: ce qui implique peut être des manipulations de bits et/ou de jouer avec les limites des types standards (donc avec leur taille). Ce genre de chose peut n'être pas portable: selon que la machine est little endian ou big endian, mais surtout selon la taille des types primitifs sur la machine. A priori celà ne
    représentera que quelques rares cas, et si tu utilises des PCs de base style 386, que ce soit windows ou linux, ca ne devrait pas nuire au projet. Le meilleur moyen de vérifier est de compiler sur les deux environnements et de vérifier que les resultats concordent.

    Le java à l'avantage d'avoir des types de bases aux tailles prédifinies et constantes. Cependant, il vaut en effet mieux laisser le C++ s'occuper du calcul: si il a été optimisé "à mort" ce n'est pas pour rien j'imagine .

    Pour l'interface graphique, wxwidget en est une bonne, et portable. Sinon, si les sources sont assez modulaires tu peux faire communiquer l'application C++ avec une interface java. Avec la classe Process tu peux récuperer les flux d'entrée et de sortie d'un sous processus. J'ai fait ca pour un projet lors de mon stage cette année. J'avais une partie Crypto en C, et l'interface graphique en Java, ca marche impeccablement, et comme ca, on est sur que tout est standard.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par kaisse
    Pour l'interface graphique, wxwidget en est une bonne, et portable. Sinon, si les sources sont assez modulaires tu peux faire communiquer l'application C++ avec une interface java. Avec la classe Process tu peux récuperer les flux d'entrée et de sortie d'un sous processus. J'ai fait ca pour un projet lors de mon stage cette année. J'avais une partie Crypto en C, et l'interface graphique en Java, ca marche impeccablement, et comme ca, on est sur que tout est standard.
    Bah maintenant je suis parti sur du "tout c++", mais je note pour une prochaine fois Merci!
    Et pour la portabilité, le gars a modifié un peu son programme et maintenant il compile sous linux donc si wxwidgets tient ses promesses il ne devrait pas y avoir de problème

  12. #12
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    j'ai un compromis a vous suggerer :

    on considere le noyau de calcul C++ auquel on ne touche pas, alors pourquoi ne pas developper l'interface en JAVA pour avoir la portabilite de ce cote ci et utiliser l'API JNI de JAVA pour coupler le noyau de calcul avec l'interface graphique. Cette api n'est tres complexe et s'utilise tres facilement dans le cadre de soft hybride C++/Java

    au taf, c'est ce que je fais ainsi que mes collaborateurs et cela fonctionne a merveille, puisque lorsque l'on change de plate-forme, seul le noyau de calcul est a recompiler

    qu'es ce que vous en pensez ?

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    Bonjour,
    en fait pour moi, l'intérêt de faire du java était de n'avoir rien à recompiler. Mais puisque de toutes façons il faudra que je recompile le noyau, si j'écris l'interface en c++ il suffira de recompiler interface et noyau ce qui n'est guère plus long...

    Cela dit c'est vrai que j'aurais moins galéré en java que je connais beaucoup mieux que le c++
    Mais bon, les stages c'est fait pour apprendre...

Discussions similaires

  1. choix langage pour créer un logiciel de calcul de pert de charge
    Par bboumediene dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 16/07/2009, 14h17
  2. Bienvenue sur le forum Interfaces Graphiques en Java - règles à respecter par tous
    Par christopheJ dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 31/05/2009, 15h50
  3. Quel est le meilleur langage pour la portabilité : Windows & Linux (voire Mac) ?
    Par iubito dans le forum Débats sur le développement - Le Best Of
    Réponses: 57
    Dernier message: 26/11/2007, 23h45
  4. Réponses: 3
    Dernier message: 24/08/2005, 14h45
  5. [Choix langages] Une application sous forme software et web
    Par fremsoi dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 17/11/2004, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo