La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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.

Presentaciones similares


Presentación del tema: "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."— Transcripción de la presentación:

1 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. En un lenguaje con alcance dinámico, la asociación entre un nombre y un objeto depende del flujo de control en tiempo de ejecución, y en particular en donde la subrutina es llamada.

2 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 Como ejemplo de alcance dinámico, considere la figura: Si el alcance estaticos esta en efecto, entonce el programa imprime 1 Si el alcance dinamico esta en efecto, entonce el programa imprime 1 o 2. En el momento de compilación no se puede determinar el binding de la variable. Busca la variable más cercana que la llamo.

3 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 Para guardar huella de los nombres en alcance estático, un compilador confía en una abstracción de la data llamada tabla de simbolo. Tabla de Simbolo: por cada simbolo se sabe su interpretación. Las tablas estan relacionadas dentro de una pila. Un subprograma se empila encima de su padre.

4 Hash table Scope stack 2(T) 1(globals) 4(P1) 3(M) 5(P2) find the
error in the figure! 1(globals) 4(P1) La pila de alcance representa el ambiente de referencia de la sentencia en el procedimiento P2. 3(M) 5(P2)

5 Buscando un Nombre Examina la cadena de Hash buscando el nombre.
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,. Busco el Nombre en la tabla de Hash. Por cada nombre se revisa si esta en un alcance visible.

6 Algoritmo para la búsqueda de operaciones de la tabla de símbolo
Recorre la estructura para reconocer el binding activo de ese nombre.

7 Implementación de alcance dinámico
A-list Implementación de alcance dinámico single stack of bindings Implementación usando lista de asociaciones. La dos de las estructuras muestran el ambiente referenciado que puede tener efecto después que el programa main llama a Q y este llama a P. Central reference tbl

8 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. 2 posibles enlaces: - Poco profundo: Toma el binding cuando la subrutina es llamada. - Profunda: Toma el binding cuando la subrutina es pasada por primera vez como parametro.

9 Ejemplo Mejor apropiado para: older_than: profunda
(to get global threshold) print_person: poco profunda (to get locally set line_length) (Asumiendo un alcance dinámico) threshold: integer

10 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.

11 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

12 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.

13 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.

14 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.

15 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.

16 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.

17 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

18 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 ppt "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."

Presentaciones similares


Anuncios Google