Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Parte 5: Tipos de Datos Abstractos

Universidad Nacional de Rio Negro - Sede Andina

Objetivos observables

Esta parte organiza el paso desde la intuición de un TDA hacia especificaciones algebraicas completas. El foco está en separar contrato e implementación, formalizar operaciones con axiomas y usar ese marco para comparar alternativas con criterio.

Propósito de la parte

El objetivo central es construir un lenguaje común para especificar qué promete una estructura sin fijar su representación. Esto permite verificar que distintas implementaciones cumplen el mismo contrato y decidir entre opciones concretas usando complejidad y contexto de uso.

Conceptos clave y anclaje en Java

El pilar de esta parte es la separación de intereses. En Java, esto se traduce habitualmente en la relación entre una interface (el contrato abstracto) y una class (la implementación concreta).

// El Contrato (TDA): Define qué se puede hacer
public interface Pila<T> {
    void apilar(T elemento);
    T desapilar();
    boolean estaVacia();
}

// La Implementación: Define cómo se hace (ej. usando un arreglo)
public class PilaArreglo<T> implements Pila<T> {
    private T[] elementos;
    private int tope;
    // ... implementación de métodos e invariantes ...
}

Desafíos y errores frecuentes

Orden sugerido de lectura

OrdenCapítuloRol en la progresión
1Tipos Abstractos de DatosIntroducción conceptual: interfaz, contrato e invariantes.
2Introducción a Tipos de Datos AbstractosMarco formal: signaturas, axiomas e integración con contratos.
3Análisis de algoritmosModelo de costo para comparar implementaciones.
4Estructuras de Datos: Especificaciones CompletasCatálogo formal de estructuras base y su complejidad.
5Especificaciones algebraicas avanzadasExtensión a familias no lineales (árboles, grafos).
6Localidad de memoriaImpacto del hardware y la JVM en el rendimiento real.
7ProfilingValidación empírica y búsqueda de cuellos de botella.

Capítulos nucleares

Estos capítulos contienen los fundamentos teóricos y prácticos que sostienen toda la parte:

Repaso y ampliación

Capítulos destinados a profundizar en el análisis de rendimiento y en estructuras más complejas:

Índice exhaustivo

Autoevaluación de la parte

Antes de dar por concluida esta parte, intentá responder:

  1. ¿Podés explicar la diferencia entre una interfaz Java y un TDA formal sin usar términos de implementación?

  2. Ante dos implementaciones de una Lista, ¿qué criterios usarías para elegir una sobre otra en un sistema de tiempo real?

  3. ¿Por qué un axioma en una especificación algebraica es equivalente a una prueba de unidad?

  4. ¿Cómo afecta la disposición de los datos en memoria al tiempo de ejecución si la complejidad asintótica es la misma?

Próximo paso

Para iniciar el recorrido, comenzá por Tipos Abstractos de Datos y usá este índice como mapa de avance de la parte.

Ejercicios de verificación

  1. Resolvé un caso mínimo usando la estructura/algoritmo del capítulo y documentá por qué esa elección es válida.

  2. Construí un contraejemplo donde una elección alternativa falle (rendimiento o corrección).

  3. Escribí una prueba corta en Java que verifique un invariante crítico.