jueves, 11 de enero de 2007

Abstracción Funcional

Las funciones se invocan para realizar una tarea, pero sin necesidad de saber cómo la llevan a cabo.
Una función es un subprograma con un nombre determinado, que realiza una tarea específica cuando es invocado y opcionalmente devuelve un resultado.
Las funciones usan una lista de parámetros que define:

  • Los datos que el llamante de la función pasa a la misma.
  • Los datos que la función devuelve al llamante (excepto el resultado).

Las funciones se utilizan como elemento de abstracción porque su comportamiento puede ser separado de su implementación.
La abstracción funcional está estrechamente ligada a las técnicas de diseño funcional descendente y a la programación estructurada.
La abstracción funcional permite llevar a cabo el concepto de modularidad:

  • Una función agrupa a un conjunto de instrucciones altamente cohesionadas.
  • Una función realiza una tarea específica.
  • Para usar una función no es necesario conocer su implementación.

Las funciones similares se agrupan en bibliotecas (clases en Java).
Los lenguajes de programación suelen proporcionarse con un conjunto estándar de bibliotecas en las que se definen funciones de uso común.

Abstracción Funcional en Java

La abstracción funcional en Java se consigue mediante métodos, que se encapsulan en clases.
Método: Módulo de una clase que lleva a cabo una determinada funcionalidad según los parámetros pasados y devolviendo un resultado si es necesario.
Parámetros: Producen modificaciones en el resultado o efectos del módulo según su valor. Los tipos primitivos se pasan siempre por valor, los objetos siempre por referencia.
Resultado: Devuelve información derivada de la funcionalidad del módulo. Los tipos primitivos se pasan siempre por valor, los objetos siempre por referencia.

Sobrecarga: Permite invocar distintos módulos con la misma llamada según el número o tipo de los parámetros de entrada.
Polimorfismo: Permite a un módulo aceptar parámetros de distintos tipos siempre que implementen una interfaz común.
Genericidad: Permite aplicar un módulo a distintos tipos de datos.

Recursividad: Produce métodos muy potentes con escasas líneas de código.

Abstracción Funcional en Pascal

La abstracción funcional consiste en crear procedimientos y funciones e invocarlos mediante su nombre, teniendo en cuenta únicamente lo que realiza y no como lo realiza.

Subprograma: Módulo que realiza una tarea determinada. Suelen ser llamadas a funciones o procedimientos.
Función: Calcula un resultado y lo devuelve (La función debe ser de un tipo de datos determinado, que será el tipo de datos del resultado obtenido).
Procedimiento: Realiza una tarea específica sin devolver nada.

Al invocar los subprogramas se les pueden pasar parámetros.
Parámetros actuales: Son los que aparecen en la invocación de un módulo.
Parámetros formales: Son los que aparecen el la declaración de un subprograma.
Paso de parámetros por valor: Se consideran variables locales (se crea una copia), por lo que los cambios realizados en el parámetro no afectan al valor del parámetro actual).
Paso de parámetros por referencia: Se consideran variables globales, por lo que los cambios en el parámetro afectarán al valor del parámetro actual.

Recursividad: Esto se consigue llamando a un subprograma desde el mismo subprograma, pero en cada llamada los parámetros actuales son distintos.
Sobrecarga: Para hacer una sobrecarga de funciones hay que declarar dos o más funciones con el mismo nombre pero cambiando los parámetros (sino daría error de compilación).

Diferencias


  • Java no utiliza ni procedimientos ni funciones, sin embargo aporta otro mecanismo más potente que son los métodos.
  • En Java todo método es dependiente de una clase, no se permiten funciones ni datos globales como en Pascal.
  • La colisión de nombres desaparece dependiendo del lugar de declaración del dato, ya que si pertenecen a paquetes diferentes no se producida dicha colisión. Sin embargo en pascal no existe ningún truco para solucionarlo.
  • Java permite el retorno de datos complejos en los métodos, mientras que pascal no.
  • 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. Debido a esto es necesario escribir prototipos de función/procedimiento en Pascal.
  • La sobrecarga de métodos en Java esta siempre sujeta a cambios en los parámetros formales, aunque se haya modificado el tipo devuelto. Pascal solo necesita modificar el tipo devuelto.
  • Java aporta polimorfismo dinámico y estático, además de la sobrecarga de métodos. Pascal solo aporta polimorfismo de funciones(sobrecarga de funciones)
  • En Pascal puedes declarar funciones anidadas mientras que en Java no.

Similitudes


  • Las funciones pueden ser sobrecargadas en ambos lenguajes.
  • Hay sobrecarga de operadores similares (operador “+”).
  • Ambos permiten pasarle parámetros a las funciones o procedimientos.
  • El comportamiento de las funciones es igual en ambos lenguajes.
  • En ambos se pueden producir efectos laterales por no usar adecuadamente las variables globales y locales.

martes, 5 de diciembre de 2006

Competencias ligadas a LPR

Competencias Transversales:

- Aprendizaje autónomo.
- Trabajo en equipo.
- Capacidad de organización y planificación.
- Adaptación a nuevas situaciones.


Competencias específicas:

- Programación.
- Ingeniería de software.
- Documentación técnica.
- Conocimiento de productos tecnológicos y tendencias de la tecnología asociados a elementos del mercado.

martes, 14 de noviembre de 2006

Paradigma Orientado a Objetos

La programación orientada a objetos es un paradigma enfocado principalmente a la reutilización del código y a facilitar su mantenimiento. Esto se consigue mediante mecanismos de abstracción, como herencia y polimorfismo, y encapsulación.

Abstracción:
La abstracción es el método mediante el que se aproxima una entidad real enfatizando características y comportamientos relevantes para el sistema e ignorando otros triviales, facilitando la modificación, construcción y comprensión de las entidades participantes.

Encapsulación:
Incluye los conceptos de agrupación y ocultamiento.
La agrupacion reúne toda la información relativa al comportamiento y estructura de cada entidad. Esta independencia facilita la tarea de mantenimiento del sistema, permitiendo la modificación de cada módulo de forma independiente.
La ocultación esconde los detalles de implementación exponiendo únicamente un interfaz que especifica las posibles interacciones con las instancias de ese entidad. Proporciona capacidad de modificar la implementación de cada módulo, independientemente de las relaciones con otros, sin cambiar el comportamiento del sistema.
Estas propiedades restringen la posibilidad de efectos secundarios, la propagación de cambios, facilitando el mantenimiento y proporcionan un método seguro para la reutilización de los módulos en otros sitemas.

Herencia:
Un sistema orientado a objetos se compone de multitud de instancias de entidades colaborando entre sí. Esta colaboración se define mediante las relaciones como asociación, agregación o herencia.
La herencia es la relación entre entidades en que la entidad especializada se apropia de la estructura y comportamiento de la entidad base. El comportamiento heredado puede modificarse de modo que se adecúe a las características de la nueva entidad. Un posible uso de la herencia es la especialización, donde la entidad especializada añade comportamientos nuevos a los de la entidad base. Otro posible uso es la sustitución de comportamientos, que oculta el un aspecto del comportamiento de la clase base en favor del de la especializada.
La herencia es otra forma de abstracción que fomenta la reutilización de codigo.

Polimorfismo:
Cuando varias entidades representan su propio comportamiento con el mismo símbolo, un mismo mensaje puede aplicarse a cualquiera de esas entidades (habitualmente relacionadas mediante herencia), obteniendo así diferentes comportamientos.
El polimorfismo está estrechamente relacionado con la ligadura dinámica y está enfocado a la reutilización de código.