You are on page 1of 38

ALGORITMOS DATOS Y PROGRAMAS -2013

Teoría 16

TEMAS

Tipos Abstractos de Datos (TAD)
Definición Características

TIPOS ABSTRACTOS DE DATOS - CONCEPTOS
Los tipos de datos son necesarios para identificar valores y operaciones posibles para variables y expresiones.
Las nociones de estructuras de datos, variables y constantes que se han estudiado son abstracciones para tratar de acercar al mundo real la especificación de los datos de problemas.
2

CONCEPTOS Los lenguajes de programación y los sistemas operativos se encargan de manejar las conversiones entre las definiciones abstractas y la representación interna en memoria. Hasta ahora se han considerado tipos de datos simples.TIPOS ABSTRACTOS DE DATOS . 3 . estructurados y definidos por el usuario.

TIPOS ABSTRACTOS DE DATOS . Los lenguajes también verifican que las operaciones se hagan entre datos del mismo tipo. asociándoles un tipo. 4 .CONCEPTOS La mayoría de los lenguajes de programación modernos impone la obligación de declarar todos los nombres de variables. La mezcla de tipos en general es detectada y considerada un error por los lenguajes de programación.

TIPOS ABSTRACTOS DE DATOS . 5 .CONCEPTOS También hemos visto la ventaja de descomponer (modularizar) un problema (sistema de software) en procedimientos y funciones. de modo de descomponerlo en funcionalidades (procedimientos/funciones) relativamente independientes y más simples que el problema global. De este modo se abstraen las operaciones del sistema.

. La interfaz es una especificación de QUÉ puede hacer el módulo y puede tener declaraciones de tipos y variables que deban ser conocidas externamente.TIPOS ABSTRACTOS DE DATOS . La funcionalidad interna (implementación) abarca el código de los procedimientos que concretan el CÓMO cumplir la función del módulo.CONCEPTOS Cómo relacionamos TAD con los módulos que utilizamos hasta el momento? Un módulo se puede ver como un bloque que tiene declaración de comunicación con otros módulos (interfaz) y una funcionalidad interna.

plan. para representar las características del celular titular.CONCEPTOS Cómo representamos las características de un celular hasta ahora? Podemos utilizar un registro.TIPOS ABSTRACTOS DE DATOS . número.… Qué ocurre con las operaciones? 7 . fecha de fabricación.

8 .TIPOS ABSTRACTOS DE DATOS .CONCEPTOS Caracterizar los problemas del mundo real significa reconocer los objetos del mundo real y abstraer sus aspectos fundamentales y su comportamiento. de modo de representarlos sobre una computadora. La utilidad fundamental de abstraer y modelizar objetos del mundo real es re-usar soluciones en diferentes problemas.

de modo de mejorar la calidad de los programas. Los tipos definidos por el usuario permiten realizar encapsulamiento o empaquetamiento de los datos: se define un nuevo tipo y se integran en un módulo todas las operaciones que se pueden hacer con él.TIPOS ABSTRACTOS DE DATOS .CONCEPTOS En el desarrollo de sistemas de software es importante trabajar con especificaciones abstractas. 9 .

se tendrá independencia de la representación. 10 . Si se logra que en la solución del módulo los cambios en los tipos de datos internos NO afecten la parte visible del módulo.CONCEPTOS Si el lenguaje permite separar la parte visible (interfaz) de la implementación se tendrá ocultamiento de datos (data hiding).TIPOS ABSTRACTOS DE DATOS .

TIPOS ABSTRACTOS DE DATOS . de manera que el usuario no pueda manipular los datos del objeto excepto por el uso de las operaciones definidas en el punto 11 anterior. (visible) Desarrollo interno de cada una de las operaciones permitidas. con independencia para el usuario de cómo se implementan. . Encapsulamiento de todo. Especificación de las operaciones permitidas para el tipo.CONCEPTOS El concepto de tipo abstracto de dato es un tipo de dato definido por el programador que incluye: Especificación de la representación de los elementos del tipo.

CONCEPTOS Tipos de datos abstractos (TAD) Representación. Valores (Lenguaje) 12 . Valores (Programador) Tipos de datos definidos por el lenguaje Representación y operaciones (lenguaje).TIPOS ABSTRACTOS DE DATOS . Operaciones y Valores (Programador) Tipos de datos definidos por el usuario Representación y operaciones (lenguaje). valores y operaciones (programador) Estructuras de datos Representación (lenguaje) .

TIPOS ABSTRACTOS DE DATOS .CONCEPTOS Un TAD reúne en su definición la representación y el comportamiento de los objetos del mundo real y se puede escribir la ecuación de un programa como: Programa = TADs + Algoritmos de Control 13 .

es decir.TIPOS ABSTRACTOS DE DATOS . Tiene una parte pública (INTERFACE) en donde se declara el nombre del tipo y las posibles operaciones Tiene una privada parte El (IMPLEMENTACION) donde se implementa con alguna estructura el tipo declarado y todas las operaciones de la interface.CONCEPTOS Características Es un tipo de datos para representar objetos del mundo real que no existen en el lenguaje. usuario sólo conoce la parte pública. no conoce como es la estructura utilizada ni como se implementaron las operaciones 14 .

TIPOS ABSTRACTOS DE DATOS .CONCEPTOS Diseñador  Declara la interface del TAD.  Utiliza SOLO las operaciones definidas en la interface para la resolución del problema .  Realiza la implementación (declaración del tipo exportado e implementación de operaciones declaradas en la interface). Usuario Indica el nombre del TAD a utilizar. (tipo exportado y operaciones).  Declara las variables del tipo de datos exportado.

SINTAXIS TAD nombre_TAD interface type exportado nombre_tipo_exportado procedures y funciones visibles implementación representación del type exportado procedures y funciones privadas (si las hay ) implementación de procedures y funciones visibles 16 .TIPOS ABSTRACTOS DE DATOS .

Cómo vamos a trabajar con los TADs? Se define el TAD. independientemente de cualquier programa Se implementa el programa el cual UTILIZA el tipo y las operaciones del TAD. pero no conoce como está implementado .SINTAXIS Los TADs se definen independientemente del programa en el cuál se vayan a utilizar.TIPOS ABSTRACTOS DE DATOS .

USO TAD nombre_TAD interface type exportado nombre_tipo_exportado procedures y funciones visibles programa uno. … end.TIPOS ABSTRACTOS DE DATOS . 18 implementación representación del type exportado procedures y funciones privadas implementación de procedures y funciones visibles . uses nombre_TAD var dato: type exportado begin llamado a procedimientos (dato).

19 . modelo.EJEMPLO Implemente el TAD celular.TIPOS ABSTRACTOS DE DATOS . número. Luego con el TAD celular realice un programa que lea celulares hasta que llegue el celular con modelo “XXX” e informe el titular con año de fabricación mas antiguo. año de fabricación. De un libro se conoce titular.

20 Function consultarNumero(c: celular): integer. titNuevo:string). numNuevo:integer). Interface type exportado celular.TIPOS ABSTRACTOS DE DATOS . Procedure crear(var c: celular. tit:string. Procedure modificarModelo(var c: celular. Procedure modificarAñoFabricacion(var c: celular. Procedure consultarTitular(c: celular. modNuevo:string). Procedure modificarNumero(var c: celular. mod:string. Procedure modificarTitular(var c: celular. Procedure consultarModelo(c: celular. var tit:string). Function consultarAño(c: celular):integer.EJEMPLO TAD tipoCelular. afab:integer. aNuevo:integer). num:integer). . var m:string).

titular:=tit. Siempre debe haber el tipo exportado como parámetro de las operaciones. año:integer. num:integer). Begin c. tit:string. c. afab:integer. mod:string. 21 End. Los parámetros deben ser de tipos simples. Procedure crear(var c:celular. . c. numero:integer. modelo:string. end.TIPOS ABSTRACTOS DE DATOS .EJEMPLO Implementacion celular= record titular:string.numero:= num.modelo:= mod. No se puede leer ni imprimir en las operaciones del TAD. c.año:= afab.

modelo:= modNuevo. 22 . Begin c.titular:= titNuevo.TIPOS ABSTRACTOS DE DATOS . titNuevo:string). End. modNuevo:string). End. Begin c. Procedure modificarModelo(var c:celular.EJEMPLO Procedure modificarTitular(var c:celular.

23 .EJEMPLO Procedure modificarAño(var c:celular. Begin c.numero:= numNuevo. numNuevo:integer). End. añoNuevo:integer). End. Begin c.TIPOS ABSTRACTOS DE DATOS . Procedure modificarNumero(var c:celular.año:= añoNuevo.

24 . End. End.EJEMPLO Procedure consultarTitular(c:celular. Begin tit:= c. var tit:string).modelo.titular. var mod:string). Procedure consultarModelo(c:celular. Begin mod:= c.TIPOS ABSTRACTOS DE DATOS .

Una vez que implementamos todas las operaciones el Tad está terminado y puede ser utilizado por un programa o por otro Tad. End.año. Begin consultarAño:= c. End. .EJEMPLO Function consultarAño(c:celular): integer.numero. Function consultarNumero(c:celular): integer.TIPOS ABSTRACTOS DE DATOS . Begin consultarNumero:= c.

e informe el titular del celular con fecha de fabricación más antigua 26 .EJEMPLO Realice un programa que lea celulares (hasta leer uno de modelo XXX).TIPOS ABSTRACTOS DE DATOS .

read(a). Procedure consultarTitular(c: celular. afab:integer. Procedure modificarNumero(var c: celular. consultarTítular(cel. end. Interface type exportado celular. titNuevo:string). read(m). Uses TipoCelular. Function consultarNumero(c: celular): integer. Var cel:celular. var tit:string). write (tit). num. 26 . Procedure modificarAñoFabricacion(var c: celular. Procedure crear(var c: celular. Program uno.m. Begin read(t). tit:string. read(a).año.m.tit). num:integer).nommax:string. Procedure consultarModelo(c: celular.EJEMPLO TAD tipoCelular. var m:string). if ((2013-consultarAño(cel) > max) then max:= (2013-consultarAño(cel)). t. numNuevo:integer).read(num).t. Procedure modificarModelo(var c: celular. end.read(m). aNuevo:integer).año:integer. While (m <> “XXX”) do begin crear(cel. Function consultarAño(c: celular):integer. modNuevo:string). Procedure modificarTitular(var c: celular.read(num). mod:string.TIPOS ABSTRACTOS DE DATOS . read(t). max:=-1.num).

los almacene en una estructura y luego informe el titular del celular con año de fabricación más antiguo. 27 .TIPOS ABSTRACTOS DE DATOS .EJEMPLO Modifique el programa anterior para que lea 20 celulares.

crear(cel. end.titMax). read(num). v:vector. v[i]:= cel.num)..año.read(año).m. Var cel:celular. Begin for i:= 1 to 20 do begin read(t). 28 . write (titmax).t.TIPOS ABSTRACTOS DE DATOS . obtenerMaximo(v.read(m). ERROR!!!! end.m:string. año. Uses TipoCelular.num:integer.EJEMPLO Program uno. titMax:string.20] of celular. Type vector= array[1. t.

EJEMPLO En el programa a una variable de tipo celular (cel en este caso) SOLO se le pueden aplicar las operaciones definidas en la interface del TAD TipoCelular.TIPOS ABSTRACTOS DE DATOS . es de tipo celular Operación NO definida en la interface del TAD TipoCelular 29 Solución? . v[i] es de tipo celular := cel.

TIPOS ABSTRACTOS DE DATOS .EJEMPLO 1 Definir una operación en el TAD 2 Implementar la operación dentro del TAD 3 Utilizar la operación en el programa 30 .

…. Procedure asignar(var c1:celular.TIPOS ABSTRACTOS DE DATOS . Interface type exportado celular. c2:celular). 31 . Procedure crear(…).EJEMPLO Paso 1: TAD tipoCelular.

c2:celular). Por qué acá se puede realizar la asignación? 32 . End.TIPOS ABSTRACTOS DE DATOS . Begin c1:= c2.EJEMPLO Paso 2: Procedure asignar(var c1:celular.

end.titMax). Begin for i:= 1 to 20 do begin read(t). write (titmax). año.t. Uses TipoCelular.. t. Var cel:celular. obtenerMaximo(v.read(num).m. read(a).año.EJEMPLO Paso 3: Program uno.num:integer.TIPOS ABSTRACTOS DE DATOS . asignar (v[i]. titMax:string. v:vector. end. 33 . Type vector= array[1. read(m).cel).num).20] of celular.m:string. crear(cel.

consultatitular(cel. . Begin max:=-1.nom). Otra forma de for i:= 1 to 20 do implementar este begin procedimiento? asignar(cel. if (2013-consultarAño(cel) > max) then max:= 2013-consultarAño(cel). 34 end.v[i]). cel:cel. max:integer.TIPOS ABSTRACTOS DE DATOS . var nom:string). Var i:integer.EJEMPLO Procedure obtenerMaximo (v:vector.

TIPOS ABSTRACTOS DE DATOS . Begin max:=-1. Var i:integer. for i:= 1 to 20 do begin if (2013-consultarAño(v[i]) > max) then max:= 2013-consultarAño(v[i]). end.nom). consultartitular(v[i]. var nom:string). max:integer. 35 .EJEMPLO Procedure obtenerMaximo (v:vector.

strings.TIPOS ABSTRACTOS DE DATOS . • En la implementación de las operaciones del TAD no se pueden hacer operaciones de lectura ni de escritura. . boolean. 3 4 • El programa que utiliza el TAD sólo puede aplicar a las variables del tipo exportado del TAD las operaciones definidas en la interface.char. real).RESUMEN 1 2 • Un TAD puede tener un único tipo exportado. • Los parámetros de los procedimientos de un TAD pueden ser tipos simples ( integer. el tipo exportado. ó el tipo exportado por otro TAD que utilice este TAD.