¿Por qué?
|
|
|
Diseño inspirado en el modelo del dominio no asegura un código calidad | |
---|---|
|
|
Viscoso | Rigido | Inmovil | Frágil |
---|---|---|---|
Presencia de multitud de clases enormes con métodos enormes con acoplamientos cíclicos sin un nítido reparto de responsabiliades |
Responsabilidades repartidas por multitud de clases que requieren modificaciónes si cambian los requisitos correspondientes. |
Presencia de multitud de clases acopladas a multitud de clases de diversas tecnologías (GUI, comunicaciones, bases de datos, servicios, …) |
Ausencia de red de seguridad de pruebas unitarias por imposibilidad de realizar pruebas sobre las clases anteriores |
¿Qué?
Diseño modular | |
---|---|
|
|
|
Cohesión
Definición | Contraejemplo |
---|---|
La cohesión, o más específicamente, la cohesión funcional, es una medida de cómo de fuerte están relacionadas y enfocadas las responsabilidades que son de un elemento. Estos elementos incluyen sistemas, paquetes, clases y métodos.
— Larman
UML y Patrones |
Si una persona no integra a sus colaboradores (partes, agregados, asociados y/o usos) consume su canal cognitivo, capacidad cuantitativa mental, al responsabilizarse de diversos asuntos, no de uno único |
Alta cohesión | Baja cohesión |
---|---|
|
|
|
|
Compromisos. Pocos casos en los que se justifica la aceptación de una cohesión menor: | |
---|---|
|
|
|
|
La cohesión es un objetivo fundamental para considerar en todas las decisiones de diseño
— Larman
UML y Patrones |
|
Acoplamiento
Definición | Contraejemplo |
---|---|
El acoplamiento es una medida de la fuerza con un elemento está conectado a, tiene conocimiento de, o se basa en otros elementos. Estos elementos incluyen sistemas, paquetes, clases y métodos. |
Si una persona interactúa con demasiadas clases de colaboradores (partes, agregados, asociados y/o usos) colapsa al superar su canal cognitivo, capacidad cuantitativa mental |
Bajo acoplamiento | Alto acoplamiento |
---|---|
|
|
|
|
|
|
Acoplamiento directo | Acoplamiento indirecto |
---|---|
|
|
Grafo de acoplamientos | |
---|---|
|
|
|
Alto Acoplamiento | Grado moderado de acoplamiento | Bajo acoplamiento |
---|---|---|
|
|
|
|
El acoplamiento es un objetivo fundamental para considerar en todas las decisiones de diseño
— Larman
UML y Patrones |
|
Interrelación | Causa | Consecuencia |
---|---|---|
|
|
|
|
|
Tamaño
Elemento | Cota | Cantidad | Elemento |
---|---|---|---|
Paquete |
Máximo |
[12 .. 20] |
Clases |
Clase |
Media |
3 |
Atributos |
Máximo |
5 |
Atributos |
|
Máximo |
[20 .. 25] |
Métodos |
|
Máximo |
[200 .. 500] |
Líneas |
|
Método |
Media |
1,2 |
Parámetros |
Máximo |
[2 .. 3] |
Parámetros |
|
Máximo |
[10 .. 15-25] |
Líneas de Código |
|
Máximo |
3 |
Sentencias anidadas |
|
Máximo |
[10 .. 15] |
Complejidad Ciclomática de McCabe, número de diferentes posibles caminos en tiempo de ejecución |
|
Línea |
Máximo |
80 | 120 |
Caracteres |
¿Para qué?
|
|
|
Fluido | Flexible | Resuable | Robusto |
---|---|---|---|
Presencia de multitud de clases pequeñas con métodos pequeños con pequeños acoplamientos acíclicos que puedo recorrer de arriba abajo (top/down o bottom/up), jerarquía de composición y/o clasificación de clases pequeñas, sin ciclos! |
Reparto de responsabilidades equilibrado y centralizado en clases que requiere modificarse únicamente si cambian los requisitos correspondientes, jerarquías de clases con alta cohesión, sin ciclos! |
Presencia de multitud de clases pequeñas, cohesivas y poco acopladas a tecnologías, algoritmos, …! |
Presencia de red de seguridad de pruebas unitarias por posibilidad de realizar pruebas sobre las clases anteriores … jerarquía equilibrada de clases pequeñas con alta cohesión y bajo acoplamiento! |
|
|
¿Cómo?
Índice | ||
---|---|---|
|
|
|
Modularidad
Número de módulos
|
|
|
Aplicación mediana (100.000 LOC) | Muchos módulos | Número equilibrado de módulos | Pocos módulos |
---|---|---|---|
Costes de Desarrollo |
Reducido |
Equilibrado |
Disparado |
Costes de Integración |
Disparado |
Equilibrado |
Reducido |
Costes Totales |
Disparado |
Equilibrado |
Disparado |
Distribución de Responsabilidades
|
|
Jerarquización
- Diseño descendente (top/down) | - Diseño ascendente (bottom/up) |
---|---|
|
|
|
Comparativa | Diseño descendente | Diseño ascendente |
---|---|---|
Reparto de responsabilidades |
Muy sencillo bajo demanda de clases anteriores pero cualquier error de diseño implica revisar las clases anteriores de la jerarquía de dependencias |
Muy complejo adivinando la responsabilidad, requiere mucha experiencia en desarrollo del software y en el dominio de la aplicación |
Pruebas |
Imposible realizar pruebas unitarias hasta llegar a la implantación de las clases hoja de las jerarquías a no ser que se desarrollen "sustitutos" (mocks) para todas las clases en cada prueba |
Se pueden realizar pruebas unitarias/familiares desde la primera clase |
Interfaz
Código Sucio por Clases Alternativas con Interfaces Diferentes
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Clases Alternativas con Diferentes interfaces |
Alternative Classes with Different Interfaces |
Smell Code (Refactoring) |
Martin Fowler |
Justificación |
Solución |
|
|
Principios del Menor Compromiso y la Menor Sorpresa
Antónimos | Antonyms | Libro | Autor |
---|---|---|---|
Comportamiento obvio no está implementado |
Obvious Behavior Is Unimplemented |
Smell Code (Clean Code) |
Robert Martin |
Responsabilidad fuera de lugar |
Misplaced Responsibility |
Smell Code (Clean Code) |
Robert Martin |
Principio del menor compromiso, a través del cual la interfaz de un objeto proporciona su comportamiento esencial, y nada más
— Abelsony Sussman
|
Principio de la menor sorpresa, a través del cual una abstracción captura todo el comportamiento de un objeto, ni más ni menos, y no ofrece sorpresas o efectos secundarios que van más allá del ámbito de la abstracción
— Booch
|
Interfaz Suficiente, Completa y Primitiva
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Los nombresde las funciones deberían decirlo que hacen |
Function Names Should Say What They Do |
Smell Code (Clean Code) |
Robert Martin |
Suficiente | Completa | Primitiva |
---|---|---|
|
|
|
|
|
|
Diseño por Contrato
Principio | Error lógico | Error excepcional |
---|---|---|
|
|
|
- Programación Defensiva | - Aserciones |
---|---|
|
|
Diseño por Contrato | ||
---|---|---|
Definición |
Objetivos |
Protocolo |
|
|
|
Precondiciones | Postcondiciones |
---|---|
|
|
Obligacion | Beneficiario | |
---|---|---|
Cliente |
Satisfacer las precondiciones |
No necesita comprobar valores de salida porque el resultado garantiza el cumplimiento de la postcondicion |
Servidor |
Satisfacer las postcondiciones |
No necesita comprobar los valores de entrada porque la entrada garantiza el cumplimiento de la precondicion |
Invariante de Clase | Clase correcta |
---|---|
|
|
|
Implemetación
Cohesión
Índice | |
---|---|
|
|
|
|
|
|
|
|
Cohesión de Métodos
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
La funciones deberían hacer una sola cosa |
Functions Should Do One Thing |
Smell Code (Refactoring) |
Martin Fowler |
Violaciones |
Solución |
Justificación |
|
|
|
Principio de Única Responsabilidad
Cohesión |
Principio de Única Responsabilidad |
|
|
Vilolaciones | Solución |
---|---|
|
|
|
|
Código Sucio por Envidia de Características
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Características de la envidia |
Features Envy |
Smell Code (Refactoring) |
Martin Fowler |
Violaciones | Solución |
---|---|
|
|
Código Sucio por Clase de Datos
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Clase de datos |
Data Class |
Smell Code (Refactoring) |
Martin Fowler |
Justificación | Violaciones | Solución |
---|---|---|
|
|
|
Código Sucio por Cambios Divergentes
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Cambio divergente |
Divergent Change |
Smell Code (Refactoring) |
Martin Fowler |
Justificación | Violaciones | Solución |
---|---|---|
|
|
|
Código Sucio por Cirurgía a Escopetazos
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Cirugía de escopeta |
Shotgun Surgery |
Smell Code ((Refactoring) |
Martin Fowler |
Justificación | Solución |
---|---|
|
|
Código Sucio por Grupo de Datos
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Grupos de datos |
Data Clumps |
Smell Code (Refactoring) |
Martin Fowler |
Violaciones | Solución |
---|---|
|
|
Código Sucio por Obsesión por Tipos Primitivos
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Obsesión primitiva |
Primitive Obssesion |
Smell Code (Refactoring) |
Martin Fowler |
Violaciones | Solución |
---|---|
|
|
Código Sucio por Clases Perezosas
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Lazy Class |
Clase perezosa |
Smell Code (Refactoring) |
Martin Fowler |
Justificación | Violaciones | Solución |
---|---|---|
|
|
|
Resumen
Índice | |
---|---|
|
|
|
|
|
|
|
|
Acoplamiento
Inapropiada Intimidad
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Intimidad Inapropiada |
Inappropriate Intimacy |
Smell Code ((Refactoring) |
Martin Fowler |
Justificación | Solución | |
---|---|---|
|
|
Algunas clases llegan a alcanzar demasiada intimidad y gastan mucho tiempo ahondando en las partes privadas de otras clases. Nosotros pensamos que nuestras clases deberían ser estrictas con reglas puritanas
— Fowler
Refactoring. 1999 |
Leyes de Demeter
Sinónimos |
Synonyms |
Libro |
Autor |
No hablescon extraños |
Do not talk to strangers |
xxx |
Lieberherr |
Cadena de Mensajes |
Chain of Message |
Smell Code (Refactoring) |
Martin Fowler |
Justificación | Solución |
---|---|
|
|
Código Sucio por Librería Incompleta
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Clase de biblioteca incompleta |
Incomplete Library Class |
Smell Code ((Refactoring) |
Martin Fowler |
Justificación | Solución |
---|---|
|
|
Tamaño
Código Sucio por Listas de Parámetros Largas
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Lista de Parámetros Larga |
Long Parameter List |
Smell Code (Refactoring) |
Martin Fowler |
Demasiados Argumentos |
Too Many Arguments |
Smell Code (Clean Code) |
Robert Martin |
Justificación | Solución | Violaciones |
---|---|---|
|
|
|
Código Sucio por Métodos Largos
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Métodos largos |
Long Method |
Smell Code (Refactoring) |
Martin Fowler |
Justificación | Solución | Violaciones |
---|---|---|
|
|
|
Código Sucio por Clases Grandes
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Objeto gigante |
Big Large Object(BLOB) |
Antipatrónde Desarrollo |
William H.Brown et al |
Large Class |
Clase grande |
Smell Code (Refactoring) |
Martin Fowler |
Demasiada información |
Too much Information |
Smell Code (Clean Code) |
Robert Martin (Uncle Bob) |
Justificación | Violaciones | Solución |
---|---|---|
|
|
|
Código Sucio por Atributos Temporales
Sinónimos | Synonyms | Libro | Autor |
---|---|---|---|
Campos temporales |
Temporary Fields |
Smell Code (Refactoring) |
Martin Fowler |
Justificación | Violaciones | Solución |
---|---|---|
|
|
|
Patrón de Indirección
Problema | Solución | |
---|---|---|
|
|
La mayoría de los problemas en las Ciencias de la Computación pueden ser resueltos con otro nivel de indirección! La mayoría de los problemas de rendimiento pueden ser resueltos eliminando otro nivel de indirección
— Dennis DeBruler
|
Justificación | Violaciones |
---|---|
|
|
Patrón de Invención Pura
Problema | Solución | Ejemplos |
---|---|---|
|
|
|
Patrón Vista Separada
Problema | Solución | Beneficios |
---|---|---|
¿Quién debe ser responsable de capturar entradas generado por un agente externo – personas mediante el teclado o el ratón - o máquinas mediante señales de un sensor o tramas de red-? |
|
|
Aplicaciones | ||
---|---|---|
Patrón Controlador
Problema | Solución | Beneficios |
---|---|---|
|
|
|
Aplicaciones | ||
---|---|---|
Patrón Creador
Problema | Solución | Beneficios |
---|---|---|
|
|
|
Resumen
Índice | ||
---|---|---|
|
|
|
Sintesis
Bibliografía
Obra, Autor y Edición | Portada | Obra, Autor y Edición | Portada |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ponente
|
|
|