martes, 30 de noviembre de 2010

Semana 9 – Patrones de diseño

Los patrones de diseño son soluciones a problemas comunes en el desarrollo de software que nos encontramos en el desarrollo de aplicaciones del mundo real.

Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.

Los patrones de diseño tuvieron un gran éxito en el mundo de la informática a partir de la publicación del libro Design Patterns escrito por el grupo Gang of Four (GoF) compuesto por Erich Gamma, Richard Helm, Ralph Johnson y John Vlisides, en el que se recogían 23 patrones de diseño comunes.

Ellos, clasificaban los patrones de diseño en tres grupos: Creacionales, Estructurales y de Comportamiento.


PATRONES CREACIONALES

Abstract Factory (Fábrica abstracta): Crea una instancia de varias familias de clases.

Builder (Constructor virtual): Separa la construcción de objetos de su representación.

Factory Method (Método de fabricación): Crea una instancia de varias clases derivadas.

Prototype (Prototipo): Crea nuevos objetos clonándolos de una instancia ya existente.

Singleton (Instancia única): Una clase de las que sólo una sola instancia puede existir.


PATRONES ESTRUCTURALES

Adapter (Adaptador): Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría utilizarla.

Bridge (Puente): Desacopla una abstracción de su implementación.

Composite (Objeto compuesto): Una estructura de árbol de objetos simples y compuestos.

Decorator (Envoltorio): Añade funcionalidad a una clase dinámicamente.

Facade (Fachada): Una clase única que representa un subsistema.

Flyweight (Peso ligero): Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información.

Proxy: Tiene un objeto que representa a otro objeto.



PATRONES DE COMPORTAMIENTO

Chain of Responsibility (Cadena de responsabilidad): Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada.

Command (Orden): Encapsular un comando de la petición como un objeto.

Interpreter (Intérprete): Una manera de introducir los elementos de un lenguaje a un programa.

Iterator (Iterador): Permite realizar recorridos sobre objetos compuestos independientemente de la implementación de estos.

Mediator (Mediador): Define un objeto que coordine la comunicación entre objetos de distintas clases, pero que funcionan como un conjunto.

Memento (Recuerdo): Permite volver a estados anteriores del sistema.

Observer (Observador): Una forma de notificar el cambio a una serie de clases.

State (Estado): Alterar el comportamiento de un objeto cuando su estado cambia.

Strategy (Estrategia): Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución.

Template Method (Método plantilla): Aplazar los pasos exactos de un algoritmo para una subclase.

Visitor (Visitante): Define una nueva operación a una clase sin cambios.



------------------------

Los ejemplos explicados a continuación no los apliqué a mi proyecto, pero si mencioné ejemplos.

EJEMPLOS DE PATRONES:





------------------------

Fuentes:


...

domingo, 28 de noviembre de 2010

Semana 8 - Diagramas UML de Clase y Actividad en el proyecto

*** MODIFICADO ***

Programa que administra una biblioteca.



Me apoyé en un libro facilitado por un profesor de la FCFM:

Joseph Schmuller, Aprendiendo UML en 24 horas.
Prentince Hall.


...

Semana 7 - Diagramas de actividad de UML

*** MODIFICADO ***

Explicación de los diagramas de actividades y ejemplos:


-------------------------
 
Fuentes:

Joseph Schmuller, Aprendiendo UML en 24 horas.
Prentince Hall.


...

lunes, 8 de noviembre de 2010

Semana 6 - Diagramas de clase de UML

*** MODIFICADO ***

Diagramas de clase de UML

Programa que administra una biblioteca.




El programa contará con la clase principal BIBLIOTECA que cargará lo necesario para ejecutar el programa.

--------------------------

La clase MATERIAL contiene los campos y métodos para los libros y revistas que se prestarán.

La clase LIBRO se hereda de la clase material, hereda sus campos y métodos.
La clase REVISTA también se hereda de la clase material heredando sus campos y métodos.

Los métodos que tendrán los libros y revistas serán: darse de Alta, Baja y Cambios.

--------------------------

La clase PERSONA contiene los campos y métodos de los alumnos y profesores que pueden pedir prestado los libros y revistas.

La clase ALUMNO se hereda de la clase persona, hereda sus campos y métodos.
La clase PROFESOR también se hereda de la clase persona heredando sus campos y métodos.

Los métodos que tendrán los alumnos y profesores serán: llevar un libro o revista, y devolver el libro o revista.

--------------------------

La clase PRESTAMO realizará el préstamo entre la persona y el material a prestar.

--------------------------


Me apoyé en presentaciones:



También me apoyé en un libro facilitado por un profesor de la FCFM:

Joseph Schmuller, Aprendiendo UML en 24 horas.
Prentince Hall.

domingo, 7 de noviembre de 2010

Semana 5 - Definición de proyectos individuales: presentaciones de temas

Tema: Administración de una Biblioteca




Lo presentado anteriormente puede estar sujeto a cambios si así lo requiera a la hora de programar.


...

sábado, 6 de noviembre de 2010

Semana 4 - Documentación y herramientas de desarrollo

Mi elección fue Eclipse (Java).

Versión que utilicé: Eclipse – Europa (3.3.2)


Sitio web donde me apoyé en descargas y tutoriales:


LINKS DE DESCARGA:

Eclipse versión Europa (3.3.2):

Tutorial en PDF:

Tutoriales en videos (16 lecciones):


-------------------------------


Con los tutoriales creé un proyecto que contiene: clases, atributos, métodos, campos, constructores, arreglos de lista, clases de prueba, ciclos, condiciones, etc.

Se trata de una aplicación que administra una librería, en donde se dan de alta libros que tengamos, personas, y cuáles de esas personas han tomado prestado nuestros libros.

El proyecto contiene tres clases en java:

-       Persona: Que tiene de atributos su nombre y el máximo de libros que haya tomado prestados en una pedida.

-       Libro: Que contiene de atributos el título, autor y persona que lo tomó prestado.

-       Mi Librería: Que contiene un nombre, una lista de libros y una lista de personas.




-------------------------------

Pantalla de bienvenida:



Proyecto Mi Librería:






  
Capturas de las clases:
 
Clase Persona





Clase Libro


Clase Mi Librería



En el programa hacemos que existan 2 libros (Grandes Esperanzas y Guerra y Paz) y 2 personas (Jim y Sue) y que cada una de estas personas tome prestado un libro y lo devuelva.


Captura de la clase ejecutada desde Eclipse:




Al finalizar las 16 lecciones, exporté el proyecto para crear la aplicación en .jar y poderlo ejecutar desde la consola:




-------------------------------

COMENTARIOS PERSONALES:

Lo que más me gustó de Eclipse fue el tan usado “Ctrl + 1” llamado Quick Fix, que facilita mucho la programación al desplegar listas de sugerencias al tener errores de compilación.

Lo que no me agradó tanto fue que primero empecé a trabajar con una versión de Eclipse más reciente, Eclipse – Galileo (3.5.0) y tuve muchos problemas con las librerías que no se importaban bien y eso causó problemas a la hora de compilar. Por eso trabajé con la versión 3.3.2.


...