Conoce los TDA y su conexión con la POO
En el campo de las ciencias de la computación, existe un concepto conocido como tipo de dato abstracto (TDA) o tipo abstracto de datos (TAD). Este modelo matemático está conformado por un conjunto de operaciones que se pueden realizar en un grupo de datos. En lugar de enfocarse en la perspectiva del creador, se centra en la del usuario, es decir, se determina el comportamiento del TAD, qué acciones se pueden llevar a cabo en él y cuál es el propósito de dichas acciones. Durante la etapa de implementación, se determinará cómo se llevan a cabo esas operaciones y se desarrollarán las estructuras de datos correspondientes.
Definicióneditar
Los conceptos de TDA y Abstracción de Datos suelen ser utilizados de manera intercambiable, aunque es fundamental entender que se refieren a dos ideas distintas y relacionadas.
Los lenguajes de programación orientados a objetos están compuestos por métodos o funciones que son llamados en el momento adecuado según las necesidades del programa o del usuario. La Abstracción de Datos, por su parte, consiste en ocultar las características de un objeto y utilizar únicamente su nombre en el programa. Esto es similar a una situación cotidiana en la que al decir "perro", todos sabemos a qué nos referimos sin necesidad de explicar qué es un perro o cómo se comporta.
En este ejemplo, "perro" es un Tipo de Dato Abstracto y todo el proceso de definirlo, implementarlo y referirse a él es lo que conocemos como Abstracción de Datos.
Introduccióneditar
En el ámbito de la programación, se han desarrollado múltiples lenguajes de programación a lo largo del tiempo, obteniendo una evolución constante basada en las necesidades de los programadores de cada época. Los primeros lenguajes eran de tipo lineal, en los cuales un programa seguía una secuencia desde un punto específico de inicio hasta llegar a otro punto designado como fin. No obstante, con el transcurso del tiempo surgieron nuevos lenguajes, y en la actualidad los más populares son los denominados "orientados a objetos".
Los lenguajes de programación orientados a objetos (POO) se distinguen por no ser lineales, sino que están compuestos por diversas funciones que son invocadas en el orden en que el programa las solicita o en función de las directrices del usuario. Para comprender mejor su funcionamiento, es fundamental introducir el concepto de Abstracción de Datos, un elemento esencial en las Estructuras de Datos y una parte crucial en estos lenguajes de programación, los cuales están presentes en la mayoría del software comercial en la actualidad.
Historiaeditar
El término "Tipo de Dato Abstracto" (TDA), fue creado en 1974 por John Guttag y otros. Sin embargo, su uso en la programación no se popularizó hasta 1975, cuando Barbara Liskov lo adoptó para el lenguaje CLU.
La introducción de las "Units" en el lenguaje Turbo Pascal fue un gran avance para la implementación de los TDA en la programación. Sin embargo, estas unidades no cumplen con todas las características esenciales de un TDA, como por ejemplo la encapsulación de los datos. Por otro lado, el lenguaje de programación Ada sí logró implementar exitosamente los TDA gracias a sus paquetes. Cabe señalar que ambos lenguajes apoyan formalmente la programación modular.
Disociación de la Interface e Implementación
Cuando se utiliza un programa de computación, un TDA (Tipo de Dato Abstracto) se muestra a través de su interfaz, que actúa como una cubierta para su correspondiente implementación. El objetivo es que los usuarios de un TDA solo tengan que preocuparse por la interfaz, y no por la implementación. De esta manera, si hay cambios en la implementación a lo largo del tiempo, no afectarán a los programas que usan los datos. Todo esto se basa en el concepto de Ocultación de información, una medida de protección para los programas frente a decisiones de diseño que pueden cambiar.
La solidez de un TDA se fundamenta en que la implementación permanezca oculta al usuario. Solo la interfaz es pública. Esto significa que el TDA puede ser implementado de diversas formas, siempre y cuando sea coherente con la interfaz, sin afectar a los programas que lo utilizan.
Aunque puede resultar sutil, existe una diferencia entre el Tipo de Dato Abstracto y la estructura de datos usada en su implementación. Por ejemplo, un TDA de una lista puede emplear un arreglo, una lista enlazada e incluso un árbol binario de búsqueda como estructura de datos subyacente. Mientras que una lista abstracta tiene operaciones definidas (como añadir, extraer, eliminar elementos, etc.), una lista enlazada es una estructura de datos basada en punteros o referencias (dependiendo del lenguaje) que sirve para representar una lista. Por lo tanto, aunque tienen una relación estrecha, no son lo mismo.
Y aunque ese TDA puede tener diferentes implementaciones, siempre cumplirá con la interfaz establecida, lo que garantiza la solidez y la protección de los programas que lo utilizan.
Primeros pasos Definición esencial de TDA
Un Tipo de Dato Abstracto (TDA) es un modelo que define valores y las operaciones que se pueden realizar sobre ellos. Este modelo se denomina abstracto ya que la intención es que quien lo utiliza, no necesita conocer los detalles de la representación interna o el cómo están implementadas las operaciones.
En definitiva, esta práctica provee un grado de abstracción que permite desacoplar al código que usa un TDA de aquel código que lo implementa.
Vale la pena destacar que, gracias a este tipo, yo puedo escribir código que opere con la pantalla, sin conocer cómo realmente se escribe o lee de ésta.
Encapsulamiento
```
De cara a conseguir el objetivo de la flexibilidad y permitir cambios futuros, es necesario contar con una manera de agrupar las implementaciones de operaciones y del TDA. Esto se conoce como encapsulamiento y varía según el paradigma y lenguaje en uso.
Un ejemplo de esto lo encontramos en los lenguajes orientados a objetos, donde el encapsulamiento está presente de manera natural a través de los objetos, que contienen tanto el estado como el comportamiento.
TDA Diccionario
Un Diccionario o Mapa (en software) es una abstracción que vincula un dato con otro. Funciona de manera similar al diccionario de un idioma, donde cada palabra está asociada a su definición y puede ser buscada a través de la palabra. En el caso del TDA Mapa/Diccionario, se pueden almacenar múltiples "entradas", cada una con su correspondiente "clave" y "valor". Es importante destacar que el concepto de diccionario/mapa no determina cómo se van a asociar los datos, es decir, cómo se van a guardar internamente los valores. Por lo tanto, es posible tener diferentes implementaciones, como una que utilice dos listas paralelas o una que use un array de tuplas.
Este código puede ser utilizado tanto con una implementación por vector de tuplas como con una implementación distinta que utilice dos vectores paralelos (uno para las claves y otro para los valores).
Es importante destacar que un Diccionario, al igual que la mayoría de colecciones o conjuntos de elementos, puede contener objetos de cualquier tipo. Al menos, eso es lo que nos gustaría definir aquí. La mayoría de los lenguajes permiten esto. No queremos limitarnos a tener un DiccionarioDeStrings, DiccionarioDeInts, DiccionarioDeDoubles, sino un único diccionario que pueda ser utilizado para cualquier tipo de dato.
Objetivo Abstracción Flexibilidad
Flexibilidad y abstracción: la importancia de utilizar TDA's
La utilización de Tipos de Datos Abstractos (TDA's) tiene como objetivo principal lograr una mayor flexibilidad en el código. Esto se logra gracias al concepto de abstracción, que permite separar el conocimiento de cómo se realizan las operaciones de un TDA y su implementación concreta.
Este enfoque se basa en la conocida técnica del "divide y conquista", donde se dividen los problemas en partes más pequeñas y se asigna una parte a cada componente de la aplicación. De esta manera, si una parte del TDA cambia, las demás partes no se ven afectadas o, al menos, el impacto es mucho menor.