Que sont publics, privés et protégés dans la programmation orientée objet?

93

Que sont publics, privés et protégés dans la programmation orientée objet?

Delirium tremens
la source
+1, une de ces choses que j'ai trouvé un peu difficile à faire

Réponses:

152

Ce sont des modificateurs d'accès et nous aident à implémenter l' encapsulation (ou le masquage d'informations). Ils indiquent au compilateur quelles autres classes doivent avoir accès au champ ou à la méthode en cours de définition.

private - Seule la classe courante aura accès au champ ou à la méthode.

protected - Seules la classe et les sous-classes actuelles (et parfois aussi les classes du même package) de cette classe auront accès au champ ou à la méthode.

public - Toute classe peut faire référence au champ ou appeler la méthode.

Cela suppose que ces mots-clés sont utilisés dans le cadre d'une déclaration de champ ou de méthode dans une définition de classe.

Ben S
la source
4
notez qu'en java les membres du même package peuvent accéder aux membres protégés
Landon Kuhn
2
Oui, et Java a également un quatrième modificateur d'accès qui est la chaîne vide. Ne pas donner de modificateur d'accès autorisera l'accès depuis n'importe quelle classe au niveau du package.
Ben S
1
J'aime la partie "compilateur", car la plupart des langages que je connais toutes les fonctions / classes sont facilement accessibles à l'exécution par exemple via des réflexions en .NET. Par conséquent, j'ai tendance à dire que ces modificateurs d'accès ne sont essentiellement qu'une aide pour les programmeurs pour guider d'autres programmeurs travaillant sur / avec le même code en cachant certaines choses.
merkuro
1
Certaines langues ont des particularités. Comme dans Delphi, les membres privés sont accessibles par d'autres classes sur la même unité, et vous devez utiliser strict private si vous ne voulez pas ce comportement.
Fabio Gomes
1
C # effectue également l'astuce access-protected-members-of-same-package. En substance, C # est juste le Java de Microsoft
iGbanam
6

Ce ne sont pas vraiment des concepts mais plutôt des mots-clés spécifiques qui ont tendance à apparaître (avec une sémantique légèrement différente) dans des langages populaires comme C ++ et Java.

Essentiellement, ils sont destinés à permettre à une classe de restreindre l'accès aux membres (champs ou fonctions). L'idée est que moins un type est autorisé à accéder à un autre type, moins il est possible de créer une dépendance. Cela permet de modifier plus facilement l'objet accédé sans affecter les objets qui y font référence.

De manière générale, public signifie que tout le monde est autorisé à accéder, privé signifie que seuls les membres de la même classe sont autorisés à y accéder et protégé signifie que les membres des sous-classes sont également autorisés. Cependant, chaque langue ajoute ses propres choses à cela. Par exemple, C ++ vous permet d'hériter de manière non publique. En Java, il existe également un niveau d'accès par défaut (package) et des règles sur les classes internes, etc.

Uri
la source
6

Tous les trois sont des modificateurs d'accès et des mots-clés utilisés dans une classe. Tout ce qui est déclaré en public peut être utilisé par n'importe quel objet de la classe ou en dehors de la classe, les variables en privé ne peuvent être utilisées que par les objets de la classe et ne peuvent pas être modifiées via un accès direct (car elles peuvent changer via des fonctions telles que la fonction friend) Tout ce qui est défini dans la section protected peut être utilisé par la classe et sa classe juste dérivée.

Monica
la source
1

Un élément public est un élément accessible depuis n'importe quelle autre classe. Il vous suffit de savoir de quel objet il s'agit et vous pouvez utiliser un opérateur point pour y accéder. Protected signifie qu'une classe et ses sous-classes ont accès à la variable, mais pas aux autres classes, elles doivent utiliser un getter / setter pour faire quoi que ce soit avec la variable. Un privé signifie que seule cette classe a un accès direct à la variable, tout le reste a besoin d'une méthode / fonction pour accéder ou modifier ces données. J'espère que cela t'aides.

mnuzzo
la source
1

comme ci-dessus, mais qualitativement:

private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation

moins vous fournissez d'accès, moins les détails d'implémentation s'échappent de vos objets. moins de ce type de fuite signifie plus de flexibilité (aka "couplage plus lâche") en termes de changement de la façon dont un objet est implémenté sans casser les clients de l'objet. c'est une chose vraiment fondamentale à comprendre.

Jon
la source
0

Pour résumer, dans la programmation orientée objet, tout est modélisé en classes et objets. Les classes contiennent des propriétés et des méthodes. Des mots-clés publics, privés et protégés sont utilisés pour spécifier l'accès à ces membres (propriétés et méthodes) d'une classe à partir d'autres classes ou d'autres .dll ou même d'autres applications.

Zaki
la source