Topic de JamereBurvelle :

[PROJET] Apprenons à programmer en JAVA !

Salut les clés à molette écoute-moi je ne sais pas quoi dire en Java mais en PHP JavaScript

Il y a beaucoup de similitudes ou non?

Si quelqu'un a une idée de projet à me proposer qu'il me MP?

Le 02 décembre 2017 à 13:53:38 cutefemboysmug a écrit :
concretement à quoi ça sert?

Ca ajoute un niveau d'abstraction en gros, ça permet aussi de définir un contrat auquel chaque classe qui implémente l'interface devra se soumettre.
Genre si t'as un classe Berline, une classe Crossover etc, tu peux définir une interface Voiture implémentée par ces deux classes qui force par exemple l'implémentation des méthodes getConsommation() ou getCarburant().

C'est aussi utile pour créer des listes de Voiture. Tu as juste à déclarer une ArrayList<Voiture> et tu peux ajouter dedans à la fois des Berlines et des Crossover :hap:

Le 02 décembre 2017 à 14:00:33 simplonien a écrit :
Salut les clés à molette écoute-moi je ne sais pas quoi dire en Java mais en PHP JavaScript

Il y a beaucoup de similitudes ou non?

Si quelqu'un a une idée de projet à me proposer qu'il me MP?

Le modèle objet de PHP est calqué sur Java avec un héritage unique (et non multiple comme le C++). En particulier depuis PHP7 et le typage statique qui a été ajouté ça se rapproche de Java (en pire :hap:).
Mais la grosse différence est que Java est full objets (sauf types primitifs), tandis que le PHP est par nature procédural et a été conçu en s'inspirant du C.
Concrètement, en PHP tu peux appeler des méthodes directement (ex echo, var_dumps etc..) alors qu'en java il faudra toujours passer par un objet (ex System.out.println()).
C'est pour ça que je déteste PHP qui mélange les paradigmes, ce qui donne du code sale.

Concernant le JavaScript c'est bien différent vu qu'il est basé sur l'héritage par prototype.
A la limite l'EcmaScript 6-7 (nouveau Javascript) ou le TypeScript (surcouche à l'ES qui ajoute du typage statique) s'approchent davantage du Java depuis qu'ils ont ajouté la notion de classe (et tout ce que ça implique..).

Le 02 décembre 2017 à 14:03:54 NiceTryGlados a écrit :

C'est aussi utile pour créer des listes de Voiture. Tu as juste à déclarer une ArrayList<Voiture> et tu peux ajouter dedans à la fois des Berlines et des Crossover :hap:

Déclarer un List<Voiture>.
L'ArrayList c'est de l'implémentation [[sticker:p/1lm9]]

Tu penses quoi du C++ et du JAVA kheylaine ? https://image.noelshack.com/fichiers/2017/48/3/1511960193-sermions2.png

Le 02 décembre 2017 à 14:10:33 FiddleSturmCAN a écrit :
Tu penses quoi du C++ et du JAVA kheylaine ? https://image.noelshack.com/fichiers/2017/48/3/1511960193-sermions2.png

Le C++ il faudrait que je m'y mette, j'ai fait qu'un seul TP quand j'étais en école et ça remonte à plusieurs années.
C'est un bon langage mais assez difficile à cause de la gestion de la mémoire.

Le Java c'est mon langage de prédilection donc j'en pense du bien, surtout depuis java 8. Cependant il est en effet verbeux, mais ça permet surtout d'avoir une lisibilité du code claire plutôt qu'implicite.
Son principal avantage comparé à des langages qui ont le vent en poupe (python, javascript) est son typage statique et le fait qu'il soit compilé. Ca permet de déléguer à l'IDE et au compilateur la détection d'erreurs. C'est pour ça qu'on préfèrera toujours un code explicite qui est vérifié à la compilation plutôt qu'un code qui va potentiellement péter en production.
Après le gros avantage est surtout la JVM, qui permet de faire tourner le même exécutable sur tous les systèmes d'exécution, d'optimiser le code à la volée lors de l'exécution et surtout de s'affranchir de la gestion de la mémoire grâce au grabage collector.

Mais il y a tout de même des inconvénients au Java. Le fait d'assurer une rétrocompatibilité constante ralentit l'évolution du langage et empêche d'ajouter des fonctionnalités avancées. Des langages fonctionnels comme Scala permettent du code plus propre car ils n'ont pas cette dette technique.

Le 02 décembre 2017 à 14:15:50 KheyALaine a écrit :

Le 02 décembre 2017 à 14:10:33 FiddleSturmCAN a écrit :
Tu penses quoi du C++ et du JAVA kheylaine ? https://image.noelshack.com/fichiers/2017/48/3/1511960193-sermions2.png

Le C++ il faudrait que je m'y mette, j'ai fait qu'un seul TP quand j'étais en école et ça remonte à plusieurs années.
C'est un bon langage mais assez difficile à cause de la gestion de la mémoire.

Ce n'est pas la seule chose qui rend ce langage compliqué.
Au niveau conceptuel, notamment, le langage n'est pas/n'est plus très clair et cohérent. Il est plutôt bas niveau mais les nouvelles révisions tendent à en faire un langage plus haut niveau, et on voit apparaître ainsi de nouvelles features (e.g. le keyword auto).
Il est aussi multiparadigme, on peut facilement adopter une approche très impérative, orientée objet, fonctionnelle, ...
Enfin, il est souvent mal enseigné : les développeurs débutants le voient comme du C avec des objets, alors que ce n'est pas du tout le cas, c'est un tout autre langage. Oh, bien sûr, rien n'empêche d'avoir une approche ' C-style ' c'est-à-dire impérative, à laquelle on joindrait quelques facilités (gérer les entrées/sorties, disposer de certains "types" pratiques comme les vector ou les string,...) mais on rate là, à mon sens, ce qui peut faire de C++ un langage très très puissant (on manque de tout ce que peut apporter l'approche orientée objet déjà mais aussi tout plein de trucs cools comme les templates, lambda expressions, ... bref les features de C++11, C++14 et C++1z qui font bel et bien de lui un langage moderne).

Il faut vraiment se jeter dedans et en vouloir, c'est vraiment LE langage à maîtriser pour tout faire, mais le risque c'est de ne pas savoir où donner de la tête ; le mieux que je puisse conseiller, c'est d'être de toute façon curieux sur son outil et de suivre certains développeurs/blogs connus qui ne manqueront pas de vous faire apprendre sur votre langage.

Le Java c'est mon langage de prédilection donc j'en pense du bien, surtout depuis java 8. Cependant il est en effet verbeux, mais ça permet surtout d'avoir une lisibilité du code claire plutôt qu'implicite.
Son principal avantage comparé à des langages qui ont le vent en poupe (python, javascript) est son typage statique et le fait qu'il soit compilé. Ca permet de déléguer à l'IDE et au compilateur la détection d'erreurs. C'est pour ça qu'on préfèrera toujours un code explicite qui est vérifié à la compilation plutôt qu'un code qui va potentiellement péter en production.
Après le gros avantage est surtout la JVM, qui permet de faire tourner le même exécutable sur tous les systèmes d'exécution, d'optimiser le code à la volée lors de l'exécution et surtout de s'affranchir de la gestion de la mémoire grâce au grabage collector.

Comparé à python qui ne dispose pas même de méthodes et attributs privés, effectivement l'approche POO de Java est plutôt saine et sa portabilité en fait un bon atout. J'aime aussi quand le typage d'un langage est explicite et statique, en ça Java c'est top.

Mais il y a tout de même des inconvénients au Java. Le fait d'assurer une rétrocompatibilité constante ralentit l'évolution du langage et empêche d'ajouter des fonctionnalités avancées. Des langages fonctionnels comme Scala permettent du code plus propre car ils n'ont pas cette dette technique.

Ce n'est pas le seul inconvénient que je vois à Java : Oracle (sun microsystems ?) a fait un tas de choix conceptuels qui m'emmerdent au quotidien. Ex, en java il n'y a PAS d'héritage multiple, on ne peut pas non plus surcharger d'opérateurs, ... Java n'est absolument pas malléable, on est obligé de passer par un tas de hacks crades pour disposer de certaines features.

Les développeurs java ont fait des choix tout aussi bizarres, beaucoup de libs/api/... java sont mal designées (notamment graphiques). On abuse de concepts comme les interfaces (on ne se pose parfois même plus pourquoi on fait des interfaces, c'est devenu si courant que c'en est une habitude de programmation, alors que certains patrons pourraient être autrement plus efficaces), le langage est rendu beaucoup trop verbeux, les source codes s'allongent, ... Bref, mis à part sa portabilité et le marché de l'emploi, je ne vois pas pourquoi préférer Java à d'autres langages comme C#, C++ par exemple, qui sont - à mon sens - bien plus efficaces et bien mieux pensés.

Maintenant si vous faites du java, continuez tant que vous n'avez pas un niveau décent en programmation, ça ne sert à rien d'aller voir ailleurs si vous ne comprenez pas les concepts qui se cachent derrière tout ça. Pour les développeurs en herbe qui ont déjà un bon petit niveau, je vous conseille nettement de passer votre chemin ou alors de faire du java uniquement si vous recherchez un emploi.

j'ai 0 notions en prog

j'ai juste trifouillé des jeux oldschool avec un editeur hexadecimal ou texte sur des commandes dans diablo 2 et baldur's gate.

mais ca m'interesse... y'a pas un discord ? :hap:

Le 02 décembre 2017 à 17:39:01 Negromancie a écrit :
j'ai 0 notions en prog

j'ai juste trifouillé des jeux oldschool avec un editeur hexadecimal ou texte sur des commandes dans diablo 2 et baldur's gate.

mais ca m'interesse... y'a pas un discord ? :hap:

je peux en ouvrir un si ça intéresse du monde

Le 02 décembre 2017 à 17:30:33 andeunv a écrit :

Ce n'est pas le seul inconvénient que je vois à Java : Oracle (sun microsystems ?) a fait un tas de choix conceptuels qui m'emmerdent au quotidien. Ex, en java il n'y a PAS d'héritage multiple, on ne peut pas non plus surcharger d'opérateurs, ... Java n'est absolument pas malléable, on est obligé de passer par un tas de hacks crades pour disposer de certaines features.

Ce n'est pas Oracle qui a fait ce choix mais Sun, en particulier pour éviter le problème du diamant.
Maintenant tu peux simuler l'héritage multiple avec des patrons de conception, ou t'en approcher avec les traits qui ont été ajoutés depuis java 8.

Les développeurs java ont fait des choix tout aussi bizarres, beaucoup de libs/api/... java sont mal designées (notamment graphiques). On abuse de concepts comme les interfaces (on ne se pose parfois même plus pourquoi on fait des interfaces, c'est devenu si courant que c'en est une habitude de programmation, alors que certains patrons pourraient être autrement plus efficaces), le langage est rendu beaucoup trop verbeux, les source codes s'allongent, ... Bref, mis à part sa portabilité et le marché de l'emploi, je ne vois pas pourquoi préférer Java à d'autres langages comme C#, C++ par exemple, qui sont - à mon sens - bien plus efficaces et bien mieux pensés.

Les interfaces partout étaient une vieille pratique. On est revenu là-dessus depuis un moment et on utilise l'interface quand elle est vraiment nécessaire maintenant.
Pour le côté verbeux, on peut utiliser des librairies qui génèrent du code et rendre le code source beaucoup plus lisible (Lombok par ex).

Ce que tu mets en évidence n'est pas vraiment des anomalies du langage. Tu m'aurais parlé du design des generics (qui sont transformé en Object + cast lors de la compilation en bytecode) là en effet c'est vraiment dégueulasse.

Concernant le C# c'est un langage bien désigné on est d'accord.
En revanche il manque de libs. Tous les dév cherchent dans le MSDN des exemples... là où en Java on aura un large choix de librairies qui peuvent répondre ou non à son besoin.
La vision de la programmation est beaucoup plus ouverte, c'est une approche juste différente.

Le nodeJS a d'ailleurs suivi ce type d'approche.

Maintenant si vous faites du java, continuez tant que vous n'avez pas un niveau décent en programmation, ça ne sert à rien d'aller voir ailleurs si vous ne comprenez pas les concepts qui se cachent derrière tout ça. Pour les développeurs en herbe qui ont déjà un bon petit niveau, je vous conseille nettement de passer votre chemin ou alors de faire du java uniquement si vous recherchez un emploi.

On peut faire de très belles choses en Java. Cela permet d'approfondir différents aspects (la programmation OO, programmation fonctionnelle depuis Java 8) et d'apprendre à structurer correctement son code et à faire du code sûr de par son typage statique.

Mais approfondir Java c'est surtout monter en compétences sur l'écosystème dans son ensemble et notamment la JVM, qui est utilisée par d'autres langages comme Scala, Groovy ou encore dernièrement Kotlin.

Bordel je comprend que dalle à vos explications :hap:

Le 02 décembre 2017 à 20:44:19 simplonien a écrit :
Bordel je comprend que dalle à vos explications :hap:

[[sticker:p/1kkn]]
Va te coucher Jamere il se fait tard.

Le 02 décembre 2017 à 23:29:04 CaLLeBarD a écrit :
Va te coucher Jamere il se fait tard.

Bordel :rire:

Je reprends lundi le mooc.

Le 02 décembre 2017 à 18:00:31 andeunv a écrit :

Le 02 décembre 2017 à 17:39:01 Negromancie a écrit :
j'ai 0 notions en prog

j'ai juste trifouillé des jeux oldschool avec un editeur hexadecimal ou texte sur des commandes dans diablo 2 et baldur's gate.

mais ca m'interesse... y'a pas un discord ? :hap:

je peux en ouvrir un si ça intéresse du monde

ça m'interesse perso [[sticker:p/1lm9]]

Le 03 décembre 2017 à 11:06:19 andeunv a écrit :
Tu suis quel mooc ? [[sticker:p/1jnf]]

Celui que j'avais posté dans le premier lien : http://mooc.fi/courses/2013/programming-part-1/ :oui:

Données du topic

Auteur
JamereBurvelle
Date de création
22 novembre 2017 à 23:04:59
Nb. messages archivés
412
Nb. messages JVC
410
Voir le topic sur JVC

Afficher uniquement les messages de l'auteur du topic

En ligne sur JvArchive

JvArchive compagnon

Découvrez JvArchive compagnon , l'userscript combattant la censure abusive sur le 18-25 !