Estoy aprendiendo OOP. He estudiado mucho sobre la encapsulación, pero cuanto más leía, más me confundía.
Entiendo que ocultamos (al hacer privados) datos y los exponemos al usuario de la clase (otros desarrolladores) como propiedades o métodos. También entiendo por encapsulación que ocultamos detalles.
En un artículo (http://www.csharp-station.com/Tutorial/CSharp/lesson19) leí:
Resumen del articulo
Al diseñar un objeto, debe pensar en cómo otros podrían usarlo. En el mejor de los casos, cualquier programa que use el objeto estaría bien diseñado y el código nunca cambiaría. Sin embargo, la realidad es que los programas cambian a menudo y en un entorno de equipo, muchas personas tocan el mismo código en un momento u otro. Por lo tanto, es beneficioso considerar qué podría salir mal, así como la imagen prístina de cómo se debe usar el objeto .
En el caso del objeto BankAccount, examine la situación en la que el código fuera de su objeto podría acceder a un campo de Cantidad decimal o un campo de cadena CustomerName. En el momento en que se escribe el código, todo funcionaría bien. Sin embargo, más adelante en el ciclo de desarrollo, se da cuenta de que el objeto BankAccount debe realizar un seguimiento de un CustomerID int en lugar de una cadena CustomerName porque no desea duplicar las relaciones entre la información (o alguna otra razón válida para alterar la definición del estado interno) . Dichos cambios causan un efecto ondulante en su código porque se creó para usar la clase BankAccount, como se diseñó originalmente (con CustomerName como una cadena), y ahora debe cambiar el código que accede a ese estado en toda su aplicación.
El principio de Encapsulación orientado a objetos ayuda a evitar tales problemas, permitiéndole ocultar el estado interno y el acceso abstracto a él a través de miembros de tipo como métodos, propiedades e indexadores. La encapsulación lo ayuda a reducir el acoplamiento entre objetos y aumenta la capacidad de mantenimiento de su código.
Pregunta ¿Cómo ayudará la encapsulación al hacer cambios en el código y sus efectos ondulantes? Para un miembro de datos, si cambio su tipo de int a float, (incluso si estoy exponiendo esto usando la propiedad) tendré que cambiar el tipo de variable donde estoy usando este código.
Por favor, guíenme cómo la encapsulación ayudará con tales cambios.
Gracias por esta ayuda y orientación.
fuente