jueves, 31 de marzo de 2011

Patrones de diseño


Esta semana hablamos sobre patrones de diseño. Primero que nada, un patrón de diseño es una base para alguna solución especifica para problemas típicos en el desarrollo de software. 

Existen tres tipos de patrones de diseño, los creacionales, los estructurales y los de comportamiento.

Patrones creacionales.

Los patrones creacionales soportan la tarea mas común que tiene la programación orientada a objetos: La creación de las instancias de objetos en un sistema.

Ejemplo - Singleton:
Segun wikipedia:

"El patrón de diseño singleton (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto.
Su intención consiste en garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella."

El patrón Singleton se implementa mediante una clase con un constructor privado. Existirá un método que creará una instancia del objeto llamando al constructor sólo si todavía no existe ninguna.

A pesar de que es ampliamente utilizado, existe una corriente contraria al uso de este patrón debido a los problemas que introduce.

  • Los Singletons normalmente se usan para proporcionar un punto de acceso global para un servicio.
  • Los Singletons permiten limitar la creación de los objetos.
  • Los Singletons promueven el acoplamiento fuerte entre clases.
  • Los Singletons mantienen el estado hasta la finalización del programa.


Patrones estructurales.

Los patrones estructurales están relacionados con cómo las clases y los objetos se combinan para dar lugar a estructuras más complejas.

Ejemplo - Composite:
Segun wikipedia:

"El patrón Composite sirve para construir objetos complejos a partir de otros más simples y similares entre sí, gracias a la composición recursiva y a una estructura en forma de árbol.
Esto simplifica el tratamiento de los objetos creados, ya que al poseer todos ellos una interfaz común, se tratan todos de la misma manera."

Compone objetos dentro de unas estructura arborescente con el que se representa una jerarquía parte-todo. El uso de este patrón permite tratar objetos individuales y composiciones uniformemente.

La utilización de recursos podría ser un problema, utiliza una estructura de tipo recursiva que podría generar un alto consumo de memoria, sin embargo fue pensado para tareas no repetitivas.

Esto ultimo debido a que el objeto complejo es independiente de los mas simples una vez creado.

Patrones de comportamiento.

Estos patrones de diseño están relacionados con algoritmos y asignación de responsabilidades a los objetos. Los patrones de comportamiento describen no solamente patrones de objetos o clases sino también patrones de comunicación entre ellos.

Ejemplo - Command:
Según wikipedia:

“Este patrón permite solicitar una operación a un objeto sin conocer realmente el contenido de esta operación, ni el receptor real de la misma. Para ello se encapsula la petición como un objeto, con lo que además se facilita la parametrización de los métodos.”

Encapsula peticiones como objetos, así permite parametrizar clientes con diferentes peticiones, auditar peticiones y deshacer operaciones. El Patrón permite:
  • Encapsular un mensaje como un objeto, con lo que podemos gestionar colas o registros de mensajes y deshacer operaciones.
  • Soportar restaurar el estado a partir de un momento dado.
  • Ofrecer una interfaz común que permita invocar las acciones de forma uniforme y extender el sistema con nuevas acciones de forma más sencilla.
Proyecto.


De estos patrones, puedo utilizar perfectamente el patrón Singleton:


La clase Eventos.java se utiliza para crear eventos del usuario, mediante el Singleton aseguramos que solo exista una sola instancia, ya que mantiene su estado asta la finalización del programa, los eventos se mantienen, y el uso limitado de objetos asegura su creacion y despues guardarlo en la base de datos.


La clase Notas.java aplica perfectamente, ya que su unico proposito es el de guardar texto en una base de datos.


Oviamente el patrón Composite queda perfectamente en la clase Eventos.java, puedo generar objetos de distintos tipos como lugar, fecha, hora, cada uno de estos objetos se obtienen de algun metodo, basandose en la fecha actual del sistema o la hora, o bien seleccionando de una lista el lugar. Unidos estos puedo generar un objeto de tipo evento compuesto de varios objetos mas simples.


Algunas clases mas complejas como Database.java (encargada de conección con la base de datos) o el propio main, pueden utilizar de una manera sencilla el patrón Command, ya que mantiene en memoria el usuario activo, de esta manera al seleccionar otra materia no habra que introducir de nuevo un usuario ni contraseña, ni volvera a reconectar a la base de datos para obtener información.

2 comentarios:

Cecilia Urbina dijo...

Hola Victor, pienso que tmb te podrìa servir el patròn de comportamiento Observer, ya que al momento de los maestros subir tareas, o de que el alumno tenga ciertas horas libres en las semanas, de que haya alguna noticia importante, de que el maestro suba calificaciones, etc, etc, todo esto se tiene que notificar a varios objetos para que puedan coordinarse y mostrarse al alumno, entonces podrias usar Observer para poder asi comunicar los diferentes objetos y que sepan cuando haya novedades.

Elisa dijo...

Muy bien; Vic 5, Cecy +1.

Publicar un comentario