C++ Abstracción de datos
La abstracción de datos se refiere a proporcionar solo información clave al mundo exterior y ocultar los detalles de implementación en segundo plano, es decir, mostrar solo la información necesaria sin presentar los detalles.
La abstracción de datos es una técnica de programación (diseño) que depende de la separación de la interfaz y la implementación.
Tomemos un ejemplo real de la vida cotidiana, como un televisor: puede encenderlo y apagarlo, cambiar de canal, ajustar el volumen, agregar componentes externos (como altavoces, videograbadora, reproductor de DVD), pero no conoce los detalles de implementación internos, es decir, no sabe cómo recibe la señal a través del cable, cómo la convierte y finalmente la muestra en la pantalla.
Por lo tanto, podemos decir que el televisor separa su implementación interna de su interfaz externa; no necesita conocer los principios de implementación internos, puede operar el televisor directamente a través de su interfaz externa (como el botón de encendido, el control remoto, el control de volumen).
Ahora, volviendo al tema, en cuanto a la programación en C++, las clases de C++para la abstracción de datosproporcionan la posibilidad. Estas proporcionan al mundo exterior una gran cantidad de métodos públicos para operar los datos de los objetos, es decir, el mundo exterior en realidad no conoce la implementación interna de la clase.
Por ejemplo, su programa puede llamar asort()la función sin necesidad de conocer el algoritmo utilizado para ordenar los datos en la función. En realidad, la implementación subyacente de la ordenación de la función puede variar según la versión de la biblioteca; siempre que la interfaz no cambie, la llamada a la función puede funcionar normalmente.
En C++, usamosClaseclases para definir nuestros propios tipos de datos abstractos (ADT). Puede usar objetos de claseiostreamdecoutpara enviar datos a la salida estándar, como se muestra a continuación:
Ejemplos
Aquí, no necesita entendercoutcómo se muestra el texto en la pantalla del usuario. Solo necesita conocer la interfaz pública; la implementación subyacente de cout puede cambiar libremente.
Etiquetas de acceso imponen la abstracción
En C++, usamos etiquetas de acceso para definir la interfaz abstracta de una clase. Una clase puede contener cero o más etiquetas de acceso:
- Los miembros definidos con la etiqueta pública son accesibles para todas las partes del programa. La vista de abstracción de datos de un tipo está definida por sus miembros públicos.
- Los miembros definidos con la etiqueta privada no son accesibles para el código que usa la clase. La parte privada oculta los detalles de implementación al código que usa el tipo.
No hay límite en la frecuencia de aparición de las etiquetas de acceso. Cada etiqueta de acceso especifica el nivel de acceso de las definiciones de miembros que le siguen inmediatamente. El nivel de acceso especificado permanece vigente hasta que se encuentre la siguiente etiqueta de acceso o la llave de cierre del cuerpo de la clase.
Beneficios de la abstracción de datos
La abstracción de datos tiene dos ventajas importantes:
- El interior de la clase está protegido para que los errores involuntarios a nivel de usuario no dañen el estado del objeto.
- La implementación de la clase puede cambiar con el tiempo para responder a requisitos cambiantes o a informes de errores que requieran no modificar el código a nivel de usuario.
Si los miembros de datos se definen solo en la parte privada de la clase, el autor de la clase puede modificar los datos libremente. Si la implementación cambia, solo se necesita revisar el código de la clase para ver qué efectos causa el cambio. Si los datos son públicos, cualquier función que acceda directamente a los miembros de datos de la representación anterior podría verse afectada.
Ejemplo de abstracción de datos
En un programa C++, cualquier clase con miembros públicos y privados puede servir como un ejemplo de abstracción de datos. Vea el siguiente ejemplo:
Ejemplo
Cuando el código anterior se compila y se ejecuta, produce los siguientes resultados:
Total 60
La clase anterior suma los números y devuelve la suma total. Los miembros públicosaddNumygetTotalson la interfaz pública; los usuarios necesitan conocerlos para usar la clase. Los miembros privadostotalson lo que los usuarios no necesitan conocer, pero son necesarios para que la clase funcione correctamente.
Estrategia de diseño
La abstracción separa el código en interfaz e implementación. Por lo tanto, al diseñar componentes, se debe mantener la interfaz independiente de la implementación, de modo que si se cambia la implementación subyacente, la interfaz permanezca igual.
En este caso, cualquier programa que use la interfaz no se verá afectado; solo es necesario recompilar la implementación más reciente.
Otras extensiones