tipos de datos recursivos - tads

41
 TIPOS DE DATOS RECURSIVOS TADS Introducción excepciones

Upload: leonel-luchini

Post on 02-Nov-2015

224 views

Category:

Documents


0 download

DESCRIPTION

Tipos de Datos Recursivos - TADs

TRANSCRIPT

  • 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