Está en la página 1de 28

Los Tipos Abstractos de Datos

Estructuras de Datos y Algoritmos


03/04

Qu son los TADs?


Metodologa de programacin con TADs
Especificacin Algebraica de TADs

Qu son los TADs?


Con los lenguajes de programacin estructurados
(aos 60) surge el concepto de tipo de datos.
Ese concepto es insuficiente para soft a gran
escala: slo el compilador restringe el uso de los
datos.
En los 70 aparece el concepto de TAD: un tipo de
datos no slo es el conjunto de valores, sino
tambin sus operaciones con sus propiedades.

Pero qu son los TADs?


El concepto de TAD ya existe en los lenguajes de
programacin estructurados: los tipos predefinidos.
Ejemplo:
Definicin del tipo de datos de los enteros en ADA
valores: los del intervalo [INTEGERFIRST,INTEGERLAST]
operaciones: +, -, *, /, resto, mdulo, valor absoluto, exp.
propiedades de las operaciones: a+b=b+a, ...
No hay que saber nada sobre implementacin

Definicin de TAD
Un Tipo Abstracto de Datos es un conjunto de
valores y de operaciones definidos mediante una
especificacin independiente de cualquier
representacin.
TAD = valores + operaciones

Definicin de TAD
La manipulacin de un TAD slo depende de su
especificacin, nunca de su implementacin.
Para manipular los enteros nos olvidamos de cmo se
representan los valores y de cmo estn
implementadas las operaciones.

Ejemplo de TAD
Los nmeros complejos con las operaciones de
suma, producto, parte real y parte imaginaria
Cmo lo especificamos?

Especificacin / implementacin
Dada una especificacin de TAD hay muchas
implementaciones vlidas.
Un cambio de implementacin de un TAD es
transparente a los programas que lo utilizan.

Trabajando con TADs


Se pueden implementar los TADs slo a partir de la
especificacin, sin saber para qu se van a usar.
Saber qu sin necesidad de para qu.
Reusabilidad
Se pueden utilizar los TADs slo conociendo la
especificacin.
Saber qu sin necesidad de cmo
Seguridad

Trabajando con TADs


Se puede cambiar la implementacin un TAD utilizado a otra
ms eficiente.
Se pueden implementar los TADs por separado y despus
integrarlos.
Legibilidad
Diseo modular
Organizacin del trabajo
Correccin
Esto facilita el mantenimiento.
Modificabilidad

Trabajando con TADs


Se puede cambiar la implementacin un TAD utilizado a otra
ms eficiente.
Se pueden implementar los TADs por separado y despus
integrarlos.
Legibilidad
Diseo modular
es mejor que el
Organizacin del trabajo
diseo descendente
Correccin
Esto facilita el mantenimiento.
Modificabilidad

Trabajando con TADs


Se puede demostrar la correccin de una
implementacin a partir de su especificacin.
Ms til, se pueden generar prototipos a partir de la
especificacin algebraica

Ejercicios
Especificar (no formalmente) los siguientes TADs
Cadenas de caracteres
Fechas

Programar con TADs


Estructuras de Datos y Algoritmos
03/04

Definicin de TAD
Un Tipo Abstracto de Datos es un conjunto de
valores y de operaciones definidos mediante una
especificacin independiente de cualquier
representacin.
TAD = valores + operaciones

Programar con TADs


1. Especificacin:
Establecer la interfaz con el usuario del tipo (lo que
necesita saber el usuario)
Decir qu es sin decir nada sobre cmo se hace
Se trata de dar la lista de operaciones necesarias y
especificarlas.
Debe ser precisa, legible y no ambigua
Nosotros usaremos especificacin algebraica

Ejemplo de especificacin (1)


espec booleanos
gneros bool
operaciones
verdad: bool
falso: bool
_: bool bool
__,__: bool bool bool

Ejemplo de especificacin (1)


ecuaciones b: bool;
verdad = falso
falso = verdad
verdad falso = verdad
b verdad = verdad
b falso = b
b verdad = b
b falso = falso
fespec

Ejemplo de especificacin (1)


espec booleanos
conjunto de valores
gneros bool
operaciones
verdad: bool
falso: bool
_: bool bool
__,__: bool bool bool

Ejemplo de especificacin (1)


espec booleanos
gneros bool
operaciones
operaciones
verdad: bool
falso: bool
_: bool bool
__,__: bool bool bool

Ejemplo de especificacin (1)


ecuaciones b: bool;
propiedades de las
operaciones
verdad = falso
falso = verdad
verdad falso = verdad
b verdad = verdad
b falso = b
b verdad = b
b falso = falso
fespec

Ejemplo de especificacin (2)


espec conjuntos
usa booleanos,caracteres,naturales
gnero conjcar
operaciones
vaco: conjcar
poner: carcter conjcar conjcar
__: conjcar conjcar conjcar
__: conjcar conjcar conjcar
__: carcter conjcar booleano

...

Ejemplo de especificacin (2)


ecuaciones A,B: conjcar;c,c1,c2:carcter
Avaco = A
Aponer(c,B) = poner(c,AB)
Avaco = vaco
cA Aponer(c,B) = poner(c,AB)
cA Aponer(c,B) = AB
cvaco = falso

...
fespec

Programar con TADs


2. Implementacin:
Elegir la representacin de los valores
Implementar las operaciones
Debe ser estructurada, legible y eficiente

Implementacin
Una propiedad deseable es la encapsulacin.
Representacin privada: el usuario no conoce los
detalles de la implementacin.
Tipo protegido: El usuario slo puede utilizar las
operaciones previstas.
ADA es muy adecuado, tiene buena encapsulacin.

package conjCaracteres is
type conjcar is private;
procedure vacio(A:out conjcar);
function esVacio(A:in conjcar) return boolean;
procedure poner(c:in character; A:in out conjcar);
procedure quitar(c:in character; A:in out conjcar);
function pertenece(c:in character; A:in conjcar) return
boolean;
procedure union(A,B:in conjcar; C:out conjcar);
procedure interseccion(A,B:in conjcar; C:out conjcar);
function cardinal(A:in conjcar) return integer;
private
...
end conjCaracteres;

generic
type ind is (<>); -- cualquier tipo discreto
type elem is private; -- cualquier tipo
with function ">"(a,b:elem) return boolean;
package ordenacion_g is
type vector is array(ind range <>) of elem;
procedure ordena(v:in out vector);
end ordenacion_g;

with ordenacion_g;
procedure titi is
type color is (rojo,azul,gris);
type dia is (lu,ma,mi,ju,vi,sa,dom);
package miord is new ordenacion_g(dia,color,">");
use miord;
x:vector(ma..vi):=(gris,azul,rojo,gris);
begin
...
ordena(x);
...
end titi;

También podría gustarte