nandawteK
Recoger la información relevante para la creación de un objeto.
Dependiendo del contexto en el que necesito el objeto, me ayuda a definir los límites necesarios para implementarlo.
Un buen ejemplo de esto sería la abstracción del metro. Si soy usuario mi abstracción son los horarios, rutas, precios,... Sin embargo si soy mecánico, tengo una abstracción diferente como los ruidos del motor, la corriente aplicada,...
Cerrar el acceso al uso de métodos de un objeto, haciendo fácil su entendimiento al ofrecer la mínima interfaz pública necesaria y aportando flexibilidad para futuros cambios en la implementación del mismo.
El símil que más me gusta para entender la encapsulación es el de un restaurante.
El restaurante ofrece como interfaz pública sus platos, esos platos deben existir y pueden ser accedidos desde fuera, pero dentro el sistema es mucho más complejo, hay que cortar las verduras, saltear, freir,... pero al no ofrecer y por lo tanto mantener esa obligación hacia afuera determinadas técnicas, el cocinero, se reserva la capacidad de modelar el plato para ofrecer el mismo producto, pero con otros cuidados culinarios.
Además la interfaz pública, hace más fácil al cliente tomar la decisión de que tomar.
Descomposición del software en módulos que se conforman de piezas poco acopladas y cohesivas.
* Acoplamiento: Debemos minimizar el acoplamiento entre módulos o elementos de nuestro sistema. Minimizando las dependencias lo máximo posible.
* Cohesión: La fuerte relación entre los elementos que conforman una clase o módulo. Un módulo es cohesivo si agrupa abstracciones lógicamente relacionadas.
Un buen ejemplo de esto es la organización que hay detras de los automóviles. Por ejemplo la Ford sería el módulo más acoplado de un sistema dividido en módulos cohesivos que trabajan para ella, los fabricantes de las ruedas, los fabricantes de cristales sería módulos que la ford usa o a los que se acopla para poder crear los coches.
La jerarquía es como estructuro las diferentes abstracciones, ayudando a resolver la complejidad del software.
* La herencia: Partes comunes, que se agrupan para extender el funcionamiento de las clases obtiendo los mismos métodos y propiedades de la clase heredada.
* La composición: Elementos que se componen de otros, apoyandose en estos para realizar sus funciones.
Todo oficio tiene una jerarquia, desde la que agrupamos las diferentes tareas o abstracciones para ayudarnos a realizar los trabajos de una forma eficaz y eficiente.
Es una herramienta de la programación que nos permite basarnos en tipos o interfaces a la hora de componer nuestro software, aportando robustez, flexibilidad y legibilidad a nuestro código.
Un taller especializado acepta coches de un tipo o marca, a la que corresponden varios modelos, de ahí el polimorfismo del taller