Almudena Moya Muñoz Julio 2006 Una vuelta de tuerca a los principios de diseño ágiles.

Slides:



Advertisements
Presentaciones similares
S.O.L.I.D. AltNetHispano Carlos Peix
Advertisements

MODELOS ORIENTADOS A OBJETOS
Fundamentos de Diseño de Software INFT.1
FACHADA COMPOSITOR MEMENTO
Lenguaje Unificado de Modelado
Enfoques de desarrollo
CONCLUSIONES DE LA SEGUNDA MESA (I) El resultado de las transferencias del INSALUD ha sido desigual en las diferentes CCAA El Marco legislativo de las.
POLIMORFISMO UNIDAD 4.
Estudios de usuarios de archivo TEMA 12. Estudios de usuarios de archivo Entendemos por estudio de usuarios a: las herramientas de planificación, análisis.
INTRODUCCIÓN ESTADO DE LA TÉCNICA PROCESAMIENTO DISTRIBUIDO CON MPI PROCESAMIETNO DISTRIBUIDO DE IMÁGENES GENÉRICO CON VTK PROCESAMIENTO DISTRIBUIDO DE.
Arquitectura CLARO-TECNOTREE
Análisis Visual de la Modularidad de Modelos de Procesos de Software
Una vuelta de tuerca a Haythorn Sonia Pamplona Roche junio, 2006.
Introducción 1 Puntos Clave –La orientación a objetos representa un cambio radical en los métodos tradicionales de creación de software –Los métodos tradicionales.
Tipos de Datos Abstractos Modularidad
Tipo de Dato Abstracto Tipos de datos:
CONCEPTOS Y PRINCIPIOS DE DISEÑO
Nelson Medinilla Martínez Universidad Politécnica de Madrid
Aplicación del paradigma orientado a objetos
Encapsulamiento y Abstracción
Patrones de diseño OO Gang of Four (GoF)
Principios y Patrones de Diseño
4.- Orientación a Objetos Justo N. Hidalgo Sanz DEPARTAMENTO DE INGENIERÍA INFORMÁTICA.
Ingeniería del software de la usabilidad (I)
Introducción a la programación Orientada a objetos
Laura Patricia Pinto Prieto Ingeniera de sistemas.
Modelado Arquitectónico
DEPARTAMENTO DE INGENIERÍA INFORMÁTICA
Ingeniería de Sistemas Requerimientos
Diseño del Software Diseño de datos Diseño arquitectónico
(c) P. Gomez-Gil, INAOE DISEÑO DE COMPONENTES DE SOFTWARE * NOTAS DEL CURSO Ingeniería de Software I DRA. MARIA DEL PILAR GÓMEZ GIL INAOEP.
OMAR SANCHEZ ROBLES HECTOR PEREZ GARCIA. “Sistemas de cómputo compuesto por un gran número de CPU´s conectados mediante una red de alta velocidad”, Tanenbaum.
ANALISIS Y DISEÑO O.O. (LCD )

Programación Orientada a Aspectos (POA)
TIPOS DE DATOS ABSTRACTOS
ANDRES FELIPE BORRERO SALAZAR COD ALEXANDRA CARREÑO SALAS COD LUCIO ANIBAL CRIOLLO COD ALEJANDRO RUIZ IDROBO COD
Introducción a la POO • ¿Qué es la programación orientada a objets (POO)? – Un “paradigma” de programación – Una forma de pensar acerca de los problemas.
DISEÑO DE SOFTWARE 1ª. Parte
Contenido: 1- Que es el .Net Framework 2- Arquitectura en .Net
5.3 APROXIMACIONES AL DISEÑO
Patrones de diseño DECORATOR Mario Rodríguez Martín
Unidad VI Documentación
Métricas Técnicas para Sistemas Orientados a Objeto
¿Cómo nos ayuda GeneXus a mejorar la calidad en el proceso de desarrollo de Software? Ing. Rosario Estévez Ing. Rafael Mon
Ingeniería de Software
Importancia en la efectividad del:
Diseño de Software y su Proceso
Programación orientada a objetos Capítulo 6 Diseño de clases.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Facultad de Ingeniería
TEMA 9: DIAGRAMA DE CLASE EN UML
Capitulo 1: “La ciencia en las ciencias sociales”
Indirección y Variaciones Protegidas
AUDITORIA INFORMATICA
CONTRATOS DE CLIENTES Orlando Sedamano Cornejo Marco Bustinza
Patrones de diseño equipo n.1
1.2.4 Clasificación Generalmente en toda investigación se persigue un propósito, se busca un determinado nivel de conocimiento y se basa en una estrategia.
Universidad Tecnológica de Izúcar de Matamoros Programa Educativo: Tecnologías de la Información Asignatura: Base de datos para aplicaciones Tema: Base.
FUNDAMENTOS DE PROGRAMACION
Ing. Johanna Macias Algoritmo, Estructura y Programación III.
Un requerimiento es una condición o capacidad a la que el sistema (siendo construido) debe conformar [ Rational ]. Un requerimiento de software puede.
Proliferación Celular LUIS FELIPE JIMENEZ CAICEDO ANDRES FELIPE VASQUEZ JHON ANDERSON YANGUAS JUAN DAVID PINTO PAOLA ANGELICA GIRÓN ISIS VICTORIA PIZO.
ORIENTACIÓN A OBJETOS El paradigma.
Diagrama de Clases.
CICLO DE VIDA DE UN SOFTWARE. Es el conjunto de los programas de cómputo, procedimientos, reglas, documentación y datos asociados, que forman parte de.
Herencias Conceptos básicos i
Programación Orientada a Objetos Unidad 5. Los objetos son entidades que combinan estado Contiene toda la información denominados atributos REPASO Cada.
ALUMNO ALUMNO: DIEGO URES LEGAJO LEGAJO: La prueba unitaria es la herramienta para la Calidad Presentación Trabajo Final de Grado.
Profesor: Jesús Chaparro Bachilleres: Perez, emibeliz Prada, Rainer Villahermosa, José Abril 2014.
Transcripción de la presentación:

Almudena Moya Muñoz Julio 2006 Una vuelta de tuerca a los principios de diseño ágiles

Estructura Introducción Objetivos Análisis de los principios Conclusiones

Introducción El problema de los cambios en el software Gran diversidad de soluciones Se necesita un instrumento teórico de ayuda al diseño de software El instrumento podría ser la ambigüedad

Objetivos Comprobar la validez de la ambigüedad como instrumento teórico para el análisis de los principios de diseño ágiles Explicar y predecir el efecto de los principios Ofrecer una visión unificada de los principios y un criterio para clasificarlos Resolver varios aspectos confusos

Principios de diseño ágiles Principio de responsabilidad única Principio de separación de la interfaz Principio abierto/cerrado Principio de sustitución de Liskov Principio de inversión de dependencias “Agile Software Development: Principles, Patterns, and Practices” Robert C. Martin

Principio de responsabilidad única Una clase sólo puede tener una razón para cambiar Robert C. Martin Diseño con una sola clase Cliente P Cliente Q Clase X Elementos asociados a la responsabilidad A Elementos asociados a la responsabilidad B Finalidad –Evitar que el cambio de una responsabilidad en una clase pueda provocar fallos en las demás responsabilidades de la clase –Evitar que los clientes de una clase carguen con elementos que no utilizan

Diseño con una sola claseDiseño con dos clases Cliente P Cliente Q Clase X Elementos asociados a la responsabilidad A Elementos asociados a la responsabilidad B Cliente P Cliente Q Clase XA Elementos asociados a la responsabilidad A Clase XB Elementos asociados a la responsabilidad B Principio de responsabilidad única

Justificación del principio según R. Martin Principio de cohesión (DeMarco y Pages-Jones) Cohesión: Relación funcional de los elementos de un modulo Cohesión = responsabilidad única (Martin) Principio de responsabilidad única (Martin) Responsabilidad: razón de cambio Cohesión: Fuerzas que provocan cambios en una clase o módulo

Principio de responsabilidad única ¿ cohesión = razón de cambio ? Creencia –Alta cohesión y bajo acoplamiento conlleva facilidad de modificación Problema (incluye lo que estaba escrito antes) –Infinitud de definiciones de cohesión y acoplamiento Consecuencia –No hay justificación para asociar cohesión con fuerzas de cambio

Diseño con una clase Realidad del principio: –División salomónica puntual Ambigüedad: –Aumenta entre los elementos de responsabilidades separadas –Aumenta entre la clase cliente hacia las clases separadas que no utilizan –Disminuye entre la clase cliente hacia las clases separadas que utilizan Ventajas e inconvenientes Cliente P Cliente Q Clase X Responsabilidad A Responsabilidad B Diseño con dos clases Cliente P Cliente Q Clase XA Responsabilidad A Clase XB Responsabilidad B Principio de responsabilidad única Análisis

Principio de separación de la interfaz Los clientes no deben ser forzados a depender de interfaces que no utilizan Robert C. Martin Diseño con una sola interfaz Finalidad –Reducir las dependencias entre clientes que utilizan métodos diferentes de la misma interfaz –Evitar que los clientes de una clase carguen con elementos que no utilizan Cliente C Cliente D Interfaz Z Métodos que utiliza el cliente C Métodos que utiliza el cliente D

Diseño con una interfazDiseño con dos interfaces Cliente C Cliente D Interfaz Z Métodos que utiliza el cliente C Métodos que utiliza el cliente D Cliente C Cliente D interfaz ZC Métodos que utiliza el cliente C Interfaz ZD Métodos que utiliza el cliente D Principio de separación de la interfaz

Diseño con una interfaz Extensión del principio de responsabilidad única Ambigüedad –Aumenta entre los métodos de interfaces separadas –Aumenta entre la clase cliente hacia los métodos de las interfaces no utilizan Ventajas e inconvenientes Cliente C Cliente D Interfaz Z Métodos cliente C Métodos cliente D Diseño con dos interfaces Cliente C Cliente D Interfaz ZC Métodos cliente C Interfaz ZD Métodos cliente D Principio de separación de la interfaz Análisis

Principio abierto/cerrado Las entidades software deben estar abiertas para su extensión, pero cerradas para su modificación Bertran Meyer Diseño cerrado/cerrado Finalidad –Sistema funcionando (cerrado), pero ampliable (abierto) –Conseguir cambios añadiendo nuevo código sin afectar al resto de elementos del diseño Clase AClase B

Ambigüedad –La dependencia “uno a uno” se transforma en una dependencia de “uno a muchos” Ventajas Diseño abierto/cerrado Principio abierto/cerrado Análisis Diseño cerrado/cerrado Clase AClase B Clase A Clase Abstracta B Clase B1Clase B2

Principio de sustitución de Liskov Los subtipos deben ser sustituibles por sus supertipos Robert C. Martin S es subtipo de T (Barbara Liskov) o2 es un objeto de T o1 es un objeto de S Para todo programa P ( T ) comportamiento P(o1) = comportamiento P(o2) cuando o1 es sustituido por o2 T S Finalidad –Facilitar la modificación del diseño y la reutilización del código a través del uso adecuado de la herencia Te cambié el orden de o1 y o2, pero no estoy seguro

RectánguloCuadrado Propiedadesalto ancho lado OperacionesestablecerAlto(x) establecerAncho(y) obtenerAlto() obtenerAncho() establecerLado(z) obtenerLado() RectánguloCuadrado establecerAlto(x)Modifica el atributo alto con el valor x Mantiene el atributo ancho Modifica el atributo alto con el valor x Modifica el atributo ancho con el valor x establecerAncho(y)Mantiene el atributo alto Modifica el atributo ancho con el valor y Modifica el atributo alto con el valor y Modifica el atributo ancho con el valor y Rectángulo Cuadrado ES – UN ? Principio de sustitución de Liskov ¿ Rectángulo ES-UN Cuadrado ? Poscondiciones de los métodos establecerAlto y establecerAncho Propiedades y métodos

Ambigüedad: –Los programas no saben si trabajan con objetos de supertipos o de subtipos Ventajas El enunciado de Martin es confuso: –“Los subtipos deben ser sustituibles por los supertipos”, pero la definición de subtipo se basa en la sustitución S es subtipo de T o1 es un objeto de S o2 es un objeto de T Para todo programa P ( T ) comportamiento P(o1) = comportamiento P(o2) cuando o1 es sustituido por o2 T S Principio de sustitución de Liskov Análisis

Principio de inversión de dependencias Los módulos de alto nivel no deben depender de los módulos de bajo nivel. Ambos deben depender de las abstracciones Las abstracciones no deben depender de los detalles. Los detalles deben depender de las abstracciones. Robert C. Martin

Principio de inversión de dependencias Finalidad: –Conseguir que los cambios en los módulos de bajo nivel no afecten a los módulos de alto nivel –Facilitar la reutilización de los módulos de alto nivel Diseño tradicional Nivel Política Nivel Mecanismo Nivel Utilidad

Diseño tradicional Nivel Política Nivel Mecanismo Nivel Utilidad Principio de inversión de dependencias Diseño con inversión de dependencias Nivel Política Nivel Mecanismo Nivel Utilidad Interfaz Política Interfaz Mecanismo Política Mecanismo Utilidad

Ambigüedad: –Aumenta entre los módulos de alto nivel y los de bajo nivel Ventajas Caso particular de la programación estructurada de Dijkstra Principio de inversión de dependencias Análisis Diseño con inversión de dependencias Nivel Política Nivel Mecanismo Nivel Utilidad Interfaz Política Interfaz Mecanismo Política Mecanismo Utilidad

Conclusiones (I) La ambigüedad ha sido un instrumento teórico válido para analizar los principios de diseño ágiles porque ha permitido: –Explicar y predecir los efectos de la aplicación de estos principios –Disponer de una visión uniforme de los principios

Conclusiones (II) Los principios: –abierto/cerrado –de sustitución –de inversión de dependencias aumentan la ambigüedad del diseño: –Reemplazo de las relaciones unívocas por ambiguas –Reducción la complejidad descriptiva –Reducción la complejidad por incertidumbre Son criterios de diseño para utilizarlos de forma regular

Conclusiones (III) Los principios: –de responsabilidad única –de separación de la interfaz diminuyen la ambigüedad del diseño: –Aumento de la complejidad descriptiva –Aumento de la complejidad por incertidumbre Son criterios de diseño para utilizarlos de forma excepcional

Conclusiones (y IV) Objeciones al trabajo de Martin: –No existe un análisis teórico de los principios –No hay relación entre el principio de cohesión y el principio de responsabilidad única –Enunciado tautológico del principio de sustitución –Principio de inversión de dependencias es un caso particular de la programación estructurada original (Dijkstra)