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

C++ Discussion :

du C++ au Java


Sujet :

C++

  1. #21
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Il y a Eclipse, qui est pas mal comme EDI pour le java

    Tu devrais aussi t'intéresser à la partie java du site, qui est une section très développée également
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  2. #22
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    En Java, tu ne peux pas faire new List<Integer>[42], par exemple.
    Pourquoi ? Parce que restriction débile.

  3. #23
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 940
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Il y a Eclipse, qui est pas mal comme EDI pour le java
    En particulier j'aime bien toutes les petites options de refactoring, comme la possibilité d'extraire d'une classe une interface ou une classe abstraite, la completion de code qui est généralement très efficace, la reconnaissance des erreurs à la volée ; par exemple vous pouvez séelectionner une variable, Eclipse va la reconnaître à travers tout le code et vous pouvez changer son nom, ce sera reporté partout. C'est dommage d'avoir assez peu d'options similaires en C++.

    D'un autre côté, je suppose que c'est possible en Java parce-que c'est un environnement relativement structuré (d'autres diraient restreint, ce ne serait pas faux) ; en C++ il y a beaucoup de choses qui se gèrent en textuel avant même la compilation du code, avec des includes en cascade on pourrait répartir la description d'une classe sur une quinzaine de fichiers, ce doit être plus dur d'analyser en permanence un projet de la sorte. Il me semble avoir lu qu'un type disait que les fonctionnalités comme la completion de code ou l'Intellisence (crosoft tm) pour le C++ demandent quasiment le travail d'un petit compilateur.

  4. #24
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par deubelte Voir le message
    Quand on connait et qu'on a des bases en C++
    est-il difficile d'apprendre le Java?
    Tu veux dire quoi par "apprendre le Java" ?
    Car il y a le langage Java qui est relativement simple (surtout si l'on vient du monde C++) et la bibliothèque standard Java qui est très très grosse...

  5. #25
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Noxen Voir le message
    <snip>
    Il me semble avoir lu qu'un type disait que les fonctionnalités comme la completion de code ou l'Intellisence (crosoft tm) pour le C++ demandent quasiment le travail d'un petit compilateur.
    Quel que soit le langage pour lequel tu souhaite mettre au point un système de complétion automatique, tu devra mettre au point un système d'analyse syntaxique du code

    Il ne faut pas confondre les possibilités offertes par les différents outils et celles offertes par un langage en particulier.

    N'oublie pas que "l'intelligence" d'une application (qu'il s'agisse d'un simple éditeur de texte ou d'un EDI ou d'un RAD complet) n'est que celle que ses concepteurs ont pu / su / voulu lui donner.

    En effet, si le système d'auto complétion de Eclipse est sympa, c'est, d'abord et avant tout grâce aux personnes qui l'ont mis au point

    N'oublie jamais qu'il est tout à fait possible de décider de coder en java (tout comme il est possible de décider de le faire en C, en C++ ou en n'importe quel autre langage) avec des outils aussi simples que le bloc note (ms), vi, vim ou autres
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #26
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    La difficulté pour fournir des extensions de type refactoring est effectivement liée au langage et aux outils disponibles qui sont capables de le comprendre. Hormis les monstres comme VC/Visual Assist, et Eclipse/CDT qui a tout recodé, tous les autres tendent à s'appuyer sur ctags qui a une compréhension bien partielle du C++ (il n'est même pas fichu de nous donner le contexte (espace(s) de noms + nom(s) de classe(s)) où sont déclarés les divers symboles extraits)
    (Et même pour Vim il est possible d'offrir des fonctionnalités simples de refactoring pour le C++ désolé pour la pub)

    Sinon, il y a effectivement des différences de langages (les plus visibles étant liées aux techniques de restitution déterministe de ressources, à l'absence de sémantique de valeur, des différences dans la gestion de la généricité (et tous les hacks du java autour de equals pour compenser).
    Mais je pense que l'essentiel sera du côté des bibliothèques et des frameworks que tout le monde utilise.
    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...

  7. #27
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 940
    Par défaut
    Ce que je voulais dire c'est que la structure qui entoure le langage Java (par exemple que tout est objet, que toute classe dérive au minimum de Object, etc...) et qui restreint les options des développeurs doit peut-être permettre d'un autre côté de créer certains outils plus facilement. Le C++ à contrario est un joyeux bordel de ce point de vue (mais alors, oui, on peut faire ce qu'on veut avec, le pire comme le meilleur), un .cpp peut inclure à partir d'un fichier une quinzaine d'autres ; mon dernier exploit en date c'est d'avoir fait planter VC sur des templates.

    Je me demande si pour le C++ cette "structure" assez bordelique ne peut pas poser des problèmes, notamment de performance. Des collègues lors d'un stage m'ont parlé de compilations qui peut durer des heures (tu la lance le soir en quittant le boulot et tu reviens le lendement en priant qu'il n'y ait pas eu de problème pendant la nuit). En admettant qu'un projet puisse prendre même simplement quelques minutes à compiler, un outil de refactoring ne va-t-il pas atteindre rapidement ses limites en terme de performance (personne n'attendra 45 secondes pour qu'une autocompletion se fasse) ?

  8. #28
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Sinon a priori, passer de C++ à Java, ça prend une journée à tout casser.
    Hum, ça ferait un excellent titre de livre

    "Passer de C++ à Java en 21 heures"


    voici déjà la note de l'auteur:


    Cher lecteur. Sachez qu'après la lecture de ce livre, vous ne pourrez vous contenter que de 3 heures de sommeil... après quoi vous aurez congratulé votre journée d'apprentissage.

  9. #29
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Il y a aussi des différences de conception entre les deux. Par exemple, on trouvera fréquemment des classes qui ont des sous-classes dérivant d'Executor, un pattern assez rare en C++, mais qui se trouve partout en Java.

  10. #30
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Des collègues lors d'un stage m'ont parlé de compilations qui peut durer des heures (tu la lance le soir en quittant le boulot et tu reviens le lendement en priant qu'il n'y ait pas eu de problème pendant la nuit)
    Vu que le système de type est turing complet, tu peux faire un code valide qui mette un temps infini à compiler. Mais tu n'as pas besoin de compiler pour de la complétion de code, il te suffit de l'analyse syntaxique + sémantique.

    La difficulté pour fournir des extensions de type refactoring est effectivement liée au langage et aux outils disponibles qui sont capables de le comprendre. Hormis les monstres comme VC/Visual Assist, et Eclipse/CDT qui a tout recodé, tous les autres tendent à s'appuyer sur ctags qui a une compréhension bien partielle du C++
    Honnêtement, entre VC++ et kdevelop, je suis au final plus satisfait de la complétion offerte par kdevelop. Celle de visual c++ ne m'a vraiment jamais convaincu. Le gros problème, en C++, c'est aussi le préprocesseur (détecter dans quels #if tu es, etc...).

    La seule bonne complétion automatique que je connaisse est celle de Visual C# (très peu à y redire). Il utilise le compilateur pour générer les informations contextuelles. C'est à mon avis la seule bonne manière de faire (ça impose aussi d'avoir un compilateur plus modulaire que gcc, et un langage plus simple que C++ aide).

  11. #31
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Il y a plusieurs choses à dire à ce sujet.

    Apprendre un langage impératif orienté-objet en connaissant déjà l'impératif et l'orienté-objet n'a rien de compliqué, tout le monde te le dira. Ça se fait en une grosse soirée de lecture de tutoriels et quelques jours de pratique histoire d'ancrer ça dans ses habitudes. Néanmoins quand tu dis connaitre le C++ de façon superficielle j'ai un doute, surtout si tu ne connais pas d'autre langage orienté objet. N'en déplaise à beaucoup, on utilise bien peu d'orienté object en C++. Et quand on le fait "comme dans le cours du prof", on le fait généralement mal. Autant on peut être un très bon programmeur C++ en ne faisant jamais d'orienté object, autant c'est indispensable en Java. Alors même si tu crois maitriser, suis quand même quelques cours dédiés à la conception OO une fois les bases du Java acquises (quoique de mon point de vue, le mieux pour apprendre l'OO c'est encore les langages à objets par prototypes - Javascript powaa!).

    Qui plus est, il faut savoir un peu lire entre les lignes. Le Java n'est pas un langage complexe, mais ce n'est pas qu'un langage non plus. Le SDK contient une bibliothèque standard de taille conséquente. Ainssi quand un employeur demande si tu sais coder en Java, cela implique également une certaine connaissance de cette bibliothèque standard.
    Pour rappel:
    Java SE (J2SE) : partie cliente du JDK, en gros ça consiste à faire des interfaces graphiques
    Java EE (J2EE) : partie serveur, principalement de la création de sites webs, de la gestion de bases de données, et l'implémentation de couches de services
    Si ton employeur avait fait allusion à l'un de ces deux termes dans son annonce, va falloir t'y mettre, et ça ça prends du temps tu peux me croire

    Sinon, pour les petits détails, il y a deux principaux IDE Java gratuits: Eclipse et Netbeans. Chacun a son favoris. Pour faire court Eclipse est plus ancien et surtout a été beaucoup plus populaire par le passé, ce qui a pour conséquence qu'il existe énormément des plugins pour cet IDE. Netbeans est fait par Sun et il possède moins de plugins fais par des tiers. Néanmoins, de base, il contient plus de fonctionnalités liées au JDK et aux technologies "officielles" du Java. A toi de voir, moi je recommanderais plus Netbeans pour commencer.

  12. #32
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Alors même si tu crois maitriser, suis quand même quelques cours dédiés à la conception OO une fois les bases du Java acquises (quoique de mon point de vue, le mieux pour apprendre l'OO c'est encore les langages à objets par prototypes - Javascript powaa!)
    iiirk ! L'objet par prototypes, c'est encore autre chose. Certains aiment, moi, j'ai vraiment du mal (comme avec tout ce qui est faiblement typé en général).

    Pour apprendre la poo correctement, il y a la bible (en français, pour ne rien gâcher) : http://www.editions-vm.com/Livre/978...rientees-objet

    N'en déplaise à beaucoup, on utilise bien peu d'orienté object en C++. Et quand on le fait "comme dans le cours du prof", on le fait généralement mal.
    En C++, on fait de l'objet quand c'est nécessaire. En csharp ou java, on fait de l'objet tout le temps. Mais il y a un nombre d'erreurs de conception assez important dans les bibliothèques standard java et csharp (elles sont conséquentes et ont été développées rapidement, c'était inévitable), qui semble dire qu'on ne le fait pas mieux.

  13. #33
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Mais il y a un nombre d'erreurs de conception assez important dans les bibliothèques standard java et csharp (elles sont conséquentes et ont été développées rapidement, c'était inévitable), qui semble dire qu'on ne le fait pas mieux.
    C'est vrai mais, hey!, fallait bien un point de départ Le problème provient plus de l'obsession de Sun de ne pas casser la rétro-compatibilité (une rumeur dit que certains trucs deprecated depuis des lustres seraient virés dans la version 7).

  14. #34
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    Il faut passer vers java de la manière suivante, detecter dès le depart les differences entre c++ et java :
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /*C'est la plus utilisé, pour passer des argulents*/
    int main(int argc, char* argv[])
    Par contre java, c'st un peu plus compliqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static int main(String[] args) { }
    static void main(String[] args) { }
    public static void main(String args) { }
    final public static void main(String[] arguments) { }
    static public void main(String args[]) { }
    C'est pas compliqué comme main, j'ai pas réussi a trouver la bonne.

  15. #35
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Par défaut
    Tu y étais presque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public static void main(String[] args)

  16. #36
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 940
    Par défaut
    Sachant bien sûr que ce main sera déclaré comme une méthode de classe, et non comme une fonction globale comme en C++ ou en C (on a bien dit qu'en Java tout est objet, non ? ).

  17. #37
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je ne vois pas vraiment le rapport entre de l'orienté objet et des attributs/méthodes statiques. Je pense que ce concept avait été établi (peut-être par le C++) pour gérer plus facilement les droits d'accessibilité (public, private,...) entre des classes, des variables globables et des fonctions.

    Pour moi la raison pour laquelle on ne peut déclarer des fonctions que sous la forme de méthodes statiques en Java est liée au fonctionnement strict des packages. C'est raison n'est pas seulement conceptuelle, c'est aussi justifiable d'un point de vue technique.
    En Java, chaque classe est compilée en un fichier .class. Imaginons que nous ayons un fichier .class contenant une méthode main() avec plein d'autres .class à coté, mais aucun n'est utilisé directement ou indirectement par la classe contenant le main (on va dire qu'il se contente d'afficher un hello world). Si on lance le programme, seule la classe contenant le .main sera chargée par la machine virtuelle Java, celle-ci ne touchera à aucune autre classe contenue dans l'archive.
    Pourquoi? Parceque le système de chargement de la description des classes utilise un principe de lazy-init. Il ne charge un fichier .class que quand il sait qu'il en aura besoin, à n'importe quel moment durant l'exécution. Or, avec un tel fonctionnement, non seulement on ne peut pas maintenir une map globale des définitions de classes (comme le ferait un compilateur C++ par exemple) mais en plus le fichier contenant la description d'une classe doit pouvoir être localisé en temps constant. C'est là que la rigueur des packages prend tout son sens puisque à partir du nom complet d'une classe (exemple: java.util.Vector) on peut déduire immédiatement le fichier contenant sa définition dans une archive zip ou dans le file system (exemple: java/util/Vector.class).
    Comme un compilateur peut aisément déduire le nom complet d'une classe en regardant dans un seul fichier, je suppose que ça contribue aussi à simplifier la compilation (et, par voie de conséquence, l'auto-completion, le refactoring, etc...).

  18. #38
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Au sujet de la digression sur l'intellisense, voici un petit point au sujet de celle de VC10: http://blogs.msdn.com/vcblog/archive...beginning.aspx
    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...

  19. #39
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 940
    Par défaut
    Tout ce que je disais c'est qu'en C/C++ le main est une fonction globale, et qu'en Java les fonctions globales n'existent pas, donc le main est une fonction public et static dans une classe ; je ne cherchais pas plus loin que ça.

    @Luc intéressant cet article, merci

Discussions similaires

  1. le Java est la continuité du C++ ???
    Par Vincent PETIT dans le forum Débats sur le développement - Le Best Of
    Réponses: 33
    Dernier message: 25/08/2005, 20h17
  2. Envoi de Datagrames par IP en JAVA
    Par the java lover dans le forum Développement
    Réponses: 2
    Dernier message: 14/08/2002, 11h44
  3. directx et java?? possible??
    Par jiraiya dans le forum DirectX
    Réponses: 3
    Dernier message: 09/07/2002, 19h55
  4. webcam : lire sur un port usb en c/c++ ou java. sous win. ?
    Par flo007 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 24/05/2002, 23h24
  5. Service de nommage java C++
    Par Anonymous dans le forum CORBA
    Réponses: 3
    Dernier message: 15/04/2002, 12h48

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