in

Abstracción de datos en C ++


La abstracción de datos se refiere a proporcionar solo información esencial al mundo exterior y ocultar sus detalles de fondo, es decir, para representar la información necesaria en el programa sin presentar los detalles.

La abstracción de datos es una técnica de programación (y diseño) que se basa en la separación de la interfaz y la implementación.

Tomemos un ejemplo de la vida real de un televisor, que puede encender y apagar, cambiar el canal, ajustar el volumen y agregar componentes externos como parlantes, VCR y reproductores de DVD, PERO no conoce sus detalles internos, eso es decir, no sabes cómo recibe las señales por aire o por cable, cómo las traduce y finalmente las muestra en la pantalla.

Por lo tanto, podemos decir que un televisor separa claramente su implementación interna de su interfaz externa y puede jugar con sus interfaces como el botón de encendido, el cambiador de canales y el control de volumen sin tener ningún conocimiento de sus componentes internos.

En C ++, las clases proporcionan un gran nivel de abstracción de datos. Proporcionan suficientes métodos públicos al mundo exterior para jugar con la funcionalidad del objeto y manipular los datos del objeto, es decir, declarar sin saber realmente cómo se ha implementado la clase internamente.

Por ejemplo, su programa puede realizar una llamada al clasificar() función sin saber qué algoritmo utiliza realmente la función para ordenar los valores dados. De hecho, la implementación subyacente de la funcionalidad de clasificación podría cambiar entre versiones de la biblioteca y, siempre que la interfaz permanezca igual, la llamada a la función seguirá funcionando.

En C ++, usamos clases para definir nuestros propios tipos de datos abstractos (ADT). Puedes usar el cout objeto de clase ostream para transmitir datos a una salida estándar como esta:

#include <iostream>
using namespace std;

int main() {
   cout << "Hello C++" <<endl;
   return 0;
}

Aquí, no necesitas entender cómo cout muestra el texto en la pantalla del usuario. Solo necesita conocer la interfaz pública y la implementación subyacente de ‘cout’ se puede cambiar libremente.

Las etiquetas de acceso imponen la abstracción

En C ++, usamos etiquetas de acceso para definir la interfaz abstracta de la clase. Una clase puede contener cero o más etiquetas de acceso:

  • Los miembros definidos con una etiqueta pública son accesibles a todas las partes del programa. La vista de abstracción de datos de un tipo la definen sus miembros públicos.

  • Los miembros definidos con una etiqueta privada no son accesibles al código que usa la clase. Las secciones privadas ocultan la implementación del código que usa el tipo.

No existen restricciones sobre la frecuencia con la que puede aparecer una etiqueta de acceso. Cada etiqueta de acceso especifica el nivel de acceso de las siguientes definiciones de miembros. El nivel de acceso especificado permanece en efecto hasta que se encuentra la siguiente etiqueta de acceso o se ve la llave derecha de cierre del cuerpo de la clase.

Beneficios de la abstracción de datos

La abstracción de datos ofrece dos ventajas importantes:

  • Los componentes internos de la clase están protegidos contra errores inadvertidos a nivel de usuario, que podrían dañar el estado del objeto.

  • La implementación de la clase puede evolucionar con el tiempo en respuesta a requisitos cambiantes o informes de errores sin necesidad de cambiar el código a nivel de usuario.

Al definir miembros de datos solo en la sección privada de la clase, el autor de la clase es libre de realizar cambios en los datos. Si la implementación cambia, solo es necesario examinar el código de la clase para ver qué efecto puede tener el cambio. Si los datos son públicos, es posible que se rompa cualquier función que acceda directamente a los miembros de datos de la representación anterior.

Ejemplo de abstracción de datos

Cualquier programa de C ++ en el que implemente una clase con miembros públicos y privados es un ejemplo de abstracción de datos. Considere el siguiente ejemplo:

#include <iostream>
using namespace std;

class Adder {
   public:
      // constructor
      Adder(int i = 0) {
         total = i;
      }
      
      // interface to outside world
      void addNum(int number) {
         total += number;
      }
      
      // interface to outside world
      int getTotal() {
         return total;
      };
      
   private:
      // hidden data from outside world
      int total;
};

int main() {
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

Total 60

La clase anterior suma números y devuelve la suma. Los miembros públicos – addNum y getTotal son las interfaces con el mundo exterior y un usuario necesita conocerlas para usar la clase. El miembro privado total es algo que el usuario no necesita conocer, pero es necesario 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, mientras diseña su componente, debe mantener la interfaz independiente de la implementación para que, si cambia la implementación subyacente, la interfaz permanezca intacta.

En este caso, cualquier programa que esté usando estas interfaces, no se vería afectado y solo necesitaría una recompilación con la última implementación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

escuchando mp3

Wie kann man kostenlose MP3-Musik ohne Viren und Program herunterladen? – Schnell und einfach

apple touch icon@2

Operador Regex AND