Sie sind auf Seite 1von 4

Paradigmas de Lenguajes de Programación

Bindings, Scope, Visibilidad y Tiempo de Vida

1. Definiciones

Un nombre es un identificador de una entidad dentro de un programa. Referimos a algo por su nombre
cuando queremos crearlo, usarlo, cambiarlo o destruirlo.
Un binding es una asociación entre dos cosas, por ejemplo un nombre de variable con su contenido, o
con su tipo, un método con su código, etc.. Estas asociaciones pueden ser realizadas en las diferentes
etapas de vida de un programa.
Por ejemplo, dada la instrucción: a = a + 5; con a de tipo int:

Durante el diseño del lenguaje: el conjunto de posibles tipos que puede tener a o asociación del
‘+’ con la suma.

Durante la implementación del lenguaje: el conjunto de valores que puede tomar a (i.e. el rango
de int).

Durante la compilación del programa: el tipo de a.

Durante la carga de un programa, la asociación de las variables y el código a sus direcciones


absolutas en memoria.

Durante la invocación un método: la asociación de las variables de los parámetros a los argu-
mentos.

El scope de un binding es el conjunto de instrucciones en donde ese binding está activo. Que esté activo
significa que la entidad podrı́a ser accedida. Sin embargo, un binding puede ser ocultado por otro
binding (por ejemplo, una variable local oculta a una global con el mismo nombre).
Un binding es visible cuando está en su scope y no está oculto (Visibilidad 6= Scope).
El tiempo de vida es la duración de un binding en la ejecución de un programa, desde su creación
hasta su destrucción.

Variables globales: duran todo el programa.

Variables locales: se crean en la invocación del método y desaparecen al salir.

Variables estáticas: duran todo el programa.

Tiempo de vida 6= Scope: las variables estáticas están vigentes durante todo el programa pero sólo
pueden ser accedidas en el scope del método.
El tiempo de vida está más relacionado con el objeto en sı́. En cambio, el scope está más relacionado
con el nombre del objeto.

Página 1 de 4
Paradigmas de Lenguajes de Programación

2. Tipos de bindings

2.1. Binding estático

Se realiza en tiempo de compilación. Es más eficiente, pero menos flexible. Por ejemplo, los bindings
determinados en tiempo de compilación:

const n=3;

int c;

2.2. Binding dinámico

Se realiza en tiempo de ejecución. Es menos eficiente, pero más flexible. Por ejemplo, la herencia entre
objetos; las clases Value y Variable heredan de Expresion:

void imprimir(Expresion E) {
system.println( E.value() );
}

public void main() {


Value valor = new Value(3);
Variable var = new Variable("X",20);
imprimir(valor);
imprimir(var);
}

Página 2 de 4
Paradigmas de Lenguajes de Programación

3. Caracterı́sticas del scope en binding estático

Se puede determinar el scope que cada binding (variable) mirando el texto del programa (en tiempo
de compilación). Existen diferentes variantes de scope:

Estructura flat: cada método define un nuevo scope independiente (Ej. C, Java).

Estructura anidada: pueden definirse métodos dentro de métodos. El segundo posee el scope del
primero más sus nuevos bindings (Ej. Pascal, Java: Clases anidadas).

Bloques: Se puede definir un scope para un conjunto de instrucciones (Ej. C++, Java pueden
declarar variables en medio del código).

FLAT ANIDADA BLOQUES

int a = 5, b = 6;
int a = 5, b = 6; int a = 5, b = 6;
void P(int d) {
void Q() { void Q() {
int c;
int a = 1; int a = 1;
c = a + b;
int c; int c;
}
c = a + b; {
void Q() {
void P(int d) { int b = 3;
int a = 1;
int c; c = a + b;
int c;
c = a + b; }
c = a + b;
} c = a + b;
}
} }
void main() {
void main() { void main() {
int a = 11;
int a = 11; int a = 11;
P(2);
Q(); Q();
Q();
} }
}

El binding de a con 11 no es El binding de a con 11 no es b es redeclarada y ocultada en el


tomado en cuenta por P y Q, ya tomado en cuenta por P y Q, ya bloque y vale 3, a y c valen igual
que el scope de este binding es que el scope de este binding es que en Q. Al final del bloque, b
sólo main. sólo main. vuelve a valer 6.
En P, a y b son accesibles porque En Q, a es ocultada por su de-
son globales y valen 5 y 6. c y d claración local y vale 1, b es
son locales. accesible por ser global y vale 6.
En Q, a es ocultada por su de- En P, a vale 1 porque la toma de
claración local y vale 1. Q, y b vale 6 por ser global.

Página 3 de 4
Paradigmas de Lenguajes de Programación

4. Caracterı́sticas del scope en binding dinámico

El scope depende de la secuencia de llamadas a métodos del programa. No se puede saber de antemano
ni el valor ni el tipo de una variable, si no está declarada localmente.
Ejemplo:

int a = 5, b = 6;
void P(int d) {
int c;
c = a + b;
}
void Q() {
int a=1;
c = a + b + c;
}
void main() {
int a = 2;
int c = 4;
P(2);
Q();
}

Ahora en P, a vale 2 por ser llamado desde main, en Q a es redefinido y vale 1. c vale 1+6+4. Notar
que con scope estático darı́a error de tipos, ya que c no está declarada en Q.

Página 4 de 4

Das könnte Ihnen auch gefallen