Professional Documents
Culture Documents
Una estrategia que nos ayuda a estructurar sistemas de gran tamao es la modularidad, es
decir, dividir los sistemas de forma natural en partes coherentes, las cuales pueden ser
desarrolladas y mantenidas de forma separada.
Una estrategia para representar sistemas de forma computacional es ver los sistemas como
una coleccin de objetos los cuales pueden cambiar su comportamiento a travs del tiempo,
otra estrategia es concentrarse en el flujo de informacin que pasa a travs del sistema, tal
como un ingeniero elctrico observa la seal generada por un sistema.
El estado actual de un sistema se modela con las variables y los cambios en el estado son
asignados a esas variables.
3.2 El Ambiente
Una variable debe de alguna forma designar un lugar en el cual va a ser almacenada, en
nuestro modelo de evaluacin estos lugares son mantenidos en estructuras llamadas
ambientes.
Un ambiente es una secuencia de frames. Cada frame Es una tabla ( posiblemente vaca)
de enlaces los cuales asocian los nombres de las variables con sus correspondientes
valores.
Cada frame tambin apunta a un ambiente de cierre, a menos que el frame se ha
considerado global.
Como ejemplo vemos dos listas, x y Y, X tiene los valores de a b c y d, y la lista Y los
valores e y f, ahora evaluamos la expresin mutable (set-car! x y), la cual modifica la pareja
x reemplazandola por el valor de y. el resultado lo podemos observar en la figura 3.13
Compartir e Identidad:
Hay que tener cuidado cuando se realizan modificaciones en las estructuras ya que el
cambio se ver tambin en otras estructuras que compartan las partes modificadas.
Como se observa en la figura 3.18 vemos al principio una cola vaca, luego se insertan los
elementos a y b, Luego a es removido, se inserta c y d, y b removido.
Entonces una cola puede ser representada como una pareja de apuntadores front-ptr y
rear-ptr, los cuales indican, respectivamente, inicio y final de una lista
Las funciones digitales conectan cables que transportan seales de entrada a otros cables
de salida.
Podemos conectar funciones primitivas juntas para construir funciones ms complejas. Por
ejemplo, el circuito de medio-sumador consta de una compuerta OR, dos compuertas AND,
y un inversor. Se toman dos seales de entrada, A y B, y tiene dos seales de salida, S y C.
Para empezar a modelar el anterior circuito, debemos definir los procedimientos que
usaremos en la simulacin; Primero, definimos los cables, luego definimos las compuertas
asociando sus entradas y salidas.
Las funciones primitivas implementan las '' fuerzas '' por las cuales un cambio en la seal de
un cable influye en las seales en otros cables. Para crear estas funciones, usamos las
siguientes operaciones en los c
ables:
:
Asigna el procedimiento que debe ejecutarse siempre que la seal cambie de valor
Representacin de cables
Un cable en nuestra simulacin ser un objeto computacional con dos variables de estado
locales: un valor de seal (inicialmente tomado como 0) y una coleccin de procedimientos
que se ejecutarn cuando la seal cambie de valor.
Agenda
Vamos ahora a crear una estructura de datos llamada agenda en la cual se encontrar el
calendario de las cosas que hay que hacer en un procedimiento. Una agenda se compone
de segmentos de tiempo donde cada segmento
es un par que consiste en un nmero (el tiempo) y una cola que contiene los procedimientos
que estn programados para ser ejecutados durante ese segmento de tiempo. sta tendr
las siguientes operaciones:
Remueve el primer
item de la agenda
Agrega un
procedimiento a la agenda para ser ejecutado en un tiempo especifico
Una agenda se compone de segmentos de tiempo. Cada segmento de tiempo es un par que
consiste en un nmero (el tiempo) y una cola que contiene los procedimientos que estn
programados para ser ejecutados durante ese segmento de tiempo.
Los elementos primitivos del lenguaje son restricciones primitivas que indican que ciertas
relaciones mantienen entre las cantidades. Combinamos las restricciones mediante la
construccin de redes de restriccin, en las que las restricciones se unen mediante
conectores. Un conector es un objeto que contiene un valor que puede participar en una o
ms restricciones.
Por ejemplo, sabemos que la relacin entre las temperaturas de Fahrenheit y Celsius es
Dicha restriccin puede considerarse como una red que tiene un sumador, 2 multiplicadores
y restricciones constantes, vemos a la izquierda una caja multiplicadora con tres terminales,
etiquetados m1, m2 y p. que mantendrn la temperatura Celsius. donde estan unidos a una
constante w que tiene el valor de 9. P obliga a m1 y m2 a ser un producto, asi como S a a1 y
a2 a ser una suma A la derecha vemos el otro producto con la constante 5 que con el
sumador representa a los grados farenheit.
3.4 Concurrencia
z
Pero tambin, es apropiado dividir modelos computacionales en partes que
evolucionan separadamente y simultneamente. Incluso si los programas se van a
ejecutar en una computadora secuencial, la prctica de escribir programas como si
fueran a ejecutarse simultneamente obliga al programador a evitar restricciones de
temporizacin no necesarias y, por lo tanto, hace que los programas sean ms
modulares.
Para explicar un poco mejor vamos a suponer que tenemos una cuenta compartida de 100
dolares para Peter y Paul, Peter retira $ 10 y Paul retira $ 25 dejando $ 65 en la cuenta.
Dependiendo del orden de los dos retiros, la secuencia de saldos en la cuenta es $ 100 $ 90
$ 65 o $ 100 $ 75 $ 65. En una implementacin informtica del sistema bancario, esta
secuencia cambiante de saldos podra ser modelada mediante asignaciones sucesivas a un
saldo variable.
Un problema para el banco es determinar el saldo en caso de que ambas personas retiren al
tiempo, ya que puede generar inconsistencias en el manejo del dinero; para controlar esto
se utiliza la serializacion, ya que con sta podemos forzar a que un procedimiento solo
ocurra una vez, entonces si llega un nuevo proceso y este no ha terminado entonces este
fuerza a que espere mientras notifica su finalizacion.
Los flujos son una idea inteligente que permite usar manipulaciones de secuencias
sin incurrir en los costos de manipular secuencias como listas. Con los flujos
podemos lograr lo mejor de ambos mundos: Podemos formular programas
elegantemente como manipulaciones de secuencias, al tiempo que obtenemos la
eficiencia de la computacin incremental.
Los streams, pueden mitigar algunas de las complejidades del estado de modelacin.
Por ejemplo Si el tiempo es medido en pasos discretos, entonces podemos modelar una
funcin temporal como una secuencia (infinito posible);
Los streams son una idea inteligente que permite usar manipulaciones de secuencias sin
incurrir en los costos de estas. Con esto podemos formular programas elegantemente
Tambien tenemos streams infinitos como por ejemplo el generador de la serie de fibonacci
En la cual definimos los casos base y luego la serie determina los valores que siguen
mediante la secuencia dada.