La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Packages –Unidad de compilación que permite la especificación.

Presentaciones similares


Presentación del tema: "Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Packages –Unidad de compilación que permite la especificación."— Transcripción de la presentación:

1 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Packages –Unidad de compilación que permite la especificación de grupos de entidades lógicamente relacionadas: Colección de tipos, variables y/o constantes, subprogramas, packages Combinación de los anteriores Tipos de datos abstractos y datos abstractos –Dos partes Especificación Cuerpo

2 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde2 Packages –Especificación Cada package tiene una especificación pero no necesariamente un cuerpo En la especificación se encuentran las declaraciones públicas package Rational_Numbers is type Rational is record Numerator: integer; Denominator: Positive; end record; function "="(X,Y: Rational) return boolean; function "/"(X,Y: integer) return Rational; function "+"(X,Y: Rational) return Rational; function "-"(X,Y: Rational) return Rational; function "*"(X,Y: Rational) return Rational; function "/"(X,Y: Rational) return Rational; end Rational_Numbers;

3 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde3 Packages –Cuerpo En el cuerpo se encuentra la parte no pública del package Implementa las declaraciones de la especificación El cuerpo es obligatorio cuando –La especificación tiene declaraciones que requieren un cuerpo –Se requiere inicialización

4 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde4 Packages –Cuerpo package body Rational_Numbers is procedure Same_Denominator(X, Y: in out Rational) is begin -- reduces X and Y to the same denominator: end Same_Denominator; function "="(X,Y: Rational) return Boolean is U : Rational := X; V : Rational := Y; begin Same_Denominator(U, V); return U.Numerator = V.Numerator; end "="; function "/"(X, Y: Integer) return Rational is begin if Y > 0 then return (Numerator => X, Denominator => Y); else return (Numerator => -X, Denominator => -Y); end if; end "/"; function "+"(X, Y: Rational) return Rational is... end "+"; function "-"(X, Y: Rational) return Rational is... end "-"; function "*"(X, Y: Rational) return Rational is... end "*"; function "/"(X, Y: Rational) return Rational is... end "/"; end Rational_Numbers;

5 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde5 Packages –Uso de un package (with y use) with Rational_Numbers; procedure Use_Rational_Numbers is R1, R2: Rational_Numbers.Rational; begin R1 := Rational_Numbers."/"(1, 2); R2 := Rational_Numbers."/"(2, 4); end Use_Rational_Numbers; with Rational_Numbers; use Rational_Numbers; procedure Use_Rational_Numbers is R1, R2: Rational; begin R1 := 1 / 2; R2 := 2 / 4; end Use_Rational_Numbers; –Posibles conflictos con la cláusula use

6 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde6 Packages –Tipos privados Parte privada del package = mayor abstracción package StackInt is type Stack is private; procedure Push(S: in out Stack; I: in integer); procedure Pop(S: in out Stack; I: out integer); function IsEmpty(S: in Stack) return boolean; private type Nodo; type Stack is access Nodo; type Nodo is record Valor: integer; Siguiente: Stack; end record; end StackInt;

7 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde7 Packages –Tipos privados package body StackInt is procedure Push(S: in out Stack; I: in integer) is begin S := new Nodo'(I, S); end Push; procedure Pop(S: in out Stack; I: out integer) is begin if S /= null then I := S.Valor; S := S.Siguiente; end if; end Pop; function IsEmpty(S: in Stack) return boolean is begin return S = null; end IsEmpty; end StackInt;

8 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde8 Packages –En el programa se puede: Tipos comunes (ej: Rational_Numbers): –Declarar variables y constantes –Asignar –Comparar por igualdad –Operaciones definidas por el package –Acceder a la estructura, referenciar campos, elementos, etc. Tipos privados (ej: StackInt): –Declarar variables y constantes –Asignar –Comparar por igualdad –Operaciones definidas por el package

9 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde9 Packages –Tipos privados limitados package StackInt is type Stack is limited private; procedure Push(S: in out Stack; I: in integer); procedure Pop(S: in out Stack; I: out integer); function IsEmpty(S: in Stack) return boolean; private type Nodo; type Stack is access Nodo; type Nodo is record Valor: integer; Siguiente: Stack; end record; end StackInt; –En el programa se puede Declarar variables y constantes Operaciones definidas por el package

10 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde10 Packages –Inicialización package body PkgImagen is begin -- abrir archivo de imagen -- leer contenido del archivo y cargarlo en una variable Imagen -- cerrar archivo end PkgImagen;

11 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde11 Excepciones –Terminación normal y anormal –Mecanismo de tratamiento y recuperación de errores en tiempo de ejecución y situaciones excepcionales –Ejemplos: división por cero, overflow, indice de un arreglo que excede sus límites, fin de archivo, etc. procedure Clase7_Excepciones1 is subtype Rango is integer range 1..10; Vector: array (Rango) of integer := ( ); I: integer; package IIO is new Integer_IO(integer); use IIO; begin loop Get(I); (posible Data_error) exit when I = 0; Put(Vector(I)); (posible Constraint_error) end loop; end Clase7_Excepciones1;

12 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde12 Excepciones –Algunas excepciones predefinidas son: Constraint_error –Se produce cuando el programa viola alguna forma de restricción (restricciones de rango, restricciones de índice, restricciones de discriminante, etc.) Data_Error –Se produce cuando se lee un valor que no se corresponde con el tipo de la variable sobre la cual se lee Storage_error –Se produce cuando hay una cantidad de memoria insuficiente para satisfacer los requerimientos de memoria en tiempo de ejecución de un programa

13 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde13 Excepciones –Cómo atrapar y manejar un error? Manejadores de excepciones begin Sentencia 1; Sentencia N; exception when Constraint_error => Sentencias; when others => Sentencias; end; –Los manejadores de excepciones pueden aparecer en: Bloques begin/end, cuerpo de subprograma, package o task –Qué pasa luego de manejar un error? Dos esquemas. En Ada termina anormalmente la unidad en ejecución y devuelve el control a la unidad llamadora

14 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde14 Excepciones –Qué pasa si la unidad no define un manejador? => Propagación procedure P is procedure Q is begin.... end Q; begin... Q;... exception when constraint_error => end P; se propaga al llamador

15 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde15 Excepciones –Propagación automática procedure P is procedure Q is begin.... exception when constraint_error =>.... end Q; begin... Q;... exception when constraint_error => end P; (1) se maneja y vuelve al punto de llamado (2) se maneja y termina

16 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde16 Excepciones –La propagación sigue la cadena dinámica procedure P is procedure R is begin....(1) end R; procedure Q is begin.... R; (2).... exception when constraint_error =>.... end Q; begin... Q; (3)... exception when constraint_error => end P; P Q R

17 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde17 Excepciones –Propagación por programa begin Sentencia 1; Sentencia 2; Sentencia N; exception when Constraint_error => Sentencias; raise; end;

18 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde18 Excepciones –Ejemplo procedure Clase7_Excepciones1 is subtype Rango is integer range 1..10; Vector: array (Rango) of integer := ( ); I: integer; package IIO is new Integer_IO(integer); use IIO; begin loop Get(I); exit when I = 0; Put(Vector(I)); end loop; end Clase7_Excepciones1; begin loop begin Get(I); exit when I = 0; Put(Vector(I)); exception when Data_error => Put("El valor ingresado no es entero"); when Constraint_error => Put("El valor debe estar en 1..10"); end; end loop; end Clase7_Excepciones2;

19 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde19 Excepciones –Generación de excepción por programa El programador puede generar cualquier excepción por programa Get(PossiblePrice); if PossiblePrice <= MinPrice or PossiblePrice > MaxPrice then raise Data_Error; end if;

20 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde20 Excepciones –Declaración de excepciones El programador puede declarar sus propias excepciones Price_error: exception; Get(PossiblePrice); if PossiblePrice <= MinPrice or PossiblePrice > MaxPrice then raise Price_Error; end if; exception when Price_Error =>

21 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde21 Excepciones –Declaración de excepciones. Ejemplo package StackInt2 is type Stack is private; procedure Push(S: in out Stack; I: in integer); procedure Pop(S: in out Stack; I: out integer); Overflow, Underflow: exception;..... end StackInt2; begin loop I := I + 1; Push(S, I); end loop; exception when Overflow => Put_Line("llena"); end; begin loop Pop(S, I); Put(I); end loop; exception when Underflow => Put_Line("Vacia"); end; procedure Push(S: in out Stack; I: in integer) is begin if S.CantNodos = MaxCount then raise Overflow; end if;..... end Push; procedure Pop(S: in out Stack; I: out integer) is begin if S.CantNodos = 0 then raise Underflow; end if;..... end Pop;

22 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde22 Excepciones –Alcance de una excepción Es igual que para cualquier identificador procedure P is E: exception; procedure Q is begin raise E; end Q; procedure R is E: exception; begin Q; exception when E => -- excepción E local end R; begin R; exception when E => -- excepción E global end P;

23 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde23 Excepciones en Java public void writeList() { PrintWriter out = null; try { System.out.println("Entering try statement"); out = new PrintWriter(new FileWriter("OutFile.txt")); for (int i = 0; i < SIZE; i++) out.println("Value at: " + i + " = " + victor.elementAt(i)); } catch (ArrayIndexOutOfBoundsException e) { System.err.println("Caught " + "ArrayIndexOutOfBoundsException: " + e.getMessage()); } catch (IOException e) { System.err.println("Caught IOException: " + e.getMessage()); }

24 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde24 Excepciones en Java public void writeList() { PrintWriter out = null; try { System.out.println("Entering try statement"); out = new PrintWriter(new FileWriter("OutFile.txt")); for (int i = 0; i < SIZE; i++) out.println("Value at: " + i + " = " + victor.elementAt(i)); } finally { if (out != null) { System.out.println("Closing PrintWriter"); out.close(); } else { System.out.println("PrintWriter not open"); }

25 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde25 Excepciones en Java public void writeList() { PrintWriter out = null; try { System.out.println("Entering try statement"); out = new PrintWriter(new FileWriter("OutFile.txt")); for (int i = 0; i < SIZE; i++) out.println("Value at: " + i + " = " + victor.elementAt(i)); } catch (ArrayIndexOutOfBoundsException e) { System.err.println("Caught " + "ArrayIndexOutOfBoundsException: " + e.getMessage()); } catch (IOException e) { System.err.println("Caught IOException: " + e.getMessage()); } finally { if (out != null) { System.out.println("Closing PrintWriter"); out.close(); } else { System.out.println("PrintWriter not open"); }

26 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde26 Excepciones en Delphi Zero := 0; try dummy := 10 / Zero; except on EZeroDivide do MessageDlg('Can not divide by zero!', mtError, [mbOK], 0) ; end;

27 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde27 Excepciones en Delphi AboutBox := TAboutBox.Create(nil) ; try AboutBox.ShowModal; finally AboutBox.Release; end;


Descargar ppt "Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Packages –Unidad de compilación que permite la especificación."

Presentaciones similares


Anuncios Google