En fait j'ai une petite question qui me turlupine un peu depuis quelques temps.
J'ai débuté la programmation orienté objet par le java.
Les classes que j'ai développé en Java ont toujours été pensées au mieux pour le besoin du
moment. Cependant rien n'empêche d'avoir un oeuil ouvert sur le future, en pesant qu'il
serait probablemenet utile de les spécialiser via l'héritage.
Pour résumer un membre accessible est 'public', un membre encapsulé est 'protected' sauf cas particulier, si il n'appartient qu'a cette spécialisation de la classe et qu'il est accessible sous une autre forme.
Or
Par défaut en C# tout ce qui est caché est 'Private'
Je constate donc que l'on a beaucoup moins de possiblité d'héritage.
LA QUESTION :
Pourquoi java favorise les membres protégés et pourquoi C# favorise les membres privées
Cela pose-t-il un pb de performance ? (mise à part la (pré)compilation, je ne vois pas)
Microsoft, par le biais de la plate forme .Net, veux proner la sécurité.
Je crois que ceci amène cela.
Par défaut, tout est private, ainsi si quelqu'un veut heriter une
classe de ton assemblage, il n'aura pas accés a des méthodes ou
variables qui pourrait faire foirer la classes en cas de mauvaise
utilisation.
Il y a surement d'autres explications, mais c'est comme ca que je vois la chose.
Cependant, c'est pas pour ca quil y a "moins de possibilité d'hétitage"
pour reprendre tes mots. Rien ne t'empeche de spécifier ce que tu veux
qui soit accessibles aux classes filles en specifiants tes méthodes et
propriétés en protected.
Des variables privées pour l'instance de la classe.
Des Accesseurs / Propriétés public pour tout le monde
Des Accesseurs / Propriétés protected pour les classes dérivées.
Des Accesseurs / Propriétés internal pour l'assembly en cours.
Dans tout les cas tu ne devrais pas mettre un champs avec une visibilité autre que private.
C'est dommage que Microsoft voit le développement de cette façon ! Ca confirme une tendance où le développeur devient de moins en moins responsable...<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Si le programmeur est 'mauvais' ou mal intentionné, rien ne l'empêche de toutes façon d'aller mettre la 'grouille'. Une classe bien documentée fournissant un comportement de base à plus d'utilité qu'une classe (usine à gaz) essayant de tout faire sans exposer une partie de son fonctionnement interne
Maintenant, pour répondre à TheSaid, je n'ai pas la même définition du code propre. C'est plutôt une vision fermée et, c'est vrai, un peu plus sécurisée
Même si il faut rester prudent sur le protected, le private doit rester un cas particulier sinon qu'elle est l'intérêt d'hériter ? Autant encapsuler la classe (oui c'est un peu radical). Enfin c'est mon point de vue.
Non mais dites donc, les développeurs java ont il plus confiance entre eux que les développeurs C# ??? Les développeurs java sont ils plus compétents en conception objet ?
En tout cas merci pour vos réponse, même si nos points de vues sont divergents
Dans tout les cas les attributs sont encapsulés. De plus le fait de faire ainsi permet de faire de la vérification de type ou de saisie ce qu'une simple variable protected ne peux pas faire lors de son affectation.
Je ne cherche pas à te convaincre, je ne fait pas de l'évangélisation de quoi que ce soit. Mais je pense que tu auras l'occasion de te rendre compte plus tard de l'impotance de la protection des données et par conséquence de l'intêret de bien caracteriser la portée de tes attributs. Et je t'assure que cela n'a rien a voir avec le : "Je code bien , tu codes mal" ou de confiance réciproque entre développeur.