![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
youtpout978
Après c'est un choix des concepteurs de la plateforme, on ne peut pas dire qu'il soit mauvais ou bon et il est aussi lié a d'autre comportement de la plateforme, tout hérite d'objet ce qui permet de faire des méthodes de base qui marcheront avec tous les composants.
Et dans tous les langages il y a des gens qui se croient bon c'est pas propre a java ou c#, c'est la simplicité d'accès à ces plateformes et la demande actuel qui fait qu'il y en a un peu plus dessus mais de là a dire que c'est à cause du langage.
Mais le problème, c'est que vous ne vous rendez pas compte que ces deux langages vous mentent depuis le début...
Quand l'étudiant écrit une classe en java, il peut croire (tant qu'on ne lui a rien dit) que sa classe fait partie d'une hiérarchie tout à fait à part... Non, non, non, pas de chance... elle hérite (sans qu'il n'ai rien demandé !!!) de Object, ce qui fait que, bien malgré lui, sa classe s'insère dans une hiérachie de classes mégalithique qui contient jusqu'à la classe créée par un étudiant à l'autre bout de la terre !!!
Notes bien que je comprend ce choix de conception, mais il est clair (je crois que tu l'auras compris
![:D](https://www.developpez.net/forums/images/smilies/icon_biggrin.gif)
) que je ne le partage pas
![;)](https://www.developpez.net/forums/images/smilies/icon_wink.gif)
.
La deuxième chose sur laquelle le langage vous ment, c'est la notion d'interface, et, pour "faire passer la pilule", il a été jusqu'à introduire trois nouveaux mots clés : interface implements et inherits.
Mais, si tu fais abstraction de ces mots clés, quelle différence y a-t-il entre une classe et une interface
![:question:](https://www.developpez.net/forums/images/smilies/icon_question.gif)
En gros:
- une classe hérite d'office de Object, et je ne sais plus si c'est le cas d'une interface
- une interface peut avoir des comportements indéfinis, mais pas une classe
- une classe peut etre instanciée, mais pas une interface... Seulement, cette troisième différence découle directement de la deuxième parce que les compilateurs ont horreur du vide.
Finalement, une interface, ce n'est jamais... qu'une classe dénaturée
![:aie:](https://www.developpez.net/forums/images/smilies/aie.gif)
Parce que, si tu regardes en termes de conception, tu constates qu'une classe est substituable à une interface (tu peux passer un objet "implémentant" une interface donnée à toute fonction qui attend cette interface).
Oui, mais... attends un tout petit peu... dés que l'on parle de substitution, on parle du principe de substitution de liskov (le L de SOLID) !!!!
Et que nous dit ce principe encore ?
![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
Barbara Liskov
Let q(x) be a property provable about objects x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T.
...
for objects y of type S where S is a subtype of T...
Ca fait quand même furieusement penser à l'héritage, tu ne trouves pas
![:question:](https://www.developpez.net/forums/images/smilies/icon_question.gif)
En fait, lorsque tu écris le mot clé implements, il ne faut pas te leurrer, en interne ca équivaut à un héritage, et qui plus est, multiple vu que la classe qui implémente une interface hérite d'office de Object!!!
Alors, voilà un point de réflexion intéressant : D'un coté, le langage vous dit "attention malheureux, n'héritez jamais de deux classes en même temps".
Mais, d'un autre coté, il vous dit aussi "Par contre, vous implémentez autant d'interface que vous le voulez".
Mais comme une interface n'est au final qu'une classe dénaturée et que l'implémentation d'une interface correspond exactement à la définition de l'héritage,
- Quel crédit peut on donner à un langage qui nous interdit d'un coté ce qu'il nous autorise (que dis-je... ce qu'il nous incite à faire le plus souvent possible) de l'autre
![:question:](https://www.developpez.net/forums/images/smilies/icon_question.gif)
- Quel crédit peut on accorder à un langage qui nous ment dés le départ sur la base de ses mots clé
![:question:](https://www.developpez.net/forums/images/smilies/icon_question.gif)
Ce n'est qu'un avis personnel, mais, à choisir, je préfère un langage qui ne m'interdit rien mais dont tout me met en garde sur sa complexité, et qui me garanti que je ne devrai pas payer ce que je n'utilise pas
![;)](https://www.developpez.net/forums/images/smilies/icon_wink.gif)
[EDIT]Finalement, je trouve presque cocasse le fait que ce soient en définitive ceux qui ont le plus dans leur culture de recourir à l'héritage multiple qui viennent nous demander quel intérêt on peut trouver à la technique
![;)](https://www.developpez.net/forums/images/smilies/icon_wink.gif)
A leur décharge, comme le langage leur ment, il y ont recours sans même s'en rendre compte
![;)](https://www.developpez.net/forums/images/smilies/icon_wink.gif)
[/EDIT]
3 |
0 |