Cobol C Pascal Fortran 6. PARAMETRIZACIÓN SmallTalk Java C++

Slides:



Advertisements
Presentaciones similares
Tema 1. Introducción a la programación (Lenguaje java).
Advertisements

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.
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.
Ada 2º Parte (variables, ámbitos , subrutinas , tipos abstractos de datos y excepciones)
Agenda Clase 11 Parametrización. Pasaje de parámetros (modos). Razones de escogencia entre modos. Clausuras como parámetros. Etiquetas, Conformat Arrays,
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.
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.
GENERICIDAD Es una propiedad que permite definir una clase o función sin especificar el tipo de datos de uno o mas de sus parámetros (Módulos Parametrizados).
AYUDANTÍA 2 Lenguaje Imperativo y Java. Punteros Dirección a memoria (puede apuntar a NULL). Permite trabajar con memoria (variables dinámicas de heap).
PROGRAMACIÓN I CENTRO DE ESTUDIOS INTEGRADOS EL MARISCAL - CEIM Ing. Luisa Fernanda Arenas Castañeda Feb 6 de 2016.
Algunas ideas básicas de C++
Una estrategia para evitar la sucesiones repetidas de instrucciones convertir la secuencia en un procedimiento e invocarlo cada vez que se necesite.
Lenguaje de Programacio Python Presentado por Jubel Crispán Materia Informatica Educativa.
Periodo II Técnicas de programación. Sin Parámetros Con parámetros Funciones.
Universidad autónoma del estado de México
Polimorfismo en C++, ligado dinámico y Métodos Virtuales
Olimpiadas Chilenas de Informática - Formación
INFORMATICA DEL CBU Clase 8 Año 2016 PROCEDIMIENTOS.
TIPOS ABSTRACTOS DE DATOS.
Algunas ideas básicas de C++
Métodos y parámetros.
Algunas Características de C++ no presentes en C
Polimorfismo y Métodos Virtuales
Manejo de Punteros y objetos en memoria dinámica en C++
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Conceptos básicos de programación
Resolución de problemas y algoritmos
Métodos en Java.
Algunas Características de C++ no presentes en C
Algunas ideas básicas de C++
Definición y Conversión de datos
Nociones básicas sobre C++
Polimorfismo en C++, ligado dinámico y Métodos Virtuales
Guía teórica de manejo de estructuras de datos
Asignación Dinámica de Memoria
Algunas Características de C++ no presentes en C
Manejo de Punteros y objetos en memoria dinámica en C++
Tema 6. Conceptos básicos de programación Clase 1
Definición y Conversión de datos
Algoritmo Conjunto ordenado y finito de pasos que permite hallar la solución de un problema. Una secuencia de pasos que conducen a la realización de una.
Nociones básicas sobre C++
Unidad 1. Conceptos básicos
LENGUAJE DE PROGRAMACION III Estructuras Estáticas de Datos
Ayudantía 3: Procesos y threads
Plantillas (Templates)‏
PROGRAMACIÓN 1 INTRODUCCIÓN
Unidad 3 Punteros.
Diego Hernández R Pascal Variables Diego Hernández R
LENGUAJE C.
Fundamentos de la Programación I
Algunas ideas básicas de C++
Unidad 2 Estructuras ESCUELA DE COMPUTACIÓN.
Lic. Xóchitl minerva García cruz
MC Beatriz Beltrán Martínez Verano 2018
Informática Ingeniería en Electrónica y Automática Industrial
Curso de Programación Estructurada
Romeo Alvarez Arana Jorge A. Davila Montoya Fernando Hernández Guzmán
Informática Ingeniería en Electrónica y Automática Industrial
Algunas Características de C++ no presentes en C
Templates (en español: Pantillas, modelos, patrones)‏
JAVA: elementos básicos
Manejo de Punteros y objetos en memoria dinámica en C++
INTRODUCCIÓN AL LENGUAJE C++
Polimorfismo en C++, ligado dinámico y Métodos Virtuales
Polimorfismo en C++, ligado dinámico y Métodos Virtuales
Procedimientos y Funciones
EUPs que imprima la tabla de multiplicar de 2 al 10
Polimorfismo en C++ y Métodos Virtuales
Templates (en español: Pantillas, modelos, patrones)‏
Algunas ideas básicas de C++
Transcripción de la presentación:

Cobol C Pascal Fortran 6. PARAMETRIZACIÓN SmallTalk Java C++

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

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

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

Parametrización de datos

Opciones de llamada Por Nombre Por Referencia Por Copia Por Valor Por Resultado Por Valor-Resultado Por Indirección

Subprogramas de ejemplo void uno(<Modalidad> int a, <Modalidad> int b) { a = 7; b = 5; } void cero() { int c, d; c = 5; d = 7; Uno(c, d); cout << c << d;

Llamada Por Nombre <Modalidad> ::= 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

Regla de sustitución en uno Llamada Por Nombre void cero() { int c, d; c = 5; d = 7; uno(c, d); cout << c << d; } void uno(name int a, name int b) { a = 7; b = 5; } a b uno: 7 5 5 7 c d cero: c = 7; d = 5; Regla de sustitución en uno c 5 d 7 a b sustitución 7 y 5

Llamada Por Nombre Llamada: dos(x); procedure uno; var x : integer; write(x); Regla de sustitución 1 2 uno: x dos: y x 1 x 2 y procedure uno; var x : integer; procedure dos(name y : integer); begin x := 2; write(y); end; x := 1; dos(x);

Llamada Por Nombre ? swap(i, vi); Llamada: temp := i; i := v[i]; v[i] := temp; Regla de sustitución i = 5 y v[5] = 3 Pero queda: 1 2 3 4 5 6 7 4 6 5 2 3 1 i=5 ? Efecto indeseado procedure swap(name a, b : integer); var temp : integer; begin temp := a; a := b; b := temp; end; Si antes de la llamada: i = 3 y v[3] = 5 1 2 3 4 5 6 7 4 6 5 2 7 1 3 i=3 i=5

Llamada Por Referencia <Modalidad> ::= 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

Llamada Por Referencia void cero() { int c, d; c = 5; d = 7; uno(c, d); cout << c << d; } void uno(ref int a, ref int b) { a = 7; b = 5; } 5 7 c d cero: a b uno: 7 y 5 7 5 c 5 d 7 a b

Llamada Por Valor <Modalidad> ::= 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

Asignaciones en la llamada Llamada Por Valor void cero() { int c, d; c = 5; d = 7; uno(c, d); cout << c << d; } void uno(in int a, in int b) { a = 7; b = 5; } 5 7 a b uno: c d cero: 5 y 7 7 5 c 5 d 7 a b Asignaciones en la llamada a = c; b = d;

Llamada Por Resultado <Modalidad> ::= 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

Asignaciones al finalizar Llamada Por Resultado void cero() { int c, d; c = 5; d = 7; uno(c, d); cout << c << d; } void uno(out int a, out int b) { a = 7; b = 5; } 7 5 a b uno: 5 7 c d cero: 7 y 5 7 5 a b c 5 d 7 Asignaciones al finalizar c = a; d = b;

Llamada Por Valor-Resultado <Modalidad> ::= 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

Llamada Por Valor-Resultado void cero() { int c, d; c = 5; d = 7; uno(c, d); cout << c << d; } void uno(in-out int a, in-out int b) { a = 7; b = 5; } a b uno: 5 7 c d cero: 7 y 5 7 5 5 7 7 5 c 5 d 7 a b a = c; b = d; Al llamar: c = a; d = b; Al terminar:

Llamada Por Indirección <Modalidad> ::= 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

Llamada Por Indirección void cero() { int c, d; c = 5; d = 7; uno(&c, &d); cout << c << d; } void uno(in int *a, in int *b) { *a = 7; *b = 5; } a b uno: 5 7 c d cero: 7 y 5 100 300 7 5 c 100 5 d 300 7 a  referencia de c b  referencia de d Al llamar: a b

Parametrización de tipos

Problema La función suma los n=40 elementos enteros de un arreglo v Sin embargo, para sumar los n=60 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, s=0; for (i=0; i<n; i++) s = s + v[i]; return s; }

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++)

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

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;

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);

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; }

Unidades Genéricas Solución a) 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);

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

Plantillas de funciones Sea la siguiente plantilla de función en C++ Aquí, T es el parámetro de tipo del arreglo V template <class T> void imprimir(T *V, int k) { for(int i=0; i<k; i++) cout<< V[i] << " "; cout<< endl; }

Plantillas de funciones Producción de tres unidades actuales a partir de tres invocaciones con arreglos de distinto tipo base int 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"; imprimir(a, 4); imprimir(b, 6); imprimir(c, 5); return 0; }

Parametrización de subprogramas

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

Códigos como parámetros Procedure P... ··· Procedure A... Begin End; Procedure B(procedure X); var y: integer; Procedure C... X; B(C); B(A); End 1. P llama a B con el procedimiento A como parámetro actual Como B tiene definido un parámetro formal X, la llamada a X activa el procedimiento A 2. B se autoinvoca con el procedimiento C como parámetro actual Una segunda invocación a X activará el procedimiento C

print(Uno(Dos(Tres(3),2),1)) 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 Stack de RA 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)); } k: 3 Tres: 3 3 = 5 Dos: Y: Tres(3) j : 2 2+ ___ 5 = 6 Uno: X: Dos(Tres(3),2) i : 1 1+ ___ 6 print(Uno(Dos(Tres(3),2),1)) Main: