lunes, 28 de noviembre de 2011

Presentación Final POO

+ Puntos Extras


Diagrama de Clases Umbrello
Patrones de Diseño
Casos de Uso
Diagramas UML
Conceptos
Errores de Interfaces
Pruebas Unitarias
Antipatrones
Sistemas Distribuidos

*Estos son las nuevas entradas
Polimorfismo y Herencia
Pruebas Unitarias
Interfaz JAVA
Ejemplos Diagramas de secuencia
Metodologías de análisis y diseño de software
Umbrello

**PUNTOS EXTRAS** Umbrello


¿Que es UMBRELLO?

Umbrello es una herramienta libre para crear y editar diagramas UML, que ayuda en el proceso del desarrollo de software.

Umbrello maneja gran parte de los diagramas estándar UML pudiendo crearlos, además de manualmente, importándolos a partir de código en C++, Java, Python, IDL, Pascal/Delphi, Ada, o también Perl (haciendo uso de una aplicación externa). Así mismo, permite crear un diagrama y generar el código automáticamente en los lenguajes antes citados, entre otros. El formato de fichero que utiliza está basado en XMI.

Diagramas soportados

En la actualidad, Umbrello permite la creación de los siguientes tipos de diagramas:
  • Diagrama de casos de uso
  • Diagrama de componentes
  • Diagrama de despliegue
  • Diagrama de modelo entidad-relación
  • Diagrama de clases
  • Diagrama de secuencia
  • Diagrama de estados
  • Diagrama de actividades
Archivo:Screenshot-umbrelo.png

**PUNTOS EXTRAS** Metodologías de análisis y diseño de software


Metodología de desarrollo de software es utilizada en la ingeniería de software, se define como una serie de pasos que nos permite controlar, realizar la estructura y planificar un sistema.

 Algunas de metodologías:

  • Proceso Racional unificado (RUP): Es utilizada junto el UML en los sistemas orientados a objetos
  • Programación extrema (XP): Mantiene en su equipo al usuario final y además es de las más populares en la actualidad.
  • Microsoft Solution Framework: Se basa en los modelos de proceso y deja a un lado las elecciones tecnológicas
  • Proceso Unificado Ágil (AUP): Se basa en la metodología RUP y además que describe de manerasimple entender las aplicaciones de software.
Cada metodología tiene varios enfoques, podemos encontrar los siguientes:

  • Cascada: Ordena las etapas para el desarrrollo de software y espera a que termine cada capa.     
  • Espiral: Creado para fortalecer las debilidades del modelo cascada.
  • Incremental: Cada ciclo, representa el conjunto de actividades que hay que realizar y comienza desde el interior.
Para decidir que metodología elegir es necesario evaluar lo siguiente:

  • Determinar el alcance.
  • Determinar el tiempo.
  • Cual se acomoda, para poder aplicarla.
Espiral


Cascada





**PUNTOS EXTRAS** Ejemplos Diagramas de Secuencia

Ejemplos de Diagramas de Secuencia en clase:



**PUNTOS EXTRAS** Interfaz JAVA

¿Qué es una interfaz en JAVA?


Una interfaz en Java es una colección de métodos abstractos y propiedades. En ellas se especifica qué se debe hacer pero no su implementación. Serán las clases que implementen estas interfaces las que describan la lógica del comportamiento de los métodos.

El papel del interface es el de describir algunas de las características de una clase. Por ejemplo, el hecho de que una persona sea un futbolista no define su personalidad completa, pero hace que tenga ciertas características que las distinguen de otras.

Diferencias entre un interface y una clase abstracta

Un interface es simplemente una lista de métodos no implementados, además puede incluir la declaración de constantes. Una clase abstracta puede incluir métodos implementados y no implementados o abstractos, miembros dato constantes y otros no constantes.

El uso de interfaces proporciona las siguientes ventajas:

Organizar la programación (IAJU).
Obligar a que ciertas clases utilicen los mismos métodos (nombres y parámetros).
Establecer relaciones entre clases que no estén relacionadas.

Declaración y uso

Una interface se declara:

interface nombre_interface {
    tipo_retorno nombre_metodo ( lista_argumentos ) ;
    . . .
}

Por ejemplo:

interface InstrumentoMusical {
    void tocar();
    void afinar();
    String tipoInstrumento();
}

Y una clase que implementa la interface:

class InstrumentoViento extends Object implements InstrumentoMusical {
    void tocar() { . . . };
    void afinar() { . . .};
    String tipoInstrumento() {}
}

class Guitarra extends InstrumentoViento {
    String tipoInstrumento() {
        return "Guitarra";
    }
}  

La clase InstrumentoViento implementa la interface, declarando los métodos y escribiendo el código correspondiente. Una clase derivada puede también redefinir si es necesario alguno de los métodos de la interface.






**PUNTOS EXTRAS** Pruebas Unitarias

¿Que son las pruebas unitarias?


En programación, una prueba unitaria es una forma de probar el correcto funcionamiento de un módulo de código. Esto sirve para asegurar que cada uno de los módulos funcione correctamente por separado.

Objetivo

El objetivo de las pruebas unitarias es aislar cada parte del programa y mostrar que las partes individuales son correctas. Proporcionan un contrato escrito que el trozo de código debe satisfacer. 

Ventajas

Estas pruebas aisladas proporcionan cinco ventajas básicas:

  • Fomentan el cambio: Las pruebas unitarias facilitan que el programador cambie el código para mejorar su estructura (lo que se ha dado en llamar refactorización), puesto que permiten hacer pruebas sobre los cambios y así asegurarse de que los nuevos cambios no han introducido errores.
  • Simplifica la integración: Puesto que permiten llegar a la fase de integración con un grado alto de seguridad de que el código está funcionando correctamente. De esta manera se facilitan las pruebas de integración.
  • Documenta el código: Las propias pruebas son documentación del código puesto que ahí se puede ver cómo utilizarlo.
  • Separación de la interfaz y la implementación: Dado que la única interacción entre los casos de prueba y las unidades bajo prueba son las interfaces de estas últimas, se puede cambiar cualquiera de los dos sin afectar al otro, a veces usando objetos mock (mock object) para simular el comportamiento de objetos complejos.
  • Los errores están más acotados y son más fáciles de localizar: dado que tenemos pruebas unitarias que pueden desenmascararlos.