Pregunta

" Abstracción y encapsulación son conceptos complementarios: la abstracción se centra en el comportamiento observable de un objeto ... la encapsulación se centra en la implementación que da lugar a este comportamiento ... la encapsulación se logra con mayor frecuencia mediante ocultación de información , que es el proceso de ocultar todos los secretos del objeto que no contribuyen a sus características esenciales. " - < strong> Grady Booch en Análisis y Diseño Orientado a Objetos

¿Puede mostrarme algunos ejemplos poderosamente convincentes de los beneficios de la encapsulación a través de la ocultación de información?

¿Fue útil?

Solución

El ejemplo dado en mi primera clase OO:

Imagine un reproductor multimedia. resume los conceptos de reproducción, pausa, avance rápido, etc. Como usuario, puede usar esto para operar el dispositivo.

Su videograbadora implementó esta interfaz y ocultó o encapsuló los detalles de las unidades y cintas mecánicas.

Cuando llega una nueva implementación de un reproductor multimedia (digamos un reproductor de DVD, que usa discos en lugar de cintas), puede reemplazar la implementación encapsulada en el reproductor multimedia y los usuarios pueden seguir usándolo tal como lo hicieron con su videograbadora (mismas operaciones como reproducir, pausar, etc.).

Este es el concepto de ocultación de información a través de abstracción . Permite que los detalles de implementación cambien sin que los usuarios tengan que saber y promueve un de código.

Otros consejos

La abstracción * nix de secuencias de caracteres (archivos de disco, canalizaciones, sockets, ttys, etc.) en una sola entidad (el modelo "todo es un archivo") permite aplicar una amplia gama de herramientas a una amplia gama gama de fuentes de datos / sumideros de una manera que simplemente no sería posible sin la encapsulación.

Asimismo, el concepto de flujos en varios idiomas, abstrayendo sobre listas, matrices, archivos, etc.

Además, conceptos como los números (abstracción sobre enteros, media docena de tipos de carrozas, racionales, etc.) imaginan qué pesadilla sería si se le diera al código de nivel superior el formato mantisa y así sucesivamente y lo dejara valerse por sí mismo. .

Sé que ya hay una respuesta aceptada, pero quería lanzar una más: OpenGL / DirectX

Ninguna de estas API son implementaciones completas (aunque DirectX es ciertamente un poco más pesado en ese sentido), sino métodos genéricos de comunicar comandos de renderizado a una tarjeta gráfica.

Los proveedores de tarjetas son los que proporcionan la implementación (controlador) para una tarjeta específica, que en muchos casos es muy específica del hardware, pero a usted como usuario no le importa que un usuario ejecute una GeForce ABC y el otro un Radeon XYZ porque la implementación exacta está oculta detrás de la API de alto nivel. Si no fuera así, necesitaría tener una ruta de código en sus juegos para cada tarjeta en el mercado que quisiera admitir, lo que sería completamente inmanejable desde el día 1. Otra gran ventaja de este enfoque es que Nvidia / ATI puede lanzar un versión más nueva y más eficiente de sus controladores y usted se beneficia automáticamente sin ningún esfuerzo de su parte.

El mismo principio está vigente para sonido, red, mouse, teclado ... básicamente cualquier componente de su computadora. Ya sea que la encapsulación ocurra a nivel de hardware o en un controlador de software, en algún momento todos los detalles del dispositivo están ocultos para permitirle tratar cualquier teclado, por ejemplo, como solo un teclado y no como un Microsoft Ergonomic Media Explorer Deluxe Revisión 2 .

Cuando lo miras de esa manera, rápidamente se hace evidente que sin alguna forma de computadoras de encapsulación / abstracción como las conocemos hoy simplemente no funcionaría en absoluto. ¿Es eso lo suficientemente brillante para ti?

Casi todas las bases de código Java, C # y C ++ del mundo tienen información oculta: es tan simple como el privado: secciones de las clases.

El mundo exterior no puede ver a los miembros privados, por lo que un desarrollador puede cambiarlos sin tener que preocuparse de que el resto del código no se compile.

¿Qué? ¿Aún no estás convencido?

Es más fácil mostrar lo contrario. Solíamos escribir código que no tenía control sobre quién podía acceder a los detalles de su implementación. Eso hizo casi imposible a veces determinar qué código modificaba una variable.

Además, realmente no se puede abstraer algo si cada parte del código del mundo posiblemente hubiera dependido de la implementación de clases concretas específicas.

scroll top