Grupo 14 LPR

jueves, enero 11, 2007

Similitudes y diferencias entre java y pascal

Similitudes

  1. Ambos permiten utilizar la abstraccion funcional
  2. El numero, tipo y orden de los parametros formales y reales ha de ser el mismo
  3. Se pueden sobrecargar subprogramas
  4. Ambos lenguajes soportan el paso de parametros a los subprogramas
  5. No se pueden emplear valores por defectos para parametros formales
  6. Ambos lenguajes permiten el uso de llamadas recursivas
  7. En ambos se pueden producir efectos laterales
  8. El operador + esta sobrecargado de la misma manera en ambos
Diferencias
  1. Java es un lenguaje de programacion orientada a objetos, Pascal es un lenguaje declarativo
  2. Java tiene implementadas las caracteristicas de la programacion orientada a objetos: Herencia, Polimorfismo, Clases, Objetos...
  3. Java no permite el uso de subprogramas globales, es mas, deben estar dentro de una clase
  4. Java usa como subprogramas metodos, Pascal procedimientos y funciones
  5. Pascal permite el paso de subprogramas como argumento de otros
  6. El ambito de variables y subprogramas es diferente en pascal y java
  7. Java permite la devolucion de datos complejos en sus subprogramas, Pascal solo tipos de datos simples
  8. En pascal la sobrecarga de funciones se puede hacer de manera que cambie el tipo devuelto, en Java tiene que cambiar algo mas
  9. Pascal dispone de directivas de preprocesador
  10. Java esta mas orientado a la abstraccion de datos, Pascal a la procedural
  11. Java usa comprobacion de tipos dinamica, Pascal usa comprobacion estatica
Bibliografia

Abstracción Funcional en Pascal

La abstracción consiste en la capacidad de examinar algo sin preocuparse de los detalles internos. En Pascal está presente la abstracción de datos, las estructuras de datos y los tipos de datos son un ejemplo de abstracción. Los procedimientos y las funciones son otro ejemplo. Pascal soporta sus propios tipos abstractos de datos (TAD), para su implementación es fundamental disponer de mecanismos que permitan encapsular el tipo de dato y sus operaciones, y ocultar la información al programador-usuario.
Entre los mecanismos con los que se puede conseguir la abstracción funcional en este lenguaje es mediante la implementación de unidades (Units) ; Las cuales son grupos de funciones o procedimientos compilados que pueden ser llamados y utilizados desde cualquier programa en Turbo Pascal sin necesidad de escribirlos de nuevo. Las unidades no son ejecutables por si solas, dependen del programa que las llama para poder realizar su función.
El mecanismo por excelencia de la abstracción funcional es la implementación de una aplicación mediante el uso de módulos, pudiendo definirse como una función o procedimiento. En este lenguaje en concreto el paso de parámetros a los mismos puede ser por valor o referencia. Para identificar que un parámetro se pasa por valor se le debe anteponer var.

miércoles, enero 10, 2007

Abstracción Funcional en Java

La abstracción funcional en Java se realiza en los métodos que se definen en las distintas clases de cada aplicación. Estando todo esto especialmente facilitado debido a que el mismo paradigma en el que esta basado este lenguaje implica ya por definición la abstracción en todos los sentidos posibles, es decir tanto en la de los propios tipos de datos creados por el programador como en las distintas funciones (métodos) que éste presente. Y a la vez el propio encapsulamiento que proporcionan las clases obliga de por si a que se realice la ocultación de información que también exige la abstracción.

Es para lograr la abstracción funcional en este lenguaje (como en el ejemplo de los TAD's) que se pueden sobrecargar los distintos métodos logrando así poder realizar una implementación de acorde con lo exigido por el problema a resolver y distintas implementaciones si es que el problema lo determina. A su vez pudiéndose hacer, debido a la obligatoriedad de la implementación de clases, lo que limita las llamadas a los distintos métodos de un objeto a las características del mismo; lo que también se puede lograr gracias a la herencia.

Con los diferentes modificadores que se le pueden asociar a los métodos se complementa lo anterior, incrementando la ocultación de su implementación (como con el private, protected...) y permitiendo a su vez crear las interfaces (como con public...), que es lo que si se quiere dejar ver al usuario.


En este lenguaje todo parámetro que se pasa a una función se realiza por valor-resultado haciéndose siempre una copia de los parámetros que se estén utilizando y al acabar la ejecución del método se modifica el valor del mismo si se ha modificado en el método que lo utilizo.

lunes, noviembre 27, 2006

Preliminares al debate (I)

Selección de competencias profesionales:

En base al libro blanco de informática he seleccionado las siguientes competencias que creo que son las que más tienen que ver con la asignatura de LPR:


Entre las competencias transversales:

  • Aprendizaje autónomo: debido, dentro de todo, al cambio en la metodología de enseñanza de la asignatura en cuestión (Bolonia).
  • Capacidad de gestión de la información: ya que se han tenido que realizar prácticas relacionadas con la búsqueda de información.
  • Capacidad de análisis y síntesis: al igual que en la competencia anterior; debido a las prácticas realizadas y en realización en las que se ha de seleccionar información y ponerla exponerla, lo que implica su síntesis y análisis.
  • Conocimientos de informática relativas al ámbito de estudio

Y entre las competencias especificas:

  • Programación: por la implicación que tuvo esta asignatura en la adquisición de conocimientos en la programación en un nuevo lenguaje y paradigma (Curry) y por la adquisición de nuevos conocimientos en este ámbito.
  • Visión comercial y empresarial: ya que se realizarán prácticas relacionadas con ofertas de trabajo en la actualidad al igual que en los conocimientos informáticos que en ellas se piden.
  • Capacidad de entender y evaluar especificaciones internas y externas: debido a que en toda asignatura de programación se potencia esta capacidad; ya que, por ejemplo, en los enunciados de las prácticas siempre se encuentra alguna.
  • Conocimiento de productos tecnológicos y tendencias de la tecnología, asociados al segmento del mercado: debido a prácticas realizadas y aún por realizar, en las que se estudian las tecnologías más utilizadas en estos momentos en el "mundo" empresarial.

lunes, noviembre 13, 2006

Paradigma declarativo

La programación declarativa representa otra forma de entender la programación. El programador en vez de enseñarle al ordenador a resolver algo indicándole los pasos a seguir le da las características de la solución para que la encuentre aplicando reglas de inferencia o evaluando ecuaciones.

A lo largo de la ejecución del programa las variables solo podrán tener un único valor, por esto es muy importante el concepto de recursividad: forma de solucionar un problema encontrando la solución de ese mismo problema simplificándolo sucesivamente hasta llegar a un punto trivial en el cual conocemos la respuesta. Una función, método o procedimiento recursivos son aquellos que se invocan a si mismos

http://es.wikipedia.org/wiki/Algoritmo_recursivo
http://es.wikipedia.org/wiki/Recursividad

La estructura fundamental de almacenamiento de datos es la
lista: estructura de datos que consta de dos argumentos, el primero, llamado cabeza, es un elemento y el segundo, llamado resto, es una lista, también puede ser que no tenga ningún argumento, con lo cual estaríamos ante una lista vacía

http://www.ilustrados.com/publicaciones/EEVZuAVVFyqAegcYul.php
http://www.ual.es/%7Ejalmen/prolog2005.pdf

La programación declarativa tiene dos grandes ramas: la programación lógica y la programación funcional.

Programación lógica:
se basa en definir como ha de ser la solución al problema, deduciendo las soluciones mediante las condiciones dadas. En programación lógica se trabaja de manera descriptiva indicando relaciones entre elementos. La idea principal es Algoritmo= Lógica+Control, siendo la lógica el conocimiento y el control determinadas reglas de inferencia

http://www.ual.es/%7Ejalmen/prolog2005.pdf
http://www.ilustrados.com/publicaciones/EEVZuAVVFyqAegcYul.php

Programacion funcional: tipo de programación declarativa basada en el uso de funciones matemáticas. Estas funciones no son los subprogramas de los lenguajes declarativos, sino que son funciones matemáticas por completo. No existe el concepto de asignación así que la recursividad cobra un papel muy importante. Hay lenguajes que son híbridos con características de los lenguajes imperativos como las secuencias de instrucciones o la asignación de variables

http://www.ilustrados.com/publicaciones/EEVZuAVVFyqAegcYul.php

Paradigma imperativo

1. Concepto de celda de memoria ("variable") para almacenar valores. El componente principal de la arquitectura es la memoria, compuesto por un gran número de celdas donde se almacenan los datos. Las celdas tienen nombre que las referencian, y sobre los que se producen efectos de lado y definiciones de alias.

2. Operaciones de asignación. Estrechamente ligado a la arquitectura de la memoria, se encuentra la idea de que cada valor calculado debe ser "almacenado", es decir asignado a una celda. Esta es la razón de la importancia de la sentencia de asignación en el paradigma imperativo. Las nociones de celda de memoria y asignación en bajo nivel, se tienden a todos los lenguajes de programación.

3. Función: Se define como función a aquella acción con nombre que:

  • Tenga uno o más parámetros exclusivamente de entrada.
  • Tenga un solo parámetro exclusivamente de salida.
  • Y tal que todos los parámetros de entrada sean necesarios y suficientes para determinar el valor del parámetros de salida.

4. Recursividad: Un algoritmo recursivo incluye, por definición, instrucciones que consisten en ejecutar el mismo algoritmo a la que se denominará "llamadas recursivas" es decir, llamadas a sí mismo.

BIBLIOGRAFIA

  1. Bálcazar, J.L. (1993) Programación metódica. McGraw-Hill

miércoles, noviembre 08, 2006

Programacion Orientada a Objetos

La programación Orientada a Objetos es un paradigma de programación que surgió primeramente en los 60's. Este "estilo" de programación se centra; como se puede ver con su propio nombre, en los objetos; que son como un TAD (Tipo Abstracto de Datos) y cuya definición se verá más adelante.
En sí este paradigma se basa en la percepción de los problemas a resolver, de una forma más abstracta que el resto de los paradigmas o de una manera mas orientada a la vida real, tratando de dividir cada problema en las distintas entidades del dominio del mismo.

Entre los conceptos más importantes que se pueden ver al trabajar con este tipo de paradigma se encuentran:


  1. Clase: Es la conglomeración o especificación de las distintas características de algo. Esta conformada por sus atributos y por su comportamiento (métodos o funciones que puede realizar). Como por ejemplo si se considerara la especificación de un coche, se pueden identificar como atributos sus características: la marca o si va con gasolina o con diesel entre otras y como su comportamiento el poder encenderse, apagarse o encenderle las luces.
  2. Objeto: Es la instanciación de una clase, es decir, pertenece a una clase; ya que puede realizar las mismas funciones que están especificadas en ella pero que posee unas características propias que le distinguen de otro que también sea de la misma clase. Como por ejemplo siguiendo con el ejemplo de los coches dos objetos pertenecientes a esa clase serían un Renault y otro un Ford.
  3. Encapsulación: Esta es una característica muy importante en este paradigma, y es la forma que tiene de ocultar como funciona o esta implementada una clase al resto del programa, es decir, a los objetos que utilizan sus métodos; lo que también implica la utilización de las interfaces (parte visible de una especificación); para justamente delimitar que va a ser visible por las partes externas a la clase definida. Por ejemplo al conductor no tiene porque interesarle como se encienden las luces del coche, sino simplemente que se enciendan.
  4. Herencia: Este concepto se refiere a la posibilidad de que ciertas clase puedan tener unas características como "predeterminadas"; como por ejemplo si tuviéramos la clase vehículo podríamos definirle como atributos el numero de ruedas y si de esta súper-clase heredara la clase bicicleta, que también tiene ruedas, al igual que otra clase que también heredara de vehículo, que podría ser la clase coche; de esta manera no interesaría poner el atributo que identificara si el vehículo utiliza gasolina o diesel ya que una no utiliza ningún tipo de combustible y en cambio un coche si, con lo cual será luego en cada subclase donde se pondrán las características que diferencian dos tipos de vehículos, pero en vehículo se pondrán aquellas que son iguales como el número de ruedas que tienen o la marca. Pudiéndosele también, luego, agregar a cada subclase diferentes funciones que tampoco compartan como encenderse en el caso de un coche.

Aquí se presenta un diagrama para comprender mejor lo antes explicado:

Entre las fuentes utilizadas en la búsqueda de los conceptos anteriores están:

  • Wikipedia
  • Fundamentos de programación, algoritmos, estructuras de datos y objetos (3ª ed.) de Joyanes Aguilar, Luis Mcgraw-Hill
  • Google

Finalidades e Identificacion

Este Blog será utilizado como herramienta de aprendizaje para la asignatura de Lenguajes de Programación que se imparte en la Universidad de Vigo - Escuela Superior de Ingenieria Informatica (Orense, Spain).

Este Blog pertenece al grupo 14 de prácticas; y sus miembros son :

  • Eva
  • Leonardo
  • Diego