SlideShare una empresa de Scribd logo
Modularización EfectivaDomando a la HidraAgustín RamosCertum
AgendaMotivaciónModularizaciónBeneficiosEfectos negativosConceptos y métricas útilesCaracterísticas de un diseño modular efectivoPrincipios de diseño OOPatronesPrácticas¿Qué viene?
Demandas en el desarrollocontemporáneo de softwareSoftware cada vez más complejoMayor tamañoCantidad de funcionalidad implementadaComplejidad tecnológicaCantidad y diversidad de sistemas con los que debe interactuarMayor número de contextos de uso“More isdifferent” - Philip Anderson
Demandas en el desarrollocontemporáneo de softwareAdaptabilidadRequerimientos y tecnología cambiantes… con un ritmo aceleradoTiempos muy cortos de desarrolloPara aprovechar oportunidades de mercadoDesarrollo globalizadoMúltiples equipos geográficamente dispersos
Una estrategia efectiva demodularización puede ayudara enfrentar estos retos…
Modularización¿Qué es?Particionar un sistema de acuerdo a ciertas restricciones y principios de diseño, así como una estrategia de desarrollo,gobernando las partes resultantes
Beneficios de la modularizaciónAyuda a  atacar problemas de gran tamañoPartiendo el problema y permitiendo resolverlo incrementalmente. Permite distribuir las tareas de desarrollo entre diferentes personas/equipos.ReusoSeparación de dominios (Verticales y Horizontales)Al separar la implementación de la solución de cada dominio, es posible utilizar esta implementación en un contexto distinto.
Beneficios de la modularizaciónMantenibilidadEl entendido común es que sistemas modulares, cuyos módulos presentan alta cohesión y bajo acoplamiento son más fáciles de modificar y extender
ModularizaciónNo es nada nuevo….Divide y vencerás suena muy familiar.Contamos con un arsenal de tecnologías y métodos orientados a la modularizaciónOrientación a objetosModelos de componentes (CORBA, EJB, etc)Aspectos… ¿lo hemos conseguido?
ModularizaciónLa modularización efectiva no se logra mediante el simple uso de un lenguaje o una tecnología.Es necesaria la correcta aplicación de principios y técnicas de diseño, así como el diseño de una estrategia de desarrollo.
Efectosnegativos de la moduarizaciónInfierno de la dependenciaDemasiadas dependenciasDependencias cíclicasCadenas muy largas de dependencia.Dependencias en conflicto.Paradoja del reuso.
DemasiadasdependenciasCuando una aplicación tiene demasiadas dependencias, se pueden presentar los siguientes problemas:Dificultad de instalar y/o configurarGran tamaño (tal vez inecesario)InestabilidadFragilidad relativa al cambio en las dependencias.ACBDFEG
DependenciascíclicasSe da cuando un componente A depende de otro componente B, el cual a su vez depende directa o indirectamente de A.Hace imposible usar A sin usar B y viceversa.Una modificación en A puede tener un efecto en B y viceversa.AABBC
Cadenasmuy largas de dependenciasCuando una cadena de dependencias es muy larga, la labor de determinar todas las dependencias necesarias para usar un componente puede ser muy laboriosa.Escenario:  Para agregar la capacidad X al sistema, encontré un módulo libX que provee dicha capacidad. Voy a agregarlo…libXlibAlibB!Ouch!libZlibαβ
Dependencias en conflictoEscenario:  Para agregar la capacidad a al sistema agregaré el módulo A v1.0, y para agregar la capacidad b, agregaré el módulo        B v3.5 En el mejor de los casos A v1.0 es compatible con C v2.1, y así descartamos C v1.0Pero no suele ocurrir =(C v1.0A  v1.0B v3.0C v2.0
Paradoja del re-usoMaximizar el re-uso dificulta el uso.
La otracara de la modularizaciónImplementar una buena modularización no es fácil !Requiere conocimiento profundo de los problemas involucrados….. Y de las distintas técnicas y alternativas para prevenirlos y solucionarlos
Modularización EfectivaParte IIConceptos, Métricas,Principios, Prácticas y Patrones
Conceptos y métricasútilesCohesiónAcoplamientoInestabilidadAbstracciónDistancia de la secuencia principal
CohesiónEs una medida de la interrelación que existe entre las partes que componen un componente.Para clases, se define la “Falta de cohesión de métodos” (LCOM) como el número de grupos independientes en el grafo de dependencias.ClaseMétodo CMétodo Battributo XMétodo Aattributo Yattributo Z
CohesiónPara módulos (compuestos de varias clases), se define la “Cohesión Relacional” (RC) como el promedio del número de relaciones que cada clase mantiene con otras clases del móduloRC = (R + 1) / NR = número total de relaciones entre clasesN = número total de clasesSe considera un rango aceptable [1.5, 4]
AcoplamientoSon las dependencias que existen entre módulosHay de dos tipos:AcoplamientoseferentesAcoplamientosaferentesCeCaComponente
InestabilidadSe define como I = Ce / (Ce + Ca)Su valor es de 0 a 1Ejemplo de componente máximamente estableEjemplo de componente máximamente inestableCe=0ComponenteEstableI=0Ca=3Ca=0Ce=3ComponenteInestableI=1
AbstracciónEs la razón del número de tipos abstractos dentro del módulo.A = NA / NNA = número de clases abstractas en el móduloN = número de clases en el móduloEl rango es de [0, 1]0 indica un módulo absolutamente concreto.1 indica un módulo absolutamente abstracto.
Distancia de la secuencia principalSe puede crear un diagrama que relaciona la Abstracción y la InestabilidadMódulos abstractos y estables1Módulos concretos e inestablesAbstracciónMódulos concretos y establesMódulos abstractos e inestablesInestabilidad01
¿Qué caracteriza a un diseñomodular efectivo?
Características de un diseño modular efectivoCada módulo tiene un conjunto de responsabilidades muy pequeño y bien definido.Cada módulo tiene un nombre que permite identificar claramente sus responsabilidades.Cada módulo provee una inferface, que provee el contrato del mismo en términos de requerimientos y responsabilidades, y es el mecanismo a través del cual puede ser utilizado (encapsulamiento).BA
Características de un diseño modular efectivoExisten módulos abstractos, con pocas dependencias y altamente estables.Existen también módulos concretos, que presentan cierto grado de inestabilidad debido a que usan a otros módulos para llevar a cabo el trabajo real. Estos módulos presentan un nivel de cohesión alto.Existen pocas o ninguna dependencias entre módulos concretos.
Características de un diseño modular efectivoLos módulos de alto nivel (capas superiores) tienen dependencias hacia módulos abstractos y pocas o ninguna dependencias hacia módulos concretos. Capa 1A(concreto)Capa 2B(abstracto)C(concreto)
Características de un diseño modular efectivoNo existen dependencias cíclicas entre los módulos. Las responsabilidades bien definidas de los módulos, así como los límites y fronteras entre los mismos, facilitan que los cambios se realicen de manera local, minimizando el impacto en todo el sistema.AB
Características de un diseño modular efectivoLos módulos aislan los cambios
Características de un diseño modular efectivoEl nivel de granularidad de los módulos es tal que establece un buen balance entre potencial de reuso y facilidad de uso.
Principios de Diseño OO
Principios de diseño OOPrincipio de responsabilidad únicaPrincipio “Abierto-Cerrado”Principio de substitución de LiskovPrincipio de segregación de interfaces.Principio de inversión de dependencias
Principios de diseño OOSingle responsibilityprincipleOpen-ClosedprincipleLiskovsubstitutionprincipleInterfacesegregationprincipleDependencyinversionprincipleSOLIDPrincipio de equivalencia “liberación/reuso”Robert C.  Martin (Uncle Bob)http://bit.ly/ooprinciples
Principios de diseño OOPrincipio de responsabilidad única“Una clase debería tener una y sola una razón para sufrir cambios”Principio “abierto-cerrado”“Las clases deberían poder ser extendidas sin necesidad de ser modificadas”Principio de substitución de Liskov“Las clases derivadas deben poder usarse en aquellos lugares donde se espera a la clase base”
Principios de diseño OOPrincipio de inversión de dependencias“Los módulos de alto nivel no deberían depender en módulos de bajo nivel, ambos deberían depender de abstracciones”Principio de segregación de interfaces.“Crea interfaces de grano fino que son específicas para un cliente o escenario de uso”Principio de equivalencia liberación/reuso“La unidad de reuso es la unidad de liberación”
¿Qué constituye una buena dependencia?Una “buena dependencia” es aquella dirigida a un elemento de poca volatilidad (estable). Entre menos volátil sea el blanco de la dependencia, mejor es la calidad de ésta.Una “mala dependencia” es aquella dirigida e un elemento muy volátilComponenteEstableComponenteInestable
Patrones de Modularización
Patrones de ModularizaciónPatrones BásicosAdministra las relacionesReuso de módulosMódulos cohesivosReuso de clases.Patrones de DependenciasDependencias acíclicasConservación de las capas físicasIndependencia del contenedorDespliegue independienteExcepciones co-localizadas
Patrones de ModularizaciónPatrones de UsabilidadInterfaz publicadaConfiguración externaFachada de módulosPatrones de ExtensibilidadMódulos establesMódulos abstractosFábrica de implementaciónAbstracciones separadas
Patrones de ModularizaciónPatrones de UtileríaCompilación niveladaComponente de pruebasMás detalleshttp://bit.ly/asqmsD
Prácticas
Prácticasparauna modularización efectivaImplementa un esquema de versionamiento a nivel módulos.Sin esto es imposible controlar el uso de módulos.Si no sabes como, comienza por 3 números: Mj.Mn.Bf¡No le quites los números de versión a los binarios!Usa un repositorio de módulos.Dentro de tu organización o grupo de trabajoDebe ser administrado debidamente.Establece políticas para subir artefactosIncorpora un mecanismo de resolución de dependencias.
Prácticasparauna modularización efectivaIntegra tu sistema de compilación con tu repositorio de módulos.Audita continuamente las métricas de tus módulos.Refactoriza continuamente para evitarCódigo duplicadoClases o métodos muy complejosViolaciones de los principios de OOMétricas con valores fuera de rango permitido
¿Qué viene?Sistemas de módulos que orienten a los desarrolladores a implementar una buena modularización, y se los faciliteTanto herramientas de desarrollo como entornos de ejecuciónEn el mundo java, OSGi cobra cada vez más fuerza.Repositorios de dependencias que soportanLa noción de ‘feature’Rangos de versiones para sus dependencias.Modularización de servicios, en la nube.
¿Preguntas?
ReferenciasPrincipios de diseño OOhttp://bit.ly/oopandpMétricas de diseño relacionadas con modularizaciónhttp://bit.ly/oometricsPatrones de modularizaciónhttp://bit.ly/asqmsLibro: Modular Java	http://bit.ly/cedNNA OSGihttp://www.osgi.org
¡Gracias!Agustín Ramoshttp://machinesareus.blogspot.comTwitter:  @MachinesAreUs

Más contenido relacionado

PPT
La influencia árabe en España
PPT
Diego Velázquez
PDF
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
PPTX
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
PDF
Sistemas Tolerantes a Fallas
PDF
Pairwise and property based testing
PDF
¿En qué la estamos regando en pruebas de software?
PDF
Principios orientacion-objetos
La influencia árabe en España
Diego Velázquez
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
Sistemas Tolerantes a Fallas
Pairwise and property based testing
¿En qué la estamos regando en pruebas de software?
Principios orientacion-objetos

Similar a Modularización efectiva - domando a la hidra (20)

PPT
Clase 3 - Programación IV - BSI1100
PPTX
Arquitectura software.taxonomias.modularidad.001
PDF
Is Uncle Bob Wrong?
PPTX
6 Principios de Programación Orientada a Objetos
PPTX
Principios SOLID de Diseño Orientado a Objetos
PPTX
Solid Principles
PDF
Elementos del software orientado a objetos reutilizable
PPTX
Nixon torrealbav
PDF
02 -introduccion_a_la_tecnologia_orientada_a_objetos
PDF
Clean code 10-11
DOCX
Asignación 1 astrid c.
DOCX
Proyecto Final Modelado de Proceso de Negocios
PPT
Prog oo con_java
PPSX
Conceptos avanzados oo (presentación 4)
PPT
Orientacion A Objetos
PDF
Nexus y la Deuda Tecnica
PDF
Anon metodologia de la programacion orientada a objetos con c++
PPTX
Diseños expocicion
PPTX
Principios SOLID
PPTX
Clase 3 - Programación IV - BSI1100
Arquitectura software.taxonomias.modularidad.001
Is Uncle Bob Wrong?
6 Principios de Programación Orientada a Objetos
Principios SOLID de Diseño Orientado a Objetos
Solid Principles
Elementos del software orientado a objetos reutilizable
Nixon torrealbav
02 -introduccion_a_la_tecnologia_orientada_a_objetos
Clean code 10-11
Asignación 1 astrid c.
Proyecto Final Modelado de Proceso de Negocios
Prog oo con_java
Conceptos avanzados oo (presentación 4)
Orientacion A Objetos
Nexus y la Deuda Tecnica
Anon metodologia de la programacion orientada a objetos con c++
Diseños expocicion
Principios SOLID
Publicidad

Más de Agustin Ramos (11)

PDF
Exploring Elixir Codebases with Archeometer
PDF
From Elixir to Akka (and back) - ElixirConf Mx 2017
PDF
Programación funcional con haskell
PDF
Técnicas basadas en matriz de estructura de diseño
KEY
Acercándose a la entrega continua
KEY
Modelos de paralelismo y concurrencia
PPTX
Arquitecturas que crecen y arquitecturas que no
PDF
Arqueología de software
PPTX
Hola OSGi
PPTX
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
PPTX
BDD - Desarrollo dirigido por comportamiento
Exploring Elixir Codebases with Archeometer
From Elixir to Akka (and back) - ElixirConf Mx 2017
Programación funcional con haskell
Técnicas basadas en matriz de estructura de diseño
Acercándose a la entrega continua
Modelos de paralelismo y concurrencia
Arquitecturas que crecen y arquitecturas que no
Arqueología de software
Hola OSGi
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
BDD - Desarrollo dirigido por comportamiento
Publicidad

Último (20)

PDF
Temas y subtemas de las fichas 1 y 2.pdf
PDF
Estrategia de apoyo tecnología grado 9-3
PDF
Influencia-del-uso-de-redes-sociales.pdf
DOCX
Trabajo colaborativo Grupo #2.docxmkkkkkkl
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
DOCX
Las nuevas tecnologías en la salud - enfermería técnica.
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PPTX
Introduccion a servidores de Aplicaciones (1).pptx
PDF
Conceptos básicos de programación tecnología.pdf
PDF
clase auditoria informatica 2025.........
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PDF
SAP Transportation Management para LSP, TM140 Col18
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPTX
Presentación de Redes de Datos modelo osi
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Temas y subtemas de las fichas 1 y 2.pdf
Estrategia de apoyo tecnología grado 9-3
Influencia-del-uso-de-redes-sociales.pdf
Trabajo colaborativo Grupo #2.docxmkkkkkkl
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Las nuevas tecnologías en la salud - enfermería técnica.
Plantilla para Diseño de Narrativas Transmedia.pdf
REDES INFORMATICAS REDES INFORMATICAS.pptx
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Introduccion a servidores de Aplicaciones (1).pptx
Conceptos básicos de programación tecnología.pdf
clase auditoria informatica 2025.........
Zarate Quispe Alex aldayir aplicaciones de internet .docx
SAP Transportation Management para LSP, TM140 Col18
Presentación PASANTIAS AuditorioOO..pptx
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Presentación de Redes de Datos modelo osi
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL

Modularización efectiva - domando a la hidra

  • 1. Modularización EfectivaDomando a la HidraAgustín RamosCertum
  • 2. AgendaMotivaciónModularizaciónBeneficiosEfectos negativosConceptos y métricas útilesCaracterísticas de un diseño modular efectivoPrincipios de diseño OOPatronesPrácticas¿Qué viene?
  • 3. Demandas en el desarrollocontemporáneo de softwareSoftware cada vez más complejoMayor tamañoCantidad de funcionalidad implementadaComplejidad tecnológicaCantidad y diversidad de sistemas con los que debe interactuarMayor número de contextos de uso“More isdifferent” - Philip Anderson
  • 4. Demandas en el desarrollocontemporáneo de softwareAdaptabilidadRequerimientos y tecnología cambiantes… con un ritmo aceleradoTiempos muy cortos de desarrolloPara aprovechar oportunidades de mercadoDesarrollo globalizadoMúltiples equipos geográficamente dispersos
  • 5. Una estrategia efectiva demodularización puede ayudara enfrentar estos retos…
  • 6. Modularización¿Qué es?Particionar un sistema de acuerdo a ciertas restricciones y principios de diseño, así como una estrategia de desarrollo,gobernando las partes resultantes
  • 7. Beneficios de la modularizaciónAyuda a atacar problemas de gran tamañoPartiendo el problema y permitiendo resolverlo incrementalmente. Permite distribuir las tareas de desarrollo entre diferentes personas/equipos.ReusoSeparación de dominios (Verticales y Horizontales)Al separar la implementación de la solución de cada dominio, es posible utilizar esta implementación en un contexto distinto.
  • 8. Beneficios de la modularizaciónMantenibilidadEl entendido común es que sistemas modulares, cuyos módulos presentan alta cohesión y bajo acoplamiento son más fáciles de modificar y extender
  • 9. ModularizaciónNo es nada nuevo….Divide y vencerás suena muy familiar.Contamos con un arsenal de tecnologías y métodos orientados a la modularizaciónOrientación a objetosModelos de componentes (CORBA, EJB, etc)Aspectos… ¿lo hemos conseguido?
  • 10. ModularizaciónLa modularización efectiva no se logra mediante el simple uso de un lenguaje o una tecnología.Es necesaria la correcta aplicación de principios y técnicas de diseño, así como el diseño de una estrategia de desarrollo.
  • 11. Efectosnegativos de la moduarizaciónInfierno de la dependenciaDemasiadas dependenciasDependencias cíclicasCadenas muy largas de dependencia.Dependencias en conflicto.Paradoja del reuso.
  • 12. DemasiadasdependenciasCuando una aplicación tiene demasiadas dependencias, se pueden presentar los siguientes problemas:Dificultad de instalar y/o configurarGran tamaño (tal vez inecesario)InestabilidadFragilidad relativa al cambio en las dependencias.ACBDFEG
  • 13. DependenciascíclicasSe da cuando un componente A depende de otro componente B, el cual a su vez depende directa o indirectamente de A.Hace imposible usar A sin usar B y viceversa.Una modificación en A puede tener un efecto en B y viceversa.AABBC
  • 14. Cadenasmuy largas de dependenciasCuando una cadena de dependencias es muy larga, la labor de determinar todas las dependencias necesarias para usar un componente puede ser muy laboriosa.Escenario: Para agregar la capacidad X al sistema, encontré un módulo libX que provee dicha capacidad. Voy a agregarlo…libXlibAlibB!Ouch!libZlibαβ
  • 15. Dependencias en conflictoEscenario: Para agregar la capacidad a al sistema agregaré el módulo A v1.0, y para agregar la capacidad b, agregaré el módulo B v3.5 En el mejor de los casos A v1.0 es compatible con C v2.1, y así descartamos C v1.0Pero no suele ocurrir =(C v1.0A v1.0B v3.0C v2.0
  • 16. Paradoja del re-usoMaximizar el re-uso dificulta el uso.
  • 17. La otracara de la modularizaciónImplementar una buena modularización no es fácil !Requiere conocimiento profundo de los problemas involucrados….. Y de las distintas técnicas y alternativas para prevenirlos y solucionarlos
  • 18. Modularización EfectivaParte IIConceptos, Métricas,Principios, Prácticas y Patrones
  • 20. CohesiónEs una medida de la interrelación que existe entre las partes que componen un componente.Para clases, se define la “Falta de cohesión de métodos” (LCOM) como el número de grupos independientes en el grafo de dependencias.ClaseMétodo CMétodo Battributo XMétodo Aattributo Yattributo Z
  • 21. CohesiónPara módulos (compuestos de varias clases), se define la “Cohesión Relacional” (RC) como el promedio del número de relaciones que cada clase mantiene con otras clases del móduloRC = (R + 1) / NR = número total de relaciones entre clasesN = número total de clasesSe considera un rango aceptable [1.5, 4]
  • 22. AcoplamientoSon las dependencias que existen entre módulosHay de dos tipos:AcoplamientoseferentesAcoplamientosaferentesCeCaComponente
  • 23. InestabilidadSe define como I = Ce / (Ce + Ca)Su valor es de 0 a 1Ejemplo de componente máximamente estableEjemplo de componente máximamente inestableCe=0ComponenteEstableI=0Ca=3Ca=0Ce=3ComponenteInestableI=1
  • 24. AbstracciónEs la razón del número de tipos abstractos dentro del módulo.A = NA / NNA = número de clases abstractas en el móduloN = número de clases en el móduloEl rango es de [0, 1]0 indica un módulo absolutamente concreto.1 indica un módulo absolutamente abstracto.
  • 25. Distancia de la secuencia principalSe puede crear un diagrama que relaciona la Abstracción y la InestabilidadMódulos abstractos y estables1Módulos concretos e inestablesAbstracciónMódulos concretos y establesMódulos abstractos e inestablesInestabilidad01
  • 26. ¿Qué caracteriza a un diseñomodular efectivo?
  • 27. Características de un diseño modular efectivoCada módulo tiene un conjunto de responsabilidades muy pequeño y bien definido.Cada módulo tiene un nombre que permite identificar claramente sus responsabilidades.Cada módulo provee una inferface, que provee el contrato del mismo en términos de requerimientos y responsabilidades, y es el mecanismo a través del cual puede ser utilizado (encapsulamiento).BA
  • 28. Características de un diseño modular efectivoExisten módulos abstractos, con pocas dependencias y altamente estables.Existen también módulos concretos, que presentan cierto grado de inestabilidad debido a que usan a otros módulos para llevar a cabo el trabajo real. Estos módulos presentan un nivel de cohesión alto.Existen pocas o ninguna dependencias entre módulos concretos.
  • 29. Características de un diseño modular efectivoLos módulos de alto nivel (capas superiores) tienen dependencias hacia módulos abstractos y pocas o ninguna dependencias hacia módulos concretos. Capa 1A(concreto)Capa 2B(abstracto)C(concreto)
  • 30. Características de un diseño modular efectivoNo existen dependencias cíclicas entre los módulos. Las responsabilidades bien definidas de los módulos, así como los límites y fronteras entre los mismos, facilitan que los cambios se realicen de manera local, minimizando el impacto en todo el sistema.AB
  • 31. Características de un diseño modular efectivoLos módulos aislan los cambios
  • 32. Características de un diseño modular efectivoEl nivel de granularidad de los módulos es tal que establece un buen balance entre potencial de reuso y facilidad de uso.
  • 34. Principios de diseño OOPrincipio de responsabilidad únicaPrincipio “Abierto-Cerrado”Principio de substitución de LiskovPrincipio de segregación de interfaces.Principio de inversión de dependencias
  • 35. Principios de diseño OOSingle responsibilityprincipleOpen-ClosedprincipleLiskovsubstitutionprincipleInterfacesegregationprincipleDependencyinversionprincipleSOLIDPrincipio de equivalencia “liberación/reuso”Robert C. Martin (Uncle Bob)http://bit.ly/ooprinciples
  • 36. Principios de diseño OOPrincipio de responsabilidad única“Una clase debería tener una y sola una razón para sufrir cambios”Principio “abierto-cerrado”“Las clases deberían poder ser extendidas sin necesidad de ser modificadas”Principio de substitución de Liskov“Las clases derivadas deben poder usarse en aquellos lugares donde se espera a la clase base”
  • 37. Principios de diseño OOPrincipio de inversión de dependencias“Los módulos de alto nivel no deberían depender en módulos de bajo nivel, ambos deberían depender de abstracciones”Principio de segregación de interfaces.“Crea interfaces de grano fino que son específicas para un cliente o escenario de uso”Principio de equivalencia liberación/reuso“La unidad de reuso es la unidad de liberación”
  • 38. ¿Qué constituye una buena dependencia?Una “buena dependencia” es aquella dirigida a un elemento de poca volatilidad (estable). Entre menos volátil sea el blanco de la dependencia, mejor es la calidad de ésta.Una “mala dependencia” es aquella dirigida e un elemento muy volátilComponenteEstableComponenteInestable
  • 40. Patrones de ModularizaciónPatrones BásicosAdministra las relacionesReuso de módulosMódulos cohesivosReuso de clases.Patrones de DependenciasDependencias acíclicasConservación de las capas físicasIndependencia del contenedorDespliegue independienteExcepciones co-localizadas
  • 41. Patrones de ModularizaciónPatrones de UsabilidadInterfaz publicadaConfiguración externaFachada de módulosPatrones de ExtensibilidadMódulos establesMódulos abstractosFábrica de implementaciónAbstracciones separadas
  • 42. Patrones de ModularizaciónPatrones de UtileríaCompilación niveladaComponente de pruebasMás detalleshttp://bit.ly/asqmsD
  • 44. Prácticasparauna modularización efectivaImplementa un esquema de versionamiento a nivel módulos.Sin esto es imposible controlar el uso de módulos.Si no sabes como, comienza por 3 números: Mj.Mn.Bf¡No le quites los números de versión a los binarios!Usa un repositorio de módulos.Dentro de tu organización o grupo de trabajoDebe ser administrado debidamente.Establece políticas para subir artefactosIncorpora un mecanismo de resolución de dependencias.
  • 45. Prácticasparauna modularización efectivaIntegra tu sistema de compilación con tu repositorio de módulos.Audita continuamente las métricas de tus módulos.Refactoriza continuamente para evitarCódigo duplicadoClases o métodos muy complejosViolaciones de los principios de OOMétricas con valores fuera de rango permitido
  • 46. ¿Qué viene?Sistemas de módulos que orienten a los desarrolladores a implementar una buena modularización, y se los faciliteTanto herramientas de desarrollo como entornos de ejecuciónEn el mundo java, OSGi cobra cada vez más fuerza.Repositorios de dependencias que soportanLa noción de ‘feature’Rangos de versiones para sus dependencias.Modularización de servicios, en la nube.
  • 48. ReferenciasPrincipios de diseño OOhttp://bit.ly/oopandpMétricas de diseño relacionadas con modularizaciónhttp://bit.ly/oometricsPatrones de modularizaciónhttp://bit.ly/asqmsLibro: Modular Java http://bit.ly/cedNNA OSGihttp://www.osgi.org