LPR grupo 25

Thursday, January 11, 2007

DIFERENCIAS Y SIMILITUDES

DIFERENCIAS:


  • Java sólo puede usar los parámetros formales por referencia.

  • En Java toda función es dependiente de una clase, está codificada en una clase, no se permiten funciones globales y datos globales como en Pascal.

  • La colisión de nombres en Java no existe si las funciones pertenecen a paquetes diferentes.

  • Java sólo dispone de funciones. No dispone de Procedimientos.

  • En Java todos los datos son de E/S. En Pascal existen de Salida, de Entrada y de Entrada/Salida.

  • Pascal no puede devolver datos complejos como arrays en las funciones. Para ello necesita un Procedimiento (Procedure). Java por el contrario sí que tiene esta posibilidad implementada.

  • En Java, para que dos funciones estén sobrecargadas, tienen que diferir en el tipo devuelto y en algo más (ya sea número de parámetros, orden de los mismos o su tipo). En pascal es suficiente con el tipo devuelto.

  • En Java no es necesario declarar la cabecera de un método porque la comprobación de tipos se hace en tiempo de ejecución.

  • Java no permite pasar métodos como argumentos de otros métodos. Pascal por el contrario sí, siempre que el resultado de la función sea del mismo tipo que el argumento introducido.

  • El orden de las funciones al ser llamadas por otro módulo en Java es irrelevante. Debido a esto podremos llamar a una función que no esté definida aún (definida a posteriori). En Pascal esto no se permite porque toda función llamada tiene que estar implementada antes.

  • Java posee polimorfismo dinámico y estático y herencia en el lenguaje debido a su orientación a objetos. Esta es la razón por la que muchas implementaciones resultan más fáciles y se utiliza menos código. Pascal solo permite la sobrecarga de funciones

  • La comprobación de tipos, en los métodos de java se realiza en tiempo de ejecución mientras que en pascal se hace en tiempo de compilación.


SIMILITUDES:


  • Tanto en Java como en Pascal, se pueden sobrecargar funciones.

  • Dos o más funciones se pueden declarar con el mismo nombre si se distinguen en el número de parámetros o tipo.

  • Los dos lenguajes usan la abstracción funcional, aunque con diferentes matices, ya que los módulos o acciones reciben los parámetros de diferente manera y están codificados en diferentes lugares del código.

  • La sobrecarga del operador suma se realiza de igual manera en Pascal y Java.

  • Tanto Java como Pascal permiten el paso de parámetros en las funciones.

ABSTRACCIÓN FUNCIONAL EN PASCAL

La abstracción funcional en pascal consiste en crear procedimientos y funciones e invocarlos mediante un nombre donde se destaca qué hace la función y se ignora cómo lo hace. El usuario sólo necesita conocer la especificación de la abstracción (el qué) y puede ignorar el resto de los detalles (el cómo).

Los procedimientos y funciones son módulos, pero entre ellos hay dos diferencias a destacar:

• Las funciones siempre devuelven un valor al programa que las invocó.
• Para llamar a un procedimiento se escribe su nombre en el cuerpo del programa, y si los necesita, se incluyen los parámetros entre paréntesis. Para invocar una función es necesario hacerlo en una expresión.

Para que los módulos ( funciones y procedimientos ) se comuniquen con el programa que los llama o invoca necesitamos los parametros. Existen dos tipos de parámetros: por valor o por referencia. Los parámetros por valor tiene dicho nombre porque lo que recibe el subprograma no son más que copias de los valores de los datos que el programa invocador le pasa. Por tanto si en el procedimiento modificamos alguno de estos valores, los datos originales permaneceran inalterados. En cambio, en los parámetros por referencia lo que se pasa al procedimiento son los datos en sí. Y si éste los modifica, los cambios permanecerán una vez que la ejecución vuelva al módulo que invocó al procedimiento. Se utilizan para obtener valores de los cálculos que haga un subprograma.

Pascal permite el paso de módulos (funciónes o procedimientos) como parámetro de otro módulo, es decir, una fución puede ser a su vez un parámetro de otra función o procedimiento, y como cualquier parámetro se debe especificar el tipo de dato que corresponda.Para Pascal dos módulos son del mismo tipo solamente si ambos tienen el mismo número de parámetros, dichos parámetros son del mismo tipo, y en el caso de una función ambos devuelven el mismo tipo de dato.

A pesar de esto que acabamos de exponer, existen algunas restricciones. Aquí entra en juego el
denominado ámbito de un módulo, que se puede definir como el conjunto de módulos que les está permitido llamar a dicho módulo. Para poder evitar los errores que puede causar esto, la principal recomendación es la programación modular aunque también existen algunas palabras reservadas como forward que permiten “engañar” al programa.

Al hablar de módulos, deberíamos destacar también el concepto de recursividad, que consiste en
aplicar una función como parte de la definición de esa misma función. Dentro de la abstracción funcional también podemos realizar una breve definición sobre los tipos abstractos de datos, ya que hacen una fuerte referencia a la independencia en la representación, que al final tiene
bastante que ver con la definición de abstracción funcional.

La abstracción de datos consiste en ocultar las características de un dato y obviarlas, de manera que solamente utilizamos el nombre del objeto en nuestro programa. En resumen, podemos decir que la abstracción tiene como principal característica, como su definición indica, la importancia de saber lo qué se utiliza sin importar el cómo se utiliza. Aplicando esto a funciones y procedimientos en pascal obtenemos una explicación aproximada de qué es la abstracción funcional.

Monday, November 13, 2006

Pregunta c)

Indica 4 conceptos que sean propios del paradigma declarativo (lógico, funcional o lógico funcional). Incluye una breve explicación de su significado. Teneis que elegir los que considereis mas importantes.


Los lenguajes declarativos facilitan la escritura de relaciones y funciones y en ellos no se hacen nunca asignaciones a variables. Están considerados como “de más alto nivel”, ya que un programador declarativo trabaja con conceptos, más que con localizaciones dentro de la propia máquina, es decir, está basado en el pensamiento humano y las matemáticas; y más alejado del modelo de ordenador.

El estilo declarativo se caracteriza por un conjunto de aspectos, los cuales se entienden mejor al citarlos y con ello describir las diferencias que los separan de otros paradigmas:
  • Los lenguajes declarativos están orientados a buscar la solución del problema, sin preocuparse por la forma de llegar a ello; es decir, el programador debeconcentrarse en la lógica del algoritmo, más que en el control de la secuencia.
  • Los programas están formados por un conjunto de definiciones o ecuaciones, las cuales describen lo que debe ser calculado, no en sí la forma de hacerlo.
  • Las variables sólo pueden tener asignado un solo valor a lo largo de la ejecución del programa, lo cual implica que no puede existir asignación destructiva. Debido a esto, cobra especial importancia el uso del anidamiento y la recursividad.
  • Las listas representan la estructura fundamental de datos.
  • El orden de la ejecución no resulta importante debido a que no existen efectos colaterales; es decir, que al calcular un valor, resulta imposible afectar el cálculo de otros y con esto se puede afirmar que cualquier secuencia de ejecución deberá de conducir al mismo resultado.
  • Las expresiones o definiciones pueden ser usadas como valores y por lo tanto se
    pueden tratar como argumentos de otras definiciones.

  • El control de la ejecución no es responsabilidad del programador

Después de haber hablado un poco sobre los lenguajes declarativos y conocer un poco por encima sus caracteristicas destacaremos los siguientes conceptos básicos:

EVALUACIÓN PEREZOSA: Al utilizar esta técnica se escoje siempre el redex mas externo ( "outermost"). Esto proporciona ciertas ventajas como concebir cada parte del problema de forma separada, proporciona cohesión ( no tiene que ser programada) , reutilización de funciones, eficiencia ( se ahorra trabajo) , es especialmente útil en problemas del tipo generar solución - comprobar si es válida ...

ORDEN SUPERIOR: Es un nuevo paso de abstracción. Su idea fundamental es tratar las funciones como datos del lenguaje de manera que pueden usarse en los programas como los otros datos. Esto supone funciones como argumento de otras funciones , funciones que producen funciones como resultado , estructuras de datos con funciones como componentes ...

INFERENCIA DE TIPOS: Este concepto está basado en la capacidad de deducir el tipo de una expresión a partir de la sintaxis. El compilador realiza un analisis estático del programa a partir de las funciones previas, y así , el tipo de las funciones es reconstruído.

TRANSPARENCIA REFERENCIAL: Como los programas son expresiones matemáticas, es posible sustituir variables por valores, lo que permite manipular los programas como ecuaciones. Una expresión siempre proporciona el mismo resultado, es decir, es evaluada, siempre, del mismo modo. Esto no es cierto en los lenguajes imperativos donde pueden existir efectos laterales. Gracias a la transparencia referencial podemos usar la operación de sustitución: la aplicación de una función se puede sustituir por su definición. Por ejemplo:
par(doble(2*5))=par(doble 10)=par(2*10)=par(20)=true.

Pregunta b)

Indica 4 conceptos que sean propios del paradigma de Orientación a Objetos. Incluye una breve explicación de su significado. Teneis que elegir los que considereis mas importantes.




La Programación Orientada a Objetos (POO u OOP según siglas en inglés) es un paradigma de programación que define los programas en términos de "clases de objetos", objetos que son entidades que combinan estado (es decir, datos), comportamiento (esto es, procedimientos o métodos) e identidad (propiedad del objeto que lo diferencia del resto). La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar.


Los programadores que emplean lenguajes orientados a objetos definen objetos con datos y métodos y después envían mensajes a los objetos diciendo qué realicen esos métodos en sí mismos. Esto difiere de los lenguajes imperativos tradicionales, en los que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. Los programadores de lenguajes imperativos escriben funciones y después les pasan datos.


Dicho esto hay que señalar algunos conceptos básicos de este tipo de programación, de entre los cuales destacan:


  • Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad ("métodos"). Corresponden a los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa).

  • Método: algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.

  • Atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto, y cuyo valor puede ser alterado por la ejecución de algún método.

Wednesday, November 08, 2006

FINALIDAD, GRUPO Y MIEMBROS

Este blog se ha creado para la entrega de un trabajo de la asignatura Lenguajes de programación (Curso 3º de Ingeniería Técnica en Informática de Gestión de la universidad de Vigo). Los autores del trabajo pertenecemos al grupo 25 y nuestros nombres son:
  • David
  • Daniel Rebollo
  • Ferreira