Trabajos

Trabajos para el curso K2051

Comisiones anteriores.

Trabajos de Desarrollos de ADT: Tipos de Datos Abstractos

Los ADT (por sus siglas en inglés Abstract Data Types, en castellano TDA ó TAD) son herramientas de abstracción para la solución de problemas.

Son tipos de datos porque, como cualquier tipo de datao, son un conjunto de valores y un conjunto de operaciones sobre esos valores. Cada valor puede ser simple o indivisible pero en general los ADT más útiles son los que sus valores son compuestos, ya sea por valores simples o valores a su vez compuestos.

Los ADT son abstractos porque para aplicarlos, es decir, usarlos en la resolución de problemas, no es necesario conocer la estructura de dato que implementan sus valores ni conocer el método que implementa cada operación.

Esto implica que hay dos roles importantes asociados a la resolución de problemas con ADT:

      • Proveedor del ADT.
      • Consumidor del ADT.

El consumidor no requiere, es más en general evita, conocer los detalles de implementación que el proveedor tuvo que realizar para crear y disponibilizar el ADT.

El contrato del ADT es el que especifica qué servicios debe proveer el proveedor del ADT para su consumidor. Una especificación puede ser implementada por diferentes proveedores y consumida por varios clientes.

Otros roles que se suman al desarrollo de los ADT son el especificador de contrato e interfaces y el tester (verificador) de las implementaciones.

Otra razón por la que son abstractos es porque uno no trabaja directamente con valores del ADT, sí con variables que los contienen y con operaciones que los manipulan.

A continuación presento una serie de trabajos y problemas planteados que se resuelven aplicando ADT. Son trabajos que armé junto con colegas de la cátedra de SSL cuando el tema ADT era parte de la currícula. Son todavía relevantes para la asignatura AED.

Cada trabajo requiere el desarrollo de varios ADT, subiendo en complejidad. Los temas que los trabajos tratan son importantes para la ingeniería en sistemas de información, por lo cual son recomendables para cualquier estudiante.

      • Especificación.
      • Abstracción.
      • Implementación.
      • Semántica de valor y funciones puras.
      • Semántica de referencia y funciones mutadoras.
      • Pruebas de unidad.
      • Tipos de datos.
      • Estructura de datos.
      • Flujos y Archivos.
      • Serialización.
      • Representaciones textuales.
      • Representaciones binarias.
      • Heap y reserva dinámica de memoria.
      • Modularización.
      • Encapsulamiento.
      • Bibliotecas.

El lenguaje de programación planteado como herramienta de resolución es C estándar, pero los problemas y conceptos son también trasladables a o otros lenguajes de programación como C++, Java, Swift, C#, JavaScript, TypeScript o inclusive Smalltalk y Haskell, cada uno con sus ventajas y desventajas.

2006.2
2006.1
2005.2
2005.1
2004.2

Emoticones