Sé que la encapsulación significa algo así como que un objeto no debería tener acceso directo a los miembros de diferentes objetos ... ¿pero supongo que se relaciona con los campos públicos? Supongo que los métodos públicos no rompen la encapsulación ... Simplemente no estoy claro aquí y me alegraría cualquier explicación.Encapsulación..¿descripción más precisa?
Respuesta
La encapsulación no significa que debe haber no acceso a los miembros. Significa que solo debe permitir el acceso a los miembros que deben usarse, básicamente acceso restringido en lugar de no tener acceso.
Al hacer público algo que está permitiendo el acceso, al hacerlo privado no lo es.
Este artículo entra en más profundidad, así como los diversos modificadores de acceso:
http://www.csharp-station.com/Tutorials/lesson19.aspx
En este artículo se dan un buen ejemplo:
using System;
class BankAccountProtected
{
public void CloseAccount()
{
ApplyPenalties();
CalculateFinalInterest();
DeleteAccountFromDB();
}
protected virtual void ApplyPenalties()
{
// deduct from account
}
protected virtual void CalculateFinalInterest()
{
// add to account
}
protected virtual void DeleteAccountFromDB()
{
// send notification to data entry personnel
}
}
Cuando un programador quiere cerrar una cuenta que no deberían tener que preocuparse por los diversos pasos que entran en eso:
- ApplyPenalties
- CalculateFinalInterest
- DeleteAccountFromDB
Deben decir simplemente lo quieren cerrada y que se tomarán todas las medidas necesarias. Es por eso que CloseAccount
es público y los otros no.
La encapsulación es que usted conduce su coche por:
- girando la llave de encendido
- dirigir la rueda
- cambiar los engranajes (si no es automática)
- añadir el combustible
y no por:
- encender el combustible en los cilindros neumáticos
- fricción-ción y tierra
- y así sucesivamente ...
ficha (que public
) ¿QUÉ y ocultar (que private
) CÓMO. Ahora, estás encapsulando.
:)
me resulta más útil pensar en las clases como las personas con diferentes puestos de trabajo. Por ejemplo, si soy un gerente de proyecto y usted es un desarrollador, mi contrato público con usted es que le asignaré tareas. ¿Cómo determino la prioridad? Ese es un detalle que es privado para mí; usted como desarrollador no necesita saber eso para hacer su trabajo.
Por lo tanto, al pensar en la encapsulación, separe el conocimiento de una clase en su contrato público y sus detalles de implementación. El primero debe estar expuesto, ya sea a través de propiedades públicas, métodos o lo que sea, y el segundo debe estar encapsulado dentro de la clase, sin posibilidad de que un extraño lo descubra.
La encapsulación está ocultando los detalles de la implementación de un objeto para que no existan dependencias externas en la implementación en particular. tomado from msdn blog.
Eche un vistazo a este CodeProject post.
- 1. Gramática AS3: Más precisa
- 2. Más precisa distance_of_time_in_words
- 3. TDD, DDD y encapsulación
- 4. Ubicación gps más precisa de un dispositivo móvil
- 5. iPhone CoreLocation: Cómo obtener la velocidad más precisa
- 6. ¿Dónde está la encapsulación?
- 7. Propiedad y encapsulación
- 8. encapsulación en javascript patrón
- 9. DDD, repositorio y encapsulación
- 10. Violación de la encapsulación?
- 11. encapsulación en JavaScript
- 12. Abstracción vs encapsulación en Java
- 13. Sincronización precisa con RequestAnimationFrame
- 14. ¿La herencia romperá la encapsulación?
- 15. ¿En qué escenarios usa encapsulación?
- 16. Encapsulación en la era de los frameworks
- 17. ¿Hay una descripción general de los algoritmos más comunes?
- 18. Descripción general del modelo Django: ¿muestra más de 100 artículos?
- 19. Multiplicación de JavaScript no precisa
- 20. Definición precisa del término 'marshalling'
- 21. ¿Cuál es el antónimo de encapsulación?
- 22. ¿Puedes explicarme esto sobre la encapsulación?
- 23. Cómo implementar la encapsulación condicional en C#
- 24. ¿Estas dos clases violan la encapsulación?
- 25. Encapsulación de datos (programación en red)
- 26. ¿La reflexión rompe el principio de encapsulación?
- 27. Temporización precisa de funciones en python
- 28. Medición de tiempo precisa en Java
- 29. Paginación precisa con uniones hacia la izquierda
- 30. Cómo hacer una brújula precisa en Android
Ugh, usted (el gerente) está exponiendo sus métodos al desarrollador ... ¿No es al revés, que las cosas deberían funcionar? :) –