Técnicas de Diseño
Diccionario español
Técnica: procedimiento, método, habilidad,
destreza, aplicado a un oficio, deporte, ciencia
Diseño: verb. Proyectar, trazar, esbozar,
delinear, plantear
Diseño
caracteriza a diseñadores
Proceso de diseño
caracteriza a “desarrolladores”
Pasos de un buen diseño
1. Entender el problema a resolver
1. Elaborar el diseño que mejor soporte la solución al
problema a resolver
Algunas definiciones
Software + Hardware = Sistema
Diseño + Código = Software
Código + Ambiente = Programa
Programa = lista de tareas escritas en un Lenguaje
Lenguaje = Vocabulario + Reglas
Lenguaje tiene Modelo de Programación
Lenguaje implementa un Paradigma
Paradigma es una forma de pensar los problemas, un enfoque ,
una perspectiva, una mirada desde un lugar determinado
Características del Software
Chico
Grande
Corta vida
Larga vida
Estático
Cambios frecuentes
Aislado
Conectado
-
complejidad
+
Integridad conceptual
The mythical man – month, Frederick Brooks Jr., 1975/95
Integridad conceptual
y la complejidad. Mural de Diego Rivera, Legislatura de México, DF
Integridad conceptual
y la simplicidad. La paz, Pablo Picasso
Dependencias de las Técnicas de Diseño
Requerimientos: funcionales y no funcionales
Paradigma: procedural, orientado a objetos, lógico,
funcional, programación genérica, etc.
Metodología de desarrollo: catedral vs bazar
Tecnología: lenguajes de programación
Requerimientos
Requerimientos
Paradigma
tomada del libro de G.Booch
Metodología de desarrollo
La catedral y el bazar, Eric Steven Raymond, www.tuxedo.org/~esr/writings
Tecnología
Inspirada en las ideas de Grady Booch – Object Oriented Software Analysis and
Design with applications, 1992.
Prehistoria (antes de 1960): masa uniforme
Edad Antigua (década del 60): subrutinas
Edad Media (década del 70): módulos
Edad Moderna (década del 80): objetos
Edad Contemporanea (2010): multiparadigma
Prehistoria
Edad Antigua
Criterios de buen diseño
Cohesión de subrutinas alta
Acoplamiento de subrutinas bajo
Minimizar cantidad de parámetros pasados
a subrutinas
Orden de parámetros pasados a subrutinas
Algoritmos eficientes en subrutinas
Edad Media
Criterios de buen diseño
Cohesión de subrutinas alta
Acoplamiento de subrutinas bajo
Minimizar cantidad de parámetros pasados
a subrutinas
Orden de parámetros pasados a subrutinas
Algoritmos eficientes en subrutinas
Cohesión de módulos alta
Acoplameinto de módulos baja
Ocultamiento de datos en módulos
Edad Moderna
Criterios de buen diseño
Cohesión de métodos alta
Acoplamiento de métodos bajo
Minimizar cantidad de parámetros pasados
a métodos
Orden de parámetros pasados a métodos
Algoritmos eficientes en métodos
Cohesión de módulos alta
Acoplameinto de módulos baja
Ocultamiento de datos en módulos
Inversión en la cadena de dependencia
Principio de substitución de Liskov
Código clausurado ante cambios
Segregación de interfaces
Edad Moderna, continuación
Criterios de buen diseño
Detectar la dirección del vector de cambios
Encapsular lo que varía
Separación de incumbencias
Diseño simple
NO dependencias cíclicas
Edad Contemporanea
Criterios de buen diseño
Inversión en la Cadena de Dependencia
Principio de substitución de Liskov
Código clausurado ante cambios
Segregación de Interfaces
Separación de incumbencias
Demeter Law
Dependencia de los más estables
Dependencias NO cíclicas
Ejemplos.
Criterios de buen diseño
Los detalles dependen de las generalidades
Dependencias en la dirección y sentido de los
componentes más estables
Abstracción = Generalidad
Dependiente = Inestabilidad
Criterios de buen diseño
Criterios de buen diseño
Dependencia de las generalidades
Dependencias NO cíclicas
Criterios de buen diseño
Criterios de buen diseño
Dependencia de los componentes más estables
Criterios de buen diseño
Criterios de buen diseño
Inversión en la Cadena de Dependencia
Abs = Cant Cabs / (Cant Cabs + Cant Cconcr)
Ines = Cant Rsal / (Cant Rsal + Cant Rentr)
Criterios de buen diseño
Criterios de buen diseño
Substitución de Liskov
Criterios de buen diseño
Criterios de buen diseño
Código clausurado ante cambios
Criterios de buen diseño
Criterios de buen diseño
Segregación de interfaces
Criterios de buen diseño
Criterios de buen diseño
Separación de incumbencias
Criterios de buen diseño
Criterios de buen diseño
Demeter Law
Criterios de buen diseño
Criterios de buen diseño
Demeter Law
public void plotDate(Date aDate, Selection aSelection) {
TimeZone tz = aSelection.getRecorder().getLocation().getTimeZone();
...
}
// acoplado a tres clases Selection, Recorder, and Location
public void plotDate(Date aDate, TimeZone aTz) {
...
}
// solo depende de las necesidades del código tra haber
// agregado un método a Selection que devuelve la zona
plotDate(someDate, someSelection.getTimeZone());
Criterios de buen diseño
Ejemplos