7 de Diciembre 2012
Artículo de Investigación
ANTIPATRONES DE DISEÑO DE SOFTWARE Software design antipattern Bayron Alberto Buenhombre Buenhombre Fernández 20081025008 Universidad Distrital Francisco José de Caldas.
[email protected] [email protected]
RESUMEN El ser humano ha tratado de resolver los problemas cotidianos de una manera más óptima, teniendo en cuenta costos en tiempo, dinero, mano de obra, etc., de ahí se adopto la idea de estudiar los algoritmos que son procesos secuenciales en la solución de un problema concreto, y teniendo en cuenta que esta clase de soluciones han tenido un desarrollo bastante importante en la historia de la humanidad, tales estudios han llegado al punto de fundamentarse en cierta clase de patrones y anti patrones para el desarrollo de software que facilitan el análisis. En 1979 el arquitecto Christopher Alexan Alexander der implem implement ento o patron patrones es en el mundo mundo del del diseño diseño de constr construcc ucción ión de edific edificios ios y se implemento y a medida del tiempo se fue implementando la idea generando una idea en el diseño de software y para 1990 nace Desing Patterns de Gang of four donde se recopilan 23 patrones de diseño comunes y de una manera contraria nace el libro Anti-patterns que recopila la contrapartida en cuanto a los patrones de diseño, mostrando así las pautas que no se deben seguir en el desarrollo y diseño de software.
Palabras clave: Costos, patrones, anti-patrones, programación, diseño de software.
ABSTRACT Humans have tried to solve everyday problems in a more optimal, considering costs in time, money, labor, etc., Hence the idea was adopted to study the algorithms are sequential processes in solving a particular problem, and given that this kind of solutions have played a very ver y important development in the history of mankind, such studies have reached the point of being based on some sort of patterns and anti-patterns for the development of software to facilitate analysis . In 1979 the archit architect ect Christ Christoph opher er Alexan Alexander der attach attachmen mentt patter patterns ns in the the world world of design design and build building ing construction was implemented and as time went by implementing the idea generating an idea in software design and for 1990 born Desing Patterns of Gang of Four where they are collected 23 commo common n desig design n patte patterns rns and in a manner manner contra contrary ry born born Anti-p Anti-patt attern ernss book book that that collec collects ts the counte counterpa rpart rt in terms terms of design design patter patterns, ns, showi showing ng that that guidel guideline iness shoul should d be follow followed ed in the the development and design of software.
Keywords: Costs, patterns, anti-patterns, programming, software design.
1
7 de Diciembre 2012
INTRODUCCION A medida del transcurso del tiempo, el desarrollo de software ha venido a ocupar de manera importante, gran parte en la vida del ser humano, pues los problemas de la cotidianidad han tendido a ser resueltos a través de esta metodología, llegando hasta el punto en que la programación se ha convertido en un factor importante para el desarrollo de problemas. Este desarrollo tecnológico ha facilitado en la vida humana problemas que antes tendían a ser largos en su proceso de desarrollo y a medida del tiempo, el desarrollo y diseño de esta ha facilitado la solución del problema de una manera más puntual, reduciendo costos en tiempo y dinero bastante trascendentales. El desarrollo de software y la tecnología ha sido implacable en comparación de la solución de tareas mecánicas, esto es un hecho generador de la evolución de estos mecanismos de simplificación de la realidad y el posterior análisis para partir desde el punto que la programación es un seguimiento de patrones que me determinan el buen desarrollo del ejercicio. Los patrones de diseño son la base para el desarrollo de software que ha medida del tiempo se han ido puliendo y que nos disminuye drásticamente la probabilidad de a fallar en el código. Y como contra partida, tenemos los anti patrones de diseño que son parte importante en cuanto al desarrollo de la programación pues me dicen explícitamente que es lo que no debo hacer cuando trabajo en este campo.
METODOLOGIA Teniendo en cuenta que el desarrollo en la programación es una tarea bastante compleja porque aparte de que existen ciertas pautas técnicas como el reconocimiento de comandos y operaciones, hay una parte lógica
2 Artículo de Investigación
actuando constantemente en la ejecución de un código en particular, esto genera cierto nivel de complejidad al momento de realizar la actividad. Hablando de anti-patrones, es preciso determinar que un anti-patrón de diseño es un patrón de diseño que invariablemente conduce a una mala solución para un problema. Hablando de un poco de historia, el término se origina inspirado en el libro Design Patterns, escrito por un grupo de autores conocido como Gang of Four , y que aglutina un conjunto de buenas soluciones de programación. Los autores bautizaron dichas soluciones con el nombre de "patrones de diseño" por analogía con el mismo término, usado en arquitectura. El libro AntiPatterns (de William Brown, Raphael Malveau, Skip McCormick y Tom Mowbray, junto con la más reciente incorporación de Scott Thomas) describe los anti-patrones como la contrapartida natural al estudio de los patrones de diseño. El estudio formal de errores que se repiten permite reconocer y reconducir los elementos involucrados hacia una mejor solución. Los anti-patrones no se mencionan en el libro original de Design Patterns, puesto que éste es anterior. El concepto de anti-patrón se puede aplicar a la ingeniería en general, e incluso a cualquier tarea realizada por el hombre.
Anti-patrones de diseño
haciéndola responsable de la mayoría de la lógica de negocio.
Los anti-patrones pueden dividirse en 3 grandes categorías: • •
Desarrollo de Software: Se centran en problemas asociados al desarrollo de software a nivel de aplicación.
•
Arquitectura
de
Software: Se
centran en la estructura de las aplicaciones y componentes a nivel de sistema y empresa. •
•
Carrera de obstáculos (race hazard): Incapacidad de prever las consecuencias de diferentes sucesiones de eventos.
•
Entrada chapuza (input kludge): No especificar e implementar el manejo de entradas inválidas.
Gestión de Proyectos de Software: En la ingeniería del software, más de la mitad del trabajo consiste en comunicación entre personas y resolver problemas relacionados con éstas. Los anti-patrones de gestión de proyectos de software identifican
Botón mágico (magic pushbutton): Tender, desarrollando interfaces, a programar la lógica de negocio en los métodos de interacción, implementando los resultados de las acciones del usuario en términos no suficientemente abstractos.
•
algunos de los escenarios clave donde
Fábrica de combustible (gas factory): Diseñar de manera innecesariamente compleja.
estos temas son destructivos para el proceso de software.
•
Gran bola de lodo (big ball of mud): Construir un sistema sin estructura definida.
Teniendo en cuenta lo anterior, hay claros ejemplos de anti-patrones de diseño, en donde se reflejan los errores comunes en los cuales se incurren al momento de programar:
•
Interfaz inflada (interface bloat): Pretender que una interfaz sea tan potente que resulta extremadamente difícil de implementar.
PATRONES GENERALES DE DISEÑO DE SOFTWARE
•
Inversión de abstracción (abstraction inversion): No exponer las funcionalidades implementadas que los usuarios necesitan, forzando a que se re implementen a más alto nivel.
•
• •
•
Base de datos como comunicador de procesos (database as an IPC ): Usar una base de datos para comunicar procesos en uno o varios ordenadores, cuando la comunicación entre procesos directa es más adecuada.
•
Punto de vista ambiguo (ambiguous viewpoint): Presentar un modelo sin concretar ciertos aspectos, postergando así decisiones conflictivas.
Blob: Véase Objeto todopoderoso.
•
BOMQ (Batch Over MQ): Abuso en el empleo de integración basada en mensajes en tiempo real para transferencias esporádicas de gran tamaño en segundo plano.
Re-dependencia (re-coupling): Introducir dependencias innecesarias entre objetos.
•
Sistema de cañerías de calefacción (stovepipe system): Construir un sistema difícilmente mantenible, ensamblando componentes poco relacionados.
Clase Gorda: Dotar a una clase con demasiados atributos y/o métodos,
3
7 de Diciembre 2012
Teniendo en cuenta lo anterior, podemos entender que los anti-patrones de diseño son condiciones básicas de análisis de un código en particular para percibir errores y depurarlos de manera eficaz.
CONCLUSIONES El desarrollo en el ámbito de la programación es una tarea con un nivel de complejidad bastante alto que tiende a generar complicaciones al momento de implementar un código, estas complicaciones son bastante difíciles de observar, pues líneas y líneas de código para revisar se convierte en una tarea tediosa, y que teniendo ciertas pautas, las soluciones a esos problemas se pueden corregir de una manera eficaz observando patrones y anti-patrones en el diseño de software. Además de lo anterior, los anti-patrones se pueden clasificar según el nivel de desarrollo de software, y que dependiendo de la manera como se desarrolle la actividad (Sea programación secuencial, estructurada, orientada a objetos, etc.) así mismo los anti patrones se comportan de una manera mucho más especifica resolviendo problemas con cierta particularidad. Los patrones o anti-patrones no solo se implementan en un código, sino que además, las actividades de ingeniería se ven directamente afectadas bajo estos criterios, que precisamente me ayudan a reducir temas de costos en tiempo y dinero.
REFERENCIAS BIBLIOGRAFICAS http://unpocodejava.wordpress.com/2012/02/ 29/antipatrones-iii-antipatrones-generales-dediseno-de-software/ http://es.wikipedia.org/wiki/Antipatr %C3%B3n_de_dise%C3%B1o http://es.wikipedia.org/wiki/Patr %C3%B3n_de_dise%C3%B1o
4 Artículo de Investigación