Diseño Agile
-
Upload
martin-salias -
Category
Technology
-
view
463 -
download
1
description
Transcript of Diseño Agile
![Page 1: Diseño Agile](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/1.jpg)
Diseño AgileDiseño Agile
Martín SalíasUniversal Thread MagazineEditor in ChiefEditor in Chief
![Page 2: Diseño Agile](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/2.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/3.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/4.jpg)
44
DefinicionesDefiniciones
AgilidadAgilidad Análisis y DiseñoAnálisis y Diseño
AbstraccionesAbstracciones Interfaces purasInterfaces puras ColaboraciónColaboración
![Page 5: Diseño Agile](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/5.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/6.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/7.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/8.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/9.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/10.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/11.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/12.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/13.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/14.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/15.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/16.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/17.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/18.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/19.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/20.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/21.jpg)
2121
Capas acopladasCapas acopladas
CapaCapaPolíticaPolítica
CapaCapaMecanismoMecanismo
CapaCapaUtilidadUtilidad
![Page 22: Diseño Agile](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/22.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/23.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/24.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/25.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/26.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/27.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/28.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/29.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/30.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/31.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/32.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/33.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/34.jpg)
3434
Ejemplo: Prototipo IUEjemplo: Prototipo IU
![Page 35: Diseño Agile](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/35.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/36.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/37.jpg)
3737
Ejemplo: Prototipo IUEjemplo: Prototipo IU
![Page 38: Diseño Agile](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/38.jpg)
3838
Ejemplo: UMLEjemplo: UML
![Page 39: Diseño Agile](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/39.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/40.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022061613/5590e12c1a28ab45208b45ff/html5/thumbnails/41.jpg)
4141
PreguntasPreguntas
?? [email protected]@gmail.com
www.Salias.com.arwww.Salias.com.ar
Universal Thread Universal Thread www.UniversalThread.comwww.UniversalThread.com