Série «Bashing Java» :
Notes sur la programmation orientée objets
Dans la plupart des écoles d’informatique, il y a un cours qui s’appelle généralement POO. S’il ne s’apelle pas comme ça, il s’appelle alors plus honnêtement Java ou C♯. On y apprend alors généralement que le Java, le C♯ ou le C++ sont les langages dit orientés objets. Certains profs pourrons même aller jusqu’à donner une définition d’un objet en disant que c’est un ensemble de données (comme les structures en C) et de méthodes de traitement sur ces données.
Sauf que partant de cette définition, on peut parfaitement définir le C comme un langage orienté objet car il suffit de rajouter à une structure des pointeurs sur fonction, de les assigner lors de l’allocation et hop ! Un objet ! Bon c’est un peu bancal alors certains profs prendront quand-même la peine de préciser que pour faire de l’orienté objet, il faut pouvoir faire de l’héritge d’objets, bla bla… Lire la suite
Les interfaces sont-elles un mauvais patron de conception ?
Bon, je vais pas faire de mystère, j’ai déjà eu l’occasion de dénigrer le principe des interfaces dans de précédents articles donc autant répondre à la question tout de suite : oui, je pense que les interfaces en POO sont une mauvaise pratique. Mais pour pouvoir affirmer une telle chose, il faut pouvoir l’expliquer. Sur ce sujet, mes notes sur la POO constituent une bonne introduction de mon propos, je pense. Alors commençons tout de suite avec le vif du sujet.
L’idée de départ derrière les interfaces
La première formalisation concrète de la programmation orientée objets apparaît avec les travaux d’Alan Kay et son langage de programmation SmallTalk. Une des caractéristiques de la POO est le principe d’objets et d’héritage entre objets. L’héritage est une notion simple qui consiste à dire qu’un objet va en étendre un autre et donc hériter implicitement de… Lire la suite
Les bonnes et les mauvaises critiques sur Java — Épisode 1 : Les mauvaises critiques
Ouais, je fais pas dans la dentelle.
Aujourd’hui je commence une série qui dissertera, de mon point de vue, des critiques couramment portées sur Java et des vrais problèmes du langage.
Avec l’ami Chocobozzz, nous sommes à peu près d’accord pour dire que Java est un mauvais langage. Cependant, notre désaccord porte sur la nature de ces problèmes. La plupart de ses critiques pourraient être résumées avec la BD suivante :
Bien que cette BD soit hilarante (essentiellement parce que j’aime le troll), ces critiques sont malheureusement hors de propos. En premier lieu, parce qu’elles portent sur la technique de la semi-compilation interprétée dans une VM et non sur le langage lui-même. De fait, c’est un reproche que l’on pourrait étendre à tout langage qui n’est pas purement compilé : C♯, Groovy, Scala, Kotlin, Python, Jython, Ruby, JRuby, PHP, OCamL, Perl, JavaScript, Lua, etc.
Mais surtout,… Lire la suite
Les bonnes et les mauvaises critiques sur Java — Épisode 2 : La syntaxe
La syntaxe est, à mes yeux, le plus gros problème de Java. Le langage n’a pas su évoluer avec le temps au contraire d’autres comme Python. Je sais que je cite souvent les mêmes exemples mais ils sont à mes yeux révélateurs du problème. La syntaxe est lourde à pleurer et il est hallucinant que certains concepts n’ont toujours pas été ajoutés avec le temps à la syntaxe. En voici quelque-uns :
Les chaînes templates et multilignes.
Manipuler des chaînes de caractères est une vraie plaie en Java. Il est impossible de déclarer des chaînes multilignes facilement. Le moindre retour à la ligne oblige à ajouter le caractère spécial
\n
et la moindre insertion de variable oblige à casser la chaîne et la concaténer en utilisant l’opérateur
+
. En Ruby, en Python et en Groovy, ce type de chaîne se déclare avec trois guillemets (en Groovy) :
def val… Lire la suite
Les bonnes et les mauvaises critiques sur Java — Épisode 3 : Les « bonnes » pratiques
Toutes les communautés qui se forment autour d’un langage développent un certain nombre de bonnes pratiques ou de conventions. Elles n’ont rien d’obligatoire pour maîtriser le langage mais sont généralement plus ou moins suivies par les développeurs et on conseille généralement aux débutants de s’y mettre tôt. Cela peut aller du style de développement, comme la très célèbre PEP8 de Python à l’utilisation conseillée de certains design patterns. Et Java ne manque pas de ces derniers, la plupart détaillés dans le bouquin Effective Java dont je vous ai déjà parlé. Je vais être franc : je considère une bonne partie de ce qui est écrit dans ce bouquin comme étant carrément dispensable. Soit que ce sont des conseils de bon sens absolument pas exclusifs à Java, soit que se sont des stratégies pour palier aux déficiences patentes du langage, soit que ce sont tout simplement une monstrueuse pile de… Lire la suite
Java 8 : complexify all the things!
Des fois, je me dis que l’objet des réunions de chez Oracle, ça doit être quelque chose comme : « augmentation de la complexité ». J’imagine bien un truc du genre : tout le monde fume un bon gros bédo avant d’entamer les discussions sur le premier sujet : « reprendre l’implémentation des fonctions anonymes de Groovy et bien la pourrir pour la rendre à chier ». Et faut avouer que, dans leur domaine, ils sont plutôt bons, ces cons !
Récemment, nos projets au boulot ont commencé à migrer vers Java 8 et j’ai enfin pu mettre les mains dans les lambdas et les opérations map, filter, reduce sur les listes. Ben je m’attendais pas à grand-chose et ils ont quand-même trouvé le moyen de me faire halluciner…
Lambdas Canada Dry (que ça ressemble aux lambda mais qu’en fait, ç’en est pas)
Donc j’ai pu essayer les lambdas et… Lire la suite
L'inférence de type en Java : on continue de faire n'importe quoi, yaye !
Je viens de tomber sur un article de D-Zone qui détaille une proposition pour ajouter l’inférence de type pour les variables locales dans Java 9. Alors… Bon, vous me connaissez, en ce qui concerne Java, j’aime bien tirer sur l’ambulance. Et dans cet article, je vais pas me priver
On remarque, qu’encore une fois, Java ajoute une fonctionnalité réclamée à cor et à cri par les développeurs avec des plombes de retard. Après tout, c’est vrai, l’inférence de type sur les variables locales, ça existe depuis, quoi ? 13 ans dans Groovy ? 12 dans Scala ? 9 dans C♯? 5 dans C++ ?
L’inférence de type pour les nuls
Bon, revenons au point de départ : l’inférence de type, c’est quoi ? C’est capacité pour le compilateur ou l’interpréteur du langage à déduire le type d’une variable sans que le développeur n’ai à le préciser explicitement. Dans… Lire la suite