DISEÑO DE PATRONES
ANTIPATRONES
Semana 14 – Sesión 14
Conocimientos previos
3
¿Qué vimos en la sesión anterior?
Patrones Estructurales
• Patrón State.
• Patrón Observer.
• Patrón Memento
• Patrón Command
Introducción
¿Qué son los Antipatrones?
- Definición 1: Soluciones recurrentes que parecen
efectivas pero son perjudiciales a largo plazo.
- Definición 2: Malas prácticas comunes en diseño de
software y gestión organizacional.
¿Qué son los Antipatrones?
Un antipatrón es una solución aparentemente viable, pero ineficaz o
contraproducente, a un problema recurrente en un contexto específico. Estos
surgen frecuentemente debido a malas prácticas, entendimientos erróneos o
decisiones mal informadas, y pueden impactar negativamente el rendimiento, la
calidad, y la sostenibilidad de un sistema.
Los antipatrones se identifican en áreas como:
•Desarrollo de software
•Gestión de proyectos
•Arquitectura de sistemas
•Bases de datos
•Infraestructura tecnológica
Características de los
Antipatrones
[Link]: Siguen un patrón recurrente que puede ser
identificado.
[Link] Soluciones Razonables: A menudo parecen
lógicas o eficaces, especialmente para personas sin experiencia.
[Link] Negativo: Conllevan problemas de rendimiento,
mantenibilidad, escalabilidad, o costos elevados a largo plazo.
[Link]: Pueden ser transformados en buenas
prácticas mediante cambios y mejoras.
Propósito de los Antipatrones
- Identificar y evitar prácticas dañinas.
- Promover mejores prácticas en desarrollo de
software y gestión organizacional.
- Garantizar soluciones eficientes y sostenibles.
¿Dónde se aplican los
Antipatrones?
- Desarrollo de software:
* Diseño, codificación, pruebas y mantenimiento.
- Gestión organizacional:
* Estructuras, procesos y dinámicas de equipo.
Antipatrones en
Desarrollo de Software
- Errores comunes en diseño y codificación.
- Afectan la calidad, mantenimiento y
escalabilidad del software.
- Tipos de Antipatrones:
* God Object, Spaghetti Code, Golden
Hammer, etc.
Antipatrón: God Object
- Descripción: Clase con demasiadas
responsabilidades.
- Problema: Dificulta el mantenimiento y
pruebas.
- Solución: Aplicar el principio de
responsabilidad única (SRP).
Antipatrón: Spaghetti
Code
- Descripción: Código desordenado y entrelazado.
- Problema: Complica la lectura, depuración y
escalabilidad.
- Solución: Modularizar y seguir principios de diseño
limpio.
"Spaghetti Code"
De: "Spaghetti Code"
El siguiente código es un
ejemplo de Spaghetti Code,
en el que la lógica está
desorganizada, las funciones
están mezcladas, y no hay
una separación clara de
responsabilidades:
Antipatrón: Golden
Hammer
- Descripción: Uso de la misma herramienta
para todo problema.
- Problema: Genera soluciones subóptimas.
- Solución: Evaluar múltiples enfoques y
herramientas.
Antipatrón: Not
Invented Here
- Descripción: Rechazo a usar soluciones
externas.
- Problema: Duplica esfuerzos y eleva costos.
- Solución: Adoptar soluciones externas cuando
sean apropiadas.
Antipatrones
Organizacionales
- Malas prácticas en la gestión de personas y
estructuras.
- Generan ineficiencia, conflictos y baja
productividad.
Antipatrón: Cargo Cult
Management
- Descripción: Copiar prácticas sin entender su
contexto.
- Problema: Ineficiencia por falta de adaptación.
- Solución: Diseñar procesos personalizados.
Antipatrón:
Organizational Silos
- Descripción: Equipos que trabajan de manera
aislada.
- Problema: Falta de colaboración y duplicidad de
esfuerzos.
- Solución: Fomentar comunicación y metas
compartidas.
Antipatrón:
Micromanagement
- Descripción: Supervisión excesiva de tareas.
- Problema: Reduce la moral y la creatividad del
equipo.
- Solución: Delegar responsabilidades y confiar en
el equipo.
Antipatrón: Hero
Culture
- Descripción: Dependencia de individuos clave.
- Problema: Crea vulnerabilidad si los 'héroes' no
están disponibles.
- Solución: Documentar conocimiento y fomentar
equipos balanceados.
Caso Práctico:
Sistema Legacy
Escenario: Empresa con problemas de mantenimiento en
un sistema legado.
- Antipatrón identificado: God Object y Silos
Organizacionales.
- Solución:
1. Refactorizar código aplicando principios SOLID.
2. Implementar reuniones de colaboración entre equipos.
// Interface for operations
"Modular Design" interface Operation {
double execute(double num1, double num2);
}
"Modular Design" // Addition operation
A continuación, se reestructura class Addition implements Operation {
el código utilizando una @Override
arquitectura modular y public double execute(double num1, double num2) {
orientada a objetos. return num1 + num2;
}
}
// Subtraction operation
class Subtraction implements Operation {
@Override
public double execute(double num1, double num2) {
return num1 - num2;
}
}
// Multiplication operation
class Multiplication implements Operation { // Calculator class
@Override class Calculator {
public double execute(double num1, double num2) { public double calculate(double num1, double num2,
return num1 * num2; Operation operation) {
} return [Link](num1, num2);
} }
}
// Division operation
class Division implements Operation {
@Override
public double execute(double num1, double num2) {
if (num2 == 0) {
throw new IllegalArgumentException("Division by
zero is not allowed.");
}
return num1 / num2;
}
}
// Main class
public class ModularDesignExample {
public static void main(String[] args) {
Calculator calculator = new Calculator();
double num1 = 10;
double num2 = 5;
Operation addition = new Addition();
Operation subtraction = new Subtraction();
Operation multiplication = new Multiplication();
Operation division = new Division();
[Link]("Addition: " +
[Link](num1, num2, addition));
[Link]("Subtraction: " +
[Link](num1, num2, subtraction));
[Link]("Multiplication: " +
[Link](num1, num2, multiplication));
[Link]("Division: " +
[Link](num1, num2, division));
}
}
Actividad para los
Alumnos
1. Identifica un antipatrón en un sistema o proceso
organizacional.
2. Diseña una solución para eliminar o mitigar el
problema.
3. Discute tus hallazgos y soluciones con tus
compañeros.
¿Que hemos aprendido
el dia de hoy?
Conclusión
- Los antipatrones son errores comunes pero
evitables.
- Reconocerlos mejora la calidad, productividad y
colaboración.
- La clave es aprender de los errores para evitar
repetirlos.
Referencias Bibliográficas
Brown, W. J., Malveau, R. C., McCormick III, H. W., & Mowbray, T. J. (1998).
AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis.
Wiley.
Harrison, N. B., & Avgeriou, P. (2018).
Antipatterns in Software Architecture.
Addison-Wesley Professional.
Kerievsky, J. (2005).
Refactoring to Patterns.
Addison-Wesley Professional.
Hickey, T., & Davis, W. (2007).
"Antipatterns and Patterns in IT."
Journal of Object Technology, 6(4), 29–43.
Ampatzoglou, A., Stamelos, I., & Gkortzis, A. (2015).
"A survey on design pattern and antipattern studies in software engineering."