Beruflich Dokumente
Kultur Dokumente
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 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.
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
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;
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() );
}
Página 2 de 4
Paradigmas de Lenguajes de Programación
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).
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();
} }
}
Página 3 de 4
Paradigmas de Lenguajes de Programación
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