Académique Documents
Professionnel Documents
Culture Documents
TADS
Introduccin excepciones
RECURSION
Un tipo de dato recursivo se define como una
estructura que puede contener componentes
del mismo tipo.
La recursin es un mecanismo de estructuracin para
definir datos agrupados:
cuyo tamao puede crecer arbitrariamente
cuya estructura puede ser arbitrariamente compleja.
RECURSION - IMPLEMENTACIN
Los lenguajes de programacin convencionales
soportan la implementacin de los tipos de datos
recursivos a travs de los punteros.
Los lenguajes funcionales proveen mecanismos mas
abstractos que enmascaran a los punteros
Lista:
elemento
Lista:
Puntero al comienzo
elemento puntero al siguiente
nodo
EJEMPLOS
Unin entre nil y un producto
cartesiano de enteros y lista
lista de enteros
vacio
lista
elemento
lista
AB
elemento
AB-i
AB-d
PUNTEROS
Estructuras de tamao arbitrario, nmero de
items no determinado: los punteros
permiten conectar juntos muchos items sin
tener un nombre explicito para todos
ellos.(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 cerca
de la mquina
INSEGURIDAD
EN LOS
PUNTEROS
3.
4.
5.
6.
Violacin de tipos
Referencias sueltas - referencias
dangling
Liberacin de memoria: objetos
perdidos
Punteros no inicializados
Punteros y uniones discriminadas
Alias
dispose (Pascal)
delete (C++)
Liberacion
de espacio
en el heap
implicita
se requiere o no
intervencin del usuario
Garbage
collector
Reponsabilidad
del programador
Indepediente de
la aplicacion
EXPLICITA: PASCAL
Proceso llamado dispose libera memoria en el
heap
Puede generar referencias sueltas
Para evitarlo se necesitara una verificacin
dinmica para garantizar el uso correcto del
dispose
new (p)
libera el espacio del nodo
y pone p en nil
q:= p
dispose (p)
q referencia
...q
suelta
Ejecucin
en
paralelo
garbage
UNIDADES
Extensin del
lenguaje:una nueva
operacion
void INTER (x,y:int)
cuerpo
end
TADS
Descubrir e
SIMULA 67
incorporar nuevos
tipos al lenguaje
INTER (a,b)
POO
TADS
Tipo abstracto de dato (TAD) es el que satisface:
Encapsulamiento: la representacin del tipo y las
operaciones permitidas para los objetos del tipo se
describen en una nica unidad sintctica.
Refleja las abstracciones descubiertas
en el diseo
Ocultamiento de la informacin: la representacin
de los objetos y la implementacin del tipo permanecen
ocultos
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 que
permite que las operaciones y la representacin
puedan 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)
Sintaxis
Operacin(Tipo argumento, ...) -> Tipo resultado
.
Semntica
Operacin(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
ESPECIFICACION
IMPLEMENTACION
end
prodedure PUSH (P:inout PILA,ELE:in INTEGER)
..
end
procedure POP (P: inout PILA)
..
end
procedure TOP (P:inPILA) return INTEGER
..
end
end PILA
OCULTA
INSTANCIA
ALOCA Y EJECUTA
ELCODIGO DE
INICIALIACION
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
class NombreClase
{
lista_de_miembros
}
p = new Punto();
p.fijarX (100);
System.out.println(" Coordenada x es " + p.leerX());
EXCEPCIONES
Qu es una excepcin?
Condicin inesperada o inusual, que surge
durante la ejecucin del programa y no
puede ser manejada en el contexto local.
EXCEPCIONES
Originalmente, se dispona de ejecucin
condicionada (PL/I)
ON condicin
instrucciones
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.
EXCEPCIONES
Qu 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 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
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
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
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
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!!!
Generalmente Dinmicamente
Puede haber combinaciones de
dinmica con esttica
EXCEPCIONES PLI
Este lenguaje tiene una serie de excepciones ya
predefinidas con su manejador asociado. Son las Builtin exceptions.
Por ej. zerodivide, se levanta cuando hay una
divisin por cero.
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
(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
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