He revisado muchas teorías sobre lo que es la encapsulación y las tres técnicas de implementación, que son Asociación, Agregación y Composición.
Encapsulamiento
La encapsulación es la técnica de hacer que los campos de una clase sean privados y proporcionar acceso a los campos a través de métodos públicos. Si un campo se declara privado, nadie puede acceder a él fuera de la clase, ocultando así los campos dentro de la clase. Por esta razón, la encapsulación también se conoce como ocultación de datos.
La encapsulación se puede describir como una barrera protectora que impide que el código y los datos sean accedidos aleatoriamente por otro código definido fuera de la clase. El acceso a los datos y al código está estrictamente controlado por una interfaz.
El principal beneficio de la encapsulación es la capacidad de modificar nuestro código implementado sin romper el código de otros que usan nuestro código. Con esta característica, la encapsulación brinda mantenibilidad, flexibilidad y extensibilidad a nuestro código.
Asociación
La asociación es una relación en la que todos los objetos tienen su propio ciclo de vida y no hay un propietario. Tomemos un ejemplo de profesor y alumno. Varios estudiantes pueden asociarse con un solo maestro y un solo estudiante puede asociarse con múltiples maestros, pero no hay propiedad entre los objetos y ambos tienen su propio ciclo de vida. Ambos pueden crear y eliminar de forma independiente.
Agregación
La agregación es una forma especializada de asociación donde todos los objetos tienen su propio ciclo de vida, pero hay propiedad y un objeto secundario no puede pertenecer a otro objeto primario. Tomemos un ejemplo de departamento y maestro. Un solo maestro no puede pertenecer a varios departamentos, pero si eliminamos el departamento, el objeto del maestro no se destruirá. Podemos considerarlo como una relación "tiene-a".
Composición
La composición es nuevamente una forma especializada de agregación y podemos llamar a esto como una relación de "muerte". Es un tipo fuerte de agregación. El objeto secundario no tiene su ciclo de vida y si el objeto primario se elimina, todos los objetos secundarios también se eliminarán. Tomemos nuevamente un ejemplo de relación entre la casa y las habitaciones. La casa puede contener varias habitaciones, pero no hay una vida independiente de una habitación y ninguna habitación puede pertenecer a dos casas diferentes. Si eliminamos la casa, la habitación se eliminará automáticamente.
La pregunta es:
Ahora todos estos son ejemplos del mundo real. Estoy buscando alguna descripción sobre cómo usar estas técnicas en el código de clase real. Me refiero a cuál es el punto de usar tres técnicas diferentes para la encapsulación , cómo podrían implementarse estas técnicas y cómo elegir qué técnica es aplicable en ese momento.