|
Publicité ' | ||||||||||||||||||||||||
|
|
#1721 | |
|
Nouveau Membre du Club
![]() Architecte serveur Inscription : septembre 2011 Messages : 33 ![]() |
Je vais développer plus mon propos, parce que malgré tous les votes négatifs, je ne pense pas être totalement à l'ouest. Donc je me laisse un dernier post pour tenter de vous convaincre.
Citation:
Autre exemple, le cycle de vie des objets. En C++ on y échappe pas, vu qu'un objet non initialisé, comme un objet delete ne peut être dissocié d'un objet en vie. En Java, on peut juste faire un test de non nullité. Je suis donc déjà tombé sur du code Java constellé de tests de non nullité non commentés, sans logs sur le else, et sans même que le dév qui les ai écrits ne sache me dire dans quelles conditions l'objet pouvait être null. Juste, tout le code en était constellé, il en déduisait donc que l'alternative était possible. Voire, le dév m'a parfois juste répondu que des fois l'objet était null, et qu'il avait loggé la chose. Effectivement, il y avait un log dans son code que personne ne comprenait (pas même lui, fondamentalement, vu qu'il ne savait pourquoi l'objet pouvait être null), et qu'il n'avait juste jamais remonté, alors que tout le monde pensait que le bug lui était dévolu, vu que le log était dans son code. En C++, ce genre de code léger n'existe pas, et donc les erreurs ne peuvent passer sous silence. Quoi que, dixit un de mes anciens boss, les smartpointers de boost permettent d'éviter un paquet de crash Quant à passer tous ses dévs au goudron et aux plumes, je paraphraserai un grand penseur moderne : On est tous le bidouilleur de quelqu'un. Maintenant, l'autre question que tu soulèves est : "Est ce que ce genre d'erreurs peuvent être associées au langage ?" Je te répondrais par une question : "A quoi cela sert il de catcher un NullPointerException ?" |
|
|
|
00
|
|
|
#1722 | |
|
Membre Expert
![]() Développeur Java Indépendant Inscription : mai 2007 Messages : 1 336 ![]() |
Citation:
Par contre on peut lever une CheckedException si le test de nullité est vérifié.
__________________
Yoshi PS : tous les propos tenus dans le message ci-dessus sont à préfixer avec "A mon humble avis", "Je pense que". Il serait inutilement fastidieux de le rappeler à chaque phrase. Apprendre la rhétorique (en construction) |
|
|
00
|
|
|
#1723 | |
|
Membre confirmé
![]() Inscription : mars 2007 Messages : 257 ![]() |
SuperBidi, en java on teste si une référence est null, car il est possible qu'un champ d'un objet soit null (si c'est un objet et que tu ne l'as pas initialisé c'est sa valeur par défaut).
Et on peut ne pas avoir systématiquement besoin d'initialiser un champ, peut être qu'on va l'initialiser lors de sa première utilisation d'ou le test à null. En C++ si tu n'initialise pas ton champ il a la pire des choses, une valeur indéterminée. Ca ne va même pas t'empêcher d'utiliser ce champ et même d'appeler des méthodes dessus, ça ne plantera que lorsqu'une méthode tentera d'accéder à un objet de la classe, et ça le fera à l'exécution. En java c'est impossible, si tu appelles un méthode sur une variable null, tu as immédiatement un NullPointerException et tu sais que tu as un bug. Citation:
Tu écris Tomcat par exemple, lorsqu'une page web est appelée, Tomcat appelle la servlet correspondante, il est très probable qu'ils catchent tout, parce qu'ils ne maitrisent pas le code de la servlet (puisqu'il est fourni par un tiers), il ne faudrait pas qu'un bug dans la servlet ferme totalement Tomcat. |
|
|
|
40
|
|
|
#1724 | ||||
|
Expert Confirmé Sénior
![]() ![]() Développeur d'applications Inscription : novembre 2005 Messages : 2 324 ![]() |
Citation:
Mais sitôt qu'il s'agit de code que tu livres à des clients, s'il n'a pas un minimum de standard de qualité ben ça te retombera dessus. A mon sens, rien n'est pire dans ce métier que du code faux qui marche "par bol" en développement et qui foire en production avec des conséquences. Et ça c'est le genre de choses auxquelles on s'expose avec des pratiques fumeuses comme celle dont tu parles. Les délais n'excusent pas tout non plus car faire une gestion d'erreur correcte n'est pas excessivement onéreux, c'est pas ça qui te fait perdre 3 semaines sur un développement de 3 mois. Citation:
Citation:
Citation:
Il y a, avec certains langages comme PHP la possibilité de fautes assez subtiles ( comme celles dues à des libertés accordées au développeur sur le typage) que l'on pourrait effectivement mettre sur le dos de son côté permissif. Mais ce que tu cites là, c'est pas de simples manque d'attention mais carrément des fautes qu'on ne peut pas vraiment commettre involontairement. |
||||
|
|
42
|
|
|
#1725 | |
|
Membre du Club
![]() |
Citation:
|
|
|
|
03
|
|
|
#1726 | |
|
Membre expert
![]() Ingénieur R&D Inscription : juin 2003 Messages : 4 502 ![]() |
Citation:
C'est comme dire que le C a de beaux jours devant lui (ce que je ne doute pas) parce que le compilateur C++ est écrit en C....Le premier compilateur sûrement mais plus maintenant...
__________________
" Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin. Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ] |
|
|
|
01
|
|
|
#1727 | |
![]() ![]() |
Citation:
De plus, il n'y a rien à faire, il faut et il faudra toujours -- même si c'est pour des "secteurs de niche"-- des langages qui soient, en tout état de cause beaucoup plus proche de la machine que ce que peut l'être java, même dans sa version compilée. Ceci dit, on peut en dire autant en ce qui concerne la quantité de code java, surtout quand on voit le nombre de projets à démarrer pour lesquels le choix s'est orienté vers lui
__________________
en bas de page |
|
|
|
20
|
|
|
#1728 | ||
|
Membre Expert
![]() frederic frances Inscription : juin 2009 Messages : 1 703 ![]() |
Citation:
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis. http://www.improetcompagnie.com/publ...ctacles-6.html Citation:
http://www.emacswiki.org/ Attends de voir ce qui vas sortir de: http://www.pushmid.com |
||
|
|
20
|
|
|
#1729 |
|
Membre actif
![]() Inscription : août 2005 Messages : 282 ![]() |
Vue sous cet angle, le C est largement préféré au C++ par la communauté des développeur lorsqu'on veut faire un développement "proche de la machine" . Le C++ a finalement de la peine a trouver sa véritable place, quelque soit le critère de choix que l'on opte (productivité, performance, robustesse, maintenabilité etc) on pourra difficilement choisir le C++ comme langage pour démarrer un nouveau projet, et il ne sera finalement utilisé que pour maintenir du code ancien
|
|
|
04
|
|
|
#1730 | |
![]() ![]() |
Citation:
Il ne faut pas croire que, parce que l'on dit "proche de la machine", on parle d'office de drivers, non plus Je travaille actuellement sur un projet industriel entièrement écrit en C++ qui n'a été démarré il n'y a "que" 5 ans Je ne doute pas qu'il y aurait sans doute moyen de faire le même projet en java, mais je ne suis pas sur du tout que nous pourrions atteindre le degré de performances obtenu en C++ ![]() Dans certaines situations, le recours au garbage collector ou à une machine virtuelle (ou à d'autres obligations apportées par java) n'est, purement et simplement, pas envisageable, mais où l'apport du paradigme OO ou du paradigme générique est indispensable. Dans de telles situations, le seul langage qui reste, c'est C++ La place de C++ est relativement simple : entre le driver et l'application qui peut se permettre de recourir à une machine virtuelle Et encore, il y a parfaitement moyen de décider d'écrire un driver avec
__________________
en bas de page |
|
|
|
60
|
|
|
#1731 | |
|
Membre actif
![]() Inscription : août 2005 Messages : 282 ![]() |
Citation:
Je ne sais pas trop personnellement. Mais si je me fis aux témoignages de certains développeurs de référence ( par exemple le mec qui est à l'initiative de linux) et au vu du classement des langages les plus populaires ( où le C est en passe de devenir le langage n° 1), lorsque les performances, la bonne gestion des ressources sont critiques, les paradigmes OO du C++ apportent beaucoup plus de problèmes qu'ils n'en résolvent, c'est pour cela que dans ces cas beaucoup préfère utiliser directement le C. Et si dans une application les paradigmes C++ ne posent pas de problèmes, il est fort probable qu'on aurait pu obtenir les mêmes résultats mais avec plus de productivité, de robustesse ou de portabilité si on avait utilisé C# ou Java par exemple. |
|
|
|
15
|
|
|
#1732 | |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 8 741 ![]() |
Citation:
Je pense plus prosaiquement que comme le C++ a été poussé par les formations/universités et que les jeunes du début des années 2000 ne juraient que par le C++, en jetant aux oubliettes le C (pouah. C'est pas un langage objet) , un certain nombre d'industries ont basculé vers le C++ par manque de main-d'oeuvre et formation inadéquate des dirigeants de l'époque. Mais pour en faire depuis 23 ans tout en n'étant pas un "systémique", je ne vois pas en quoi le C serait plus réservé aux drivers : je n'ai jamais écrit de driver de ma vie, et toutes les appls que j'ai faites sont "haut-niveau".. Je ne sais pas compter en hexa ni en octal, je n'ai jamais programmé sur un kernel, et pourtant j'ai plus de 6 millions de lignes de code en C à mon actif.. Pour moi le C sert à faire des applis performantes, avec des facilités d'optimisation, dans un langage que tout scientifique comprend, comme le Fortran. Et avec un paradigme de fonctionalités, ce qui est très nettement plus correspondant à ce que pense un scientifique que le paradigme objet.
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
|
64
|
|
|
#1733 |
|
Membre éprouvé
![]() |
Stop le HS là (en plus vous dites n'importe quoi)
|
|
|
36
|
|
|
#1734 |
|
Expert Confirmé Sénior
![]() ![]() Développeur d'applications Inscription : novembre 2005 Messages : 2 324 ![]() |
|
|
|
31
|
|
|
#1735 | ||
|
Membre Expert
![]() frederic frances Inscription : juin 2009 Messages : 1 703 ![]() |
Citation:
Prendre un concept la ou il est inutile conduit aux problèmes, utiliser un outil que l'on ne maitrise pas conduit aux problèmes.... Exemple bidon mais qui illustre bien, dans ma boite à outil j'ai une perceuse, un tournevis et un marteau. Si je dois percer un trou je choisi la perceuse. de même pour les développements mes choix sont d'essayer de prendre l'outil le plus adapté à mon besoin parmi les outils dont je dispose. Si je ne sais pas me servir de ma perceuse, soit je prends le temps de comprendre comment elle marche avant de l'utiliser soit je ne l'utilise pas, si je l'utilise sans savoir comment ca marche je risque de faire n'importe quoi et potentiellement de me blesser. Pour en revenir à notre cas Un langage est un outil qui te permet de réaliser l'application que tu dois réaliser, ne pas maitriser son outil conduit souvent aux problèmes. Une partie non négligeable des soucis que j'ai vu sur les projets et ce quelque soit le langage (c/c++/java/fortran/lisp/shell/...) étaient liés à une incompréhension du langage, ou des concepts permettant de réaliser l'application, les utilisations à contre emploi de certaines idées/concept sont aussi ne source de bétises (percer un trou avec le marteau de la boite a outil)... Ces erreurs ont tendance à disparaitre souvent quand les outils/concepts sont maitrisés. Chaque langages tente d'apporter ses réponses à des concepts les autres étant à implémenter, libre a toi de les utiliser ou non, de les implémenter ou non quand ils ne sont pas présent.
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis. http://www.improetcompagnie.com/publ...ctacles-6.html Citation:
http://www.emacswiki.org/ Attends de voir ce qui vas sortir de: http://www.pushmid.com |
||
|
|
20
|
|
|
#1736 | ||
|
Membre Expert
![]() frederic frances Inscription : juin 2009 Messages : 1 703 ![]() |
Citation:
C et C++ sont parfaitement portable si tu as tu t'impose une certaine discipline que t'impose d'autres technos. java peu ne pas être supporté par certains matériels spécifiques si aucune jvm n'a été porté sur ce type de palteforme, et si tu sors des standards tu peux avoirs soucis avec la porta comme pour les autres langage. exemple utiliser des trucs dans java.sun.misc et ensuite devoir porter ton application sur une jvm non différente de celle de sun (oracle maintenant)
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis. http://www.improetcompagnie.com/publ...ctacles-6.html Citation:
http://www.emacswiki.org/ Attends de voir ce qui vas sortir de: http://www.pushmid.com |
||
|
|
50
|
|
|
#1737 | ||
![]() ![]() |
Citation:
Et ce dont tu parles n'a qu'un seul mérite : celui de prouver que même les génies peuvent avoir leurs lacunes et dire des idioties Malgré tout le respect que j'ai pour lui, Tovald n'a jamais rien compris au paradigme OO et n'y comprendra sans doute jamais rien!!! Je suis le premier à dire qu'il est particulièrement facile de faire des erreurs en voulant utiliser le paradigme OO, et que c'est d'autant plus vrai quand le langage a décidé de ne pas imposer de limites arbitraires à sa manière de le mettre en oeuvre. Mais il ne faut pas jeter bébé avec l'eau du bain : Le problème n'est pas le paradigme objet, ni le paradigme générique!!! le problème est la méconnaissance des principes qui sont d'applications. Citation:
Je reconnais cependant qu'il faut être beaucoup plus attentif à respecter les principes OO en C++ car il n'a pas, contrairement aux autres langages cités, imposé de restriction aribraire Peut etre me diras tu que c'est la grande force de java ou de C# que d'avoir su imposer ces restrictions arbitraires (je pense, entre autres, à l'interdiction de l'héritage multiple, mais pas seulement N'importe qui est en mesure d'assimiler très rapidement la syntaxe de n'importe quel langage, mais ce n'est pas pour autant que la programmation doit être considérée comme "facile" Il est assez frappant de constater que la réponse que la plupart des gens apportent à la question "quelle est la base de la programmation OO" et l'encapsulation, alors que la base de la programmation OO est en réalité... la subsituabilité (comprend : le fait qu'un objet de n'importe quel type héritant d'une classe de base puisse "passer pour" un objet de la classe de base elle-même). Le problème des langages comme Java, c'est qu'ils ont décidé de faire en sorte que tout objet créé héritera d'office d'une classe de base commune (Object). Tu me demanderas sans doute où est le problème Le deuxième problème, même s'il s'agit d'un cas d'utilisation rare, est qu'il devient impossible de décider de faire en sorte qu'un type particulier hérite de deux classes distinctes car cela impliquerait le fait que le type en question aurait deux représentations de la classe de base de ces deux classes distinctes. Or, il n'y a aucune raison objective (hormis un problème de conception à la base) pour vouloir imposer une telle limite dans le paradigme OO Enfin, le fait d'imposer le fait que tout soit d'office objet (que l'on doive créer un objet contenant la fonction principale) est en lui-même quelque part aberrant, car il n'y a strictement aucune raison d'interdire la création de fonction libres, étant donné que le paradigme OO utilise malgré tout le paradigme impératif Enfin, bref... Tout cela pour dire que, à mon avis (qui n'engage que moi, bien sur Pour finir, je dirai que si l'on commençait surtout par apprendre les principes OO (et je ne parle même pas des principes évolués, seulement de LSP, demeter ou encore la responsabilité unique
__________________
en bas de page |
||
|
|
35
|
|
|
#1738 | ||||
|
Expert Confirmé Sénior
![]() ![]() Développeur d'applications Inscription : novembre 2005 Messages : 2 324 ![]() |
Tout à fait d'accord au sujet de Torvald. Enfin c'est son avis, j'ai lu à plusieurs reprises des trucs de ce genre venant de programmeurs C.
Citation:
Il y a aussi les temps de compilation qui n'ont rien à voir. Pour le même temps que je compile un projet de 30 classes basé sur boost (~50 secondes), je peux compiler facilement 5mo de code java. Enfin ces petites choses (outillage, monde très homogène etc...) jouent quand même un peu sur la productivité. Je pense qu'à niveau de développeur égal, java et C# sont quand même plus productifs que C++. Citation:
1) Chaque objet peut être converti en chaîne, par défaut le type et l'adresse sont imprimés. 2) Chaque objet peut être testé d'égalité avec un autre (par défaut l'égalité est basée sur l'adresse, comme une égalité de pointeur c++). 3) Tout objet peut potentiellement être clé ou valeur d'une map. Donc contrairement à ce que tu sembles penser ça ne donne pas à la voiture une méthode toCompote() ni à la pomme une méthode freine(), ça définit juste un cadre minimal d'interaction entre les objets au sein du framework de base. C'est pas complètement idiot en fait comme choix de conception, et d'ailleurs chez Qt on a aussi choisi de tout faire hériter d'un QObject, ça permet au framework de s'appuyer sur une série de fonctions de base. Tu peux manipuler une voiture et une pomme dans une collection, même si les collections d'objets hétérogènes sont de plus en plus considérées comme une hérésie à juste titre, cependant, sans cast tu devras te contenter de ce qui est présent dans Object. Tout comme tu peux créer une collection de void* en C++. Cependant il est clair que dans les 2 cas et peu importe le langage en somme, si tu dois trop souvent caster des objets il faut te demander si ta conception est réellement la bonne. Citation:
Citation:
Enfin voilà, je peux pas te donner tort sur le fond, toutefois je pense qu'il y a un équilibre entre les libertés accordées, les performances de compilation et la frustration utilisateur à trouver. Et chacun le ressent différemment.
|
||||
|
|
22
|
|
|
#1739 | ||||||||
![]() ![]() |
Citation:
Citation:
Or, cela n'a strictement aucun sens Citation:
Citation:
Citation:
Citation:
Les développeurs plus ou moins aguerris ont tellement l'habitude de les utiliser qu'ils ne s'en rendent même plus compte, mais, quand il s'agit de lire l'explication à leur sujet, il y a de quoi devenir chêvre : Nous sommes dans un contexte dans lequel "tout est objet", et on nous dit que c'est une fonction qui ne dépend d'aucun objet en particulier du type en question, mais qui est partagée par l'ensemble des objets et qui appartient pourtant à la classe!!! Il faut, tu l'avoueras, s'accrocher pour arriver à s'y retrouver, non Quant à l'héritage multiple, s'il est correctement envisagé, il n'apporte pas plus de limitations que l'héritage simple Car, même dans les cas tordus où l'on souhaiterait pouvoir faire hériter une classe de deux classes distinctes ayant la même classe de base, il est tout à fait possible d'éviter la duplication des données propres à cette classe de base Je l'admet cependant volontiers, cela nécessite une attention de tous les instants quand on décide de recourir à l'héritage multiple (mais il faut déjà, en théorie, être particulièrement attentif quand on envisage l'héritage simple Citation:
Ce n'est pas pour rien que l'on parle pour la norme "qui suivra" celle qui vient de paraitre, de la mise au point de "modules" dont le but est, justement, d'éviter d'avoir à recompiler les 7300 fichiers qui incluent de manière directe ou indirecte un fichier d'en-tête parce que ce dernier a changé Citation:
__________________
en bas de page |
||||||||
|
|
30
|
|
|
#1740 | |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 8 741 ![]() |
Citation:
En ce qui concerne les fichiers d'entête.. Maintenant, lorsque j'ai vu tourner des compils en C++ sur de (très)gros projets, en fait il semble que le temps est surtout passé à aller explorer puis ré-explorer les définitions de classes.. Sans doute parce que la philosophie sous-jacente est d'avoir une clase dans un fichier... Et que ça peut finir par faire beaucoup beaucoup.. Je pense que ce genre de problème est beaucoup plus dû à cette manière de découper ses fichiers (donc à une application stricte de la philosophie OO) que à la chaîne de compilation, qui, elle, DOIT s'apercevoir qu'une dépendance à changé et que donc le module doit être recompilé... J'espère que la chaîne de traitement et la fonctionalité du Makefile et des dépendances ne changera pas.. C'est un super outil et une excellente chose..
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
|
20
|
Copyright © 2000-2012 - www.developpez.com