1 6. parametrizaciÓn. 2 parametrización la parametrización permite realizar una abstracción de...

52
1 6. PARAMETRIZACIÓN

Upload: eloy-montano

Post on 23-Jan-2016

243 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

1

6. PARAMETRIZACIÓN

Page 2: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

2

Parametrización

La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos

Los valores reales de los datos NO son importantes.

Interesa la cantidad y tipo de datos de ellos.

Los parámetros están asociados a los procedimientos

Especifican la forma de los objetos de datos con los cuales se trabajará.

Page 3: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

3

Parametrización

Cada uno de los elementos que participan en la representación de una variable:

es susceptible de ser parametrizado

Nombre Tipo Referencia Valor

La parametrización del tipo establece una diferencia conceptual importante en la categorización de los lenguajes.

Page 4: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

4

Parametrización

1. Parametrización de datos

2. Parametrización de tipos

3. Parametrización de subprogramas

Nombre

Referencia

Valor

Tipo

Page 5: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

5

Parametrización de Datos

Page 6: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

6

Opciones de Llamada

Por Nombre

Por Referencia

Por Copia

Por Valor

Por Resultado

Por Valor-Resultado

Por Indirección

Page 7: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

7

Subprogramas de ejemplo

Procedure Uno(<Modalidad> a, b :

integer);Begin

a := 7;b := 5;

End;Procedure Cero;Var c, d : integer;Begin

c:= 5;d := 7;Uno(c, d);Write(c, d);

End;

Page 8: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

8

Parametrización por Nombre

<Modalidad>::= Name

Page 9: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

9

Llamada por nombre (Algol)

La llamada al SP

realiza

en TODO el cuerpo del subprograma

una sustitución

parámetro formal

Permite modificar los parámetros actuales

argumento o parámetro actual

(Llamada)

Page 10: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

10

Procedure Uno(Name a, b :

integer);Begin

a := 7;b := 5;

End;

Procedure Cero;Var c, d : integer;Begin

c:= 5;d := 7;Uno(c, d);Write(c,

d);End;

Llamada por nombre

c 5

d 7

a

b

a bUno:

7 55 7

c dCero: c :=

7;b := 5

Regla de sustitución en

UNO

7 y 5

sustitución

sustitución

Page 11: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

11

Ejemplo

Procedure Uno;Var

x: integer;

Procedure Dos(name y: Integer);Var

x: Integer;Begin

x:=2;Write(y);

End;Begin

x:=1;Dos(x);

End;

Dos(x);La llamada:

x=2;Write(x);

Regla de sustitución

1 2

Uno: xDos: y x

1

x 2

x 1 y

Page 12: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

c 4

Ejemplo Situación poco clara:Procedure Dos;Var

c: integer;

Procedure swap(name a,b: Integer);Var

temp: Integer;Begin

temp:=a;a:=b;b:=temp:c:=c+1;

End;Procedure Tres;Var

c,d: Integer; Begin

c:=5;d:=7;Swap(c,d);Write(c,d);

End;Begin

c:=4;Tres;

End;

temp:=c;c:=d;d:=temp;c:=c+1;

Regla de sustitución en Swap

4 5 7 5

Dos: cTres: c d

Swap: a b temp

5 7 5

a

b

7,5

c 5

d 7

temp 5

7

5

5

Page 13: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

13

Gráficamente

Dos:c: 4

Swapabtemp: 5

c:5d:7temp: 5

Tres75

5

7,5

Page 14: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

14

Efectos inesperados

Procedure Swap(name a, b : integer);var

temp : integer;begin

temp := a;a := b;b := temp;

end;

swap(i, vi);

La llamada:

temp := i;i:= v[i];v[i] := temp

Regla de sustitución

Si antes de la llamada:

i = 3 y v[3] = 5

i = 5 y v[5] = 3

Pero queda:

1 2 3 4 5 6 7

4 6 5 2 7 1 3

i=3

1 2 3 4 5 6 7

4 6 5 2 3 1 3

i=5

?

1 2 3 4 5 6 7

4 6 3 2 7 1 3

i=5

Page 15: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

15

Parametrización Por Referencia

<Modalidad>::= Ref

Page 16: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

16

Llamada por Referencia (Fortran)

Al SP se entrega el l-valor del ODD

El ODD no cambia su posición en la

RAM

argumento o parámetro actual

(Llamada)

Permite modificar los parámetros actuales

parámetro formal

Transferencia de la dirección

Parámetro Actual

Parámetro Formal

l-valor

Page 17: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

17

5 7

c dCero:

Procedure Uno(ref a, b :

integer);Begin

a := 7;b := 5;

End;

Procedure Cero;Var c, d : integer;Begin

c:= 5;d := 7;Uno(c, d);Write(c,

d);End;

Llamada por Referencia

a bUno:

7 y 5

7 5 c 5

d 7

a

b

Page 18: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

18

Parametrización por Copia

Por Valor

Por Resultado

Por Valor-Resultado

Page 19: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

19

Llamada por Copia

Los parámetros actuales se relacionan con los parámetros formales por medio de:

Asignación de valores

El parámetro actual entrega su r-valor al parámetro formal, el que es copiado en OTRA localidad.

Parámetro Actual

Parámetro Formal

r-valor

Page 20: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

20

Llamada por Valor

Los VALORES de los parámetros actuales se utilizan para inicializar los respectivos parámetros formales

Al efectuarse una invocación se realizan las asignaciones de los VALORES a los

parámetros formales

<Modalidad>::= in

Page 21: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

21

Ejemplo

c 5

d 7

Procedure Uno(in a, b : integer);Begin

a := 7;b := 5;

End;

Procedure Cero;Var c, d : integer;Begin

c:= 5;d := 7;Uno(c, d);Write(c,

d);End;

5 7

a bUno:

a 5

b 7

5 7

c dCero:

Asignación en la llamada:

a:= c;b:= d;

5 y 7

7 5

7

5

Page 22: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

22

Llamada por Resultado

Los parámetros formales NO se inicializan al invocarse el subprograma

Al terminar la ejecución del subprograma, los valores de los parámetros formales, son

asignados a los respectivos parámetros actuales usados en la llamada.

<Modalidad>::= out

Page 23: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

23

a

b

Ejemplo

c 5

d 7

Procedure Uno(out a, b :

integer);Begin

a := 7;b := 5;

End;

Procedure Cero;Var c, d : integer;Begin

c:= 5;d := 7;Uno(c, d);Write(c,

d);End;

7 5

a bUno:

5 7

c dCero:

Asignación al final de la ejecución:

c:= a;d:= b;

7 y 5

7

5

7 5

7

5

Page 24: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

24

Llamada por Valor-Resultado

Se trata de un efecto combinado.

b) Al terminar la ejecución del subprograma, los valores de los parámetros formales, son asignados a los respectivos parámetros actuales usados en la llamada.

<Modalidad>::= in-out

a) Al efectuarse una invocación se realizan las asignaciones de los VALORES a los parámetros formales

Page 25: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

25

Ejemplo

c 5

d 7

Procedure Uno(in-out a, b :

integer);Begin

a := 7;b := 5;

End;

Procedure Cero;Var c, d : integer;Begin

c:= 5;

d := 7;Uno(c, d);Write(c, d);

End;a bUno:

5 7

c dCero:

7 y 5

7 5

7

5 5 7

a 5

b 7 7 5

7

5

a:= c;b:= d;

Al llamar: c:= a;d:= b;

Al terminar:

Page 26: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

26

Parametrización por Indirección

Page 27: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

27

Llamada por Indirección

Es una llamada por valor en la cual el parámetro formal recibe la dirección de la variable utilizada como parámetro actual.

<Modalidad>::= in

En la definición anteponer el operador de indirección al parámetro formal : * (en C)

En la llamada anteponer el operador de dirección al parámetro actual : & (en C)

Page 28: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

28

Ejemplo

c 100 5

d 300 7

Procedure Uno(in *a, *b : integer);Begin

*a := 7;*b := 5;

End;

Procedure Cero;Var c, d : integer;Begin

c:= 5;

d := 7;Uno(&c, &d);Write(c, d);

End;a bUno:

5 7

c dCero:

7 y 5

100 300

l-valor de c a;l-valor de d b;

Al llamar:

a 100

b 300 7 5

7

5

Page 29: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

29

Resumen

Aunque la implementación es diferente, las siguientes modalidades generan el mismo efecto:

Por nombrePor referenciaPor resultadoPor valor-resultadoPor indirección

Page 30: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

30

Parametrización de Tipos

Page 31: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

31

Problema

Se cuenta con una rutina que suma los elementos de un vector de n=100 enteros

int Suma(Vector v,int n){int i, s=0; for (i=0;i<n;i++) s=s+v[i]; return s;}

¿Será posible utilizarla para sumar:

a) Los elementos enteros de un vector A[0..50]?

b) Los elementos enteros de un vector B[0..300]?

c) Los elementos reales de un vector C[0..100]?

Page 32: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

32

Análisis

El problema radica en que, en los lenguajes fuertemente tipados, esta asociado el tipo de dato a los operadores.

int Suma(Vector v,int n){int i, s=0; for (i=0;i<n;i++) s=s+v[i]; return s;}

La declarativa y verificación de tipos, restringe el tipo de dato "Vector" (según el ejemplo) que la rutina puede recibir.

Page 33: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

33

Solución

Algunos lenguajes han desarrollado la facilidad de poder pasar como parámetro el tipo de dato de los ODD.

Así será posible tener unidades más genéricas. Es decir, unidades que no sólo reciban variables, valores o direcciones como parámetro, sino que también reciban el tipo de dato.

Page 34: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

34

Solución

La parametrización de tipos involucra un alto nivel de abstracción y disminuye el tamaño del código fuente

La producción de distintos subprogramas, que difieran sólo en el tipo de dato de sus argumentos, se realiza en tiempo de traducción.

Se generan tantos subprogramas como tipos de datos se hayan indicado en el programa.

Page 35: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

35

Alternativas

ADA: Unidades Genéricas

C++: Plantillas de funciones

Page 36: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

36

Unidades Genéricas

El concepto de UNIDAD GENÉRICA Se utiliza para definir la parametrización de tipo.

Una unidad genérica es una unidad formal (modelo) cuyos parámetros son instalados en tiempo de traducción produciéndose una unidad actual.

Definición

Page 37: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

37

Unidades Genéricas

La parametrización de tipos se implementa mediante

macro-expansión

Implementación

el concepto de

Page 38: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

38

Unidades Genéricas

Sea el siguiente subprograma genérico en lenguaje Ada

generic type T;procedure Swap(X, Y : in out T) is

Temp : T;begin

Temp:= X;X := Y;Y := Temp;

end;

En este caso, el tipo de dato de X e Y es el parámetro que debe ser sustituido en tiempo de traducción.

T: es el tipo de dato genérico

Page 39: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

39

Unidades Genéricas

La producción de distintos subprogramas, que difieran sólo en el tipo de sus argumentos, se puede lograr, por ejemplo, mediante:

procedure Swapinteger is new Swap (integer);

procedure Swapreal is new Swap (real);

Generará dos subprogramas equivalentes.

Page 40: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

40

Ejemplo

El código:

logical mas(logical in a, logical in b)

{ mas := a + b; }

permite obtener el resultado de la suma (or) de dos valores de tipo logical.

a) Agregar y/o modificar el código necesario para que la unidad "mas" permita, además, sumar valores de tipos integer, rational y real.

b) Citar el concepto utilizado en la parte anterior y, además, las formalidades de definición e implementación en modalidad Ada

Page 41: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

41

Solución del ejemplo

generic type T

T Mas(T in a, T in b)

{ mas := a + b; }

b) Concepto: Parametrización de tipos.

Definición: Unidades genéricas.

Implementación: como macro-expansión

procedure Maslogical is new Mas (logical);

procedure Masinteger is new Mas (integer);

procedure Masreal is new Mas (real);

procedure Masrational is new Mas (rational);

a)

Page 42: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

42

Plantillas de funciones

Se escribe una definición de plantilla de función

tantos códigos objeto de función como llamadas con diferentes tipos de argumentos existan.

Para que el compilador genere, en forma

automática,

Page 43: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

43

Plantillas de funciones

void main()

{ int a[4] = {1, 2, 3, 4};

float b[6] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6};

char c[5] = "Hola";

cout << "El arreglo A contiene: ";

Imprimir(a, 4);

cout << "El arreglo B contiene: ";

Imprimir(b,6);

cout << "El arreglo C contiene: ";

Imprimir(c, 5);

}

template <class T>

void Imprimir(T *V, int k)

{for(int i = 0; i < k; i++)

cout<< V[i] << " ";

cout<< endl;

}

Page 44: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

44

Parametrización de Subprogramas

Page 45: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

45

Subprogramas como parámetros

El envío de un subprograma como parámetro

Una referencia al segmento de código del parámetro actual y

La información respecto del entorno no local de ese parámetro.

requiere pasar

Page 46: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

46

Subprogramas como parámetros

Un subprograma parámetro

se puede representar como un par ordenado (c,

r)

donde c es un puntero al segmento de código y r un puntero al registro de activación de la unidad que

contiene la definición del subprograma

Page 47: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

47

Ejemplo

Procedure P... ··· Procedure A...

···

Begin ··· End; Procedure B(procedure X); var y: integer; Procedure C... ··· Begin ··· End; Begin X; B(C); ··· End; Begin ··· B(A); ··· End

Como B tiene definido un parámetro formal X, la llamada a X activa el procedimiento A.

1. P llama a B con el procedimiento A como parámetro actual

Una segunda invocación a X activará el procedimiento C

2. B se autoinvoca con el procedimiento C como parámetro actual

Page 48: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

48

Ejemplo

int Tres(int k)

{ return(k); }

int Dos(int Y, int j)

{ return(j + Y); }

int Uno(int X, int i)

{ return(i + X); }

void Main()

{ display(Uno(Dos(Tres(3),2),1)); }

a) Mostrar claramente la secuencia de invocaciones mediante el stack del registros de activación e indicar el valor desplegado en Main.

b) Citar y explicar claramente el concepto que más se destaca en este código.

Con respecto a la ejecución del siguiente código:

Page 49: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

49

Dos:Y: Tres(3)j : 2 2+ ___

Solución

int Tres(int k)

{ return(k); }

int Dos(int Y, int j)

{ return(j + Y); }

int Uno(int X, int i)

{ return(i + X); }

void Main()

{ display(Uno(Dos(Tres(3),2),1)); }

display(Uno(Dos(Tres(3),2,1)Main: 6

Uno:X: Dos(Tres(3),2)i : 1

1+ ___5 = 6

Stack de RA

k: 3Tres: 3

3 = 5

Page 50: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

50

Ejemplo

Function F: Integer;Var k: Integer;Begin

Readln(k);If (k<>-1) then

F:= k+Felse

F:= 0;End;

Si se invoca x:= F;

Determinar la cantidad de veces que se ejecutó la sentencia Readln(k) si la memoria utilizada por el stack es de 60B.

Con respecto a la ejecución del siguiente código:

Page 51: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

51

Solución

Tamaño del Stack de RA = Cantidad de RA * Tamaño del RA

La cantidad de veces que se ejecutó la sentencia Readln(k) es igual al N° de activaciones (o llamadas) de la función.

El N° de activaciones = Cantidad de RA

RAdelTamañostackdelTamaño

RAdeCantidad

Page 52: 1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores

52

Solución

Tamaño del Stack de RA = 60 B

Tamaño del RA

Variables locales: k : 2B (Integer)Valor de retorno : 2B (Integer)Dirección de retorno: 4B (LongInt)

51260 RA#

Enlace Dinámico : 4B (LongInt)

12 B