Diseño Agile

41
Diseño Agile Diseño Agile Martín Salías Universal Thread Magazine Editor in Chief Editor in Chief

description

Fundamentals of Agile Object Oriented Design.

Transcript of Diseño Agile

Page 1: Diseño Agile

Diseño AgileDiseño Agile

Martín SalíasUniversal Thread MagazineEditor in ChiefEditor in Chief

Page 2: Diseño Agile

22

Martín SalíasMartín Salías

Arquitecto de SoftwareArquitecto de Software Latinoamérica, USA, Canadá, Latinoamérica, USA, Canadá,

Australia y EscandinaviaAustralia y Escandinavia

Microsoft Consulting ServicesMicrosoft Consulting Services MSDN Cono SurMSDN Cono Sur Level Extreme .NET MagazineLevel Extreme .NET Magazine

¿Quién es este tipo?¿Quién es este tipo?

Page 3: Diseño Agile

33

AgendaAgenda

DefinicionesDefiniciones La decadencia del softwareLa decadencia del software Enfoque AgileEnfoque Agile Principios de Diseño Orientado a Principios de Diseño Orientado a

ObjetosObjetos Breve Introducción a Agile ModelingBreve Introducción a Agile Modeling

Page 4: Diseño Agile

44

DefinicionesDefiniciones

AgilidadAgilidad Análisis y DiseñoAnálisis y Diseño

AbstraccionesAbstracciones Interfaces purasInterfaces puras ColaboraciónColaboración

Page 5: Diseño Agile

55

La decadencia del softwareLa decadencia del software

RigidezRigidez FragilidadFragilidad InmovilidadInmovilidad ViscosidadViscosidad Complejidad Complejidad

innecesariainnecesaria Repetición innecesariaRepetición innecesaria OpacidadOpacidad

Page 6: Diseño Agile

66

Enfoque AgileEnfoque Agile

Qué asumimos:Qué asumimos:– La única constante en el software es el La única constante en el software es el cambio en cambio en

los requerimientoslos requerimientos

Qué hacemos:Qué hacemos:– Detectar el problema siguiendo las metodologías Detectar el problema siguiendo las metodologías

ágileságiles– Diagnosticar aplicando principios de diseño (OOD)Diagnosticar aplicando principios de diseño (OOD)– Resolver mejorando el diseño, usando Resolver mejorando el diseño, usando

frecuentemente patrones como referenciafrecuentemente patrones como referencia

Page 7: Diseño Agile

77

Principios de Diseño OOPrincipios de Diseño OO

Responsabilidad únicaResponsabilidad única Abierto-CerradoAbierto-Cerrado Substitución de LiskovSubstitución de Liskov Inversión de Inversión de

dependenciadependencia Segregación de InterfazSegregación de Interfaz

Page 8: Diseño Agile

88

Responsabilidad únicaResponsabilidad única

Una clase debe tener una Una clase debe tener una única razón para ser cambiada.única razón para ser cambiada.

Responsabilidad = Eje de cambiosResponsabilidad = Eje de cambios

(SI el cambio sucede)(SI el cambio sucede)

Recibir el primer golpeRecibir el primer golpe

Page 9: Diseño Agile

99

Dos responsabilidadesDos responsabilidades

AplicaciónAplicación

GeométricaGeométrica + Draw()+ Draw()

+ Area() : double+ Area() : double

MyRectangleMyRectangle

AplicaciónAplicación

GráficaGráfica

GUIGUI

Page 10: Diseño Agile

1010

Deslindando responsabilidadesDeslindando responsabilidades

AplicaciónAplicación

GeométricaGeométrica

+ Draw()+ Draw()

GraphRectangleGraphRectangle

AplicaciónAplicación

GráficaGráfica

GUIGUI

+ Area() : double+ Area() : double

GeoRectangleGeoRectangle

AplicaciónAplicación

GeométricaGeométricaAplicaciónAplicación

GeométricaGeométrica

AplicaciónAplicación

GráficaGráficaAplicaciónAplicación

GeométricaGeométrica

Page 11: Diseño Agile

1111

Abierto-CerradoAbierto-Cerrado

Las entidades de software (clases, Las entidades de software (clases, módulos, funciones, etc) deben estar módulos, funciones, etc) deben estar abiertas a extensión, pero cerradas a abiertas a extensión, pero cerradas a

modificación.modificación.

Acercarse a un idealAcercarse a un ideal

Los cambios deben generar código Los cambios deben generar código nuevonuevo,,no modificar el código no modificar el código viejoviejo..

Page 12: Diseño Agile

1212

Cerrando a modificacionesCerrando a modificaciones

ServidorServidorClienteClienteEl cliente está abierto El cliente está abierto

a modificaciones.a modificaciones.

<<Interfaz>><<Interfaz>>

IClienteIClienteClienteCliente

Patrón Strategy: Patrón Strategy:

El cliente está abiertoEl cliente está abierto

y cerrado.y cerrado.

ServidorServidor

Page 13: Diseño Agile

1313

Cerrando a modificacionesCerrando a modificaciones

+ ReglaPolitica()+ ReglaPolitica()

- Servicio()- Servicio()

PolíticaPolítica

- Servicio()- Servicio()

ImplementaciónImplementación

Patrón Template Method:Patrón Template Method:

La clase base está cerradaLa clase base está cerradaa modificaciones.a modificaciones.

La implementación delLa implementación delmétodo lo abre a cuantasmétodo lo abre a cuantasextensiones se necesiten.extensiones se necesiten.

Page 14: Diseño Agile

1414

Substitución de LiskovSubstitución de Liskov

Los subtipos deben ser substituiblesLos subtipos deben ser substituiblespor sus tipos base.por sus tipos base.

Si para cada objeto Si para cada objeto oo11 de tipo de tipo SS hay un objeto hay un objeto oo22 de tipo de tipo TT tal que tal que para todo programa para todo programa PP definido en términos de definido en términos de TT, el comportamiento , el comportamiento de de PP no varía cuando no varía cuando oo11 es sustitido por es sustitido por oo22, entonces , entonces SS es un subtipo es un subtipo de de TT..

Es la base de poder del polimorfismo.Es la base de poder del polimorfismo.

Cuidarse de GetType() y otros datos de tipo en runtime.Cuidarse de GetType() y otros datos de tipo en runtime.

Page 15: Diseño Agile

1515

Implicancias del LSPImplicancias del LSP

La validez depende del contextoLa validez depende del contexto

No podemos validar un modelo No podemos validar un modelo aisladamenteaisladamente

Diseñar basándose en Diseñar basándose en comportamientoscomportamientos

Presunciones Presunciones razonablesrazonables (¿cómo (¿cómo acotarlas?)acotarlas?)

Page 16: Diseño Agile

1616

Diseño por contratoDiseño por contrato

Preservar las invariantesPreservar las invariantes

Pre y pos-condicionesPre y pos-condiciones

– La redeclaración de una rutina (en una derivación) debe La redeclaración de una rutina (en una derivación) debe solamente reemplazar la precondición original con una solamente reemplazar la precondición original con una igual o más débil, y la poscondición original con una igual o igual o más débil, y la poscondición original con una igual o más fuerte.más fuerte.

Eiffel soporta nativamente DBCEiffel soporta nativamente DBC En .NET ó Java usamos Unit TestsEn .NET ó Java usamos Unit Tests

Page 17: Diseño Agile

1717

Un ejemplo más complejo (1)Un ejemplo más complejo (1)

ListaLista

ListaListailimitadailimitada

ListaListalimitadalimitada

ListaListailimitadailimitada

ListaListalimitadalimitada

LibreríaLibrería

Page 18: Diseño Agile

1818

Un ejemplo más complejo (2)Un ejemplo más complejo (2)

ListaLista

ListaListapersistentepersistente

ListaListapersistentepersistente

LibreríaLibrería

ListaListapersistentepersistente

Page 19: Diseño Agile

1919

Un ejemplo más complejo (3)Un ejemplo más complejo (3)

ContenedorContenedor

ListaListapersistentepersistente

LibreríaLibrería

ListaListapersistentepersistente

Quitar(T)Quitar(T)

Existe(T)Existe(T)

ListaLista

Agregar(T)Agregar(T)

ListaListaPersistentePersistenteAgregar(T)Agregar(T)

Page 20: Diseño Agile

2020

Inversión de dependenciaInversión de dependencia

a)a) Los módulos de alto nivel no deben Los módulos de alto nivel no deben depender de los módulos de bajo nivel. depender de los módulos de bajo nivel. Ambos deben depender de abstracciones.Ambos deben depender de abstracciones.

b)b) Las abstracciones no deben depender de Las abstracciones no deben depender de detalles. Los detalles deben depender de detalles. Los detalles deben depender de las abstracciones.las abstracciones.

Es el principio general detrás del concepto Es el principio general detrás del concepto de Layers o Capas.de Layers o Capas.

Page 21: Diseño Agile

2121

Capas acopladasCapas acopladas

CapaCapaPolíticaPolítica

CapaCapaMecanismoMecanismo

CapaCapaUtilidadUtilidad

Page 22: Diseño Agile

2222

Política

Política

Meca

nism

oM

eca

nism

oU

tilidad

Utilid

ad

Capas desacopladasCapas desacopladas

CapaCapaPolíticaPolítica

CapaCapaMecanismoMecanismo

CapaCapaUtilidadUtilidad

<<interface>><<interface>>

Servicio deServicio depolíticaspolíticas

<<interface>><<interface>>

Servicio deServicio demecanismosmecanismos

Page 23: Diseño Agile

2323

Dependencia de InterfacesDependencia de Interfaces

Responder a interfaces desacoplaResponder a interfaces desacopla La propiedad de la interfaz debe ser del clienteLa propiedad de la interfaz debe ser del cliente Principio de Hollywood: Principio de Hollywood:

“No nos llame, lo llamaremos”“No nos llame, lo llamaremos” Depender de abstracciones como ideal implica:Depender de abstracciones como ideal implica:

– Las variables no deben apuntar a clases concretasLas variables no deben apuntar a clases concretas– Las clases no deberían derivar de clases concretasLas clases no deberían derivar de clases concretas– Los métodos no deberían sobrescribir una implementación Los métodos no deberían sobrescribir una implementación

de su clase base.de su clase base.– Excepciones: Factories (excepto si son reflectivas)Excepciones: Factories (excepto si son reflectivas)

Cambiar las interfaces sólo si el cliente (su dueño) Cambiar las interfaces sólo si el cliente (su dueño) lo necesita.lo necesita.

Page 24: Diseño Agile

2424

Segregación de InterfazSegregación de Interfaz

Los clientes no deben ser forzados a depender Los clientes no deben ser forzados a depender de métodos que no usan.de métodos que no usan.

Apunta a evitar las interfaces “gordas”.Apunta a evitar las interfaces “gordas”.

No importa la cantidad de métodos, sino que todos No importa la cantidad de métodos, sino que todos sus clientes las utilicen.sus clientes las utilicen.

Inadvertidamente podemos Inadvertidamente podemos acoplar clientesacoplar clientes que usan que usan ciertos métodos con ciertos métodos con otros clientes otros clientes que no los usan.que no los usan.

Page 25: Diseño Agile

2525

Una interfaz engordaUna interfaz engorda

PuertaPuerta

+ Trabar()+ Trabar()

+ Destrabar()+ Destrabar()

+ Abierta()+ Abierta()

TimerTimer<<interface>><<interface>>

Cliente TimerCliente Timer

+ TimeOut()+ TimeOut()

PuertaPuerta

Puerta Puerta temporizadatemporizada

Page 26: Diseño Agile

2626

Separación por delegaciónSeparación por delegación

TimerTimer<<interface>><<interface>>

Cliente TimerCliente Timer

+ TimeOut()+ TimeOut()

PuertaPuerta

Puerta Puerta temporizadatemporizada

Adapter Puerta Adapter Puerta

TemporizadaTemporizada

+ TimeOut()+ TimeOut()

<<instancia<<instancia>>>>

+ TimeOutPuerta()+ TimeOutPuerta()

Page 27: Diseño Agile

2727

Separación por herencia Separación por herencia múltiplemúltiple

TimerTimer<<interface>><<interface>>

Cliente TimerCliente Timer

+ TimeOut()+ TimeOut() PuertaPuerta

Puerta Puerta

TemporizadaTemporizada

+ TimeOut()+ TimeOut()

Page 28: Diseño Agile

2828

Agile ModelingAgile Modeling

Modelado livianoModelado liviano Soporta XP, RUP, Soporta XP, RUP,

otrosotros Basado en valores Basado en valores

XPXP

Principios XP másPrincipios XP más– Modelar con un Modelar con un

propósitopropósito– Múltiples modelosMúltiples modelos– Viajar livianoViajar liviano

Page 29: Diseño Agile

2929

Prácticas de AMPrácticas de AM

Modelar con clientesModelar con clientes Aplicar los artefactos correctosAplicar los artefactos correctos Considerar pruebasConsiderar pruebas Varios Modelos en paraleloVarios Modelos en paralelo Modelos sencillos y públicosModelos sencillos y públicos Iterar hacia otro artefactoIterar hacia otro artefacto Modelado incrementalModelado incremental Modelar con otrosModelar con otros Comprobar con códigoComprobar con código Herramientas simples (papel y lápiz)Herramientas simples (papel y lápiz)

Page 30: Diseño Agile

3030

Espacio de trabajoEspacio de trabajo

Compatible con espacio XPCompatible con espacio XP Pizarrones y cámaraPizarrones y cámara Paredes para colgar modelosParedes para colgar modelos Mesa amplia de trabajoMesa amplia de trabajo Libros de referencia a manoLibros de referencia a mano Libre de sillas en la Zona de ModeladoLibre de sillas en la Zona de Modelado

Page 31: Diseño Agile

3131

Agile Modeling y XPAgile Modeling y XPStand Up

Meeting at9:00

Pair Up -- QuickDesign Session

Test Q&A

Code Refactor

Integrate orToss

Go Home at17:00

Page 32: Diseño Agile

3232

RequerimientosRequerimientos

Casos de Uso esenciales y Casos de Casos de Uso esenciales y Casos de cambioscambios

Prototipos de Interfaz de UsuarioPrototipos de Interfaz de Usuario Diagramas de flujo de la IUDiagramas de flujo de la IU Modelos CRCModelos CRC Reglas de negociosReglas de negocios Limitantes – Requerimientos técnicosLimitantes – Requerimientos técnicos Historias de UsuarioHistorias de Usuario CaracterísticasCaracterísticas

Page 33: Diseño Agile

3333

Ejemplo: Casos de UsoEjemplo: Casos de Uso

Instructor

Grade Admistrator

Input marks

Student

Researcher

Enroll in seminar

Finish seminar

Attend seminar

Drop seminar

Registrar

Pay Fees

Inform Student ofGrades

Produce FeeSchedule

Teach Seminar

Obtain StudentGrant

Obtain StudentLoan

Reimburse CourseFees

Drop out ofSchool

Graduate FromSchool

Notify Students ofSchedule Changes

Produce TeachingSchedule

Apply for Grant

Page 34: Diseño Agile

3434

Ejemplo: Prototipo IUEjemplo: Prototipo IU

Page 35: Diseño Agile

3535

Ejemplo: Modelo CRCEjemplo: Modelo CRC

Student <<Actor>>

Provide information about selfRequest to enroll in seminarRequest Transcript

Enroll in SeminarTranscript

Enroll in Seminar <<UI>>

**See the prototype**Request identifying info for studentEnable seminar searchDisplay seminar listDisplay seminar feesDisplay professor info

Student

SeminarSeminar, ProfessorStudentProfessor

Transcript <<UI>>

**See the prototype**Get student infoGet seminars student tookDetermine average markOutput self

StudentSeminarProfessorEnrollment Record

Seminar

NameSeminar numberFeesWaiting listEnrolled studentsInstructorAdd studentDrop student

StudentProfessor

Enrollment Record

Mark(s) receivedAverage to dateFinal gradeStudentSeminar

.

Professor

NameAddressPhone numberEmail addressSalaryProvide informationSeminars instructing

Seminar

Student

NameAddressPhone numberEmail addressStudent numberAverage mark receivedValidate identifying infoProvide list of seminars taken

Enrollment Record

Page 36: Diseño Agile

3636

AnálisisAnálisis

Elabora sobre los requerimientosElabora sobre los requerimientos Avanza en artefactos (simples)Avanza en artefactos (simples)

– Diagramas UMLDiagramas UML– Prototipos detalladosPrototipos detallados– Diagramas de flujoDiagramas de flujo– Diseño de interfaces externasDiseño de interfaces externas

En XP sigue sin ser una fase, sino En XP sigue sin ser una fase, sino parte del proceso de desarrolloparte del proceso de desarrollo

Page 37: Diseño Agile

3737

Ejemplo: Prototipo IUEjemplo: Prototipo IU

Page 38: Diseño Agile

3838

Ejemplo: UMLEjemplo: UML

Page 39: Diseño Agile

3939

DiseñoDiseño

Determinación genérica de distribuciónDeterminación genérica de distribución Esquema de colaboración generalEsquema de colaboración general Diseño general de modelos de datosDiseño general de modelos de datos Consideración de Patrones posiblesConsideración de Patrones posibles

¿Hasta dónde llegar ¿Hasta dónde llegar en papelen papel?? ¿Cuánto invertir antes del código?¿Cuánto invertir antes del código?

Consideración de escenariosConsideración de escenarios

Page 40: Diseño Agile

4040

BibliografíaBibliografía

John HuntJohn Hunt David WestDavid West

Matt Weisfeld Matt Weisfeld Bertrand MeyerBertrand Meyer

Rebecca Wirfs-Rebecca Wirfs-Brock Brock

Scott AmblerScott Ambler

Page 41: Diseño Agile

4141

PreguntasPreguntas

?? [email protected]@gmail.com

www.Salias.com.arwww.Salias.com.ar

Universal Thread Universal Thread www.UniversalThread.comwww.UniversalThread.com