290 likes | 545 Views
Tipo de Dato Abstracto. Tipos de datos: En Pascal : char, boolean, integer, real... En C: char, bool, int, real,... ¿Qué sabemos de su implementación?. TDA (Tipo de Dato Abstracto).
E N D
Tipo de Dato Abstracto Tipos de datos: En Pascal : char, boolean, integer, real... En C: char, bool, int, real,... ¿Qué sabemos de su implementación?
TDA (Tipo de Dato Abstracto) Abstracción es el mecanismo que permite seleccionar partes de un todo complejo para su consideración, ignorando el resto. Permite filtrar aquellos aspectos relevantes, y obtener soluciones más generales. Un TDA (tipo de dato abstracto) es un modelo en el que se define una estructura o se referencia un concepto y sus operaciones
TDA La abstracción permite considerar la resolución de un problema sin tener en cuenta los detalles por debajo de cierto nivel El concepto de Tipo de Dato Abstracto (‘Abstract Data Type’ o ADT en inglés) surgió para facilitar el trabajo con tipos de datos haciendo abstracción de la implementación de los mismos. Un TDA está dado por un grupo de datos que cumplen cierta condición especificada para el TDA, más un conjunto de operaciones que representan el comportamiento del TDA
Elementos de un TDA • Tipo de Dato • Invariantes o axiomas • Operaciones • Precondiciones • Postcondiciones
Ejemplo de TDA • Supongamos que nos interesa sumar enteros más grandes que los que provee el lenguaje que usemos. • Podemos, para ello, crear el TDA GranEntero, especificando: • Tipo de Dato • Invariantes • Operaciones • Precondiciones • Postcondiciones
Tipo de Dato: • GranEntero • Invariantes: • Un GranEntero se compone de dígitos • Estos dígitos están ordenados de manera lineal • Un GranEntero puede contener 500 dígitos • Operaciones: • Creación o construcción: • Crea o genera un gran entero, con valor nulo • Precondición: ninguna • Postcondición: un GranEntero resulta creado
Suma: • Recibe de entrada dos instancias de GranEntero y devuelve como salida una instancia GranEntero • Precondición: ambas instancias de GranEntero han sido creadas. • Postcondición: la instancia de GranEntero de salida contiene la suma de las dos de entrada. • Eliminar: • Elimina un GranEntero • La entrada es un GranEntero y no tiene salida • Precondición: la instancia de GranEntero ha sido creada. • Postcondición: libera los recursos asociados a la instancia.
Interfaz e implementación de un TDA La entidad TDA exporta las características en forma de operaciones. La implementación de la estructura del TDA, y de las operaciones propias son privadas. No se permite acceso ni visibilidad a la implementacion de un TDA.(Ocultamiento de la información) Se oculta la maquinaria algorítmica que implementa la semántica de los operadores. Un TDA encapsula ciertos tipos de datos en cuanto a la definición del tipo y todas las operaciones del mismo en una sección del código
Un tipo abstracto de datos es una colección de objetos y de operaciones que se definen mediante una especificación que es independiente de cualquier representación Pasos de la construcción de un TDA 1.Se define la especificación del TDA = determinar que elementos pertenecen al TDA y el conjunto de operaciones propias para el tipo. Las operaciones se deben definir independientemente de cualquier implementación, Sólo se indica las propiedades que deben cumplir. (Abstracción) 2.Se construye la o las implementaciones del TDA y se codifican las operaciones definidas para el tipo abstracto. (Refinamientos sucesivos)
Resumiendo... Los TDA constituyen una forma de generalización y encapsulamiento de los aspectos más importantes de la información que se debe manejar en la resolución de un problema, sin considerar las cuestiones relativas a la implementación. UnTDA define una clase de concepto que puede manejarse con independencia de la estructura de datos para representarlo. TDA=Representación(estructuras de datos)+Operaciones (métodos)
Ventajas del uso de TDA Para usarlos sólo debemos conocer la especificación= interfaz de las operaciones. La implementación podría variar sin que ninguna aplicación que utilizara el TDA se viera afectada. La alta cohesión del módulo que implementa el TDA, y el bajo acoplamiento que se dará con otros módulos permite reutilizar el código.
Conceptos básicos La especificación de un TDA es la descripción del comportamiento del mismo. Debe formalizarse. Indica qué hace el TDA. La implementación es la forma específica en que se almacenan los datos y se codifican las operaciones. Está dado por un grupo de instrucciones a ser ejecutadas por la computadora, y se escribe en uno o más lenguajes de programación. Las implementaciones deben corresponder a las especificaciones.
¿Cómo se especifica un TDA? Hay dos tipos de especificaciones formales de un TDA: 1. Axiomática : expresión de la forma de las operaciones, indicando las reglas a seguir para realizar cada operación. 2. Semántica : expresión de la operatoria de las operaciones. Se especifican las consecuencias de las operaciones para el TDA. Se da mediante el lenguaje natural, o mediante especificación algebraica.
Como realizar la especificación formal un TDA: • Se debe indicar • Tipo de Dato: el nombre del TDA. Permite identificarlo. • Axiomas: invariantes de representación abstracta del TDA. Describen las características abstractas del TDA. • Operaciones: especificación de la sintaxis correspondiente a las operaciones propias del TDA (primitivas), junto a las Precondiciones y Postcondiciones para cada una de ellas.
Ejemplo de especificación de un TDA TDA String Tipo de Dato: String Axiomas: Elementos: conjunto de letras Estructura: los elementos tienen una relación lineal Dominio: es el conjunto de todas las cadenas de caracteres que se pueden formar con hasta 100 caracteres.
Operaciones: Construir : crea un String vacío Entrada: -- Salida: instancia de String creada y ‘vaciada’ Precondición: -- Postcondición: String creado queda nulo Agregar_letra: agrega una letra al final Entrada: una instancia de String y un carácter Salida: la instancia de String modificada Precondición: la instancia de String no debe superar los 99 caracteres Postcondición: la instancia de String tiene una letra más al final
Concatenar: concatena dos String Entrada: dos instancias de String Salida: una nueva instancia de String resultado de la concatenación de los dos de entrada. Precondición: la suma de las letras de ambos String no debe superar 100 Postcondición: la instancia de String de salida es la concatenación de las dos de entrada. Destruir: elimina un String Entrada: un String Salida: --- Precondición: la instancia ha sido creada. Postcondición: libera los recursos asociados a la instancia.
Tener en cuenta que... • El estado de una instancia de un TDA se determina por las variables que lo definen, las cuales son modificadas a través de métodos, por ejemplo mediante la utilización de algún operador. • Luego de aplicar ese operador siempre se debe verificar el cumplimiento de determinadas condiciones que definen a qué estado debe pasar ese objeto luego de aplicar dicho operador. • (Esto a veces se formaliza mediante uno o más axiomas).
Precondiones y Postcondiciones Las precondiciones de una operación representan los requisitos que se deben cumplir para que la operación se lleve a cabo. Las postcondiciones expresan las condiciones que se verificarán para la instancia de TDA luego de llevada a cabo la operación correspondiente.
Ciclo de vida • Es el conjunto de etapas por las que atraviesa toda instancia de TDA. • Creación • Operatoria • Destrucción
Invariante de un TDA Es una proposición que expresa el conjunto de valores válidos del TDA. Expresa la estructura abstracta del TDA. El invariante permite saber qué elementos pertenecen al TDA y qué elementos no.
¿Cómo saber si la implementación de un TDA es de buena calidad? • Se considera • el requerimiento de espacio • el tiempo empleado en las distintas operaciones • la posibilidad de reutilización que ofrezca
Pasos en la utilización de TDAs • Es el conjunto de etapas por las que atraviesa todo TDA. • Estas son: • Diseño: etapa en la cual se especifica el TDA. • Implementación: se escribe la codificación correspondiente al TDA. • Uso: se utiliza la implementación del TDA en la resolución de un problema.
TDA y Clases Se puede representar e implementar un TDA en el marco de la Programación Estructurada (por ejemplo utilizando struct), o con otros paradigmas, como el de la Programación orientada a Objetos (O.O.). En particular en O.O. una clase es una representación e implementación real de un TDA Una clase equivale a un tipo. Un objeto es una instancia de una clase (equivalente al concepto de variable de un tipo) Una clase tiene datos miembro y métodos miembro. Los métodos son las funciones de la clase, corresponden a la implementación de las primitivas del TDA.
De este modo, ahora es: programas = objetos + mensajes cumpliéndose, además objetos = datos + métodos Los objetos encapsulan datos = información estática y métodos = información dinámica Fuertemente ligado a este concepto está el de ocultamiento Los objetos tienen un comportamiento determinado (es aquello que hacen) cuando reciben un mensaje (= invocación a un método propio)
Lecturas Recomendadas • Meyer, Bertrand, Object Oriented Software Construction, Prentice-Hall, 1997. Capítulos 4 y 6.