¿Qué son públicos, privados y protegidos en la programación orientada a objetos?

93

¿Qué son públicos, privados y protegidos en la programación orientada a objetos?

Delirium tremens
fuente
+1, una de esas cosas que encontré un poco difícil de asimilar

Respuestas:

152

Son modificadores de acceso y nos ayudan a implementar la encapsulación (o el ocultamiento de información). Indican al compilador qué otras clases deberían tener acceso al campo o método que se está definiendo.

private - Solo la clase actual tendrá acceso al campo o método.

protected - Solo la clase y subclases actuales (y algunas veces también las clases del mismo paquete) de esta clase tendrán acceso al campo o método.

public - Cualquier clase puede hacer referencia al campo o llamar al método.

Esto supone que estas palabras clave se utilizan como parte de una declaración de campo o método dentro de una definición de clase.

Ben S
fuente
4
tenga en cuenta que en java los miembros del mismo paquete pueden acceder a miembros protegidos
Landon Kuhn
2
Sí, y Java también tiene un cuarto modificador de acceso que es la cadena vacía. No dar ningún modificador de acceso permitirá el acceso desde cualquier clase a nivel de paquete.
Ben S
1
Me gusta la parte del "compilador", porque la mayoría de los lenguajes que conozco se pueden acceder fácilmente a todas las funciones / clases en tiempo de ejecución, por ejemplo, a través de reflexiones en .NET. Por lo tanto, tiendo a decir que estos modificadores de acceso son básicamente solo una ayuda para que los programadores guíen a otros programadores que trabajan en / con el mismo código ocultando ciertas cosas.
merkuro
1
Algunos idiomas tienen algunas particularidades. Al igual que en Delphi, los miembros privados son accesibles para otras clases en la misma unidad, y debe usar estrictamente privado si no desea este comportamiento.
Fabio Gomes
1
C # también hace el truco de acceso a miembros protegidos del mismo paquete. En esencia, C # es solo Java de Microsoft
iGbanam
6

En realidad, no son conceptos, sino palabras clave específicas que tienden a aparecer (con semántica ligeramente diferente) en lenguajes populares como C ++ y Java.

Básicamente, están destinados a permitir que una clase restrinja el acceso a miembros (campos o funciones). La idea es que cuanto menos se le permita a un tipo acceder a otro tipo, menos dependencia se puede crear. Esto permite cambiar más fácilmente el objeto al que se accede sin afectar a los objetos que se refieren a él.

En términos generales, público significa que todos pueden acceder, privado significa que solo los miembros de la misma clase pueden acceder y protegido significa que los miembros de las subclases también están autorizados. Sin embargo, cada idioma agrega sus propias cosas a esto. Por ejemplo, C ++ le permite heredar de forma no pública. En Java, también hay un nivel de acceso predeterminado (paquete) y hay reglas sobre clases internas, etc.

Uri
fuente
6

Los tres son modificadores de acceso y palabras clave que se utilizan en una clase. Cualquier objeto declarado en público puede ser utilizado por cualquier objeto dentro o fuera de la clase, las variables en privado solo pueden ser utilizadas por los objetos dentro de la clase y no se pueden cambiar a través del acceso directo (ya que puede cambiar a través de funciones como la función de amigo) Cualquier cosa definida en la sección protegida puede ser utilizada por la clase y su clase derivada.

monica
fuente
1

Un elemento público es uno al que se puede acceder desde cualquier otra clase. Solo tiene que saber qué objeto es y puede usar un operador de punto para acceder a él. Protegido significa que una clase y sus subclases tienen acceso a la variable, pero no a ninguna otra clase, necesitan usar un getter / setter para hacer cualquier cosa con la variable. Un privado significa que solo esa clase tiene acceso directo a la variable, todo lo demás necesita un método / función para acceder o cambiar esos datos. Espero que esto ayude.

mnuzzo
fuente
1

como arriba, pero cualitativamente:

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

cuanto menos acceso proporcione, menos detalles de implementación se filtrarán de sus objetos. menos de este tipo de fuga significa más flexibilidad (también conocida como "acoplamiento más flexible") en términos de cambiar la forma en que se implementa un objeto sin romper los clientes del objeto. esto es algo verdaderamente fundamental de entender.

Jon
fuente
0

En resumen, en la programación orientada a objetos, todo se modela en clases y objetos. Las clases contienen propiedades y métodos. Las palabras clave públicas, privadas y protegidas se utilizan para especificar el acceso a estos miembros (propiedades y métodos) de una clase desde otras clases u otros .dlls o incluso otras aplicaciones.

Zaki
fuente