Un TDA (tipo de dato abstracto)

Download Report

Transcript Un TDA (tipo de dato abstracto)

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.
Un TDA 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.
Fin Clase-TDA.ppt