Titulo en pruebas

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

viernes, enero 12, 2007

Abstracción funcional en Java y Pascal

1. Java

En el lenguaje Java, toda sentencia ejecutable tiene que estar dentro de un método (función), que a su vez tiene que estar obligatoriamente dentro de una clase. Es puramente orientado a objetos. Si lo comparamos con C++ este sí que permite crear una función fuera de una clase.
La orientación a objetos por tanto, lleva consigo una encapsulación. Los métodos que se necesitan para manejar un objeto estarán incluidos en el.
Además podemos definir el ámbito de un subprograma con las palabras reservadas private, public y protected.
Tambien podemos especificar si un método se aplica a un objeto de la clase, o a la clase. Esto lo hacemos mediante static.

En Java podemos sobrecargar un método, es decir, declaramos dos subprogramas con el mismo nombre pero con distinto número de parámetros o simplemente con distinto tipo.

Lo que no puede sobrecargar el programador es un operador.

En java el paso de parámetros se realiza de distinta manera según sea para tipos primitivos u objetos:
Tipos primitivos: serían los tipos numéricos int y float, y otros como char y boolean. Ojo con String, que ya es una clase, no un tipo primitivo. En este caso Java pasará siempre los parámetros por valor.

Objetos: Conociendo Java se sabe que no existen punteros. Sin embargo, toda variable que no sea tipo primitivo, será una referencia a un espacio de memoria, y a la hora de pasar los parámetros siempre se hará por referencia. Por tanto en Java trabajaremos siempre con referencias en lo referido a objetos.

2. Pascal

Pascal es un lenguaje en el que nosotros podemos definir procedimientos y funciones (subprogramas). Su finalidad sería la de aligerar el contenido del cuerpo principal del programa dentro de su filosofía "divide y vencerás". Por ejemplo si una operación con múltiples operaciones se realiza a menudo, definimos un subprograma que nos realice ese trabajo cuando lo llamamos.

Dentro de los subprogramas de Pascal tenemos los tipos mencionados:

Función: Subprograma que devuelve o retorna un valor. El tipo de este valor ha de ser un tipo primitivo.

Procedimiento: Subprograma que no devuelve ningún valor.

El paso de parámetros por defecto en Pascal es por valor. Si queremos que el paso de parámetros sea por referencia lo tendremos que indicar. Existen dos palabras reservadas:

Const: Indica que se pasa el parámetro por referencia pero que no se puede modificar.
Var: Indica que se pasa por referencia y las modificaciones hechas dentro del subprograma, modificarán la variable.

En Pascal no se permite el polimorfismo de subprogramas.


3. Similitudes

Los dos lenguajes utilizan únicamente el paso de parámetros por valor y por referencia. Solamente de estas dos formas.

En los dos lenguajes, los subprogramas pueden devolvernos un resultado.

A un subprograma se le pueden pasar parámetros de entrada, de salida, o de entrada salida.

4. Diferencias

En Java, toda sentencia ejecutable tiene que estar dentro de un método y a su vez dentro de una clase. Pascal, al no ser un lenguaje orientado a objetos como Java, no contiene clases.

En Java podemos sobrecargar métodos, mientras que en Pascal no se pueden sobrecargar funciones ni procedimientos.

Pascal no permite el polimorfismo de subprogramas, pero Java sí lo permite.

En Java existen las interfaces que son un nivel mas de abstracción, que son como plantillas.

Los subprogramas de Java pueden devolver un tipo de dato no primitivo, Pascal no.

La comprobación de tipos en Java, se puede hacer en tiempo de ejecución.

En Java, el nombre de una variable no primitiva es una referencia. Por ello no podremos pasar los objetos por valor. Y los datos primitivos se pasaran por valor. En Pascal un dato se puede pasar por valor o por referencia sea cual sea el tipo.

Bilbliografia:
Apuntes de PROA,EDI y FP.
Wikipedia

Texto redactado por Madonnita, Pab, lolus y tycoty

jueves, diciembre 07, 2006

Competencias mas ligadas a la asignatura de Lenguajes de programación

Competencias transversales genéricas:
- Trabajo en equipo (Personal)
- Capacidad de organización y planificación (Instrumental)
- Adaptación a nuevas situaciones (Sistémica)
- Capacidad de análisis y síntesis (Instrumental)

Competencias específicas:
-
Programación
- Ingeniería de software
- Capacidad para entender y evaluar especificaciones internas y externas
-
Conocimiento de productos tecnológicos y tendencias de la tecnología, asociados al segmento del mercado

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