6. PARAMETRIZACI - PowerPoint PPT Presentation

1 / 36
About This Presentation
Title:

6. PARAMETRIZACI

Description:

6. PARAMETRIZACI N * * El uso de un subprograma como par metro actual requiere el env o de La referencia del segmento de c digo en RAM, y La informaci n respecto ... – PowerPoint PPT presentation

Number of Views:18
Avg rating:3.0/5.0
Slides: 37
Provided by: HPC45
Category:

less

Transcript and Presenter's Notes

Title: 6. PARAMETRIZACI


1
6. PARAMETRIZACIÓN
C
Cobol
Pascal
Fortran
SmallTalk
Java
C
2
Parametrización
  • Los parámetros pertenecen a los subprogramas
  • Permiten independizar la funcionalidad abstracta
    de las instancias de uso con datos concretos
  • Cada instancia de uso asocia parámetros actuales
    con parámetros formales
  • Los elementos comprometidos en la representación
    de una variable se utilizan para definir
    diferentes modelos de parametrización

3
Parametrización
  • Parametrización de datos
  • Nombre
  • Referencia
  • Valor
  • Parametrización de tipos
  • Tipo

4
Parametrización
  • Sin embargo, en la RAM de un computador sólo se
    representan
  • Datos
  • Códigos
  • Y, como también es posible parametrizar códigos,
    se debe definir un último modelo
  • Parametrización de subprogramas

5
Parametrización de datos
6
Opciones de llamada
  • Por Nombre
  • Por Referencia
  • Por Copia
  • Por Valor
  • Por Resultado
  • Por Valor-Resultado
  • Por Indirección

7
Subprogramas de ejemplo
void uno(ltModalidadgt int a, ltModalidadgt int
b) a 7 b 5 void cero() int c,
d c 5 d 7 Uno(c, d) cout ltlt c
ltlt d
8
Llamada Por Nombre
  • ltModalidadgt name
  • Sólo la provee lenguaje Algol
  • Cuando se invoca un subprograma se aplica la
    denominada regla de sustitución
  • La regla de sustitución establece el reemplazo
    del nombre del parámetro formal por el nombre del
    respectivo parámetro actual

9
Llamada Por Nombre
void uno(name int a, name int b) a 7 b
5
void cero() int c, d c 5 d 7
uno(c, d) cout ltlt c ltlt d
10
Llamada Por Nombre
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
11
Llamada Por Nombre
procedure swap(name a, b integer) var temp
integer begin temp a a b b
temp end
12
Llamada Por Referencia
  • ltModalidadgt ref
  • La proveen lenguajes como Fortran, Pascal y C
  • Cuando se invoca un subprograma, el parámetro
    formal se convierte en alias del respectivo
    parámetro actual, es decir,
  • La referencia del parámetro actual se copia como
    referencia del correspondiente parámetro formal

13
Llamada Por Referencia
void uno(ref int a, ref int b) a 7 b
5
void cero() int c, d c 5 d 7
uno(c, d) cout ltlt c ltlt d
14
Llamada Por Valor
  • ltModalidadgt in
  • La proveen lenguajes como Pascal, C y Ada
  • Cuando se invoca un subprograma, se ejecuta la
    asignación
  • parámetro formal ? parámetro actual
  • es decir,
  • El valor del parámetro actual se copia como valor
    del correspondiente parámetro formal

15
Llamada Por Valor
void cero() int c, d c 5 d 7
uno(c, d) cout ltlt c ltlt d
void uno(in int a, in int b) a 7 b
5
16
Llamada Por Resultado
  • ltModalidadgt out
  • La provee lenguaje Ada
  • Cuando se invoca un subprograma, no existe copia
    de un valor pero, cuando el subprograma termina,
    se ejecuta la asignación
  • parámetro actual ? parámetro formal
  • es decir,
  • El valor del parámetro formal se copia como valor
    del correspondiente parámetro actual

17
Llamada Por Resultado
void uno(out int a, out int b) a 7 b
5
void cero() int c, d c 5 d 7
uno(c, d) cout ltlt c ltlt d
18
Llamada Por Valor-Resultado
  • ltModalidadgt in-out
  • La provee lenguaje Ada
  • Efecto combinado de
  • Llamada Por Valor, al invocar un subprograma, y
  • Llamada Por Resultado, el terminar la ejecución
    de un subprograma

19
Llamada Por Valor-Resultado
void uno(in-out int a, in-out int b) a 7
b 5
void cero() int c, d c 5 d 7
uno(c, d) cout ltlt c ltlt d
20
Llamada Por Indirección
  • ltModalidadgt in
  • La provee lenguaje C
  • Se trata de una Llamada Por Valor en la cual, la
    referencia del parámetro actual se copia como
    valor del correspondiente parámetro formal
  • En la definición, se debe anteponer el operador
    de indirección al parámetro formal
  • En la invocación, se debe anteponer el operador
    de dirección al respectivo parámetro actual

21
Llamada Por Indirección
void uno(in int a, in int b) a 7 b
5
void cero() int c, d c 5 d 7
uno(c, d) cout ltlt c ltlt d
22
Parametrización de tipos
23
Problema
  • La función
  • suma los n40 elementos enteros de un arreglo v
  • Sin embargo, para sumar los n60 elementos reales
    de un arreglo a, se debe implementar otra
    función, sintácticamente distinta pero
    semánticamente igual

int Suma(Vector v, int n) int i, s0 for
(i0 iltn i) s s vi return
s
24
Solución
  • Parametrizar el tipo de dato
  • Esta solución involucra un alto nivel de
    abstracción que reduce el tamaño del código
    fuente
  • La producción de subprogramas, que difieran sólo
    en el tipo de dato de sus parámetros, se realiza
    en tiempo de traducción
  • Ejemplos de formas de parametrización de tipos
  • Unidades genéricas (lenguaje Ada)
  • Plantillas de funciones (lenguaje C)

25
Unidades Genéricas
  • Definición
  • Una Unidad Genérica es una unidad formal (modelo)
    cuyos parámetros se instalan en tiempo de
    traducción para producir una unidad actual
  • Implementación
  • La generación de múltiples unidades actuales se
    logra mediante el concepto de macro-expansión

26
Unidades Genéricas
  • Sea el siguiente subprograma genérico en Ada
  • Aquí, T es el parámetro de tipo de los datos X e Y

generic type T procedure Swap(X, Y in out T)
is Temp T begin Temp X X Y Y
Temp end
27
Unidades Genéricas
  • Producción de tres subprogramas que sólo difieren
    en el tipo de sus parámetros

procedure Swapint is new Swap (integer) procedure
Swapreal is new Swap (real) procedure Swapchar
is new Swap (char)
28
Unidades Genéricas
  • Problema
  • El código
  • retorna la suma (or) de dos valores de tipo
    logical
  • a) Efectuar las modificaciones necesarias para
    que mas se convierta en unidad genérica
  • b) Declarar las instancias de producción de
    cuatro versiones de mas que permitan sumar
    valores de tipo logical, integer, rational y real

logical mas(logical in a, logical in b) return
a b
29
Unidades Genéricas
  • Solución
  • a)
  • b)

generic type T T mas(T in a, T in b) return a
b
logical maslogical is new mas(logical) integer
masinteger is new mas(integer) real masreal is
new mas(real) rational masrational is new
mas(rational)
30
Plantillas de funciones
  • Definición
  • Una Plantilla de Función es una unidad formal
    utilizada como modelo de producción de una unidad
    actual
  • Implementación
  • El compilador genera, de manera automática,
    tantas unidades actuales como invocaciones con
    diferentes tipos de datos existan

31
Plantillas de funciones
  • Sea la siguiente plantilla de función en C
  • Aquí, T es el parámetro de tipo del arreglo V

template ltclass Tgt void imprimir(T V, int k)
for(int i0 iltk i) coutltlt Vi ltlt " "
coutltlt endl
32
Plantillas de funciones
  • Producción de tres unidades actuales a partir de
    tres invocaciones con arreglos de distinto tipo
    base

int main() int a4 1, 2, 3, 4 float
b6 1.1, 2.2, 3.3, 4.4, 5.5, 6.6 char c5
"Hola" imprimir(a, 4) imprimir(b,
6) imprimir(c, 5) return 0
33
Parametrización de subprogramas
34
Códigos como parámetros
  • El uso de un subprograma como parámetro actual
    requiere el envío de
  • La referencia del segmento de código en RAM, y
  • La información respecto de su entorno no local
  • Un subprograma parámetro se puede representar
    como un par ordenado de punteros (C, R), donde
  • C apunta al segmento de código, y
  • R apunta al registro de activación de la más
    próxima unidad perteneciente a su entorno no
    local

35
Códigos como parámetros
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
Una segunda invocación a X activará el
procedimiento C
36
Códigos como parámetros
Ejercicio Mostrar las variaciones que presenta el
stack del registros de activación e indicar el
valor finalmente impreso, al ejecutarse el código
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() print(Uno(Dos(Tres(
3),2),1))
Write a Comment
User Comments (0)
About PowerShow.com