tipos de datos recursivos - tads
DESCRIPTION
Tipos de Datos Recursivos - TADsTRANSCRIPT
-
TIPOS DE DATOS RECURSIVOS
TADSIntroduccin excepciones
-
RECURSION
La recursin es un mecanismo de estructuracin para
Un tipo de dato recursivo se define como unaestructura que puede contener componentes
del mismo tipo.
La recursin es un mecanismo de estructuracin paradefinir datos agrupados: cuyo tamao puede crecer arbitrariamente
cuya estructura puede ser arbitrariamente compleja.
-
RECURSION - IMPLEMENTACIN
Los lenguajes de programacin convencionalessoportan la implementacin de los tipos de datosrecursivos a travs de los punteros.
Los lenguajes funcionales proveen mecanismos masabstractos que enmascaran a los punteros
Lista:elementoLista:
Puntero al comienzopuntero al siguiente
nodoelemento
-
EJEMPLOS
lista de enteros
int_list = {nil} U (integer X int_list)
vaciolista elemento
lista
Unin entre nil y un producto cartesiano de enteros y lista
rbol binario de enteros
int_bin_tree = {nil} U (integer X int_bin_tree X int_bin_tree)
AB-iABAB-d
vacioUnin entre nil y un productocartesiano de enteros y rboles
elemento
-
PUNTEROS
Estructuras de tamao arbitrario, nmero de items no determinado: los punterospermiten conectar juntos muchos items sin tener un nombre explicito para todosellos.(recursin)
relaciones mltiples entres los items: los punteros permiten que el dato sea puesto en varias estructuras sin necesidad de duplicarlo.
acceso a bajo nivel: los punteros estn cercade la mquina
-
INSEGURIDAD EN LOS PUNTEROS
Los punteros son un mecanismo muy potentepara definir estructras de datos recursivas
Por acceder a bajo nivel, pueden obscurecer o hacer inseguros a los programas que los usan.
Se compara a los punteros con los gotoSe compara a los punteros con los goto los go to amplian el rango de sentencias que
pueden ejecutar. los punteros amplian el rango de las celdas de
memoria que pueden ser referenciadas por unavariable y tambin amplian el tipo de los valoresque puede contener un objeto.
-
INSEGURIDAD EN LOS PUNTEROS
1. Violacin de tipos2. Referencias sueltas - referencias
danglingLiberacin de memoria: objetos 3. Liberacin de memoria: objetos perdidos
4. Punteros no inicializados5. Punteros y uniones discriminadas6. Alias
-
3. LIBERACIN DE MEMORIA: OBJETOSPERDIDOS
Las variables puntero se alocan comocualquier otra variable en la pila de registrosde activacin
los objetos (apuntados) que se alocan a travsde la primitiva new son alocados en la heap de la primitiva new son alocados en la heap
La memoria disponible (heap) podrarpidamente agotarse a menos que de algunaforma se devuelva el almacenamiento alocadoliberado.
-
Si los objetos en el heap dejan de ser accesiblesesa memoria podria liberarse
garbage (objetos perdidos)
3. LIBERACIN DE MEMORIA: OBJETOSPERDIDOS
garbage (objetos perdidos)
Un objeto se dice accesible si alguna variable en la pila lo apunta directa o indirectamente. Un objeto es basura si no es accesible.
Mecanismos para desalocar memoria
-
dispose (Pascal) explicita
reconocimiento de que porcin de la memoria es basura
se requiere o no intervencin del usuario
3. LIBERACIN DE MEMORIA: OBJETOSPERDIDOS
.
dispose (Pascal) delete (C++) Liberacion
de espacio en el heap
implicita
explicita
Garbage collector
Reponsabilidad del programador
Indepediente de la aplicacion
-
LIBERACION DE MEMORIA EXPLICITA
El reconocimiento de la basura recae en el programador, quien notifica al sistema cuandoun objeto ya no se usa.
No garantiza que no haya otro puntero queapunte a esta direccin definida como basura, este puntero se transforma en dangling apunte a esta direccin definida como basura, este puntero se transforma en dangling (puntero suelto).
Esto error es difcil de chequear y la mayorade los lenguajes no lo implementan por que escostoso
-
EXPLICITA: PASCAL
Proceso llamado dispose libera memoria en el heap
Puede generar referencias sueltasPara evitarlo se necesitara una verificacin
dinmica para garantizar el uso correcto del dinmica para garantizar el uso correcto del disposenew (p)
q:= p
dispose (p)
...q q referenciasuelta
libera el espacio del nodoy pone p en nil
-
IMPLCITA: GARBAGE COLLECTOR
El sistema, durante la ejecucin tomar la decisin de descubrir la basura por medio de una algoritmo de recoleccin de basura: garbage collector.
muy importante para los lenguajes de programacin que hacen un uso intensivo de variables dinmicas.(LISP, Phyton)
-
IMPLCITA: GARBAGE COLLECTOR
En Algol-68 y Simula 67 el garbage collector reclama automticamente la memoria no utilizada.
Eiffel y Java que uniformemente tratan a Eiffel y Java que uniformemente tratan a todos los objetos como referenciados porpunteros proporcionan un recolectorautomtico
ADA chequea dinmicamente que el tiempo de vida de los objetos apuntados sea menor igualque el del puntero
-
GARBAGE COLLECTOR: IMPLEMENTACIONES
Se ejecuta durante el procesamiento de lasaplicaciones
Sistema interactivo o de tiempo real: no bajarSistema interactivo o de tiempo real: no bajaren el rendimiento y evitar los riesgos
Muy
eficiente
Ejecucinen
paralelo
-
GARBAGE COLLECTOR: IMPLEMENTACIONES
Reference counting este esquema supone que cada objeto en la heap tiene un campo descriptor extra que indica la cantidad de variables que lo referencian.
Si es 0 garbage
Existen otras mtodos mas complejos, pero se pierde en eficiencia.
-
TIPOS ABSTRACTOS DE DATOS
La abstraccin es el mecanismo que tenemos laspersonas para manejar la complejidad
Abstraer es representar algo descubriendo suscaractersticas esenciales y suprimiendo las que no lo son. caractersticas esenciales y suprimiendo las que no lo son.
El principio bsico de la abstraccin es la informacin oculta.
-
TIPOS ABSTRACTOS DE DATOS
TA D = Representacin (datos) + Operaciones
(funciones y procedimientos)
Los tipos de datos son abstracciones y el proceso de construir nuevos tipos se llama abstraccin de datos.
Los nuevos tipos de datos definidos por el usuario se llaman tipos abstractos de datos.
-
Lenguaje de programacin
Abstraccin de procesos
Abstraccin de datos
UNIDADESAccionabstracta
TADS
TIPOS ABSTRACTOS DE DATOS
abstracta
Extensin del lenguaje:una nueva operacion
void INTER (x,y:int) cuerpoend
INTER (a,b)
SIMULA 67
POO
Descubrir e incorporar nuevos tipos al lenguaje
-
TADS Tipo abstracto de dato (TAD) es el que satisface:
Encapsulamiento: la representacin del tipo y lasoperaciones permitidas para los objetos del tipo se describen en una nica unidad sintctica.
Refleja las abstracciones descubiertas
Ocultamiento de la informacin: la representacinde los objetos y la implementacin del tipo permanecenocultos
Refleja las abstracciones descubiertasen el diseo
Refleja los niveles de abstraccion. Modificabilidad
-
TADS
Las unidades de programacin de lenguajes que pueden implementar un TAD reciben distintos nombres:
Simula-67 proporciona una estructura sintctica quepermite que las operaciones y la representacinpuedan especificarse en una nica unidad sintcticapuedan especificarse en una nica unidad sintctica(class). Pero no satisface el ocultamiento de la informacin.
Modula-2 mdulo Ada paquete C++ clase Java clase
-
ESPECIFICACIN DE UN TAD
La especificacin formal proporciona un conjunto de axiomas que describen el comportamiento de todas las operaciones.
Ha de incluir una parte de sintaxis y una parte de semntica
Por ejemplo:TAD nombre del tipo (valores que toma los datos del tipo)TAD nombre del tipo (valores que toma los datos del tipo)SintaxisOperacin(Tipo argumento, ...) -> Tipo resultado.
SemnticaOperacin(valores particulares argumentos) expresin resultado Hay operaciones definidas por s mismas que se consideran constructores
del TAD. Normalmente, se elige como constructor la operacin que inicializa
-
EJEMPLO TAD: CONJUNTO TAD Conjunto(coleccin de elementos sin duplicidades, pueden estar en
cualquier orden, se usa para representar los conjuntos matemticos con sus operaciones).
Sintaxis *Conjuntovacio Conjunto *Aadir(Conjunto, Elemento) Conjunto Retirar(Conjunto, Elemento) Conjunto Pertenece(Conjunto, Elemento) boolean Pertenece(Conjunto, Elemento) boolean Esvacio(Conjunto) boolean Cardinal(Conjunto) entero Union(Conjunto, Conjunto) ConjuntoSemntica e1,e2 Elemento y C,D Conjunto Aadir(Aadir(C, e1), e1) Aadir(C, e1) Aadir(Aadir(C, e1), e2) Aadir(Aadir(C, e2), e1) Retirar(Conjuntovacio, e1) Conjuntovacio Retirar(Aadir(C, e1), e2) si e1 = e2 entonces Retirar(C,e2)
sino Aadir(Retirar(C,e2),e1)
-
PILA de enteros (100) package PILA IS type PILA limited private MAX: constant := 100 function EMPTY (P:in PILA) return boolean prodedure PUSH (P:inout PILA,ELE:in
INTEGER)
ESPECIFICACION
ENCAPSULA
EJEMPLO TAD: PILA EN ADA
INTEGER) procedure POP (P: inout PILA) procedure TOP (P:inPILA) return INTEGER private type PILA is vecpila : array (1..MAX) of INTEGER tope: INTEGER range 0..MAX:=0 end PILA
OCULTA
-
package body PILA is function EMPTY (P:in PILA) return boolean .
end prodedure PUSH (P:inout PILA,ELE:in INTEGER) ..
end
IMPLEMENTACION
procedure POP (P: inout PILA) ..
end procedure TOP (P:inPILA) return INTEGER ..
end
end PILAOCULTA
-
INSTANCIACION DE UNA PILA
with PILAprocedure USAR
pil:PILAy: INTEGER..
INSTANCIA ALOCA Y EJECUTA ELCODIGO DE INICIALIACION
..pil.PUSH (pil,y)
End USAR
APILA
-
TAD: CLASES
En trminos prcticos, una clase es un tipo definido por el usuario
Una clase contiene la especificacin de los datos que describen un objeto junto con la descripcin de las acciones que un objeto conoce.
Atributos + Mtodos Atributos + Mtodos
class NombreClase{
lista_de_miembros}
Formato para definir una referenciaNombreClase varReferencia;
Formato para crear un objetovarReferencia = new NombreClase(args);
-
EJEMPLO: CLASE EN JAVAclass Punto{ private int x; // coordenada x
private int y; // coordenada ypublic Punto(int x _ , int y _ ) // constructor{ x = x _ ; y = y _ ; }public Punto() // constructor sin argumentos{ x = y = 0; }public int leerX() // devuelve el valor de x{ return x; }
Visibilidad de los miembros de la clase
{ return x; }public int leerY() // devuelve el valor de y{ return y; }void fijarX(int valorX) // establece el valor de x{ x = valorX; }void fijarY(int valorY) // establece el valor de y{ y = valorY; }} Punto p;
p = new Punto();p.fijarX (100);System.out.println(" Coordenada x es " + p.leerX());
-
EXCEPCIONESQu es una excepcin?
Condicin inesperada o inusual, que surge durante la ejecucin del programa y no durante la ejecucin del programa y no
puede ser manejada en el contexto local.
-
QU HACEMOS ANTE LA PRESENCIA DEUNA EXCEPCIN?
El programador tiene tres opciones: Inventar un valor que el llamador recibe en lugar de
un valor vlido Retornar un valor de estado al llamador, que debe
verificarlo Pasar una clausura para una rutina que maneje Pasar una clausura para una rutina que maneje errores
El manejo de excepciones por parte de los lenguajes resuelve el problema... El caso normal se expresa de manera simple y
directa. El flujo de control se enruta a un manejador de
excepciones slo cuando es necesario.
-
EXCEPCIONESOriginalmente, se dispona de ejecucin
condicionada (PL/I)ON condicininstruccionesinstrucciones
Los lenguajes modernos ofrecen bloques lxicos. El bloque inicial de cdigo para el caso
normal. Un bloque contigo con el manejador de
excepciones que reemplaza la ejecucin del resto del bloque inicial en caso de error.
-
EXCEPCIONESQu debemos tener en cuenta sobre un lenguaje
que provee manejo de excepciones?: Cmo se maneja una excepcin y cul es su
mbito? Cmo se alcanza una excepcin?Cmo se alcanza una excepcin? Cmo especificar la unidades (manejadores de
excepciones) que se han de ejecutar cuando se alcanza las excepciones?
A dnde se cede el control cuando se termina de atender las excepciones?
Cmo se propagan las excepciones? Hay excepciones predefinidas?
-
EXCEPCIONES Cmo se maneja una excepcin y cul es su
mbito?
Ocurrida una excepcin, que es lo que hace el lenguaje, generalmente busca el bloque de lenguaje, generalmente busca el bloque de excepciones que corresponde a esa porcin de cdigo y deriva all la ejecucin.
Debemos tener presente cual es el alcance, generalmente igual que las variables que posee el lenguaje
-
EXCEPCIONES
Cmo se alcanza una excepcin?
Los lenguajes proveen dos formas: Implcita, ocurre cuando se produce una Implcita, ocurre cuando se produce una
excepcin que el lenguaje tiene contemplada, como puede ser la divisin por cero, le lanza una excepcin predefinida.
Explicita, el programador hace la invocacin de la excepcin a travs de la instruccin que provee el lenguaje: raise, throw..
-
EXCEPCIONES Cmo especificar la unidades (manejadores de
excepciones) que se han de ejecutar cuando se alcanza las excepciones?
Dependiendo del lenguaje, el bloque se maneja las Dependiendo del lenguaje, el bloque se maneja las excepciones se debe colocar en el cdigo en determinado lugar
-
EXCEPCIONES
A dnde se cede el control cuando se termina de atender las excepciones?
Dos posibilidades:
Terminacin: Se termina la ejecucin de la unidad que alcanza ejecucin de la unidad que alcanza la excepcin y se transfiere el control al manejador
Reasuncin: Se maneja la excepcin y se devuelve el control al punto siguiente dnde se invoc a la excepcin, permitiendo la continuacin
-
EXCEPCIONES Cmo se propagan las excepciones?
Debemos tener presente como hace el programa para buscar un manejador en caso que el bloque no lo contenga explicitamente!!!no lo contenga explicitamente!!!
Generalmente Dinmicamente Puede haber combinaciones de
dinmica con esttica
-
ALGUNOS LENGUAJES QUE INCORPORARONEL MANEJO DE EXCEPCIONES- PLI Fue el primer lenguaje. que incorpor el manejo de
excepciones. Utiliza el criterio de Reasuncin. Cada vez que se
produce la excepcin, la maneja el manejador y devuelve el control a la sentencia siguiente de dnde se levant.se levant.
La excepciones son llamadas CONDITIONS Los manejadores se declaran con la sentencia ON:
ON CONDITION(Nombre-excepcin) Manejador
El manejador puede ser una instruccin o un bloque Las excepciones se alcanzan explcitamente con la
palabra clave Signal condition(Nombre-excepcin)
-
EXCEPCIONES PLI
Este lenguaje tiene una serie de excepciones ya predefinidas con su manejador asociado. Son las Built-in exceptions.
Por ej. zerodivide, se levanta cuando hay una
divisin por cero.
A las built-in A las built-in Se les puede redefinir los manejadores de la siguiente
manera: ON Nombre-Built-in Begin End se las puede habilitar y deshabilitar explcitamente se habilitan por defecto. Se deshabilita anteponiendo NO Nombre de la built-in al
bloque, instruccin o procedimiento al que va a afectar
Ej: (ZERODIVIDE) (NOZERODIVIDE)
-
EXCEPCIONES PLI Los manejadores se ligan dinmicamente con las
excepciones. Una excepcin siempre estar ligada con el ltimo manejador definido.
El alcance de un manejador termina cuando finaliza la ejecucin de la unidad donde fue declarado
El alcance de un manejador de una excepcin se acota cuando se define otro manejador para esa excepcin cuando se define otro manejador para esa excepcin y se restaura cuando se desactivan los manejadores que lo enmascararon.
No permite que se pasen parmetros a los manejadores
Desventajas: Los dos ltimos puntos provocan programas difcil de escribir y comprender y la necesidad de uso de
variables globales
-
EXCEPCIONES PLI