Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Java] Capable de ça?

Java est-il capable de répondre à mes demandes?

    25 mai 2015 à 20:06:14

    Bonsoir à tous,

    Suite à une discussion concernant un choix de langage à apprendre, j'ai pris comme décision (temporaire, et je l'espère permanente) d'apprendre le Java.

    En effet, ce langage me plaît assez au premier abord, et certaines fonctionnalités m'intéresse, car elles me permettraient de réaliser quelques idées de projets.

    Mais j'aimerais être certain que certaines de ces fonctionnalités existent vraiment, pour me permettre d'apprendre ce langage sans me tromper sur ces possibilités.

    Ma question est donc de savoir si l'on peut faire les opérations listées ci-dessous avec Java, et si oui avec quel outils/technologies propriétaires et libres.

    • Peut-on effectivement compiler en code machine du Java (pas besoin de machine virtuelle), et/ou peut-on compiler du Bytecode Java en code machine?
    • Peut-on créer entièrement en Java une application réseau, avec une interface graphique, séparée en une partie cliente et une partie serveur (comme une application web), avec l'envoie de donnés à traiter du serveur vers un autre ordinateur tiers?
    • Peut-on utiliser des technologies d'accélération/de calcul par carte graphique (comme l'OpenGL/OpenCL) dans un programme codé en Java?

    Merci d'avance pour toutes vos réponses.

    Bonne soirée.

    • Partager sur Facebook
    • Partager sur Twitter
    Projet: cours "Histoire des OS" (titre provisoire). Stade: annulé
      25 mai 2015 à 21:11:03

      Bonsoir.

      L'objectif du Java est d'être multi-plateforme.
      Donc créer un exécutable propre à l'OS/processeur est contraire à la philosophie du langage.
      Il est toutefois possible de créer un exécutable qui inclura le JRE et le programme dans 1 seul fichier, et ainsi n'avoir qu'1 fichier exécutable sans installation de la JVM. Mais cela nécessite une contrainte projet extrême, car comme dit précédemment c'est la pire des solutions.

      Pour les technologies graphiques je ne pourrais pas t'aider car je ne me suis jamais penché sur le problème.

      Si tes seules contraintes sont la production de code machine et des effet graphiques, je ne pense pas que Java soit le langage approprié.
      Si tu cherches simplement un langage à étudier, il faudra revoir tes critères car ce sont des critères hyper restrictif qui n'entrent jamais en compte dans le choix d'un langage, sauf si contrainte projet spécifique.

      • Partager sur Facebook
      • Partager sur Twitter
      Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
        25 mai 2015 à 22:09:57

        @Pinguet62: merci beaucoup pour ta réponse.

        En fait, mes questions portent plutôt sur des fonctionnalités "bonus" du java, et ne conditionneront pas mon choix définitif pour le Java.

        En fait, l'idée, c'est de savoir si je peux coder en Java certaines parties d'une application qui ont besoin de ces fonctionnalités, ou bien si j'ai meilleur temps de passer par un autre langage.

        Par contre, pour la partie réseau par exemple, je peux très bien apprendre à faire des applications en réseaux en java, puis réutiliser ces concepts si besoin dans un autre langage.

        Concernant le code machine en Java, ce serait pour un besoin de performances extrêmes où même une machine virtuelle génèrerait trop de perte de temps processeur, et où la portabilité ne serait pas décisif. Par contre, vue que ce n'est pas franchement dans l'optique du Java, on peut très bien prendre un autre langage pour coder cette partie du programme, et l'interfacer avec du code Java.

        De même pour l'utilisation de la carte graphique pour différentes tâches, cela devrait peut-être se faire dans de préférence un autre langage, mais ce serait vraiment la cerise sur le gâteau de pouvoir le faire en Java (me permettrait de créer des applications assez évoluées en Java) ;).

        En tout cas, merci encore pour ta réponse très intéressante.

        -
        Edité par colorguest 25 mai 2015 à 22:11:40

        • Partager sur Facebook
        • Partager sur Twitter
        Projet: cours "Histoire des OS" (titre provisoire). Stade: annulé
          25 mai 2015 à 22:37:45

          Si tu veux apprendre un langage "pour le fun" alors ces points ne sont pas pertinent.

          Le Java est un des langage à connaitre, car il est hyper-polyvalent.

          Dans un vrai projet on choisira le langage en fonction du besoin :

          • Si tu veux faire un site web tu ne vas pas choisir le Langage C ou le C++, par contre Java, AngularJS ou Python par exemple seront le top.
          • Si tu veux faire de l'embarqué tu ne vas pas développer en PHP mais plutôt du Langage C/C++ ou Python (Java va changer dans sa version 9 sur le sujet).
          • Si tu veux faire des petits scripts vite fait bien fait alors tu ne vas pas t'embêter à installer Visual Studio et acheter un OS Windows pour faire du .NET, alors que Python permet de faire ça rapidement sans prise de tête.
          • Partager sur Facebook
          • Partager sur Twitter
          Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
            26 mai 2015 à 22:29:56

            @Pinguet62: en fait, c'est à la fois pour une raison professionnelle et personnelle que je souhaite apprendre le Java.

            Ma situation est exposée dans ce post sur le forum, où tu noteras que la discussion a totalement changé de direction en un week-end.

            Pour répondre aux trois points que tu mentionnes:

            • Ce qui m'intéresse le plus, c'est de savoir comment créer des applications réseaux plus que des sites web pour le moment, qui seraient vraiment optimisées par la répartition des tâches entre l'ordinateur client, le serveur, et éventuellement un ordinateur tiers, où chaque appareil est optimisé pour la tâche qui lui incombe. Il me semble qu'il y a des technologies qui permettent de créer sur le réseau Internet des applications web entièrement en Java (je crois qu'il s'agit des applets Java et de Java Web Start, j'ai juste?).
            • Pour le côté embarqué, j'aurai dans ma formation de toute façon des cours en C pour ce type de plateforme, pas franchement besoin du Java pour ce type de besoin, d'autant que je ne pense pas pour le moment que je travaillerais à terme dans ce domaine.
            • Pour le côté scripting, cela ne m'intéresse pas des masses (bien que voulant passer à une distribution GNU/linux, et ayant choisi Manjaro de surcroît), je préfère plus créer des applications en utilisant les outils que j'ai à disposition. Après, peut être que je ferai du Python au cours de ma formation (pas encore vérifier), mais je ne suis pas à priori emballé, dans l'optique d'y consacrer du temps libre, par la rédaction de script pour contrôler un système type Unix par exemple.

            Sinon, j'ai encore une autre petite question:

            Existe-t-il en Java une notation syntaxique similaire à la "dot-notation" que j'ai rencontré en codant en Objective-C?

            C'est un type de notation que je trouve très élégante, même si elle beaucoup moins explicite que la syntaxe normale de l'Objective-C.

            En tout cas, merci encore pour ta réponse.

            Bonne soirée.

            • Partager sur Facebook
            • Partager sur Twitter
            Projet: cours "Histoire des OS" (titre provisoire). Stade: annulé
              26 mai 2015 à 22:52:24

              La discussion est longue, je ne le lierai pas :soleil:

              La dot-notation n'est pas possible en Java, pour la simple et bonne raison que la syntaxe est très "rigide" (terme perso) : la compilation va vérifier que toutes les méthodes et attributs existent.
              Mais il existe d'autres langages fonctionnant sur la JVM, comme par exemple Groovy (style mélangeant de Java et Python), fournissant de nouvelles fonctionnalités comme celle-ci.

              Il n'y a pas de meilleur langage, car ils sont (quasiment) tous complémentaires. Si quelqu'un te dit "ce langage est le meilleur" alors il ne connait surement que celui là.
              Certains sont spécialisés dans un domaine (par exemple AngularJS pour un site web côté client) ce qui le rendra très efficace dans son domaine, d'autres sont "multi-domaines" (par exemple Java pour le web, les client lourd, les applications réseau, ...) le rendant polyvalent.
              Pour les comparer il faut avoir un contexte précis. Par exemple si tu veux faire un site, alors tu compareras .NET (ASP), Java (JSP/JSF), JavaScript (AngularJS), ...

              Étudier différents langages est un avantage :

              • tu peux critiquer et choisir le langage le plus adapté en fonction des circonstances
              • du point de vu professionnel tu est plus polyvalent
              • Partager sur Facebook
              • Partager sur Twitter
              Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
                28 mai 2015 à 14:39:21

                Je peux répondre à 2 de tes questions :

                • Oui tu peux faire des applications réseaux avec Java, il existe des class natives à java comme les Socket, DatagramSocket, il y a un tuto ici
                • Il existe des bibliothèques qui peuvent te permettre d'utiliser OpenGL comme tu le sent (aucune idée si ça existe pour DirectX), voici celle que je connais le plus : LWJGL (je ne connais que très peu la version 3 de cette bibliothèque)

                -
                Edité par Sorax 28 mai 2015 à 14:39:51

                • Partager sur Facebook
                • Partager sur Twitter
                  29 mai 2015 à 14:50:22

                  @tous: merci beaucoup pour vos réponses.

                  @Pinguet62: je connaissais déjà Groovy, mais je l'ai écarté très vite dans ma recherche d'un langage de programmation, qui finalement a aboutie sur mon choix pour d'apprendre le Java.

                  En effet, la communauté derrière ce langage me semble trop petite pour me permettre d'apprendre la programmation en même temps qu'un langage de programmation (ce que permet le Java, vue le nombre et la variété des cours ne serait-ce que sur ce site). Cela abouti, entre autre selon moi (mais je peux me tromper), à un manque de cours sur ce langage type "SiteDuZero", et à un manque de bibliothèques spécifique, ce qui limite les possibilités (et l'intérêt ?) de ce langage.

                  Finalement, à priori, Groovy serait plutôt un langage à apprendre une fois que l'on a acquis un bon niveau en programmation et dans le cas où on est assez à l'aise avec le Java.

                  Par contre, si Groovy reprend la plupart des caractéristiques du Java (les sockets notamment pour la programmation réseau notamment), et qu'il est capable d'utiliser les bibliothèques écrites en Java, alors pourquoi pas ;).

                  @Sorax: merci beaucoup pour les informations concernant les sockets et la bibliothèque LWJGL.

                  De ce que j'ai lu sur le site de LWJGL, cette bibliothèque supporte également OpenCL, et il semble prévu que Mantle (maintenant Vulkan je crois, depuis qu'AMD a abandonné le développement actif de cette API au profi du Khronos Group) soit également supporté.

                  Par conséquent, entre les sockets, cette bibliothèque et JCuda (qui est, semble-t-il, une bibliothèque permettant d'utiliser la technologie CUDA de Nvidia directement depuis un code en Java, mais à vérifier), il me semble que l'on puisse faire des choses assez intéressantes dans de nombreux domaines.

                  @tous: en tout cas, merci encore beaucoup pour vos réponses constructives, cela me fait vraiment plaisir que vous ayez pris le temps de répondre de manière complète à mes questions.

                  Cela me conforte dans mon choix du Java, puisque grâce à ce langage et aux cours qui lui sont dédiés sur ce site, cela me permettra de parcourir une vaste partie du domaine de la programmation, et d'avoir la possibilité de créer des applications assez évoluées et intéressantes.

                  Je croise donc les doigts pour ce choix soit validé.

                  Bonne journée et à la prochaine.

                  -
                  Edité par colorguest 29 mai 2015 à 14:51:06

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Projet: cours "Histoire des OS" (titre provisoire). Stade: annulé
                    29 mai 2015 à 15:39:49

                    Je pense que tu devrais faire C++ --> Java , j'explique mon point de vue,  tu en fait ce que tu veux.

                    Parce que ce que tu veux faire soit utiliser des Lib graphiques complexe et faire des programmes réseau n'est pas le point fort de Java, par exemple si tu veux faire des calculs massifs à l'aide de OpenCL.

                    Tu vas être ralenti par java qui n'est pas aussi rapide que C++ dans les projets complexes ou il faut optimiser son code.

                    C'est la même chose avec les réseaux si tu sers plusieurs clients, tu vas voir que tu risques d'avoir un serveur qui prend beaucoup plus de ressources que s'il était codé en C++ ( parce qu'en général un projet de serveur est assez volumineux ).

                    Après, C++ est multiplateforme à condition de recompiler le code et peut-être faire des modifications mineures *tousse* ( n'utilise pas de librairie propre à une plateforme telle windows.h ). Et je ne parle même pas d'optimisation threadée sous Java, c'est un cauchemar.

                    En résumé, si ton considère l'ampleur de tes projets, J'opterais C/C++ et ensuite Java s'il y a lieu, car la transition même si elle sera peut-être frustrante ( java bridé beaucoup d'élément important dans C++ tel les pointeurs *pleurs* ) ,cela resteras quand même plus aisé que Java --> C++. Quand j'ai fait la transition d'ailleurs , j'était frustré par certaines choses qui ont été laissé de côté. Mais , maintenant , ça va parce que j'utilise Java pour des petits projets et C++ avec Qt et/ou boost pour les plus gros projets et finalement C/C++ pour les projets complexes nécéssitant un accès plus profond à la machine.

                    -
                    Edité par kikimonste 29 mai 2015 à 16:00:27

                    • Partager sur Facebook
                    • Partager sur Twitter

                    [Java] Capable de ça?

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown