Você está na página 1de 11

TIPOS ABSTRACTOS DE DATOS - TADS 4.

1 Introduccin El objetivo del estudio de las estructuras de datos es la representacin de la informacin (datos) que permitan obtener un algoritmo lo ms sencillo posible, para lo cual se tiene en cuenta:

Identificar y desarrollar de modo formal las entidades y las operaciones que definen la informacin que se trata, as como determinar qu tipos de problemas pueden resolverse utilizando estas operaciones y entidades. Determinar la representacin ms idnea de estas estructuras abstractas e implementarlas.

Ejemplo 4.1:- Problemas a enfrentar - Buscar un libro en la biblioteca - Uso de nmeros romanos o arbigos Los problemas reales tienden a ser complejos porque involucran demasiados detalles, y resulta imposible considerar todas las posibles interacciones a la vez, en este aspecto la abstraccin constituye una herramienta en la especificacin de un TAD, ya que por medio de esta capacidad solo se tienen en cuenta los aspectos ms relevantes del problema objeto de anlisis y a partir de la abstraccin se determina "el que" del problema a tratar, sin preocuparse de entrada por los aspectos de la implementacin ("el como"). El razonar en trminos de abstracciones conlleva una serie de ventajas:

La resolucin de los problemas se simplifica Las soluciones son ms claras y resulta ms sencillo razonar sobre su correccin Pueden obtenerse soluciones (o fragmentos de ellas) de utilidad ms general, que puedan adaptarse para resolver otros problemas Permite la divisin de tareas

La evolucin de la Programacin muestra una tendencia a incluir mecanismos de abstraccin cada vez de ms alto nivel:

Ensamblador Lenguajes de alto nivel o Estructuras de control Procedimientos y funciones o Tipos de datos o Mdulos o Tipos abstractos de datos o Clases en programacin orientada a objetos

Generadores de aplicaciones (hojas de clculo, gestores de bases de datos, diseo visual de interfaces, ...)

Figura 4.1 Relacin Especificacin - Abstraccin - Implementacin La figura 4.1 representa la abstraccin como una barrera entre la especificacin y la implementacin. Los clientes de una entidad solo conocen la parte de la especificacin que les permite utilizar la entidad sin preocuparse por la implementacin. Para entender el concepto de tipo abstracto de datos analicemos la diferencia entre los tipos predefinidos y los tipos definidos por el programador.

Un tipo predefinido es un tipo abstracto de datos porque: o Est fijado el conjunto de valores permitidos y el manejo de excepciones es transparente para el cliente. o No es posible acceder directamente a la representacin interna de los datos (generalmente). o Est fijado el conjunto de operaciones permitidas sobre dichos valores e implcitamente existen los mecanismos encargados de garantizar que se usan correctamente. o Como programadores slo necesitamos conocer el comportamiento de las operaciones (P.Ej., las leyes algebraicas por las que se rigen los enteros), sin que tengamos acceso a su implementacin concreta. Un lenguaje no soporta la implementacin de tipos abstractos de datos si: o La estructura de datos donde se representa la informacin se define por una parte y las operaciones que manipulan esos datos por otra. o No es posible definir una abstraccin que rena la estructura de datos y las operaciones de forma que la representacin de los datos y la implementacin de las operaciones sea oculta para los clientes y por lo tanto deban ceirse a lo indicado explcitamente en la especificacin de la estructura de datos.

Ejemplo 4.2:- Ejemplo TAD deficiente Si para definir un tipo de datos para representar fechas, utilizamos una representacin como esta: typedef int TDia; typedef enum { enero, febrero, ... , diciembre } TMes;

typedef int TAnyo; typedef struct { TDia dia; TMes mes; TAnyo anyo; } TFecha; Debido a que se tiene libre acceso a la representacin del tipo de datos, es posible realizar operaciones absurdas con respecto a la semntica, como: fecha.mes = febrero; fecha.dia = 30; Al decir que TFecha es un TAD debe poseer las operaciones que restrinjan la asignacin de valores errneos como el da 30 al mes de febrero. 4.2 Definicin y Concepto Un tipo abstracto de dato o TAD es un modelo matemtico compuesto por una coleccin de operaciones definidas sobre un conjunto de objetos abstractos que modelan elementos del mundo, donde dichas operaciones simulan el comportamiento que el elemento modelado tiene en el mundo del problema. El concepto de tipo de dato abstracto (TAD, Abstract Data Types ), fue propuesto por primera vez hacia 1974 por John Guttag y otros, pero no fue hasta 1975 que por primera vez Liskov lo propuso para el lenguaje CLU. Un TAD est caracterizado por un conjunto de operaciones (funciones) al cual se le denomina usualmente como su interfaz pblica y representa el comportamiento del TAD; mientras que la implementacin (como la parte privada del TAD) est oculta al programa cliente que lo usa. Todos los lenguajes de alto nivel tienen predefinidos TAD; que son los tipos denominados simples y las estructuras predefinidas, y estos tienen sus interfaces pblicas que incluyen las operaciones como la +, -, *, etc. Cuando se habla de un TAD no se hace ninguna alusin al tipo de los elementos sino tan slo a la forma en que estn dispuestos estos elementos. Slo interesa la estructura que soporta la informacin y sus operaciones. Para determinar el comportamiento estructural basta con observar la conducta que seguirn los datos. Un TAD tendr una parte que ser invisible al usuario la cual hay que proteger y que se puede decir que es irrelevante para el uso del usuario y est constituida tanto por la maquinaria algortmica que implemente la semntica de las operaciones como por los datos que sirvan de enlace entre los elementos del TAD, es decir, informacin interna necesaria para la implementacin que se est haciendo para ese comportamiento del TAD. Resumiendo podemos decir, que tanto la implementacin de las operaciones como los elementos internos del TAD sern privados al acceso externo y ocultos a cualquier otro nivel.

Un TAD representa una abstraccin:


Se destacan los detalles de la especificacin (el qu). Se ocultan los detalles de la implementacin (el cmo).

Se puede decir que un TAD es un tipo de dato, que se agrega al lenguaje de programacin, para representar un elemento involucrado en el problema que se desea resolver. De esta forma se le permite al lenguaje que se le acerque al mundo del problema, manejando los datos que all se encuentran. En el proceso de desarrollo de software, dentro del mundo del problema casi siempre es posible identificar entidades que permiten expresar la solucin en trminos ms sencillos, ms fciles de mantener y de probar. Un tipo abstracto de datos se compone de:

Una especificacin Una implementacin

4.2.1 Encapsulamiento: El encapsulamiento consiste en aislar las cuestiones de implementacin de las de especificacin, es decir, en esconder los detalles de implementacin de un determinado objeto, sea este un tipo de dato o un algoritmo, y mostrar tan slo su especificacin. De este modo, nos centraremos en el qu y ocultaremos el cmo. Por ejemplo, en el caso del tipo de datos REAL, el lenguaje proporciona al usuario la capacidad de definir variables de este tipo, de acceder y modificar su contenido, de realizar operaciones aritmticas con las mismas. Sin embargo, el usuario no tiene que preocuparse de cmo se almacenan los distintos nmeros reales, ni del tratamiento que es necesario realizar con sus representaciones binarias para sumarlos o multiplicarlos. La tcnica que se utiliza para lograr la ocultacin de la informacin es el encapsulamiento. El uso de la abstraccin y el ancapsulamiento proporcionan varias ventajas a la hora de desarrollar programas complejos o definir nuevos tipos de datos:

Simplificacin en el cdigo resultante. El cdigo obtenido es ms sencillo de entender al no tratar al mismo tiempo todos los detalles del problema. Reduce los errores al permitirnos trabajar con un cdigo ms sencillo. Facilita el mantenimiento del cdigo al separar claramente las distintas operaciones y permitirnos depurar cada una por separado. Permite cambiar la implementacin de ciertas partes del cdigo sin afectar al resto. Permite reutilizar los tipos. Una vez definido un nuevo tipo de datos, puede ser utilizado para la resolucin de ms de un problema. Para ello, la persona que implement los procedimientos de manipulacin no tiene porque ser la misma que los use. Basta con que el usuario final entienda el significado del nuevo tipo de datos y conozca la especificacin de los procedimientos para su manejo. Esta es una clara demostracin de que la implementacin puede quedar oculta para el usuario final.

4.3 Representacin de un Objeto Abstracto Al comenzar con el proceso de diseo de un TAD es necesario tener una representacin abstracta del objeto sobre el cual se quiere trabajar, sin necesidad de establecer un compromiso con ninguna estructura de datos concreta, ni con ningn tipo de lenguaje de programacin seleccionado. Esto va a permitir expresar las condiciones, relaciones, restricciones y operaciones de los elementos modelados, sin necesidad de restringirse a una representacin interna concreta. El primer paso en el proceso de modelado de un TAD consiste en definir el estado interno del objeto abstracto por medio de algn formalismo matemtico, grfico o descriptivo Ejemplo 4.3:- Descripcin TAD Matriz TAD Matriz 0 0 k m-1

i n-1

xi,k

Con esta notacin es posible hablar de cada uno de los componentes de una matriz, de sus dimensiones, de la nocin de fila y columna, de la relacin entre elementos, sin necesidad de establecer unas estructuras de datos concretas para manejarlos. Ejemplo 4.4:- Descripcin TAD Diccionario <[Palabra1, <s11,...,s1k>], [Palabra2, <s21,...,s2k>], [PalabraN, <sN1,...,sNk>]> En esta notacin, se hacen explcitas agunas caractersticas del elemento diccionario, que est formado por un conjunto de palabras que a su vez posee un conjunto de significados. 4.4 Invariante de un TAD El invariante de un TAD establece la validez para cada uno de sus objetos abstractos en trminos de condiciones sobre su estructura interna y sus componentes, indicando en que casos un objeto abstracto modela un elemento posible del mundo del problema. Estructuralmente, el invarianrte esta compuesto por condiciones que restringen el dominio de los componentes internos y por relaciones entre ellos. El invariante est relacionado con la correccin de la implementacin del TAD en los siguientes aspectos:

Las operaciones slo estn obligadas a funcionar sobre representantes vlidos del TAD. Las operaciones que generen valores del tipo representante deben comprometerse a que stos sean siempre representantes vlidos.

Lo importante no es escribir el invariante de la representacin formalmente, sino determinar (an con una descripcin informal) de entre todos los valores que puede tomar el tipo representante cules representan valores vlidos del TAD que estamos diseando. Ejemplo 4.5:- Invariante TAD Diccionario TAD Diccionario: <[Palabra1, <s11,...,s1k>], [Palabra2, <s21,...,s2k>], [PalabraN, <sN1,...,sNk>]> El invariante debe incluir condiciones como: - Las palabras estn ordenadas ascendentemente y no hay repetidas -> elem(i).palabra<elem(i+1).palabra, 1<=i<=N - Los significados estn ordenados ascendentemente y no hay repetidos -> elem(i).sig(r)<elem(i).sig(r+1), 1<=i<=N, 1<=r<=k - Toda palabra tiene por lo menos asociado un significado -> Para todo elem(i)=[palabra,<sig(1),...,sig(k)>], k>0. Si un objeto del TAD no cumple cualquiera de estas condiciones, implica que no se encuentra modelando un elemento del TAD y por lo tanto la representacin no es vlida. 4.5 Especificacin de un TAD La especificacin de un TAD debe cumplir con que es precisa, es general, es legible y no presenta ambigedad Una especificacin para un tipo abstracto de datos consta La identificacin del conjunto de valores posibles La especificacin pre/post de cada una de las operaciones. de: y,

Inicialmente la especificacin de un TAD parte de una metodologa semi - formal, donde se especifican Tipo, Sintaxis y Semntica del TAD que se est modelando. 4.5.1 Especificacin semiformal TAD: Nombre del Tipo Sintaxis: Sintaxis de las operaciones operacion(listado de tipo de argumentos): tipo del resultado Semntica: Efecto de las operaciones

operacion(valores concretos) =>expresin del resultado Ejemplo 4.6:- Especificacin Semi - Formal TAD Natural TAD: Natural Sintaxis: Cero:Natural Sucesor(Natural):Natural Escero(Natural):Booleano Igual(Natural,Natural):Booleano Suma(Natural,Natural):Natural Semntica: Para todo n,m que pertenecen al tipo Natural EsCero(Cero) => Verdadero EsCero(Sucesor(n)) => Falso Igual(Cero,n) => EsCero(n) Igual(Sucesor(n),Cero) => Falso Igual(Sucesor(n),Sucesor(m)) => Igual(n,m) Suma(Cero,n) => n Suma(Sucesor(n),m) => Sucesor(Suma(m,n)) Ejemplo 4.7:- Especificacin Semi - Formal TAD Bolsa Definir el TAD bolsa como una coleccin de elementos no ordenados, con repeticin. Las operaciones a definir son: BolsaVacia, Agregar, EsVacia, Esta, Cuantos, Sucesor, Unin, Total, Interseccin. BolsaVacia: Crea una bolsa sin ningn elemento. Agregar: Agrega un elemento a la lista EsVacia: Visualiza si una bolsa est vacia. Esta: Decide si un elemento se encuentra dentro de una bolsa. Cuantos: Indica la acntidad de veces que esta repetido un elemento Sucesor: Indica el cardinal ms uno. Total: Indica el cardinal de la bolsa. Unin: Construye la bolsa unin de dos bolsas Interseccin: Construye la bolsa interseccin de dos bolsas dadas. TAD: Bolsa

Valores: bolsa de elementos ordenados que pueden repetirse Operaciones: BolsaVacia, Agregar, EsVacia, Esta, Cuantos, Unin, Sucesor,Total, Interseccin Sintaxis: BolsaVacia: Bolsa. Agregar(Bolsa, Elemento): Bolsa EsVacia(Bolsa): Boolean Esta(Bolsa, Elemento): Boolean Cuantos(Bolsa, Elemento): Natural Sucesor(Bolsa): Natural Total(Bolsa): Natural Unin(Bolsa, Bolsa): Bolsa Interseccin(Bolsa, Bolsa): Bolsa Semntica: Sean B,C de tipo Bolsa; e, e1 de tipo elemento Agregar(Agregar (B, e), e1) => Agregar(Agregar (B, e1), e) EsVacia(BolsaVacia) => True EsVacia(Agregar (B, e)) => False Esta(BolsaVacia, e) => False Esta(Agregar (B, e), e1) => Si igual(e,e1) entonces True Si_no Esta(B, e1) Cuantos(BolsaVacia, e): Cero Cuantos (Agregar (B, e), e1) => Si igual(e,e1) entonces Sucesor(Cuantos (B, e1)) Si_no Cuantos (B, e1) Sucesor(BolsaVacia) => Cero Total(BolsaVacia) => Cero Total(Agregar (B, e)) => Sucesor(Total(B)) Union(B, BolsaVacia) => BolsaVacia Union(B, Agregar (C, e)) => Agregar (Union (C, B), e) Interseccion(B, BolsaVacia) => BolsaVacia Interseccion(B, Agregar (C, e)) => Si Esta(B,e) entonces Agregar (Interseccion (B, C),e) Si_no Interseccion (B, C) 4.5.2 Especificacin formal De manera formal el TAD se puede especificar de la a partir del siguiente esquema: Tabla 4.1 Esquema Especificacin TAD Especificacin TAD TAD: Nombre Descripcin objeto abstracto (Grfica o Textual) Invariante del TAD

Operaciones: operacion1(listado de tipo de argumentos): tipo del resultado operacionn(listado de tipo de argumentos): tipo del resultado Prototipo operacion1 /*Descripcin {precondiciones: {postcondiciones: ...}

operacin*/ ...}

Las precondiciones y postcondiciones pueden referirse, nicamente, a los elementos que componen el objeto abstracto y a los argumentos que recibe. No pueden incluir ningn otro elemento del contexto en ele cual se van a ejecutar. En la especificacin de las operaciones, se debe considerar implcito en la precondicin y postcondicin, que el objeto abstarcto sobre el cual se va a operar cumple el invariante. Es importante proporcionar un abreve descripcin de cada operacin, de manera que el cliente pueda darse una rpida idea de los servicios que un TAD ofrece, sin necesidad de entrar a hacer una interpretacin de su especificacin formal. Al seleccionar los nombres de las operaciones se debe tener en cuenta que no pueden existir dos operaciones con el mismo nombre en un programa, incluso si pertenecen a TAD diferentes. Por esta razn es recomendable agregar un mismo sufijo a todas las operaciones de un TAD, de tal forma que las identifique. Ejemplo 4.8:- Especificacin TAD Matriz Especificacin TAD Matriz TAD: Matriz Conjunto de valores enteros agrupados en n filas y m columnas, donde cada elemento se puede referenciar a partir de la columna y fila que ocupa dentro del objeto. 0 0 k m-1

i n-1

xi,k

Invariante: n>0,m>0 Operaciones: CrearMat(entero,entero): AsignarMat(Matriz,entero,entero,entero): InfoMat(Matriz,entero,entero): FilasMat(Matriz): ColsMat(Matriz): entero Matriz Matriz entero entero

Matriz CrearMat(int filas,int cols) /*Construye y retorna una matriz de filas-1 filas y cols-1 columnas, inicializando todos sus elementos a cero*/ {precondiciones: filas>0,cols>0} {postcondiciones: CrearMat es una matriz de [0..fila-1,0..cols-1],x[i,k]=0} void AsignarMat(Matriz mat,int fila,int col,int valor) /*Asigna a la celda [fila,col] el {precondiciones: {postcondiciones: mat[fila,col]=valor} int InfoMat(Matriz mat,int fila,int col) /*Retorna el contenido de {precondiciones: {postcondiciones: InfoMat=mat[fila,col]} void FilasMat(Matriz mat) /*Asigna a la celda {postcondiciones: FilasMat= n} void ColsMat(Matriz mat) /*Asigna a la celda {postcondiciones: ColsMat= m} El invariante del TAD Matriz solo establece una restriccin para el nmero de filas y columnas del objeto abstracto. El TAD matriz cuenta con 5 operaciones que permiten realizar las operaciones bsicas para manejar un objeto del TAD, con lo cual es posible resolver cualquier problema que involucre una matriz. 4.6 Clasificacin de las operaciones de un TAD Las operaciones que implemeta un TAD se clasificacn en tres grupos principales, de acuerdo a la funcin que realiza sobre el objeto abstracto.

valor de valor*/ 0<=fila<n,0<=col<m}

la

celda [fila,col]*/ 0<=fila<n,0<=col<m}

[fila,col]

el

valor

de

valor*/

[fila,col]

el

valor

de

valor*/

Constructuras: Son las operaciones encargadas de realizar la creacin de elementos del TAD. En el TAD Matriz la operacin constructora es CrearMat. Modificadoras: Son aquellas operaciones que pueden alterar el estado de un elemento del TAD. Se debe tener en cuenta que luego de realizar la operacin

modificadora sobre el TAD, se debe seguir cumpliendo el invariante. En el TAD Matriz solo se especifico una operacin modificadora, la operacin AsignarMat. Analizadoras: Es una operacin que realiza alguna consulta sobre el estado del objeto y retorna algn tipo de informacin. En el TAD Matriz se tienen tres operaciones analizadoras: InfoMat, FilasMat y ColsMat.

Adicionalmente a los tipos de operacin bsicos existen algunas subcategoras de estas, que le agregan portabilidad al TAD. Dentro de estas operaciones se encuentran las de Comparacin, Copia, Destruccin, Salida a pantalla y Persistencia (son operaciones que le permiten a la instancia del TAD persistir a la ejecucin del programa que lo utiliza). 4.7 Manejo de Error El manejo de errores es uno de los aspectos relevantes durante el proceso de diseo de un TAD. Por lo tanto es conveniente considerar los siguientes aspectos:

La especificacin de las operaciones del TAD debe considerar que los argumentos de la llamada cumplan con las precondiciones, a fin de evitar comportamientos indefinidos. Se requiere la definicin de mecanismos para el reporte de errores, definiendo una lista de posibles errores con sus correspondientes cdigos. Durante una llamada de operacin esta debe mantener de forma adecuada el estado de ejecucin, de tal forma que frente a la imposibilidad de completar satisfactoriamente un proceso, cancela toda la operacin y reporte la razn de fallo.

4.8 Metodologa para el diseo de TADS Para el diseo de un TAD, generalmente se siguen los siguientes pasos:

Identificar los objetos del mundo que se quieren modelar, sus propiedades, relaciones y caractersticas relevantes. Definir un formalismo que represente las caractersticas del objeto abstracto. Definir mediante la declaracin del invariante las reglas de validez del objeto abstracto. Disear las contructoras del TAD. Disear las modificadores del TAD, teniendo en cuenta los cambios que debe permitir el objeto abstracto. Disear las analizadoras del TAD. Agregar otras operaciones que enrriquezcan el TAD y le den mayor funcionalidad. Disear el manejo de persistencia, segn los requerimientos del objeto abstracto. Disear la estructuras de datos que permitan establecer la representacin del objeto.

El contenido de esta pgina esta basado en el material disponible en:


http://www3.uji.es/~badia/ii13/docs/teoria Villalobos, Jorge A. Diseo y Manejo de Estructuras de Datos en C.

Você também pode gostar