Alcance Dinámico
• La Asociación Actual para un Nombre dado es
el encontrado recientemente durante la
ejecución, y no a sido destruido aun por el
retornado en este alcance.
• Nota: Los identificadores libres del cuerpo de un subprograma se
interpreta en el entorno de la llamada al subprograma.
Ejemplo Dinámico Alcance
¿Que imprime el programa?
En Alcance estático
1 sin tener en cuenta el
valor leído
Sobre Alcance Dinámico
2: si valor leído >0
1: si valor leído <= 0
Alcance dinámico es usualmente
una mala idea
Implementación de Alcance Estático:
Tabla de Símbolos
• Tabla de Símbolo como Diccionario:
maps names to information the compiler
knows about them (nro. alcance, tipo).
• Alcance Representación
– entre_alcance y deje_alcance ops
– Cada Alcance tiene un Nro. Serial
– Pila de Alcance: Alcance en el ambiente
de referencia actual.
• Numero de Alcance
• Si el Alcance esta cerrado
Hash
table
find the
error in
the figure!
Scope stack
2(T)
1(globals)
4(P1)
3(M)
5(P2)
hardcopy
Buscando un Nombre
• Examina la cadena de Hash buscando el
nombre.
• Para cada pareja de entrada , examina
abajo la pila del alcance para ver si su
alcance es visible
• Se hacen importaciones y exportaciones
visible fuera de su alcance normal
creando entradas adicionales para ellos,
con punto para las entradas reales,.
Algoritmo para la búsqueda de
operaciones de la tabla de símbolo
A-list
single stack of
bindings
Implementación de
alcance dinámico
Central reference tbl
POCO PROFUNDA Y
PROFUNDAS ASOCIACIONES
Cuando el Subprograma esta pasado como parámetro,
cuando es el limite del ambiente referenciado?
–
Poco profundo (shallow binding): cuando la rutina es
llamada.
–
Profunda (Deep binding): cuando la rutina es primero
pasada como parámetro.
Importante tanto en alcance dinámico como estático.
Ejemplo
Mejor apropiado para:
threshold: integer
older_than: profunda
(to get global threshold)
print_person: poco profunda
(to get locally set line_length)
(Asumiendo un alcance dinámico)
Cierre de Subrutinas
• En profundas asociaciones, un cierre es
un bulto de:
– Un ambiente referenciado.
– Referencia para la Subrutina.
• La asociación profunda es:
– Una opción en lenguajes de alcance
dinámico.
– Predeterminado en lenguaje de alcance
estático.
Primera y Segunda subrutina
de la Clase
• Subrutinas de primera clase
– Pasadas como parámetro.
– Retornada de una Subrutina.
– Asignada dentro de una Variable.
• Subrutinas de segunda clase
– Pasada como parámetro solamente.
• Subrutinas de tercera clase
– Ninguna de las anteriores
SOBRECARGA
• Un nombre que puede referirse a más de un
objeto en un alcance dado se llama
Sobrecarga.
• Las reglas semánticas por sobrecarga requieren
que el contexto específico de cada uso
individual del nombre contiene pistas suficientes
para deducir su significando.
SOBRECARGA
• En muchos Lenguajes dos o más funciones
pueden compartir el mismo nombre en tanto en
cuanto difiera el tipo de sus argumentos o el
número de sus argumentos o ambos. Cuando
comparten el mismo nombre y realizan
operaciones distintas se dice que están
sobrecargadas.
• Para conseguir la Sobrecarga simplemente hay
que declarar y definir todas las versiones
requeridas.
SOBRECARGA
• Sobrecarga operadores aritméticos
Si se tiene un objeto que representa numero
complejo, para sumar 2 de este tipo es
necesario sobrecargar el operador + como
cualquier otro tipo de datos básicos.
Nota:
La sobrecarga es especialmente útil cuando nuestro modelo nos
obliga a emplear nombres similares para procedimientos que operan
con diferentes tipos de datos.
COERCIÓN
• La coerción es un proceso en el que el
compilador automáticamente convierte un
objeto de un tipo dentro de un objeto de
otro tipo cuando se usa en un contexto en
el que el segundo tipo espera.
var x = 2000; // a Number .
var y = "Hello"; // A string.
x = x + y; // the number is coerced into a string.
Subrutinas de parámetros con
polimorfismos
• Son aquellas funciones que son escritas
para soportar cualquier tipo de datos de
entradas.
• En muchas ocasiones son confundidas
con subrutinas genéricas, cuando estas
ultimas son implementadas con
Sobrecarga.
SUBRUTINAS CON PARÁMETROS POLIMORFISMOS
Java
void Empilar (Object Objeto)
{
Stack.add(Objecto);
}
SUBRUTINAS GENÉRICA CON SOBRECARGA
Java
void Empilar (String Objeto)
{
Stack.add( (Object) Objecto); // Casting a Object
}
void Empilar (Integer Objeto)
{
Stack.add((Object) Objecto); // Casting a Object
}
…
Resumen
• La sobrecarga es útil cuando nuestro modelo
nos obliga a emplear nombres similares para
procedimientos que operan con diferentes tipos
de datos.
• La Coerción es una ventaja que poseen muchos
lenguajes de programación que permiten
realizar casting automáticos en tiempo de
compilación.
• La Subrutinas con parámetros polimorficos
permite resolver problemas de subrutinas con
sobrecargas.
Descargar

Clase03