agenda clase 11 parametrización. pasaje de parámetros (modos). razones de escogencia entre modos....

23
Agenda Clase 11 • Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays, Parámetros por Default, Parámetros Nombrados. Número Variable de Argumentos. Retorno de Funciones. Módulos y Subrutinas Genéricas. Casos de Estudio.

Upload: susana-ana-rico-marquez

Post on 23-Jan-2016

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Agenda Clase 11

• Parametrización.• Pasaje de parámetros (modos).• Razones de escogencia entre modos.• Clausuras como parámetros.• Etiquetas, Conformat Arrays, Parámetros por

Default, Parámetros Nombrados.• Número Variable de Argumentos.• Retorno de Funciones.• Módulos y Subrutinas Genéricas.• Casos de Estudio.

Page 2: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Parametrización

•Subrutinas parametrizadas toman argumentos que controlan aspectos de su comportamiento o especifican los datos sobre los que operan.

•Parámetros Formales: aparecen en la declaración de la subrutina.

•Parámetros Actuales: variables y expresiones que son pasadas a la subrutina en el momento de la invocación.

Page 3: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Pasaje de Parámetros (Modos)

• Por Valor: cada parámetro actual es asignado en el parámetro formal correspondiente cuando una subrutina es llamada.

• Por Referencia: cada parámetro formal es un alias del parámetro actual correspondiente.

Page 4: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Razones para escoger un modo

• Si la subrutina invocada debe cambiar el valor del parámetro actual pasaje por referencia. Por valor en caso contrario.

• Nivel extra de indireccionamiento que requiere el pasaje por referencia suele ser menos costoso que copiar el valor cuando los parámetros son grandes.

Page 5: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

El Modo READONLY de Modula 3

• Combina la eficiencia del pasaje por referencia y la seguridad del pasaje por valor.

• Impide que los parámetros formales sean alterados por la rutina invocada.

Page 6: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Modos de Parámetros en Ada

• IN: pasan información de la subrutina invocadora a la invocada que puede ser leída por ésta pero no modificada.

• OUT: pasan información del invocador al invocado. Ada 83 permite escribir pero no leer, Ada 95 permite escribir y leer.

• IN-OUT: pasan información en ambas direcciones que puede ser leída y escrita.

Page 7: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Referencias en C++

• Introduce una noción explícita de referencia.

• Los parámetros referenciados se especifican precediendo su nombre con un ampersand (&) en la declaración de la función.

void swap (int &a, int &b) {int t=a; a=b;b=t;}

Page 8: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Referencias en C++

• Cualquier variable puede ser declarada para ser una referencia.

int i

int &j=i j es un alias de i

i=2

j=3

cout << i imprime 3

Page 9: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Clausuras (clousures) pasadas como parámetros• Clausura: referencia a una subrutina + su contexto.• Se utiliza para pasar subrutinas como parámetros,

como en el siguiente ejemplo en Pascal.

procedure apply_to_A(function f(n:integer): integer, var A array [low..high:integer] of integer)

var i integer;begin

for i:=low to high doA[i]:=f(A[i]);

end;

Page 10: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Llamada por nombre en Algol 60

• Es el caso por default para este lenguaje, aunque también admite por valor.

• Se implementa a través de una subrutina oculta que evalúa el parámetro actual en el ambiente de referencia del invocador (denominada thunk).

• Algol 68 eliminó este tipo de llamada por el costo que implica la invocación de un procedimiento thunk por cada parámetro formal.

Page 11: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Etiquetas como parámetros

• Algol 60 y 68 permiten que una etiqueta sea pasada como parámetro.

• Pej: permite saber a dónde debe saltarse cuando se produce el escape de la rutina que se está ejecutando a través de una sentencia go to.

Page 12: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Parámetros de propósito especial: Arreglos Abiertos (Conformant Array)

• Arreglo que es un parámetro formal y cuyo tamaño es determinado a tiempo de ejecución (en un lenguaje que habitualmente determina la forma a tiempo de compilación).

• Se pueden definir arreglos de este tipo en Pascal, Modula-2 y C.

Page 13: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Parámetros por Default

• Parámetros que no necesariamente deben ser provistos por el invocador ya que al no poseerse se utiliza un valor preestablecido.

• Uso común: rutinas de librerías I/O.

• Utilizado por Ada, C++, Common Lisp y Fortran 90.

Page 14: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Parámetros Nombrados (Named Parameters)• Parámetros posicionales los parámetros

actuales en una posición determinada corresponden a los parámetros formales definidos en la misma posición.

• Parámetros nombrados (parámetro acompañado por su nombre formal) pueden ser utilizados en cualquier posición.

put (item => 37, base =>8)

put (base=>8, item=>37)

Page 15: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Número variable de argumentos

• C, C++ y Lisp permiten definir rutinas con número variable de argumentos. int printf(char * format, ...)

• En C y C++ los argumentos no especificados son accedidos a través de macros estándar.

Indica que hay parámetros adicionales en número y tipo desconocido.

Page 16: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Ejemplo en C con número variable de argumentos.#include <stdarg.h> inclusión de librería (macro) para poder

acceder a los argumentos no especificados.int printf(char * format, ...){

va_list args;va_start(args, format);...

char cp=va_arg(args, char);...

double dp=va_arg(args, double);...va_end(args);

}

printf(%c, “hola”) va_args(args, char)

Page 17: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Retorno de Funciones

• En Algol 60 y Fortran deben retornar un escalar.• Pascal y primeras versiones de Modula-2 -

escalar o apuntador.• Algol 68, Ada, C y algunas implementaciones de

Pascal permiten retorno de valores de tipo compuesto.

• Lisp, ML, Modula 3 y Ada 95 permiten retorno de una subrutina implementada como clausura.

• C permite retornar un apuntador a subrutina (no posee clausura ya que no permite anidamiento)

Page 18: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Retorno de Funcionestype int_array is array (integer range <>) of

integer;function A_max (A:int_array) return integer isrtn: integer;begin

rtn:=integer'first;for i in A'first..A'last loop

if A(i) > rtn thenrtn:=A(i);enf if;

end loop;return rtn;

end A_max;

Page 19: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Retorno de Funciones

• En SR:

procedure A_max(ref A[1:*]:int) returns rtn:int

rtn :=low(int)

fa i:= 1 to ub(A) ->

if A[i]>rtn -> rtn:=A[i] fi

af

end

fa indica “for all”bu indica “upper bound”-> indica “do then”

Page 20: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Módulos y Subrutinas Genéricas

• Polimorfismo permite declarar subrutinas en la que los tipos de los argumentos no se encuentran completamente especificados se ahorra el trabajo de escribir varias veces el mismo programa dependiendo de los argumentos que reciba...pero posee algunas desventajas.

• Alternativa crear facilidades genéricas.

Page 21: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Módulos y Subrutinas Genéricas

• Útiles para la creación de containers.

• Los lenguajes que proveen estas facilidades son Clu, Ada (Generic Program Units), C++ (templates) y Modula-3.

• Siguen un mecanismo estático ya que todo lo que requieren puede ser resuelto a tiempo de compilación.

Page 22: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Módulos y Subrutinas Genéricas

• Pueden producir un efecto similar al pasaje de subrutinas en lenguajes donde no esté permitido (como Ada).

generictype item is private;type item_array is array (integer range <>) of item;with function F (it: in item) return item;

procedure apply_to_array(A: in out item_array);

procedure apply_to_array((A: in out item_array) isbegin

for i in A'first..A'last loopA(i) := F(A(i));

end apply_to_array;

Page 23: Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,

Módulos y Subrutinas Genéricas

• Dado que una unidad de programa genérico es una abstracción, es importante que su interfaz (cabecera de la declaración) provea toda la información que debe ser conocida por el usuario de la misma.

• Clu y Ada refuerzan la regla anterior obligando que las funciones sean explícitamente declaradas.

• En C++ y Modula-3 por el contrario se pueden aplicar operaciones de forma arbitraria aunque esto producirá error semántico estático.