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.

Slides:



Advertisements
Presentaciones similares
Arreglos Unidimensionales y Bidimensionales ESTRUCTURAS DE DATOS I
Advertisements

Programación de Computadores
ESTRUCTURA DE LOS LENGUAJES DE PROGRAMACION
Metodología de la Programación
Programación modular Procedimientos y Funciones
Procedimientos y Funciones
Programación I Teoría III
Direcciones, Arreglos y Argumentos de Funciones
Funciones. Programación, Algoritmos y Estructuras de Datos.
FUNCIONES EN C.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Teoría de lenguajes y compiladores
Unidad 3 Punteros.
Vectores en java.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
MÓDULO DE PROCEDIMIENTOS Los módulos también pueden contener subrutinas y funciones → MÓDULO DE PROCEDIMIENTOS  PROCEDIMIENTOS → son compilados como parte.
Funciones en lenguaje C
Funciones y procedimientos
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Programación I Teoría VI: Recursividad

1 Procedimientos Es un conjunto de sentencias incluidas entre las declaraciones Sub o Function y End Sub/Function VB utiliza varios tipos de procedimientos:
Tema 6: Clases Antonio J. Sierra.
Arboles Binarios de expresiones
16/04/ Sesión 11 Funciones y procedimientos Ing. Ricardo Inquilla.
Semana 5 Subprogramas..
FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.
PROCEDIMIENTOS FUNCIONES
Programación III Clase 07 Funciones.
Cobol C Pascal Fortran 5. UNIDADES DE PROGRAMAS SmallTalk Java C++
Introducción a los punteros
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Índice. Revisando conceptos acerca de la memoria.
Clase 10: Estructuras de datos y arreglos.
ELO3201 Vectores (Vector) Agustín J. González ELO320.
Descomposición Modular. Funciones
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
PUNTEROS Ing Anghello Quintero.
FIEE VARIABLES Ing. José Antonio Poma G.. FIEE Variables Una variable es un identificador (nombre de la variable) que hace referencia a.
El lenguaje de programación C - Vectores y matrices -
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
Tipos de Datos. Entrada-Salida.. La entrada-salida (I/O) le permite a un programa comunicarse con el mundo exterior. Esta comunicación puede realizarse.
NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En.
Ada 2º Parte (variables, ámbitos , subrutinas , tipos abstractos de datos y excepciones)
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
APRENDIZ: SANDRA L. CAICEDO C. ORDEN: 20194
Punteros.
Elementos básicos del lenguaje
PUNTEROS Y REFERENCIAS
Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,
Funciones Definidas por el Programador
APUNTADORES.
Departamento de Informática Universidad Técnica Federico Santa María Temas 2,3,4: Estructura de un Programa Pascal Declaraciones Tipos de Datos Simples.
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
Contenido:  ¿Qué son los Punteros?  Los Procedimientos: New y Dispose.
1 5. UNIDADES DE PROGRAMAS. 2 Uso de mecanismos de control de secuencia de: Invocaciones Retornos Entre: PPSP 1 a) I R SP 1 SP 2 b) I R Unidades subordinadas.
LENGUAJE “C” Programación.
2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 9: Funciones, variables y arreglos en BASH Nombre.
Capítulo 2 “Subprogramas/Funciones - Arreglos”
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
Paso de Parámetros a una Función Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de.
MEMORIA DINÁMICA.
Cobol C Pascal Fortran 2. OBJETOS DE DATOS SmallTalk Java C++
Programación en Visual Basic
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
Camilo Andrés Salazar González FORTRAN.  Estructura program circulo Real :: r, area write (*,*) 'Escribe el radio r:' read (*,*) r area = *r*r.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
Cobol C Pascal Fortran 6. PARAMETRIZACIÓN SmallTalk Java C++
Transcripción de la presentación:

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 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á.

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.

4 Parametrización 1. Parametrización de datos 2. Parametrización de tipos 3. Parametrización de subprogramas  Nombre  Referencia  Valor  Tipo

5 Parametrización de Datos

6 Opciones de Llamada  Por Nombre Por Nombre  Por Referencia Por Referencia  Por Copia Por Copia  Por Valor Por Valor  Por Resultado Por Resultado  Por Valor-Resultado Por Valor-Resultado  Por Indirección Por Indirección

7 Subprogramas de ejemplo Procedure Uno( 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;

8 Parametrización por Nombre ::= Name

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)

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 b Uno: c d Cero: c := 7; b := 5 Regla de sustitución en UNO 7 y 5 sustitución

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: x Dos: y x 1 x 2 x 1 y

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 Dos: c Tres: c d Swap: a b temp ab 7,5 c 5 d 7 temp

13 Gráficamente Dos: c: 4 Swap a b temp: 5 c:5 d:7 temp: 5 Tres ,5

14 Efectos inesperados Procedure Swap(name a, b : integer); var temp : integer; begin temp := a; a := b; b := temp; end; swap(i, v  i  ); 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: i= i=5 ? i=5

15 Parametrización Por Referencia ::= Ref

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

c d Cero: 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 b Uno: 7 y c 5 d 7 a b

18 Parametrización por Copia Por Valor Por Resultado Por Valor-Resultado

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

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 ::= in

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 b Uno: a 5 b c d Cero: Asignación en la llamada: a:= c; b:= d; 5 y

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. ::= out

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 b Uno: 5 7 c d Cero: Asignación al final de la ejecución: c:= a; d:= b; 7 y

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. ::= in-out a)Al efectuarse una invocación se realizan las asignaciones de los VALORES a los parámetros formales

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 b Uno: 5 7 c d Cero: 7 y a 5 b a:= c; b:= d; Al llamar: c:= a; d:= b; Al terminar:

26 Parametrización por Indirección

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. ::= 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)

28 Ejemplo c100 5 d300 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 b Uno: 5 7 c d Cero: 7 y l-valor de c  a; l-valor de d  b; Al llamar: a 100 b

29 Resumen Aunque la implementación es diferente, las siguientes modalidades generan el mismo efecto: Por nombre Por referencia Por resultado Por valor-resultado Por indirección

30 Parametrización de Tipos

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]?

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.

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.

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.

35 Alternativas ADA: Unidades GenéricasUnidades Genéricas C++: Plantillas de funcionesPlantillas de funciones

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

37 Unidades Genéricas La parametrización de tipos se implementa mediante macro-expansión Implementación el concepto de

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

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.

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

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)

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,

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 void Imprimir(T *V, int k) {for(int i = 0; i < k; i++) cout<< V[i] << " "; cout<< endl; }

44 Parametrización de Subprogramas

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

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

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

48 Ejemplo i nt 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:

49 Dos: Y: Tres(3) j : 2 2+ ___ Solución i nt 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: 3 Tres: 3 3 = 5

50 Ejemplo Function F: Integer; Var k: Integer; Begin Readln(k); If (k<>-1) then F:= k+F else 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:

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

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) Enlace Dinámico : 4B (LongInt) 12 B