Técnicas de Diseño Diccionario español Técnica: procedimiento

Anuncio
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
Descargar