Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo...
Transcript of Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo...
![Page 1: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/1.jpg)
Introducción a los tipos de datos abstractos (TAD)
SINTAXIS Y SEMÁNTICA DEL LENGUAJE
Prof. Lic. Ma. Gabriela Cerra
![Page 2: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/2.jpg)
Definición de abstracción
Abstracción: idea general que se concentrasobre las cualidades o aspectos esenciales dealgún objeto del mundo real e ignora laspropiedades accidentales.
La abstracción es la capacidad de encapsular yaislar la información del diseño, de laimplementación y de la ejecución.
![Page 3: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/3.jpg)
Tipos de Abstracción
Procedural
De datos
![Page 4: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/4.jpg)
Abstracción Procedural
Un programa es un modelo o abstracción de larealidad y los lenguajes de programación sonlas herramientas a través de las cuales seimplementan esos modelos abstractos.
![Page 5: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/5.jpg)
Abstracción Procedural
A través del diseño descendente separticiona un programa en subprogramas omódulos.
Esa descomposición divide el problema Pteniendo en cuenta qué es lo que hace cadamódulo (qué tarea lleva a cabo),independientemente de cómo.
![Page 6: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/6.jpg)
Abstracción de datos
En una abstracción de datos se piensa enqué se puede hacer con una colección dedatos independientemente de cómo se llevaa cabo.
![Page 7: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/7.jpg)
Evolución hacia el concepto de TAD
Lenguaje de máquina datos son cadenas de
bits + op. de desplazamiento (pto.flot)
Fortran, Cobol y Algol 60 definen tipos de datos standard: entero – real- bool – carácter
Algol 68 define constructores de tipos o tipos definidos por el usuario: alumno, curso
![Page 8: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/8.jpg)
Comparación entre tipos
Semejanzas entre tipos estándar y def. por usuario:
Ambos tienen estructura interna
Entero: es una cadena de bits
Alumno: es un registro
Curso: vector
Ambos tienen operaciones asociadas
Entero: +, -, *, /
Alumno: asignar valor a cada campo- imprimir campos
![Page 9: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/9.jpg)
Comparación entre tipos
Diferencias:
Los tipos estándar ocultan su representacióninterna al programador (no se puedemanipular)
Los tipos definidos por el usuario exigen elegirla representación interna al programador ypermiten manipularla para asignar valor ymodificarlo.
![Page 10: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/10.jpg)
Comparación entre tipos
Diferencias:
Un tipo de dato estándar NO permite modificarsu representación interna al programador
En un tipo definido por el usuario elprogramador puede cambiar la estructurainterna del mismo, lo que obliga a modificartambién las operaciones
![Page 11: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/11.jpg)
Combinando características nacen los TAD’s
Si definimos nuevos tipos de datos peroocultando tanto su representación internacomo la implementación de sus operacionesmediante un mecanismo de encapsulamiento,obtenemos un
TIPO ABSTRACTO DE DATOS.
![Page 12: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/12.jpg)
TAD’s
De esta forma el usuario solo conoce
para qué sirve el nuevo TAD,
qué operaciones puede aplicarle y
qué valores puede almacenar
pero no conoce cómo lo hace: no tiene acceso al almacenamiento ni a la implementación de las operaciones
![Page 13: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/13.jpg)
Definición
Un TAD es una colección de datos acompañada de un conjunto de operaciones para manipularlos, de forma tal que queden ocultas la representación interna del nuevo tipo y la implementación de las operaciones, para todas las unidades de programa que lo utilice.
![Page 14: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/14.jpg)
TAD’s
Un TAD se compone de:
Una interfaz de usuario, pública
Especifica para qué sirve el TAD
Especifica qué hace cada operación
Una implementación, privada
Detalla la estructura de datos que soporta el almacenamiento de datos
Codifica la implementación de cada operación
![Page 15: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/15.jpg)
Características de los TAD’s
Ocultamiento de la información
El usuario desconoce la estructura interna elegida por el diseñador ni cómo se implementan las operaciones
El acceso a los datos almacenados solo se puede hacer mediante las operaciones
![Page 16: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/16.jpg)
Características de los TAD’s
Encapsulamiento
Tanto la representación interna como la implementación de las operaciones se ubican en un lugar particular
Generalización
El programador puede definir un TAD cuyos elementos a almacenar sean de tipos genéricos
![Page 17: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/17.jpg)
Características de los TAD’s
Ventajas:
Mejor modelización del problema
Clasifica los objetos basados en su estructura y su comportamiento
Separa especificación de implementación
Reduce los efectos laterales
Permite llevar mejor control de los cambios
Facilita la extensibilidad del código y el mantenimiento
![Page 18: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/18.jpg)
Diseño de TAD’s
Pasos en la creación de un nuevo TAD
1°- Especificación (sintáctica y semántica)
2°- Diseño de la Representación Interna
3°- Implementación de las Operaciones
![Page 19: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/19.jpg)
Especificación sintáctica
Se elige el nombre del TAD
Se definen las operaciones que actúan sobre lasinstancias del TAD: Se indican los nombres, tipos y parámetros de dichas
operaciones.
![Page 20: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/20.jpg)
Especificación sintáctica
Tipos de operaciones
Creación (vacía o inicializada- reserva espacio)
Asignación de valor
Modificación de valor
Consulta de valor
Destrucción (libera memoria, no siempre se define)
![Page 21: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/21.jpg)
Especificación semántica
Se explica cuál es la utilidad del TAD en la vidareal
Se detalla mediante un comentario para qué sirvecada operación del mismo (qué efecto tiene, quédatos recibe y qué datos retorna)
![Page 22: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/22.jpg)
Representación Interna
Elegir la estructura interna de la entidad en base a las estructuras o tipos de datos disponibles en el lenguaje de programación de alto nivel elegido
![Page 23: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/23.jpg)
Implementación
Desarrollar los algoritmos correspondientes a las operaciones, en el código del lenguaje elegido y de acuerdo a la representación interna definida en el paso previo
![Page 24: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/24.jpg)
Ejemplo:Especificación TAD Producto
TAD Producto: sirve para almacenar el código, nombre, marca, precio y stock de un producto particular
Operaciones:
Cargar datos del producto
Modificar datos del producto
Consultar datos del producto
Copiar datos de un producto en otro
![Page 25: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/25.jpg)
Especificación
Procedure Cargar (var P: producto; nom: string[20]; mar:string[20]; codi: integer; pre:real; st:integer);
{retorna un producto P con todos sus datos cargados}
Procedure ModNom(var P: producto; nom: string[20]);
{retorna un producto P con su nombre modificado}
Procedure ModCod(var P: producto; codi: integer);
{retorna un producto P con su código modificado}
![Page 26: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/26.jpg)
Especificación
Procedure ModPre(var P: producto; pre: real);
{retorna un producto P con su precio modificado}
Procedure ModMar(var P: producto; mar: string[20]);{retorna un producto P con su marca modificada}
Procedure ModStock(var P: producto; st: integer);
{retorna un producto P con su stock modificado}
Procedure copiar(var P1: producto; P2: producto);
{copia en P1 todos los datos de P2 }
![Page 27: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/27.jpg)
Especificación
Function VerNom(P: producto): string[20];
{retorna el nombre de P}
Funtion verCod(P: producto): integer;
{retorna el código de P}
Funtion verPre(P: producto):real;
{retorna el precio de P}
![Page 28: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/28.jpg)
Especificación
Function VerMar(P: producto): string[20];
{retorna la marca de P}
Funtion verStock(P: producto): integer;
{retorna el stock de P}
![Page 29: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/29.jpg)
Uso del TAD - APLICACIÓN
Ejercicio: Sin terminar el diseño, es decir, SIN SABER CUÁL SERÁ LA IMPLEMENTACIÓN NI LA EST. INTERNA, vamos a desarrollar una aplicación que cree dos productos y determine de cuál hay más stock
![Page 30: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/30.jpg)
Representación interna
Volviendo al diseño:
Qué estructura de datos nos es más conveniente para almacenar un producto en Pascal??
Se define en type
![Page 31: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/31.jpg)
Representación interna
type
cad: string[20];
prod=record
nom: cad;
marca: cad;
prec: real;
stock: integer;
cod: integer
end;
![Page 32: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/32.jpg)
Implementación
Se codifica en Pascal cada operación especificada, respetando la estructura de datos elegida
En Pascal un TAD se implementa con una UNIT
![Page 33: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/33.jpg)
UNIT Pascal
Unit nombre;
Interface
{parte pública lleva estructura interna +
especificación de las operaciones}
Implementation
{parte privada implementación de cada op}
Initialization {opcional}
Begin
….
end.
![Page 34: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/34.jpg)
TAD Compuesto
Se construye un nuevo Tad en base a otro pre existente. Se pueden tener TAD’s dobles, triples, etc.
Ejercicio: vamos a diseñar el Tad Supercomo colección de productos. (taddoble)
![Page 35: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/35.jpg)
TAD Super- Especificación
Procedure CrearSup( var S: super);
{crea un supermercado S vacío}
Procedure Agregar(var S:super; P: producto);
{agrega el producto P al super S ordenado por codigo}
Procedure Eliminar(var S:super; cod:integer);
{elimina el producto de código cod del super S }
![Page 36: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/36.jpg)
TAD Super- Especificación
Procedure Recuperar( S: super; I:integer; var P:producto);
{retorna en P el producto iésimo de S}
Function Cant( S:super): integer, {retorna la cantidad de
productos del super S}
Function Existe( S:super; cod:integer): boolean;
{retorna true si el producto de código cod existe en S, falso en
c.c. }
![Page 37: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/37.jpg)
Uso del TAD - APLICACIÓN
Ejercicio: vamos a desarrollar una aplicación que cargue el supermercado con productos y luego imprima un listado de los códigos de aquellos productos con stock nulo.
![Page 38: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/38.jpg)
TAD triple
TAD fecha- Tad producto con fecha de vencimiento – Tad Super
Ejercicio: vamos a desarrollar una aplicación que cargue el supermercado con productos y luego imprima un listado de los códigos de aquellos productos vencidos
![Page 39: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/39.jpg)
ADA
Todo programa en ADA tiene 4 partes:
- Especificación de contexto (uso de librerías ej.
with ada_io);
- Especificación del programa (encabezado)
- Parte declarativa
- Cuerpo
![Page 40: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/40.jpg)
Ejemplo
1)
with ada_io;
use ada_io;
procedure Doble is
x, y: integer;
Begin
get(x);
y:=x+2;
put(y);
End Doble;
2)
use ada_io;
Function pepe (n:integer) return integer is
z: integer;
Begin
z:= 2 + n
return z
End pepe;
![Page 41: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/41.jpg)
Parámetros en ADA
- Por defecto siempre in copia
- Pueden ser out resultado
- Pueden ser in out valor resultado si es un
tipo primitivo o referencia si no lo es
![Page 42: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/42.jpg)
TAD’s en ADA
Encapsula mediante paquetes.
Los paquetes se definen en archivos fuentes separados de la aplicación que los usa.
El paquete tiene dos partes:
Especificación – pública nombre+protocolo+
estruc. interna privada.
Cuerpo o body- privada contiene la
implementación de las operaciones
![Page 43: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/43.jpg)
TAD’s en ADA
La parte visible o pública del TAD es leída por el compilador cuando se compila la aplicación que lo usa
La parte privada NO.
Para usar un TAD debo incluirlo en la aplicación con with (calificado) o use.
![Page 44: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/44.jpg)
Ejemplo
package Tpersona is
type cadena is string(1..30);
type persona is private;
function vernom(p:persona) return cadena;
function veredad(p:persona) return integer;
procedure modedad(p: in out persona; nue:integer);
procedure modnom(p: in out persona; otro: cadena);
private
type persona is record Esto se compila y genera un
nom: cadena; archivo Tpersona.ads
edad: integer;
endrecord;
End Tpersona;
![Page 45: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/45.jpg)
package body Tpersona is
function vernom (p:persona) return cadena is
begin
return p.nom;
end;
function veredad(p:persona) return integer is
begin
return p.edad;
end;
procedure modedad(p: in out persona; nue: integer) is
begin
p.edad:= nue
end;
……
end Tpersona; Se compila y genera un arch Tpersona.adb
![Page 46: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/46.jpg)
Ejemplo
use Tpersona;
Procedure Main is
p1, p2:persona;
e: integer;
begin
----
----
e:=veredad(p1);
put( e);
end;
![Page 47: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/47.jpg)
Características particulares:
En la parte pública de la especificación se pueden declarar tipos públicos, privados y limitados privados
A los datos privados solo los accedo por operaciones del TAD pero admiten asignación directa, comparación y desigualdad
Si el dato es limitado-privado solo se accede por operaciones del TAD.
![Page 48: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/48.jpg)
TAD’s genéricos
Permite definir un parámetro o elemento genérico que se instancia en ejecución con un tipo de dato específico
Pueden ser uno o varios parámetros genéricos
![Page 49: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/49.jpg)
Generic
type elemento is private;
package Tpila is
type pila is private;
function vacia(p:pila) return boolean;
procedure crear(p:in out pila);
procedure apilar(p: in out pila; e:elemento);
procedure desapilar(p: in out pila; e: in out elemento);
Private
type pila is record
datos: array[1..30] of elemento;
tope: integer;
endrecord;
end Tpila;
![Page 50: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/50.jpg)
Package body Tpila is
function vacia(p:pila) return boolean is
begin
if p.tope=0 then return true
else return false
end;
…….
end Tpila;
![Page 51: Introducción a los tipos de datos abstractos · Esa descomposición divide el problema P teniendo en cuenta quées lo que hace cada módulo (qué tarea lleva a cabo), independientemente](https://reader034.fdocumento.com/reader034/viewer/2022042102/5e7f1cf0f12cc34b280a97a9/html5/thumbnails/51.jpg)
declare
package PilaEnt is new Tpila(integer);
package PilaReal is new Tpila(float);
…..
use PilaEnt;
Procedure Main is
p1: pila;
……….