Vous êtes sur la page 1sur 26

Lenguajes de Programacin E.S.

Ingeniera Informtica

Tema 2. Variables, mbito y comprobacin
de tipos

1. Variables


Variable: (nombre, direccin, valor, tipo, tiempo de vida, mbito)


1.1. Nombre


Nombre o identificador: cadena de caracteres empleada
para reconocer alguna entidad del programa


Los nombres de variables son los identificadores ms numerosos en
los programas, aunque no todas las variables tienen nombre


Subprogramas, parmetros formales y otras entidades de
programa tambin poseen nombre o identificador


Cuestiones relativas al diseo de nombres:

1. Cul es la longitud mxima de un identificador?

2. Pueden emplearse caracteres conectores?

3. Se distinguen maysculas de minsculas?

4. Las palabras especiales son palabras reservadas o palabras
clave? Cul es la longitud mxima de un identificador?

Algunos lenguajes limitan el nmero de caracteres (31 en
C), mientras que otros, como Ada, no lo hacen


Pueden emplearse caracteres conectores?

El conector ms empleado es _




Departamento de Informtica 5 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Se distinguen maysculas de minsculas?

Lenguajes como C, C++, Modula-2 o Java distinguen el uso
de maysculas y minsculas en los identificadores

Ej. de tres nombres distintos en C: suma, Suma, SUMA problemas
de legibilidad (nombres que parecen muy similares denotan
entidades distintas). Solucin: utilizar solamente minsculas

En Java (o Modula-2) muchos nombre predefinidos incluyen
maysculas y minsculas. Ej.: nombre del mtodo para convertir
una cadena de caracteres en un valor entero parseInt
(ParseInt o parseint son incorrectos) problema para
escribir los programas (hay que recordar la forma en que se
escriben estos nombre predefinidos)


Las palabras especiales son palabras reservadas o palabras clave?

Palabras especiales: indican acciones a realizar o se
emplean para separar entidades sintcticas de los programas.
Pueden ser: palabras clave o palabras reservadas

Palabras clave: slo son palabras especiales en
determinados contextos
Ej: Fortran
REAL ALTURA INTEGER REAL

REAL = 8.25 REAL INTEGER

Aunque tanto el compilador como los programadores distinguen
un identificador de una palabra especial por su contexto, el uso
de palabras clave puede conllevar problemas de legibilidad

Palabras reservadas: palabra especial de un LP que no
puede emplearse como identificador

Nombres predefinidos: nombres que tienen un significado
predefinido pero que puede ser cambiado (redefinido) por el
usuario Ej: Ada (integer, float), Pascal (readln, writeln,
trunc, round), C (printf, scanf)





Departamento de Informtica 6 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

1.2. Direccin


Direccion de una variable: direccin de memoria a la que
est asociada


Un mismo nombre puede tener asociados diferentes direcciones en
lugares diferentes del programa (funciones f1 y f2 empleando la
variable i) o en momentos diferentes durante la ejecucin del
programa (activaciones recursivas de un subprograma)


La direccin de una variable se denomina l-valor la aparicin de una
variable en la parte izquierda de una asignacin denota su direccin

Alias


Alias: cuando se usa ms de un nombre de variable para referenciar
la misma direccin


Son un obstculo a la legibilidad y verificacin de programas. Ej: si A
y B son alias cualquier cambio en A tambin cambia B y viceversa


Formas de crear alias:

Registros variantes de Pascal y Ada o uniones de C y C++:

Medio de ahorrar espacio: la misma direccin se usa para
almacenar tipos diferentes en momentos diferentes

Medio de evitar las reglas de tipos del lenguaje: permite
manipular diferentes tipos de datos en la misma localizacin
de memoria
















Departamento de Informtica 7 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

En lenguajes con apuntadores, dos variables apuntador son alias
cuando apuntan a la misma localizacin de memoria. En C y C++,
si un apuntador hace referencia al espacio designado por un
nombre de variable, este nombre y el apuntador son alias
Ej: C
int a, *pa;

pa = &a; /* pa y a son alias */


Empleando paso de parmetros por referencia a los subprogramas


1.3. Tipo


Tipo de una variable: determina el rango de valores que puede tomar
la variable y el conjunto de operaciones definidas para los valores del
tipo
Ej. integer: [-32768..32767], {+, -, *, /}


1.4. Valor


Valor de una variable: contenido de la celda o celdas de
memoria asociadas a las variables


El valor de una variable se denomina r-valor la aparicin de una
variable en la parte derecha de una asignacin denota su valor
(Para acceder a un r-valor primero debe determinarse su l-valor)


2. Ligadura (binding)

Ligadura: asociacin entre un atributo y una entidad

El momento en el que se produce se denomina tiempo de
ligadura. Ejemplos:

Tiempo de compilacin la ligadura de una variable de
un programa en Pascal a su tipo de datos


Departamento de Informtica 8 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Tiempo de linkado la ligadura de una llamada a un
subprograma de biblioteca al cdigo del subprograma

Tiempo de carga la ligadura de ciertas variables (ej: globales)
a sus celdas de memoria (su direccin)

Tiempo de ejecucin la ligadura de las variables locales
(no estticas) a sus celdas de memoria


Ligadura esttica: si ocurre antes del tiempo de ejecucin
y permanece inalterable durante la ejecucin del programa


Ligadura dinmica: si ocurre durante del tiempo de ejecucin
o puede cambiar en el transcurso de la ejecucin del programa


2.1. Ligadura de tipos


Antes de que una variable pueda ser referenciada en un programa
debe haber sido ligada a un tipo de dato. Aspectos importantes:
cundo se liga el tipo y cmo se especifica

A. Ligadura esttica de tipos


Puede hacerse mediante:

Declaracin explcita: se utiliza una sentencia que declara
una lista de identificadores como de un tipo determinado

Declaracin implcita: forma de asociar variables con tipos
a travs de convenciones sintcticas. La primera aparicin
del identificador constituye su declaracin implcita

Ejemplos de LP: Fortran, Basic, Perl

Problema: variables no declaradas explcitamente de manera
accidental por el programador toman un tipo por defecto










Departamento de Informtica 9 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Algoritmo de inferencia de tipos: determina los tipos de las
variables que intervienen en las expresiones sin que sean
declaradas de forma explcita por el programador o da un
mensaje de error si no puede inferirse
Ej: Haskell
f x y | x == True = y * y
| otherwise = y / 2

B. Ligadura dinmica de tipos


El tipo no se especifica mediante una sentencia de declaracin, sino
cuando se le asigna un valor mediante una sentencia de asignacin
se liga al tipo del valor, variable o expresin de la parte derecha
de la asignacin (APL, SNOBOL4)


Ventaja: proporciona muchsima flexibilidad de programacin
Ej: APL
(tipo: lista de reales de long. 4) lista 3.5 8.3 0.7 10.1

lista 15 (tipo: variable entera)



Desventajas:

No se detectan incorrecciones de tipo en las asignaciones. El tipo de
la parte izquierda simplemente se cambia al de la
derecha Ej:
i, x almacenan valores de tipo entero
y almacena un valor de tipo real

si por error
escribimos i y
en lugar de
i x
no se detecta el error, sino que el tipo de i se cambia a
real. En lenguajes con ligadura esttica de tipos (Pascal, Ada)
el compilador detectara el error. Aunque en otros (C), en
muchas ocasiones el tipo de la parte derecha se convierte
automticamente al de la izquierda

Departamento de Informtica 10 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

El coste de implementacin de la ligadura dinmica de atributos
es mayor, sobre todo en tiempo de ejecucin:

Comprobacin de tipos

Mantenimiento del descriptor asociado a cada variable en el
que se almacena el tipo actual

Cambio en el tamao de la memoria asociada a la variable


2.2. Ligadura de espacio y tiempo de vida


Proceso de asignacin: ligar celdas de memoria, tomadas de
zonas de memoria disponible, a variables


Proceso de desasignacin: desligar las celdas de memoria de la
variable y devolver las celdas a las zonas de memoria disponible


Tiempo de vida de una variable de programa: tiempo durante el
cual la variable est ligada a una localizacin especfica de memoria
tiempo entre asignacin y desasignacin de espacio


Clasificacin de las variables en cuatro categoras atendiendo a
sus tiempos de vida y a la zona de memoria desde donde se
realiza la asignacin

A. Variables estticas


Se ligan a celdas de memoria antes de que comience la ejecucin
del programa y permanece ligada a las mismas celdas hasta que
acaba la ejecucin del programa


Las variables globales son variables estticas


Puede ser conveniente declarar variables en subprogramas que
retengan el valor entre ejecuciones diferentes variables
estticas en subprogramas (ej. static en C)




Departamento de Informtica 11 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Ventaja principal: eficiencia

Todas pueden tener direccionamiento directo (otros tipos de
variable necesitan direccionamiento indirecto que es ms lento)

No hay sobrecarga en tiempo de ejecucin por asignacin
o desasignacin de espacio


Desventaja: reducida flexibilidad

Si un LP no dispone de otro tipo de variables no se
soportan programas recursivos

B. Variables dinmicas de pila


La ligadura de espacio se produce cuando se elabora la sentencia
de declaracin, exceptuando las que se ligan estticamente


Elaboracin de una sentencia de declaracin: proceso de asignacin
y ligadura de espacio indicada por la declaracin que tiene lugar
cuando la ejecucin alcanza el cdigo de dicha declaracin la
elaboracin se produce en tiempo de ejecucin


Ej: los procedimientos en Pascal tienen:

Seccin de declaracin: se elabora justo antes de la ejecucin
del cdigo, cuando se llama al procedimiento

Seccin de cdigo


La asignacin se produce en tiempo de elaboracin y la
desasignacin al devolver el control al procedimiento que realiza
la llamada


El espacio se asigna en la pila de tiempo de ejecucin


Las variables locales (declaradas en subprogramas) son variables
dinmicas de pila (a excepcin de las declaradas como estticas)



Departamento de Informtica 12 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Ventajas:

Todas las variables comparten el mismo espacio de memoria
(la pila)

Permiten recursin permite almacenar una copia diferente de
las variables locales para cada una de las llamadas recursivas


Desventaja:

Sobrecarga en tiempo de ejecucin debido a la asignacin
y desasignacin de espacio en la pila

C. Variables dinmicas de montn (heap)


Montn (heap): coleccin de celdas de almacenamiento cuya
estructura est muy desorganizada debido a la naturaleza
imprevisible de su uso


Dos clases: explcitas e implcitas

C.1. Explcitas


Variables sin nombre cuyo almacenamiento se asigna y desasigna
en tiempo de ejecucin mediante la utilizacin por el programador
de instrucciones especficas


Slo pueden ser referenciadas mediante apuntadores


La creacin/destruccin de variables puede hacerse mediante un
operador (C++, Ada) o una funcin de biblioteca (C, Pascal)















Departamento de Informtica 13 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Ejemplo: Pascal
type
pnodo = ^nodo;

nodo = record end;

var


nuevo_nodo: pnodo;



begin



{ La ligadura del tipo es esttica y new(nuevo_nodo);

la de espacio dinmica}



dispose(nuevo_nodo);



end;




Uso: estructuras dinmicas (listas, rboles, grafos, )


Desventajas:

Dificultad para usarlas correctamente

Coste en tiempo de ejecucin en las operaciones de
referencia, asignacin y desasignacin

C.2. Implcitas


Se les liga espacio del montn slo cuando se le asignan valores
(de hecho, todos sus atributos se ligan cada vez que se produce
una asignacin)


Ejemplo: variables de APL


Ventaja: flexibilidad en la programacin permite escribir cdigo
muy genrico


Departamento de Informtica 14 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Desventajas:

Dejan de detectarse algunos errores de tipo

Sobrecarga en tiempo de ejecucin (asignacin/desasignacin
de espacio y resto de atributos)


3. Tipos


3.1. Comprobacin de tipos


Generalizacin de los conceptos de operandos y operadores para
incluir a subprogramas y sentencia de asignacin:

Subprogramas operadores cuyos operandos son sus parmetros

Asignacin operador binario cuyos operandos son la variable a
la que se asigna el valor y la expresin a evaluar


Comprobacin de tipos: actividad que nos asegura que
los operandos de un operador son de tipos compatibles


Tipos compatibles: un tipo legal para el operador o un tipo que
atendiendo a determinadas reglas del lenguaje puede ser convertido
implcitamente mediante cdigo generado por el compilador en un tipo
legal. Esta conversin automtica se denomina coaccin (coercion)


Error de tipos: aplicacin de un operador a un operando de
tipo inapropiado


Si todas las ligaduras de tipos a variables son estticas las
comprobaciones de tipo pueden realizarse de forma esttica


Si hay ligadura dinmica de tipos a variables debe realizarse
una comprobacin dinmica de tipos (ms costosa que en
tiempo de compilacin)





Departamento de Informtica 15 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

LP (Pascal, Ada, C) que permiten el almacenamiento en la misma
celda de memoria de valores de tipos diferentes en momentos
distintos de la ejecucin (registros variantes y uniones) la
comprobacin de tipos para estas clases de datos debe ser dinmica
requiere mantener durante la ejecucin el tipo actual asociado a la
celda de memoria no todos los errores pueden detectarse con una
comprobacin esttica de tipos


3.2. Disciplina de tipos (strong typing)


Un lenguaje tiene disciplina de tipos si los errores de tipos se
detectan siempre es necesario determinar los tipos de todos
los operandos, ya sea en tiempo de compilacin o de ejecucin


Pascal

Cercano a tener disciplina de tipos pero no realiza comprobacin
de tipos en los registros variantes (incluso puede omitirse la
etiqueta discriminatoria en dichos registros)


Ada

Resuelve el problema de los registros variantes realizando
comprobacin dinmica de tipos (slo en este caso)

Tiene una funcin de biblioteca que permite extraer un valor de
una variable de cualquier tipo (como una cadena de bits) y usarlo
como un tipo diferente (no es una conversin de tipos) se trata
de una suspensin temporal de la comprobacin de tipos


C

No tiene disciplina de tipos por:

No se realiza comprobacin de tipos sobre las uniones

Permite funciones con parmetros sobre los que no se realiza
comprobacin de tipos






Departamento de Informtica 16 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Java

Tiene disciplina de tipos (no hay
uniones) ML y Haskell

Poseen disciplina de tipos

Los tipos de los parmetros de las funciones (y de estas mismas)
se conocen en tiempo de compilacin (ya sea por declaracin del
usuario o por inferencia de tipos)


3.3. Compatibilidad de tipos


Mtodos:

Compatibilidad de tipos nominal: dos variables tienen
tipos compatibles si estn ligadas al mismo nombre de tipo
Ej:
type

T = array [1..10] of integer;

var

a, b:
T; begin

a := b;

Compatibilidad de tipos estructural: dos variables tienen
tipos compatibles si sus tipos tienen la misma estructura
Ej:
type

T = array [1..10] of integer;
S = array [1..10] of integer;

var

a: S;
b: T;
begin

a := b;


Departamento de Informtica 17 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Equivalencia de declaracin: dos variables tienen tipos
compatibles si uno de los tipos est definido con el nombre del otro
Ej:
type

T = array [1..10] of
integer; S = T;

var

a: S;
b: T;
begin

a := b;


La mayora de LP utilizan combinaciones de estos tres mtodos
de compatibilidad


Tipo annimo: tipo asociado directamente con una variable mediante
una declaracin sin proporcionarle un
nombre Ej. en Ada:
a, b: array (1..10) of INTEGER;

c: array (1..10) of INTEGER;

La interpretacin es obvia usando compatibilidad de
tipos estructural
Compatibilidad nominal? Ej. Ada a, b y c son incompatibles


Compatibilidad de tipos nominal:

Fcil de implementar pero muy restrictiva

Ej. usando un lenguaje con interpretacin estricta de
la compatibilidad de tipos nominal:












Departamento de Informtica 18 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica
type

tipo_indice = 1..100;

var

contador: integer;
indice: tipo_indice;
begin

contador := indice;
indice := contador;

Compatibilidad de tipos estructural:

Debe compararse la estructura de ambos tipos, pero:

Son compatibles dos registros con la misma estructura pero
con nombres de campos diferentes?

Son compatibles arrays del mismo tipo y con el mismo nmero
de elementos pero con rangos de ndices diferentes (0..9 /
1..10)?

Son compatibles tipos enumerados con el mismo nmero de
componentes pero literales diferentes?

No acepta diferencias entre tipos con la misma estructura
Ej:
type

longitud = real;
tiempo = real;
var

l: longitud;

t: tiempo;

l y t son compatibles (tienen la misma estructura), aunque
quizs no deberan considerarse equivalentes: son
abstracciones de diferentes categoras de valores del problema









Departamento de Informtica 19 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Subtipos y tipos derivados


Subtipo: versin (posiblemente restringida en el rango) de un
tipo existente con el que es compatible. Evita uno de los
problemas de la compatibilidad de tipos nominal

Ej. Ada:
subtype Natural is Integer range
0.. IntegerLast;

subtype Temperatura is Integer range -
20..45; n: Natural;

i: Integer;

t: Temperatura;

Las siguientes asignaciones son posibles:
n := i;
i := n;

t := i;

Se necesita una comprobacin en tiempo de ejecucin que
asegure que el valor que se asigna est en el rango adecuado
Para la funcin:
function "**" (i: Integer; n:
Natural) return Integer;

y la llamada
j ** k;

el compilador comprueba que j y k sean del tipo Integer
(o de uno de sus subtipos). Durante la ejecucin se asegura
que el valor actual de k est en el rango de Natural. Un
lenguaje con compatibilidad de tipos nominal slo aceptara
que j fuese del tipo Integer y n del tipo Natural.

Tipo derivado: nuevo tipo basado en algn otro previamente
definido con el que es incompatible, aunque sean estructuralmente
idnticos. Heredan todas las propiedades de su tipo padre. (Tambin
pueden incluir restricciones sobre el rango)



Departamento de Informtica 20 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica
Ej. Ada:

type Longitud is new Float;


type Tiempo is new Float;


Las variables de estos tipos son incompatibles entre ellas y
con otras de tipo float (esta regla no se aplica a los literales
como 12.5)


4. mbito


mbito de una variable de programa: rango de sentencias en las
que es visible la variable


Una variable es visible en una sentencia si puede referenciarse
en dicha sentencia


Las reglas de mbito de un lenguaje determinan cmo se asocian las
referencias a variables declaradas fuera del subprograma o bloque
que se est ejecutando con sus declaraciones con sus atributos


Una variable es local en una unidad de programa o bloque si est
declarada en l. Las variables no locales de una unidad de
programa o bloque son aquellas visibles en dicha unidad o bloque
pero no declaradas en l


4.1. mbito esttico


mbito esttico (introducido por ALGOL 60): mtodo de ligadura de
nombres a variables no locales que ocurre en tiempo de compilacin


En la mayora de lenguajes con mbito esttico (C es una de las
excepciones) pueden anidarse los subprogramas cada subprograma
crea su propio mbito el resultado es una jerarqua de mbitos








Departamento de Informtica 21 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Cmo se determinan los atributos de una variable en un lenguaje
con mbito esttico?

1. Se busca su declaracin local, y si no se encuentra

2. Se contina la bsqueda en el bloque que lo declara, su
padre esttico. Si no se encuentra,

3. Se contina la bsqueda en la unidad que declara a esta ltima.
As hasta que se encuentra la declaracin de la variable o se
alcance la unidad de declaracin mayor error: utilizacin de
una variable no declarada


El padre esttico de un subprograma y los padres estticos de ste
hasta el programa principal se denominan antepasados estticos


Ejemplo:
procedure mayor;
var x: integer;

procedure
sub1; begin
x
end; {de sub1}

procedure
sub2; var x:
real; begin

end; {de
sub2} begin

end. {de mayor}

La referencia a la variable x en sub1 se corresponde con
la declaracin de x en mayor

En lenguajes con mbito esttico, una declaracin de una variable
oculta cualquier declaracin de otra variable con el mismo nombre
en un mbito que englobe al que incluye dicha declaracin

La referencia a la variable x en sub2 se corresponde con la
declaracin en sub2 se oculta la declaracin de x en mayor

Departamento de Informtica 22 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Hay lenguajes que permiten hacer referencia a variables
ocultas declaradas en antepasados estticos

Ej: Ada. Sintaxis:
nombre_unidad_de_programa.nombre_variable mayor.x

Algunos lenguajes (herederos de ALGOL 60) permiten definir nuevos
mbitos estticos en mitad de cdigo ejecutable son variables
locales a esa seccin de cdigo. Son variables dinmicas de pila se
les asigna espacio al comenzar la seccin y se desasigna cuando se
sale de ella

Las secciones de cdigo en la que pueden definirse variables locales
se denominan bloques

Ej. de bloque en Ada:

declare temp:
Integer; begin
temp := x;
x := y;
y :=
temp; end;


Los bloques son el origen de la expresin
lenguajes estructurados en bloques

Aunque a Pascal se le considera un lenguaje estructurado
en bloques no dispone de bloques no procedurales

En C, cualquier grupo de sentencia compuesta (secuencia de
sentencias englobadas entre llaves) puede definir un nuevo
mbito. Ejemplo:
if (lista[i] < lista[j])

{
int temp;

temp := lista[i];
lista[i] := lista[j];
lista[j] := temp;
}

Departamento de Informtica 23 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Java permite que la definicin de una variable aparezca en cualquier
lugar de una funcin el mbito de la variable comienza en la
sentencia de definicin y acaba en el final del bloque que la incluye

Los mbitos definidos por bloques se tratan igual que los
creados por subprogramas


Evaluacin del mbito esttico


Proporciona un mtodo de acceso a variables no locales adecuado en
la mayora de los casos


Problemas:

Acceso a demasiados datos. Por ejemplo, todas las
variables declaradas en el programa principal son visibles
en todos los procedimientos, se desee o no

Los cambios pueden ser complicados:

principal
A

C






D

B E







1. Es necesario acceder a variables de D desde E. Soluciones:

Mover E dentro de D E deja de tener acceso al mbito de
B
Mover las variables de D que necesita E a principal
puede accederse a ellas desde otros procedimientos.
Adems, supongamos que D y E necesitan la variable x.
Si en A hay una variable con nombre x oculta la
variable x que necesita D y hemos movido a principal



Departamento de Informtica 24 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

2. E necesita llamar al procedimiento D. Soluciones:

Mover D dentro de principal deja de tener acceso a las
variables de A
Esta falta de flexibilidad provoca una tendencia en los
programadores a usar ms variables globales de las que necesitan


4.2. mbito dinmico


mbito dinmico (APL, SNOBOL4): basado en la secuencia de
llamadas a subprogramas y no en la relacin sintctica entre ellos
el mbito slo puede determinarse en tiempo de ejecucin


Cmo se determinan los atributos de una variable en un lenguaje
con mbito dinmico? En tiempo de ejecucin:

1. Se busca su declaracin local, y si no se encuentra

2. Se contina la bsqueda en su padre dinmico, el
subprograma que realiz la llamada. Si no se encuentra,

3. Se contina la bsqueda en los antepasados dinmicos. As
hasta que se encuentra la declaracin de la variable. Si no se
encuentra la declaracin en ningn antecesor dinmico error
en tiempo de ejecucin


























Departamento de Informtica 25 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Ejemplo:
procedure mayor;
var x: integer;

procedure
sub1; begin
x
end; {de sub1}

procedure
sub2; var x:
real; begin

end; {de
sub2} begin

end. {de mayor}

Secuencia de llamadas: mayor sub2 sub1 la referencia a x
en sub1 corresponde con la declaracin de x en sub2

Secuencia de llamadas: mayor sub1 la referencia a x en
sub1 corresponde con la declaracin de x en mayor

Evaluacin del mbito dinmico


Una sentencia en un subprograma que contiene una referencia a una
variable no local puede relacionarse con una variable diferente cada
vez que se ejecuta muchos tipos de problemas:

Durante el tiempo que transcurre entre el comienzo y la finalizacin
de la ejecucin de un subprograma todas las variables locales del
subprograma son visibles en los subprogramas a los que se llame.
No hay forma de protegerlas de esta accesibilidad programas
menos fiables que con mbito esttico

Imposibilidad de realizar una comprobacin de tipos esttica de
las referencias no locales (es imposible determinar
estticamente su declaracin)

Los programas son ms difciles de leer y seguir por un
lector humano


Departamento de Informtica 26 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Ventaja: el subprograma hereda el contexto de sus llamadores
mtodo de comunicacin entre unidades de programa (menos
seguro que otros mtodos, como el paso de parmetros)


4.3. Entorno de referencia


Entorno de referencia de una sentencia: coleccin de todos
los identificadores visibles en dicha sentencia

Lenguajes con mbito esttico: el entorno de referencia de una
sentencia est compuesto por las variables declaradas en su mbito
local ms todas las variables visibles de sus antepasados estticos

Lenguajes con mbito dinmico: el entorno de referencia de
una sentencia est compuesto por las variables declaradas
localmente ms todas las variables visibles del resto de
subprogramas activos Ej.: principal sub2 sub1
procedure sub1;

var a,b:
integer; begin
{A}
end; {de sub1}

procedure sub2;
var b,c:
integer; begin
{B}
sub1;
end; {de sub2}

procedure principal;
var c,d: integer;
begin
{C}
sub2;
end. {de principal}

Punto Entorno de referencia
A y de , de , de
a b sub1 c sub2 d
principal
B b y c de sub2, d de principal
C c y d de principal

Departamento de Informtica 27 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

5. Constantes


Constante: objeto al que se le liga un valor slo en el momento en
el que se le liga el espacio su valor no puede cambiarse por
asignacin o por sentencia de entrada


Ventajas:

Aumenta la fiabilidad y legibilidad de los programas

El valor aparece en una sola lnea de programa ms fcil
su modificacin


Constantes manifiestas: constantes con ligadura esttica de valores

Pascal: la declaracin de una constante requiere un valor simple

Modula-2: permite expresiones constantes (constantes
ya declaradas, literales y operadores)


Otros lenguajes (Ada, Java) permiten ligadura dinmica de valores
a constantes pueden aparecer variables

Ada:
num_elementos: constant Integer := 2 * i + j;


6. Inicializacin de variables


Inicializacin: ligadura de un valor a una variable en el momento
en el que tambin se le liga el almacenamiento


Variables estticas: inicializacin sucede una sola vez antes
del momento de la ejecucin


Variables con ligadura dinmica de espacio: la inicializacin tambin
es dinmica





Departamento de Informtica 28 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Inicializacin en algunos lenguajes:

Pascal: No tiene sentencias de inicializacin

C: en la sentencia de declaracin puede indicarse un valor
inicial Ej.: int i = 10;
Ada: la inicializacin puede incluir nombres de otras constantes o
variables visibles en el momento de la elaboracin de la
inicializacin Ej.: contador: integer := num_elem + 1;

num_elem puede ser el nombre de una variable o constante


Variables no inicializadas


Las declaraciones sin inicializacin crean variables no inicializadas: se
les liga memoria pero su contenido es arbitrario y no puede ser
interpretado como un valor del tipo del objeto declarado. El uso de un
valor no incializado produce resultados impredecibles y debe evitarse


Posibles aproximaciones que pueden utilizar los LP:

Se ignora el problema y se considera responsabilidad del
programador no emplear valores no inicializados. Poco elegante

Todas las declaraciones inicializan el espacio asignado a un valor
apropiado, definido para cada tipo bsico. Por ej., punteros a
null y valores numricos a cero. Puede llevar a errores

No existen declaraciones sin inicializacin el programador debe
proporcionar un valor de inicializacin adecuado para cada
elemento declarado

Existe un valor especial para cada tipo denominado omega, que
representa la propiedad de ausencia de inicializacin. Este valor
se propaga en las expresiones (omega + 3 omega). Permite
al programador comprobar dinmicamente si una variable est
o no inicializada





Departamento de Informtica 29 rea de Lenguajes y Sistemas Informticos
Lenguajes de Programacin E.S. Ingeniera Informtica

Ejemplos de algunos LP:

Pascal: ignora el problema

Ada: inicializa apuntadores a null e ignora el problema para
el resto de tipos

C: inicializa las variables estticas a una forma apropiada de
cero. Ignora el problema para el resto de las variables




















































Departamento de Informtica 30 rea de Lenguajes y Sistemas Informtico