Vous êtes sur la page 1sur 9

Lenguajes de Programacin 2017 14/8/2017

Lenguajes de Programacin

Clase 9

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 1

Control de secuencia en
subprogramas
Supuestos Iniciales
No hay recursin.
Se exigen llamadas explcitas.
Ejecucin Integral del subprograma.
Transferencia inmediata del control.
Secuencia nica de ejecucin.
En estas condiciones se puede aplicar llamada
regreso, esperando que el efecto sea similar a
aplicar la regla de la copia, es decir el reemplazo
de la invocacin con el cuerpo del subprograma.

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 2

Subprogramas simples de
llamada - regreso
Distincin entre definicin y activacin de
subprogramas.
Segmento de Cdigo.
Registro de Activacin.
CIP (Current Instruction Pointer).
CEP (Current Environment Pointer).

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 3

Clase 9 1
Lenguajes de Programacin 2017 14/8/2017

Subprogramas Recursivos
Una de las condiciones que se exigieron para el
anlisis de la secuencia en subprogramas era la
ausencia de recursin. Pero la recursin es uno de
los recursos ms importantes de la programacin, al
punto que muchos lenguajes (e incluso algunos
paradigmas) no tendran ningn sentido sin el uso
de este recurso. Analicemos rpidamente de que
manera se modificara la situacin si permitimos
recursin.

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 4

Subprogramas Recursivos
La nica diferencia entre una llamada recursiva y
una que no lo es consiste en que la primera crea
una segunda activacin del subprograma durante el
tiempo de vida de la activacin inicial.
Esto nos lleva a la necesidad de agregar estructuras
apiladas para ir almacenando los puntos de retorno
ms la informacin necesaria para que la recursin
se ejecute de la manera esperada.

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 5

Control de Datos
Elementos y nombres
Variables
Parmetros Formales
Subprogramas
Tipos Definidos
Constantes Definidas
Excepciones
Operaciones Primitivas
Constantes no definidas
14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 6

Clase 9 2
Lenguajes de Programacin 2017 14/8/2017

Asociaciones y ambientes de
referencia
Asociacin: Enlace entre un identificador y
un objeto de datos o un subprograma
especfico.
El conjunto de asociaciones disponible
durante la ejecucin de un subprograma
constituyen el ambiente de referencia de
dicho subprograma

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 7

Dinamismo de las asociaciones


Al inicio de la ejecucin del programa, se
generan algunos enlaces:
Enlace entre cada variable global y un objeto de
datos en particular
Enlace entre cada identificador y su
correspondiente subprograma invocado en el
programa principal

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 8

Dinamismo de las asociaciones


Conforme avanza la ejecucin del programa
principal, este hace permanentes
invocaciones a operaciones de referencia
para determinar cul es el objeto de datos o
subprograma asociado con el identificador.
Por ejemplo:
A:=B+RAIZ(C)
Implica cuatro operaciones de referencia.

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 9

Clase 9 3
Lenguajes de Programacin 2017 14/8/2017

Dinamismo de las asociaciones


Ante cada invocacin a un subprograma,
aparece un nuevo conjunto de asociaciones
que corresponden a dicho subprograma:
Asociaciones correspondientes a las variables
locales
Asociaciones entre parmetros formales y un
objeto de datos especfico
Asociaciones ente identificadores locales y
subprogramas propios

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 10

Dinamismo de las asociaciones


Dentro del subprograma aparecen las
operaciones de referencia al igual que en el
programa principal
Esas operaciones se resuelven de manera
local cuando son variables locales
Las mismas deben resolverse en un mbito
no local cuando son variables externas
accesibles al subprograma

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 11

Dinamismo de las asociaciones


Cuando el subprograma termina su
ejecucin, retorna el control al programa
principal, destruyendo su conjunto de
asociaciones o por lo menos,
desactivndolas
Al reiniciar la ejecucin del invocante, el
conjunto de asociaciones, vuelve a ser el
original
14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 12

Clase 9 4
Lenguajes de Programacin 2017 14/8/2017

Ambientes de referencia
Se distinguen cuatro ambientes de referencia:
Local: conjunto de asociaciones creadas por el
subprograma (variables locales y parmetros)
No local: conjunto de asociaciones no definidas en el
subprograma pero accesibles.
Global: conjunto de asociaciones definidas en el
programa principal disponibles en el subprograma.
Predefinido: Asociaciones implcitas disponibles en el
subprograma.
14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 13

Alcance esttico y dinmico


Decimos que el alcance esttico est
representado por aquellas asociaciones que no
cambiarn durante la ejecucin del programa.
El alcance dinmico de una asociacin, en
cambio, est representado por el conjunto de
activaciones de subprograma dentro de las
cuales es visible.

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 14

Seudnimos
Decimos que dos identificadores son
seudnimos cuando hacen referencia a la
misma posicin de memoria.
Se considera que los seudnimos perjudican
la buena programacin porque generan
confusin.
Aparecen, por ejemplo, cuando se pasa una
variable por referencia en Pascal.

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 15

Clase 9 5
Lenguajes de Programacin 2017 14/8/2017

Seudnimos
Casos:
Parmetro formal y variable no local, en
un pasaje por referencia.
Dos parmetros formales, si se pasa por
referencia y se invocan con el mismo
parmetro real: Funcin(m,m).

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 16

Pasaje de parmetros
Establecimiento de la correspondencia:
Posicin: es lo ms habitual. El cada
parmetro formal se reemplaza por el
parmetro real que se encuentra en la
misma posicin.
Nombre Explcito: en este modelo se
indica especficamente como se har el
reemplazo. Lo implementa ADA.
14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 17

Mtodos de Transmisin
Desde un punto de vista semntico, se
conocen cinco mtodos de pasaje de
parmetros:
Por Nombre.
Por Referencia.
Por Valor.
Por Resultado.
Por Valor Resultado.

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 18

Clase 9 6
Lenguajes de Programacin 2017 14/8/2017

Pasaje por Nombre


Corresponde al modelo que implementa
FORTRAN: se lleva acabo el reemplazo de la
invocacin por el cuerpo completo del
subprograma.
Concretamente, se lleva a cabo un reemplazo
integral del parmetro formal por el parmetro
real en todo el cuerpo del subprograma.

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 19

Pasaje por Referencia


Este pasaje implica que se pasa un puntero a
la posicin de la variable global, por lo tanto
aparece el concepto de seudnimo.
Pascal lo implementa con la palabra reservada
VAR y esto genera dificultades: olvidarse de
escribirla genera resultados inesperados y
difciles de resolver.

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 20

Pasaje por Valor


En este modelo se pasa directamente un valor,
el cul puede ser una constante o no. Si es una
variable, la misma se evala y lo que se pasa
al subprograma es el valor almacenado en
dicha variable, sin que quede ninguna relacin
con la variable global.
Este modelo provee la mxima independencia
entre mdulos y garantiza reusabilidad.
14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 21

Clase 9 7
Lenguajes de Programacin 2017 14/8/2017

Pasaje por Valor Resultado


Este modelo consiste en una doble copia
automtica al principio y al final del
subprograma. Cuando se invoca, se carga en
el parmetro formal el valor de la variable
global. Durante el cuerpo del subprograma las
referencias son sobre la variable local y al
final del mismo, el valor se escribe
nuevamente en la variable global.
14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 22

Pasaje por Resultado


En este tipo de transmisin, lo que se entrega
es un balde vaco, en el cul se espera el
resultado de evaluar el subprograma. Los
lenguajes que implementan este pasaje
entregan una variable sin inicializar (o con la
inicializacin por defecto) y reciben en ella el
resultado de la operacin.

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 23

Ejemplos de pasajes de parmetros

Pascal implementa valor y referencia.


FORTRAN original hace pasaje por
nombre, estandarizaciones posteriores
agregan referencia.
C implementa slo llamada por valor.
ADA implementa indicadores IN, OUT e
IN-OUT.

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 24

Clase 9 8
Lenguajes de Programacin 2017 14/8/2017

Pasajes no convencionales:
Subprogramas
En algunos lenguajes es posible pasar como parmetro
el nombre de un subprograma. Por ejemplo, en Pascal:
Procedure WORK (function fn(a,b: integer):integer;
En donde la funcin que se pasa podra ser distinta en
cada invocacin. Esto es til slo en determinados
casos y presenta el inconveniente de un diseo pobre.
Un mdulo superior est definiendo el comporta-
miento de uno inferior.
14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 25

Pasajes no convencionales:
Etiquetas
Tambin se provee en algunos lenguajes la
posibilidad de pasar como parmetros
etiquetas de enunciado (LABELS).
Esto contradice todas las reglas del diseo
estructurado y obliga al pleno conocimiento
de la estructura del mdulo inferior por parte
del mdulo invocante.

14/8/2017 Mg. Ing. Pablo Garca - Lenguajes de Programacin - FCEyN - UNLPam 26

Clase 9 9

Vous aimerez peut-être aussi