Qu'est-ce que cela signifie pour une méthode d'être public / privé / autre en Java?
Quels sont les avantages et les inconvénients de ces options?
Quel est mon impulsion, comme quelqu'un essaie d'être un bon programmeur, de s'en soucier? p>
6 Réponses :
La raison principale est appelée encapsulation: ne donnez pas accès à l'état interne d'objet. P>
Pourriez-vous s'il vous plaît entrer dans plus de détails?
Un objet peut avoir un état; Par exemple, il peut avoir les propriétés des couleurs de premier plan et d'arrière-plan modifiables. Cet état serait détenu dans l'objet comme une valeur de certains types de variable (s). La mise en œuvre souhaitera peut-être stipuler les restrictions sur la manière dont les couleurs peuvent changer (par exemple, les deux couleurs peuvent ne pas être identiques). Si les variables étaient publiques et directement accessibles, les utilisateurs peuvent violer la maladie (alias invariant), transition de l'objet dans un état imprévu / illégal. La mise en œuvre peut plutôt rendre les variables privées et permettre des mutations valides via une méthode publique.
hle Les modificateurs publics, protégés et privés contrôlent quel autre code peut voir ces méthodes (ou champs). Il s'agit de contrôler l'interface que vous exposez.
Les couramment utiles sont: p>
Le modificateur public: tout autre peut voir votre méthode. P>
Le modificateur privé: Aucun code autre que votre classe et toutes les classes intérieures peuvent voir votre méthode. p>
Celles-ci seraient utiles par exemple si vous vouliez vous assurer qu'il n'y avait qu'une seule instance d'une classe jamais créée ( Singleton modèle ). Vous pouvez créer le constructeur privé, créer une seule instance et le magasin est en tant que membre privé appelé instance et fournir une méthode publique quelque chose comme ceci: p> et afin que vous puissiez garantir qu'il n'y aura que chaque instance. p> mise à jour - un autre exemple tel que demandé. p> Un autre exemple peut être où vous avez une méthode publique compliquée et que vous souhaitez le casser. dans des parties plus simples. Vous pouvez la rompre dans des méthodes simples, chacune faisant partie du travail, mais vous ne voudrez pas que l'autre code appelle ces méthodes de pièce, car elles ne travailleraient pas seules - vous feriez donc les méthodes plus petites privées, garantissant ainsi qu'ils ne peuvent pas être appelés en dehors de votre classe. p> p>
Pourriez-vous s'il vous plaît entrer dans plus de détails sur l'utilité?
MyObject ne pouvait-il pas être invoqué plusieurs fois? Cela n'aurait-il pas conduit la création d'instances mutliples de la classe?
Non - Calling MyObject.GetInstance () ne crée pas de nouvelle instance, il renvoie simplement celui qui a été déjà créé. Les invocations répétées continueront de retourner le même instance.
Les méthodes privées fortes> peuvent être appelées uniquement à l'intérieur de la classe. Vous pouvez appeler voir http://fr.wikipedia.org/wiki/Object_oriented_programming#encapsulation p>
Quel est mon impulsion pour le faire pour que une méthode ne puisse être appelée que dans la classe?
Parfois, vous avez une méthode qui n'est nécessaire que dans une classe. Cela peut être une fonction de conversion ou une autre pièce de code supplémentaire.
Il n'est pas toujours conseillé de mettre en œuvre une fonctionnalité exposée via une méthode publique, dans le corps de cette méthode publique elle-même. Une méthode publique peut avoir besoin d'appeler d'autres méthodes pour exécuter son comportement. Ces autres méthodes sont donc destinées à être utilisées internes et doivent être marquées privées.
Une méthode publique peut être accessible de partout, une méthode privée uniquement de la même classe. Le principal avantage est le contrôle de l'API d'une classe. Si je ne fais que du public ce qui est nécessaire, je peux changer le comportement interne d'une classe, sans casser le code en fonction de cette classe. Vous devriez vous soucier, car les logiciels changent souvent dans le monde réel (au moins c'est mon expérience et d'autres l'ont aussi) et plus chaque changement se casse, plus vous avez de l'énergie que vous devez mettre en maintenance ou plus votre logiciel est votre logiciel. En fin de compte, c'est une question de coûts. P>
La possibilité de cacher les internes de votre classe à partir des utilisateurs de cette classe afin d'éviter de casser le code par des modifications ultérieures est souvent appelée encapsulation ou INFORMATION CADIANT . P>
Les deux options en plus du public et que le package (sans modificateur) et protégé. La méthode accessible par le paquet peut également être accessible à partir de classes du même paquet. Je ne me souviens pas d'avoir utilisé cette option de manière utile. Des méthodes protégées sont accessibles à partir de classes, qui hériter de la classe en question. Qui est souvent utilisé pour créer des classes avec un comportement concret pour une API définie de la classe de base. Par exemple, pourriez-vous mettre en œuvre une nouvelle classe de liste en extensionnant AbstractList et vous n'avez besoin que d'implémenter l'obtention et la taille (et une méthode de configuration pour les listes modifiables). Les autres méthodes exposées par l'API de la liste sont définies dans la classe de base, appelant les trois autres méthodes si nécessaire. P>
Pour commencer, je voudrais commencer à restreindre le plus possible l'accès possible. Commencez par Point 1 Évite le mauvais couplage et le point 2 améliore l'encapsulation. Une fois que vous avez examiné ce qui précède et a conclu que moins de restriction est vraiment nécessaire, définissez-la une étape ou plus encore ouverte. P> privé code>. Si vous avez besoin du constructeur, de la méthode ou du champ d'ailleurs, mais que vous ne pouvez pas y accéder en raison de la restriction, les prochaines étapes seraient alors à vous poser: P>
Lorsqu'une méthode est par exemple: p> la méthode L'avantage .. Eh bien, vous pouvez l'utiliser à partir d'autres endroits. P> Lorsqu'une méthode est par exemple, dans cette nouvelle définition: p> la méthode getname code> peut être consulté par d'autres classes car il est public: p> godetage code> n'est pas accessible par d'autres classes car il est privé, si vous essayez de le faire, le compilateur vous donnera une erreur. MESSAGE: P> class David {
// protected method
protected int getBalance() {
return 1000000;
}
// package protected or "default" method
boolean knowsOop(){
return true;
}
}
Tutoriel Sun: Java.sun.com/docs/books/Tutorial /java/javaoo/accesscontrol.h tml
Je seconde le tutoriel, ou un tutoriel de base de OOP. Les concepts sont les mêmes pour toutes les langues OO en ce qui concerne l'encapsulation / accès des données.
Que signifie OOP?
Programmation orientée objet .
David, vous avez beaucoup d'apprentissage devant vous. Le tutoriel du soleil peut vous aider doucement dans la bonne direction.
Allez-vous ajouter cela à l'OP? Est-ce ce devoir? Avez-vous déjà traversé le tutoriel? Avez-vous d'autres questions?