La encapsulación es parte de la abstracción. La noción de abstracción es la de crear un objeto para representar otro objeto. Normalmente, el objeto original es más complejo que la abstracción. Una abstracción es, por lo tanto, una representación, generalmente como una ayuda para la memoria, para la terminología/comunicación, etc. Piénselo de esta manera: el arte abstracto es una representación de otra cosa. Un volante, cambio de marchas y pedales 2/3 es una abstracción de cómo funciona un automóvil.
Básicamente, la abstracción le permite representar algo complejo, con muchos detalles, como algo mucho más simple. En mi opinión, esto está relacionado con 'fragmentación' en la ciencia cognitiva. No somos capaces de mantener cosas complejas en nuestra cabeza, así que simplificamos abstrayendo, luego usando la abstracción. Los patrones de diseño son otro gran ejemplo. En lugar de hablar de detalles, podemos hablar sobre el patrón Command, State o Strategy, etc.
La encapsulación forma parte de la creación/creación de una abstracción. Cuanto menor es la interfaz de un objeto, más fácil es abstraer. No necesita saber cómo funcionan un motor y una caja de cambios para conducir un automóvil, solo necesita comprender sus abstracciones (cambio de marchas y acelerador). Los detalles del motor y la caja de cambios están encapsulados (en la interfaz) para crear la abstracción.
La encapsulación es necesaria para la abstracción porque una abstacción no puede ocuparse de todos los detalles reales y la complejidad (de lo contrario no es una abstracción). Por lo tanto, la palanca de cambios es una representación (o modelo) incompleta de una caja de cambios, pero es lo suficientemente completa para el uso diario. La encapsulación se puede considerar como "ocultar detalles", que es necesaria para crear una representación más simple.
También es importante discutir el concepto de una 'interfaz'. En su mayor parte, los términos 'interfaz' y 'abstracción' son más intercambiables en este caso. Una interfaz es la parte de un sistema con el que el usuario trata o interactúa. La interfaz para un automóvil es el volante, el cambio de marchas y los pedales, etc. La abstracción produce una interfaz. No maneja directamente el motor/caja de engranajes, maneja sus respectivas interfaces.
Otra razón para la encapsulación es porque estamos tratando con un modelo/abstracción incompleto, no entendemos la complejidad total del original, y no podemos confiar en que manejemos todas las variables (porque no lo hacemos) entiendo el modelo completo). Esto es importante para el desacoplamiento, porque sin abstracción, los componentes que interactúan saben demasiado el uno del otro. Piénselo, porque cada automóvil tiene un volante, pedales y cambio de marchas, puede conducir cualquier automóvil, independientemente del tipo de motor, etc. Además, la caja de engranajes está separada del motor. De lo contrario, cada motor personalizado necesitaría una caja de engranajes personalizada.
De manera similar, una clase es una abstracción. La clase representa un modelo complejo, a través de su interfaz: los miembros públicos de la clase. Esta interfaz se crea a través de encapsulación. La clase presenta una interfaz simplificada de su implementación más compleja para sus colaboradores. También puede pensar que es una situación de 'necesidad de saber'. Los colaboradores de la clase no necesitan saber exactamente cómo funciona. Del mismo modo que no necesita saber cómo funciona un motor para conducir un automóvil.
El encapsulado, las interfaces y la abstracción desempeñan un papel fundamental en la cohesión y el acoplamiento, y por lo tanto en el mantenimiento de su código. Si no crea buenas abstracciones y viola el principio de "necesidad de saber", entonces su código se enreda, se vuelve frágil y una pesadilla para cambiar, porque no hay "memoria intermedia". El concepto OO de 'tell not not ask' también está relacionado con esto.
Posibles duplicados: http://stackoverflow.com/questions/742341/difference-between-abstraction-and-encapsulation y http://stackoverflow.com/questions/3362335/difference-between-encapsulation-and-abstraction- conceptos –
Corrija el error tipográfico en el título de la pregunta. Cheers –
¿Es esta tarea? Si es así, por favor agregue una etiqueta de tarea. –