¿Qué quiere decir Alcance?
*El alcance de una asociación es la región de un
programa en la cual dicha asociación está activa y visible.
*Se usa simplemente alcance para hacer referencia a la
región de un programa en la que un nombre o una
asociación tiene validez.
*Puede ser estático o dinámico
Dos significados diferentes según el contexto:
*Se usa simplemente alcance para hacer referencia a la región de un programa en la que un nombre o una asociación tiene validez.
*Puede ser estático o dinámico
Dos significados diferentes según el contexto:
• Para una asociación particular, su alcance es la región de un programa en la cual está activa y visible.
• Si consideramos más de una asociación, un alcance es una región de un programa de tamaño máximo en la cual no hay cambios en las asociaciones – típicamente un bloque
• Al ingresar – se elaboran las asociaciones que deben activarse.
• Al salir – se destruyen las asociaciones que deben desactivarse.
• Ambiente de Referencia – conjunto de asociaciones activas en un punto dado del programa.
• Calculado usando reglas de Alcance Estático o Dinámico.
• Mantenido usando las técnicas de almacenamiento global o local que estudiamos en la clase pasada.
¿Qué puede verse y dónde?
Globales – dentro de todo el módulo o programa.
• Locales – dentro del procedimiento o bloque que las contiene.
• De “afuera hacia adentro”, hay visibilidad.
¿Y cómo puede ser útil?
Simplifica la adaptación de rutinas en algunos casos: en lugar de
pasar argumentos, las rutinas pueden usar variables que sean
controladas por alcance dinámico.
• Ese problema se puede resolver sin usar alcance dinámico:
• Usando polimorfismo con parámetros por defecto.
• Usando varias rutinas con parámetros diferentes.
• Se puede usar una variable global/local estática, salvarla, poner el valor
nuevo, llamar a la rutina y restaurarla después.
• Ese problema se puede resolver sin usar alcance dinámico:
• Usando polimorfismo con parámetros por defecto.
• Usando varias rutinas con parámetros diferentes.
• Se puede usar una variable global/local estática, salvarla, poner el valor nuevo, llamar a la rutina y restaurarla después.
Tipos de alcances**
Alcance Estatico
Cambien llamado alcance lexicógrafo, el alcance se determina a tiempo de compilación y es independiente del flujo de ejecución.
Variedades simples
Cambien llamado alcance lexicógrafo, el alcance se determina a tiempo de compilación y es independiente del flujo de ejecución.
Variedades simples
Sólo variables globales (BASIC).
Globales y locales sin anidamiento (Fortran).
Variedades completas – cualquier lenguajes moderno.
El programador puede mirar el texto del programa,
y pensar en función de sustituciones de variables.Alcance Anidamiento
• De subrutinas, de bloques, de módulos, de clases. . .
• Regla del Bloque de Alcance más Cercano
• Todo nombre declarado en un alcance es visible en ese bloque y en cualquier bloque anidado dentro de él. . .
• . . . a menos que quede escondida por una declaración para el mismo nombre – un hueco en el alcance.
• Para determinar la asociación de un símbolo foo, buscamos desde el bloque que le contiene hacia los bloques exteriores hasta encontrar la declaración más cercana – nada nuevo. . .
• ¿Y los elementos predefinidos (built-in) del lenguaje?
Alcance Dinámico
• Calculado a tiempo de ejecución.
• Depende del orden de invocación de las subrutinas.
• La asociación actual para un nombre particular es la encontrada más recientemente durante la ejecución y que aún no haya sido destruida.
• El flujo de ejecución es impredecible – las asociaciones no pueden determinarse a tiempo de compilación.
• Diferir verificaciones semánticas a tiempo de ejecución.