Titulo en pruebas

Bienvenidos a nuestro blog dedicado a la asignatura de Lenguajes de Programación de la ESEI de Ourense

martes, noviembre 14, 2006

Pregunta A:paradigma Imperativo

Programación Imperativa:

La programación imperativa se resume en un conjunto de órdenes (operaciones) que se van ejecutando con un orden predefinido y determinado, cuya finalidad es la resolución de un problema. Estas presentan una linealidad aunque pueden producirse bucles y saltos. Las operaciones van cambiando de estado unos valores guardados, las variables. Aunque puede haber variaciones, este sería su “idea”. Sus conceptos a destacar serían:

Variables:
En la programación imperativa se producen los cambios de estado mencionados, que de alguna manera tenemos que almacenar. Esta información útil para la solución del problema, se guarda en un espacio de memoria. En este tipo de programación se predefine también como va ser la variable. Son los famosos tipos. Cuando declaramos una variable de tipo numérico “entero” en la que vamos a guardar la representación de una cantidad, lo que estamos haciendo es reservar memoria. Reservamos un espacio determinado de memoria y con una determinada capacidad que se corresponde al formato de cómo se representa la “cantidad numérica” en memoria.
El espacio quedara referenciado bajo un “nombre”, con el cual accederemos al contenido. Este nombre por tanto tendrá que ser único dentro de un mismo ámbito de variables.

Asignación:
Si tenemos nuestras variables, donde guardamos valores, de alguna manera tendremos que modificar el contenido. Esto se hace mediante la asignación, (a<-b) en la que el compilador analiza el contenido de la parte derecha de la asignación (b) y después de comprobar de que la parte de la derecha y la izquierda son “compatibles” y que se puede realizar la modificación, le asigna el valor de la expresión b a la variable a. Una de las comprobaciones es la de ver si el tipo resultante de expresión b, es compatible con el tipo de la variable a. De esta manera también se comprobaría la compatibilidad de rangos y dominios.

Procedimiento o función:
Podemos definirlo como un subprograma dentro de otro. Forma parte de la idea de que subdividimos el problema (“divide y vencerás”) para que su solución sea mas sencilla. Podemos que decir que se “delegan” operaciones a estos trozos de código. Lo que se hace es pasarle una serie de parámetros (variables) con una “llamada”. La función o procedimiento actúa sobre ellos y nos devuelve un resultado (valor) en forma de variable.


Efectos laterales:
Es uno de los problemas de la programación imperativa que por su estructura, puede provocar que una variable sea modificada por una función o procedimiento que no queremos. Es el problema de las variables globales, que pueden ser modificadas por más de un procedimiento. Frente a ello se declaran variables dentro del procedimiento (locales), a las que sólo pueden acceder las funciones o procedimientos que queramos. Es decir, restringimos su ámbito, para que solo sea accesible por las operaciones que deseamos. De alguna manera encapsulamos nuestro programa para mayor seguridad.

Bibliografia:
http://www.answers.com/topic/imperative-programming
http://atc1.aut.uah.es/~i2/transparencias/capitulo_7.pdf
http://www.lcc.uma.es/~jmmb/declarativa/Paradigmas.pdf
http://www.math.uaa.alaska.edu/~afkjm/cs331/handouts/imperative.pdf
http://moonbase.wwc.edu/~aabyan/PLBook/HTML/Imperative.html

lunes, noviembre 13, 2006

Pregunta C: Paradigma Declarativo

Funciones de Orden Superior
Son funciones que se aplican sobre otras funciones, es decir, una función puede ser el valor de una expresión, pasarse como argumento o colocarse en una estructura de datos. Esto favorece el uso de recursividad y anidamiento, permitiendo un desarrollo más eficiente de aplicaciones.

Transparencia referencial
La transparencia referencial se refiere a la no existencia de efectos laterales por asignaciones destructivas. Cuando una expresión 'e' es sustituida por un valor 'v', siendo 'v' el resultado de evaluar 'e', la semántica del programa no se altera. La transparencia referencial es muy útil a la hora de modificar un programa, ya que no tenemos que preocuparnos porque las modificaciones que hagamos en una parte del mismo afecten los cálculos que se hacen en otras. También es muy poderosa a la hora de verificar un programa (demostrar matemáticamente que cumple la especificación), ya que podemos utilizar propiedades ya demostradas de todas las subexpresiones que constituyen una expresión y que valen en cualquier contexto.Esta propiedad no se da en lenguajes imperativos.

Inferencia de Tipos
La inferencia de tipos asigna automáticamente un tipo de dato a una función sin necesidad de que el programador lo describa. El tipo de las funciones es reconstruido a partir de un analisis estático del programa realizado por el compilador del lenguaje, a partir de las definiciones previas y del uso de las variables en el cuerpo de las funciones.

Evaluación Perezosa
La evaluación perezosa es raramente implementada en programación imperativa. Propone evaluar los argumentos sólo si es necesario y sólo una vez (call-by-nedd). Ahorra trabajo no necesario aumentando la eficiencia.


Bibliografia:
http://es.wikipedia.org/wiki/Paradigma_declarativo
http://www.lcc.uma.es/~jmmb/declarativa/ApuntesPF2004/ProgFunIV.pdf