2012-02-12 12 views
6

Actualmente estoy aprendiendo C# y me preguntaba, ¿cuál es el sentido de declarar clases/métodos privados? ¿A quién estamos ocultando/limitando el acceso a estas clases?¿De quién protegemos nuestras clases?

Porque si alguien estaba editando la fuente, podría cambiar la etiqueta de privada a pública. No estoy seguro de cómo un usuario podrá acceder a estos métodos y qué problemas podría causar.

tldr; ¿Cuál es el punto de acceso a los modificadores?

Gracias!

+2

Realmente no los "protege" de nadie. Nadie usa modificadores de acceso por seguridad. Bueno, excepto quizás algunos tontos pobres que entendieron la idea completamente mal. No hay nada seguro al respecto: uno puede modificar el código fuente como dijo; al carecer del código fuente uno puede alterar la salida del compilador; Sin eso, uno puede hacer las cosas más tortuosas con la reflexión en muchos idiomas, incluido C#. – delnan

+1

http://www.merithub.com/q/99-encapsulation-oops.aspx –

Respuesta

7

La visibilidad de los miembros, como a menudo se llama esta característica, no es una característica de seguridad. Es una conveniencia para el programador, diseñada para ayudar a limitar las dependencias entre clases. Al declarar a un miembro como privado, impide que otro código lo acceda directamente. Esto tiene dos ventajas:

  • si encuentra que una variable miembro se manipula de una manera que no tenía la intención, la cantidad de código que hay que comprobar es significativamente menor cuando la variable es privado
  • puede cambiar el funcionamiento interno de una clase (todo lo que se declara privada) sin romper la interfaz (todo lo declararon pública)

visibilidad miembro es probablemente la característica lengua más importante en la realización encapsulación, uno de los principios básicos de objetos programación orientada.

1

Este es un concepto básico de OO - encapsulation y no tiene nada que ver con la seguridad per se. Para citar de Wikipedia (el énfasis es mío):

Ocultación de las partes internas del objeto protege su integridad por usuarios que impiden el establecimiento de los datos internos de la componente en un estado no válido o inconsistente. Un beneficio de la encapsulación es que es puede reducir la complejidad del sistema, y por lo tanto aumenta la robustez, por permitiendo al desarrollador limitar las interdependencias entre los componentes del software .

0

modificadores de acceso se utilizan para la encapsulación: que le permiten organizar su código en paquetes y clases, y sólo tienen una "oficial" de la interfaz pública visibles al exterior, al tiempo que oculta la aplicación detalles (que se desea hacer, para que luego pueda cambiarlo sin contando a nadie).

Esto es especialmente (¿solo?) Importante, cuando libera código como una biblioteca para que otros programadores lo utilicen. Incluso si el código solo se utiliza en su propio programa, , ayuda a estructurar programas más grandes en varios paquetes . - Thilo

1

Mantiene su código ordenado. Usted separa su código en una interfaz pública y privada interna.

De esta manera, puede cambiar su interior sin temor a romper el código que depende de su clase.También puede suponer con seguridad que ningún otro código ha modificado su estado interno mientras no miraba.

0

Puede escribir el código de 2 maneras: diseñado para la extensión y diseñado para el uso tal como está.

Es posible que tenga o no acceso al código fuente.

Los modificadores de acceso son más importantes en el código diseñado para la extensión donde el programador cliente (el programador que extiende y usa su código) necesita tener acceso solo a la API que expone, básicamente a la interfaz que ofrece al usar estos accesos modificadores.

0

Los modificadores de acceso se usan para encapsulation, por lo que las partes internas de un objeto/clase están ocultas de usuarios o clases externas. Esto evita que los usuarios rompan accidental o intencionalmente un objeto/clase al modificar sus variables y/o funciones de instancia.

La encapsulación es una parte importante de Open/closed principle, que se refiere a una clase que está "abierta para extensión" pero "cerrada para modificación". Este principio permite la extensión de las clases sin temor a que la API de una clase pueda cambiar en el futuro.

Cuestiones relacionadas