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 Genéricos –Molde a partir del cual se pueden crear instancias.

Presentaciones similares


Presentación del tema: "Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Genéricos –Molde a partir del cual se pueden crear instancias."— Transcripción de la presentación:

1 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Genéricos –Molde a partir del cual se pueden crear instancias Subprogramas Packages –Sólo sirve para ser instanciado –Dos partes Especificación Cuerpo

2 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde2 Genéricos –Ejemplo generic type Elem is private; procedure Exchange(A, B: in out Elem);........................................ procedure Exchange(A, B: in out Elem) is C: Elem := A; begin A := B; B := C; end Exchange; –Instanciación procedure SwapInt is new Exchange(integer); procedure SwapChar is new Exchange(character); procedure SwapFecha is new Exchange(TFecha); –Uso SwapInt(I1, I2); SwapChar(C1, C2); SwapFecha(F1, F2);

3 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde3 Genéricos –O podría ser Instanciación procedure Swap is new Exchange(integer); procedure Swap is new Exchange(character); procedure Swap is new Exchange(TFecha); Uso Swap(I1, I2); Swap(C1, C2); Swap(F1, F2);

4 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde4 Genéricos –Ejemplo: package pila genérica Especificación Implementación Instanciación generic type Elem is private; package Clase8_Stack is type Stack is private;.......... private.......... end Clase8_Stack; procedure Push(S: in out Stack; E: in Elem) is begin if S.CantNodos = MaxCount then raise Overflow; end if; S.Lista := new Nodo'(E, S.Lista); S.CantNodos := S.CantNodos + 1; end Push; package StackInt is new Clase8_Stack(integer); use StackInt; S: Stack;

5 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde5 Genéricos –Parámetros genéricos Formales Reales procedure Swap is new Exchange(integer); procedure Swap is new Exchange(character); procedure Swap is new Exchange(TFecha); -------------------------------------------------------------------------- package StackInt is new Clase8_Stack(integer); generic type Elem is private; procedure Exchange(A, B: in out Elem); generic type Elem is private; package Clase8_Stack is

6 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde6 Genéricos –Ejemplo: Arbol binario de búsqueda in-order sin repeticiones. Especificación generic type Elem is private; package ArbolBinario is type Arbol is private; procedure Insertar(A: in out Arbol; E: in Elem); function Esta(A: in Arbol) return boolean; procedure Put(A: in Arbol); private type Nodo; type Arbol is access Nodo; type Nodo is record Valor: Elem; Izquierda: Arbol; Derecha: Arbol; end record; end ArbolBinario;

7 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde7 Genéricos –Ejemplo: Arbol binario de búsqueda in-order sin repeticiones. Implementación de Insertar procedure Insertar(A: in out Arbol; E: in Elem) is begin if A = null then A := new Nodo'(E, null, null); elsif E < A.Valor then Insertar(A.Izquierda, E); elsif A.Valor < E then Insertar(A.Derecha, E); end if; end Insertar;

8 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde8 Genéricos –Ejemplo: Arbol binario de búsqueda in-order sin repeticiones. Especificación generic type Elem is private; with function "<"(E1, E2: in Elem) return boolean; package ArbolBinario is type Arbol is private; procedure Insertar(A: in out Arbol; E: in Elem); function Esta(A: in Arbol) return boolean; procedure Put(A: in Arbol); private type Nodo; type Arbol is access Nodo; type Nodo is record Valor: Elem; Izquierda: Arbol; Derecha: Arbol; end record; end ArbolBinario;

9 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde9 Genéricos –Ejemplo: Arbol binario de búsqueda in-order sin repeticiones. Implementación de Esta function Esta(A: in Arbol) return boolean is Result: boolean; begin if A = null then Result := false; elsif E < A.Valor then Result := Esta(A.Izquierda); elsif A.Valor < E then Result := Esta(A.Derecha); else Result := true; end if; return Result; end Esta;

10 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde10 Genéricos –Ejemplo: Arbol binario de búsqueda in-order sin repeticiones. Implementación de Put procedure Put(A: in Arbol) is begin Put(A.Izquierda); Put(A.Valor); New_Line; Put(A.Derecha); end Put;

11 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde11 Genéricos –Ejemplo: Arbol binario de búsqueda in-order sin repeticiones. Especificación generic type Elem is private; with function "<"(E1, E2: in Elem) return boolean; with procedure Put(E: Elem); package ArbolBinario is type Arbol is private; procedure Insertar(A: in out Arbol; E: in Elem); function Esta(A: in Arbol) return boolean; procedure Put(A: in Arbol); private type Nodo; type Arbol is access Nodo; type Nodo is record Valor: Elem; Izquierda: Arbol; Derecha: Arbol; end record; end ArbolBinario;

12 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde12 Genéricos –Ejemplo: Arbol binario de búsqueda in-order sin repeticiones. Instanciación para caracteres with Text_IO, ArbolBinario; use Text_IO; procedure UseArbolBinario is package ArbolChar is new ArbolBinario(character, "<", Put); use ArbolChar; A: Arbol; C: character; begin loop Get(C); exit when C = '.'; Insertar(A, C); end loop; Put(A); end UseArbolBinario;

13 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde13 Genéricos –Ejemplo: Arbol binario de búsqueda in-order sin repeticiones. Instanciación para enteros procedure UseArbolBinario2 is package IIO is new Integer_IO(integer); use IIO; procedure Put(I: in integer) is begin Put(I, 0); end Put; package ArbolInt is new ArbolBinario(integer, "<", Put); use ArbolInt; A: Arbol; I: integer; begin loop Get(I); exit when I = 0; Insertar(A, I); end loop; Put(A); end UseArbolBinario2;

14 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde14 Genéricos –Ejemplo: Arbol binario de búsqueda in-order sin repeticiones. Instanciación para fechas 1 –Ejemplo: Arbol binario de búsqueda in-order sin repeticiones. Instanciación para fechas 2

15 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde15 Genéricos –Posibles parámetros genéricos: sin parámetros generic package UniqueId is function GetId return integer; end UniqueId; package body UniqueId is Next: integer := 0; function GetId return integer is begin Next := Next + 1; return Next; end GetId; end UniqueId; with UniqueId; procedure UseUniqueId is package SId is new UniqueId; package PId is new UniqueId; Socio: TSocio; Pelicula: TPelicula; begin... -- Obtener ID para socio nuevo Socio.Id := SId.GetId;... -- Obtener ID para película nueva Pelicula.Id := PId.GetId;... end UseUniqueId;

16 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde16 Genéricos –Posibles parámetros genéricos: variables in, expresión default in out generic MaxCount: in integer := 100; type Elem is private; package Clase8_Stack2 is..... package StackInt is new Clase8_Stack2(50, integer); package IIO is new Integer_IO(integer); use StackInt, IIO;

17 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde17 Genéricos –Posibles parámetros genéricos: tipos - private type Elem is private; - limited private type Elem is limited private; - discrete type Elem is (<>); - signed integer type Elem is range <>; - float, fixed, decimal type Elem is digits <>; type Elem is delta <>; type Elem is delta <> digits <>;

18 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde18 Genéricos –Posibles parámetros genéricos: tipos - array type Arreglo is array (Color) of boolean; type Arr is array (Color range <>) of boolean; type Rango is (<>); type Arreglo is array (Rango) of boolean; type Rango is (<>); type Elem is private; type Arreglo is array (Rango) of Elem; - access type Elem is private; type Puntero is access Elem; - con discriminante type Rango is (<>); type Elem (Disc: Rango) is private;

19 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde19 Genéricos –Posibles parámetros genéricos: subprogramas generic type Elem is private; with function "<"(E1, E2: in Elem) return boolean; with procedure Put(E: Elem); package ArbolBinario is

20 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde20 Genéricos –Posibles parámetros genéricos: package generic type Rango is (<>); type Elem is private; type Arreglo is array (Rango) of Elem; with package ElemStack is new Clase8_Stack(Elem); use ElemStack; procedure Invertir(A: in out Arreglo); procedure Invertir(A: in out Arreglo) is S: Stack; begin for I in A'Range loop Push(S, A(I)); end loop; for I in A'Range loop Pop(S, A(I)); end loop; end Invertir;

21 Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde21 Genéricos –Posibles parámetros genéricos: package with Clase8_Stack; procedure Clase8_PckGenPar is type Dias is (Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo); type Vector is array (Dias) of character; package CharStack is new Clase8_Stack(character); procedure InvertirArreglo is new Invertir(Dias, character, Vector, CharStack); V: Vector := ('A', 'B', 'C', 'D', 'E', 'F', 'G'); begin InvertirArreglo(V); -- GFEDCBA end Clase8_PckGenPar;


Descargar ppt "Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Genéricos –Molde a partir del cual se pueden crear instancias."

Presentaciones similares


Anuncios Google