Tipos de Datos Abstractos Definición Informalmente se puede decir que un tipo de dato abstracto (TAD) es un tipo de dato, que se agrega al lenguaje de programación, para representar un tipo de elemento involucrado en el problema que se quier resolver. De esta forma se hace que el lenguaje se acerque al mundo del problema, manejando los elementos que allí se encuentran. Por ejemplo si se va a desarrollar software para administrar las calificaciones de los estudiantes de la universidad, los TAD Curso, Estudiante, Calificación, Lista, etc. van a permitir expresar la solución del problema planteado en términos más sencillos, fáciles de mantener y probar. Desde un punto de vista más formal, se define un TAD como una estructura algebraica compuesta por un conjunto de objetos abstractos, que modelan elementos del mundo, y un conjunto de operaciones para su manipulación, las cuales simulan el comportamiento que el elemento modelado tiene en el mundo del problema. Representación de un objeto abstracto En el momento de comenzar el diseño de un TAD es necesario tener una representación abstracta del objeto sobre el cual se requiere trabajar, sin necesidad de establecer un compromiso con ninguna estructura de datos concreta, ni con ningún tipo de lenguaje de programación seleccionado. Esto va a permitir expresar las condiciones, relaciones, restricciones y operaciones de los elementos modelados, sin necesidad de restringirse a una representación interna concreta. Para esto, lo primero que se hace es dar nombre y estructura a los elementos a través de los cuales se puede modelar el estado interno de un objeto abstracto, utilizando algún formalismo matemático o gráfico. El invariante de un TAD El invariante de un TAD establece una noción de validez para cada uno de sus objetos abstractos, en términos de condiciones sobre su estructura interna y sus componentes. Esto es, indica en qué casos un objeto abstracto modela un elemento posible del mundo del problema. Por ejemplo para un TAD matriz el invariante debe exigir que tanto el número de renglones como el de columnas sean mayores a cero. Especificación de un TAD Un TAD se define con un nombre, un formalismo para expresar un objeto abstracto, un invariante y un conjunto de operaciones sobre este objeto. Por lo regular se utiliza una tabla para especificar cada uno de los elementos que compone un TAD. Clasificación de las operaciones Sin importar el tipo de operación es importante colocar una breve descripción de cada operación, de manera que se pueda tener una rápida idea de los servicios que un TAD ofrece. Al seleccionar el nombre de las operaciones debe tenerse en cuenta que no pueden existir dos operaciones con el mismo nombre en un programa, incluso si pertenecen a TAD diferentes, esto se puede lograr mediante el uso de sufijos de mínimo 3 caracteres. Las operaciones de un TAD se pueden clasificar en 3 grupos, según su función sobre el objeto abstracto: - Constructoras: se encarga de crear los elementos del TAD - Modificadora: puede alterar el estado de un elemento del TAD, sin afectar el invariante del TAD. - Analizadora: no altera el estado de los elementos del TAD, solo lo consulta o utiliza. Además de las anteriores operaciones existen otros casos particulares: - Comparación (analizadora) - Copia (modificadora) - Destrucción (modificadora) - Salida a pantalla (analizadora) - Persistencia (guardar/leer) Metodología de Diseño de TAD Para el diseño de un TAD se pueden seguir siguientes pasos: - Identificar los objetos del mundo que se quieren modelar - Definir un formalismo para reflejar el estado del TAD Establecer los invariantes Diseñar las operaciones constructoras Diseñar las operaciones Modificadoras Diseñar las operaciones Analizadoras Diseñar otras operaciones Diseñar operaciones de persistencia Diseñar las estructuras de datos para representar el estado del TAD Diseño de estructuras de datos Para hacer operacional un TAD, es decir, para que funcione realmente sobre un lenguaje de programación, es necesario implementarlo y dejarlo disponible para que otras partes del software lo utilicen. Esto es equivalente a aumentar el lenguaje para que maneje un nuevo tipo de dato. Para implementar un TAD se siguen los siguientes pasos: - Diseñar las estructuras de datos que van a representar cada objeto abstracto. - Desarrollar una función, por cada operación del TAD, que simule el comportamiento del objeto abstracto sobre las estructuras de datos seleccionadas. Bibliografía: • Villalobos Jorge, Diseño y manejo de estructuras de datos en C, Editorial McGraw-Hill Interamericana, 1996.