jueves, 31 de marzo de 2011

Antipatrones de Diseño

Antipatron de diseño:  Un antipatron del diseño es la parte inversa de lo que es un patrón, por lo tanto es un contexto que conduce a una mala solución de un problema presentado.

Al documentarse los antipatrones, además de los patrones de diseño, se dan argumentos a los diseñadores de sistemas para no escoger malos caminos, partiendo de documentación disponible en lugar de simplemente la intuición.

Mencionare 4 antipatrones de diseño:

Priemer antipatron:
Singletonitis: Abuso de la utilización del patrón singleton.

Segundo antipatron:
Poltergeist: Emplear objetos cuyo único propósito es pasar la información a terceros objetos.

Tercer antipatron:
Fallo de clase vacía (empty subclass failure): Crear una clase que no supera el test de la subclase vacía, es decir, que se comporta de manera diferente cuando se invoca desde una subclase que no añade modificación alguna

Cuarto antipatron:
Acoplamiento secuencial (sequential coupling): Construir una clase que necesita que sus métodos se invoquen en un orden determinado.


Fuentes:
http://es.wikipedia.org/wiki/Antipatr%C3%B3n_de_dise%C3%B1o
http://www.arqhys.com/construccion/antipatron-diseno.html

Patrones de Diseño

Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.

Los patrones de diseño pretenden:
  • Proporcionar catálogos de elementos reusables en el diseño de sistemas software.
  • Evitar la reiteración en la búsqueda de soluciones a problemas ya conocidos y solucionados anteriormente.
  • Formalizar un vocabulario común entre diseñadores.
  • Estandarizar el modo en que se realiza el diseño.
  • Facilitar el aprendizaje de las nuevas generaciones de diseñadores condensando conocimiento ya existente.
Mencionare 2 ejemplos de patrones de diseño diferentes a los mencionados en clase:
Tipo: Creacional

Patron:
Abstract Factory (Fábrica abstracta): Permite trabajar con objetos de distintas familias de manera que las familias no se mezclen entre sí y haciendo transparente el tipo de familia concreta que se esté usando.

Problema: Debemos crear diferentes objetos, todos pertenecientes a la misma familia.

Aplicacion: Lo que intenta solucionar este patrón es el de crear diferentes familias de objetos.

Segundo patron:
Tipo: Estructural

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

Problema:
Supongamos que tenemos una clase existente Ventana y queremos añadirle funcionalidad para que muestre un borde alrededor. Podemos crear una subclase VentanaConBorde que herede de Ventana, pero supongamos que surge la necesidad de crear una ventana que muestre un pequeño botón de ayuda con un signo de interrogación (?) en su parte superior. Entonces tenemos las siguientes opciones:
  • Crear otra subclase de Ventana: VentanaConBotónDeAyuda.
Problema: No cubre la necesidad de tener ventanas con bordes y botón de ayuda a la vez.
  • Crear una subclase de VentanaConBorde: VentanaConBordeYBotonDeAyuda.
Problema: No tenemos una ventana con botón de ayuda y sin borde.
  • Crear clases para todas las combinaciones posibles de funcionalidades.
Problema: Con este ejemplo tendríamos cuatro clases: Ventana, VentanaConBorde, VentanaConBotonDeAyuda y VentanaConBordeYBotonDeAyuda; con tres funcionalidades tendríamos ocho clases y con cuatro, ¡dieciséis!

Aplicacion:
Este patron nos permite no tener que crear sucesivas clases que hereden de la primera incorporando la nueva funcionalidad, sino otras que la implementan y se asocian a la primera.

Fuentes:
http://es.wikipedia.org/wiki/Patr%C3%B3n_de_dise%C3%B1o