Unidades14a28-PPT.pdf

72
1 Proyecto Práctico de Diseño de Software Ingeniería del Software II Ingeniería Informática, 4°Curso Proyecto Práctico de Diseño de Software Curso 2010-2011 Gonzalo Génova 2 Proyecto Práctico de Diseño de Software Presentación Profesores Grupo M Gonzalo Génova (ggenova [at] inf.uc3m.es) - COORDINADOR Eduardo Barra (ebarra [at] inf.uc3m.es) Grupo T Vicente Palacios (palacios [at] di.uc3m.es) Eduardo Barra (ebarra [at] inf.uc3m.es) Grupo C Roberto Galindos (rgalindo [at] inf.uc3m.es) Dirección para entregas de la práctica: is.uc3m [at] gmail.com Web de la asignatura http://www.ie.inf.uc3m.es/grupo/docencia/reglada/Is1y2/IS2.htm Un curso de análisis y diseño en dos asignaturas: IS1: requisitos del usuario (captura) y requisitos del software (análisis) IS2: diseño arquitectónico (alto nivel) y diseño detallado (bajo nivel)

Transcript of Unidades14a28-PPT.pdf

Page 1: Unidades14a28-PPT.pdf

1 Proyecto Práctico de Diseño de Software

Ingeniería del Software IIIngeniería Informática, 4°Curso

Proyecto Práctico de Diseño de Software

Curso 2010-2011

Gonzalo Génova

2 Proyecto Práctico de Diseño de Software

Presentación

• Profesores– Grupo M

• Gonzalo Génova (ggenova [at] inf.uc3m.es) - COORDINADOR• Eduardo Barra (ebarra [at] inf.uc3m.es)

– Grupo T

• Vicente Palacios (palacios [at] di.uc3m.es)• Eduardo Barra (ebarra [at] inf.uc3m.es)

– Grupo C• Roberto Galindos (rgalindo [at] inf.uc3m.es)

• Dirección para entregas de la práctica: is.uc3m [at] gmail.com

• Web de la asignatura– http://www.ie.inf.uc3m.es/grupo/docencia/reglada/Is1y2/IS2.htm

• Un curso de análisis y diseño en dos asignaturas:– IS1: requisitos del usuario (captura) y requisitos del software (análisis)– IS2: diseño arquitectónico (alto nivel) y diseño detallado (bajo nivel)

Page 2: Unidades14a28-PPT.pdf

3 Proyecto Práctico de Diseño de Software

Objetivos de la asignatura

• Especificación del diseño de alto y bajo nivel de una aplicación informática

• Aprender...

– Redacción de un documento completo de diseño– Desarrollo dirigido por modelos (MDA-MDD-MDE), evolución de USDP

– Estándares de documentación de proyectos

– Técnicas de la orientación a objetos para diseño arquitectónico y detallado

• Desarrollar capacidades

– Abstracción y resolución de problemas

– Lectura crítica y reflexiva

– Trabajo en equipo

– Exposición de resultados propios

– Revisión de trabajos ajenos

– Aprendizaje a partir de errores propios y ajenos

4 Proyecto Práctico de Diseño de Software

Programa de la asignatura: teoría

• Tema III – Diseño arquitectónico (diseño de alto nivel)– Unidad 14 – La transición del análisis al diseño

– Unidad 15 – Introducción al diseño arquitectónico

– Unidad 16 – Modelado arquitectónico con UML– Unidad 17 – Herramientas de modelado UML (laboratorio)

– Unidad 18 – Vistas arquitectónicas– Unidad 19 – Estilos arquitectónicos

– Unidad 20 – ¿Qué es diseño orientado a objetos? (artículo y examen)

• Tema IV – Diseño detallado (diseño de bajo nivel)– Unidad 21 – Introducción al diseño detallado– Unidad 22 – Diseño detallado con UML (1): polimorfismo– Unidad 23 – Diseño detallado con UML (2): interacciones

– Unidad 24 – Diseño detallado con UML (3): máquinas de estados– Unidad 25 – Patrones de diseño (1)– Unidad 26 – Patrones de diseño (2)– Unidad 27 – Implementación de asociaciones UML en Java (artículo y examen)– Unidad 28 – Herencia múltiple

Page 3: Unidades14a28-PPT.pdf

5 Proyecto Práctico de Diseño de Software

Programa de la asignatura: prácticas

• Equipos de 4 alumnos (atención: alumnos que no han cursado IS1)

• Trabajo en 2+2 fases (URD/SRD + ADD/DDD)

• Actividades en cada fase

– Desarrollo y documentación del proyecto conforme al índice de la práctica

• recuento de horas dedicadas al proyecto y métricas

• contabilizadas al principio de cada documento

• enviadas aparte por correo según las plantillas (horas, métricas)

– Sesiones de tutoría colectivas, asistencia voluntaria

• cada equipo tendrá oportunidad de presentar su borrador y recibir críticas

– Revisiones cruzadas

• informes de revisión redactados conforme a las normas

– Exposiciones en público y defensa del proyecto

• entrega de transparencias impresas el primer día de exposiciones (¡2xPág!)• exposición individual de una parte del proyecto

• respuestas a los revisores y a los profesores

6 Proyecto Práctico de Diseño de Software

Documentación entregada

• Atención a nombres de archivos y fechas de entrega• Dos documentos parciales (el segundo completa al primero):

– ej. ProyectoIS2-M05.doc: equipo M05, etc.

– envío por correo a is.uc3m [at] gmail.com y miembros del equipo revisor

– ver índice adaptado del estándar ESA PSS-05-0

• Dos documentos de revisión:

– ej. RevisiónIS2-M05-R07.doc: equipo M05 revisado por equipo M07, etc.

– envío por correo a los profesores y a los miembros del equipo revisado

• Proyecto final revisado (normas):

– documento final + presentaciones + recuento de horas + métricas

– ej. ProyectoIS2-M05.doc + etc.

– envío por correo is.uc3m [at] gmail.com– ejemplar impreso encuadernado en espiral con tapas duras, incluyendo:

• revisiones recibidas y respuestas, revisiones enviadas

• transparencias de las dos presentaciones

• Propuesta de preguntas teóricas para el examen de test

Page 4: Unidades14a28-PPT.pdf

7 Proyecto Práctico de Ingeniería de Requisitos

Descripción de la práctica

• Ingeniería del Software 1…

– Realizar un proyecto de ingeniería inversa sobre un portal inmobiliario real.

– Describir brevemente el alcance total de la funcionalidad ofrecida por el portal.

– Seleccionar un subconjunto coherente de la funcionalidad ofrecida por el portal, de forma que sea abarcable dentro de los límites de carga de trabajo de la asignatura.

– Describir este subconjunto en forma de requisitos y con los modelos necesarios.

– Realizar una evaluación del portal (la parte seleccionada).

• Ingeniería del Software 2:

– A partir de los requisitos especificados en IS1.

– Realizar un diseño arquitectónico de la aplicación (ADD), sólo del subconjunto

escogido para especificar los requisitos.

– Realizar un diseño detallado (DDD), sólo de uno de los componentes especificados en el diseño arquitectónico.

8 Proyecto Práctico de Diseño de Software

Formato de los documentos

• Word, Times New Roman 12 ó Arial 10, interlineado sencillo.

– Impreso a doble cara

– Opcionalmente, formato PDF (con permisos de lectura y copia).

• Extensión (porque queremos calidad, no cantidad):

– ADD: 15 a 20 páginas.

– DDD: 30 a 40 páginas.

– TOTAL: 45 a 60 páginas (sin contar índices ni anexos). ¿Trabajo excesivo?– Factor de penalización en la calificación del documento por exceso de páginas.

60 120 páginas

1

0

0

penalización

1-(p-60)/60

Page 5: Unidades14a28-PPT.pdf

9 Proyecto Práctico de Diseño de SoftwareProyecto Práctico de Ingeniería de Requisitos

Trabajo en equipo y dedicación a la práctica

• Un total de 60 horas/alumno dedicadas a la práctica es razonable (58 h/a en IS1).

– Equivale a una hora de trabajo práctico por cada hora de clase teórica.

– 20 horas de clase + 20 horas de trabajo personal = 40 horas/semana.

• La proporción entre trabajo individual y en equipo debería ser 4/1 ó 3/1.– Para conseguirlo la distribución y coordinación del trabajo deben ser adecuadas.

– Si el número de horas es igual para todos falta sinceridad… ¡pero si no se califica!– En IS1 la proporción ha sido 1,5 / 1: aún falta distribuir mejor el trabajo individual.

Nombre Ind. Eq. TOTAL

Ana García 25 35 60

Juan Gómez 25 35 60

Isabel López 25 35 60

Pedro Fernández 25 35 60

TOTAL 100 140 240

Nombre Ind. Eq. TOTAL

Ana García 40 15 55

Juan Gómez 43 11 54

Isabel López 47 16 63

Pedro Fernández 50 18 68

TOTAL 180 60 240

MAL BIEN

10 Proyecto Práctico de Ingeniería de Requisitos

Calendario de la asignatura

• Dedicación a la asignatura, aproximadamente:– 30 horas de clase teórica– 30 horas de otras actividades en clase

– 60 horas de trabajo personal y en equipo

• Clases teóricas – Asistencia no controlada. – Dos sesiones en laboratorio.– El examen de Test es un reflejo directo del aprovechamiento de las clases teóricas, de ahí la

importancia que se le da en la nota final.

• Tutorías colectivas– Asistencia voluntaria.– Sirven para que el profesor pueda hacer un seguimiento efectivo del proyecto.– Aprovechad la tutoría llevando un borrador bien trabajado.

• Exposiciones/Revisiones– Asistencia obligatoria a todas las exposiciones, aunque no toque exponer.

– Dos miembros exponen la práctica, dos responden a revisores y profesores.– Tiempo máximo de exposición: 20 minutos entre ambos.

• Calendario completo– Atención a las fechas de entregas.– Atención a la fecha de confirmación de equipos de prácticas.

Page 6: Unidades14a28-PPT.pdf

11

* Asistencia NO obligatoria a tutorías colectivas

** Asistencia obligatoria a las exposiciones ajenas (0,5 penalización por falta no justificada)

*** Se tiene en cuenta la participación en el debate posterior

Posible bonificación global por participación e interés (sólo a los aprobados)

Proyecto Práctico de Ingeniería de Requisitos

Evaluación de la asignatura

Individual Equipo

Práctica

Tutorías* 00% Exp/Preparación 05%

50%Exp/Ejecución** 05% Documentación 30%

Exp/Respuestas 05% Revisiones 05%

TeoríaExámenes parciales*** 10% Propuesta de

preguntas10% 50%

Examen final 30%

50% 50% 100%

Más detalles

12 Proyecto Práctico de Diseño de Software

Bibliografía

• Diseño arquitectónico, diseño detallado– Eric Braude. Software Engineering. An Object-Oriented Perspective. John Wiley & Sons,

2001.• Capítulos 5 y 6

– Ian Sommerville. Software Engineering, 7th ed. Pearson-Addison Wesley, 2004. • Capítulos 11-16

– Roger Pressman. Ingeniería del software: un enfoque práctico, 6ª ed. McGraw-Hill.• Capítulos 9-11

– Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns. Elements of reusable Object-Oriented software. Addison-Wesley, 1994.

• Modelado con UML– Martin Fowler, Kendall Scott. UML Distilled. A Brief Guide to the Standard Object

Modeling Language. Addison-Wesley, 2004.– Jim Arlow, Ila Neustadt. UML and the Unified Process. Practical Object-Oriented

Analysis & Design. Addison-Wesley, 2002.

– Perdita Stevens, Rob Pooley. Using UML. Software Engineering with Objects and Components. Addison-Wesley, 2000.

• Más en la ficha de la asignatura

Page 7: Unidades14a28-PPT.pdf

13 Proyecto Práctico de Diseño de Software

Tema IIIDiseño arquitectónico

– Unidad 14 – La transición del análisis al diseño

– Unidad 15 – Introducción al diseño arquitectónico

– Unidad 16 – Modelado arquitectónico con UML

– Unidad 17 – Herramientas de modelado (laboratorio)

– Unidad 18 – Vistas arquitectónicas

– Unidad 19 – Estilos arquitectónicos

– Unidad 20 – ¿Qué es diseño orientado a objetos? (artículo y examen)

14 Proyecto Práctico de Diseño de Software

Especificación

Vista abstracta

modelo especificativo abstracto del dominio

modelo especificativo abstracto del sistema

Vista

concreta

modelo especificativo

concreto del dominio

modelo especificativo

concreto del sistema

Descripción

Vista

abstracta

modelo descriptivo

abstracto del dominio

modelo descriptivo

abstracto del sistema

Vista concreta

modelo descriptivo concreto del dominio

modelo descriptivo concreto del sistema

Dominio Sistema

Transformación de modelos: del análisis al diseño

• Dos trayectorias típicas:

– modelo del mundo real (“modelo de análisis” en un sentido)

�análisis de requisitos (“modelo de análisis” en otro sentido)

�modelo de diseño

– modelo descriptivo concreto del sistema heredado

�modelo descriptivo abstracto del sistema heredado

�modelo especificativo abstracto del sistema nuevo

�modelo especificativo concreto del sistema nuevo

Page 8: Unidades14a28-PPT.pdf

15 Proyecto Práctico de Diseño de Software

Transformación de modelos: del análisis al diseño

A

B

C

propósito

abstracción

especificación

abstractosistema

descripción

concreto

realidaddominio

16 Proyecto Práctico de Diseño de Software

Relación lógico-temporal entre el análisis y el diseño

Iteración 1 Iteración 2 Iteración 3

Análisis

(versión 1)

Análisis

(versión 2)

Análisis

(versión 3)

Diseño

(versión 1)

Diseño

(versión 2)

Implementación

(versión 1)

Page 9: Unidades14a28-PPT.pdf

17 Proyecto Práctico de Diseño de Software

El diseño arquitectónico en el Estándar ESA

• ESA software engineering standards (PSS-05-0)

– Chapter 4. The architectural design phase

• 4.3. Actividades: modelo físico (estático y dinámico)

• Guide to applying the ESA SE-Std to projects using OO Methods (BSSC98-1)

– Chapter 3. Using Object-Oriented Methods with PSS-05• 3.5. Modelo físico, reutilización, criterios de calidad del diseño

• Guide to the software architectural design phase (PSS-05-04)

– Chapter 2. The architectural design phase

• 2.3. Construcción del modelo físico (descomposición, NFR, calidad...)

• 2.4. Especificación del diseño arquitectónico (funciones – componentes)

• 2.7. Revisión de los requisitos del software

– Chapter 5. The architectural design document• 5.1. Introducción: lo que debe ser, lo que no debe ser

• 5.2. Estilo: claridad, consistencia, modificabilidad

• Preguntas más frecuentes

18 Proyecto Práctico de Diseño de Software

El diseño detallado en el Estándar ESA

• ESA software engineering standards (PSS-05-0)

– Chapter 5. The detailed design and production phase

• 5.3. Actividades: diseño detallado / no producción

– 5.3.1. Descomponer componentes arquitectónicos en módulos programables

• 5.4. Salidas: omitir código y manual de usuario

• Guide to applying the ESA SE-Std to projects using OO Methods (BSSC98-1)

– Chapter 3. Using Object-Oriented Methods with PSS-05

• 3.6. Conversión automática modelo ⇔ código (round-trip engineering)

• Guide to the software detailed design and production phase (PSS-05-05)

– Chapter 2. The detailed design and production phase• 2.3. Descomposición, diseño defensivo, optimización, etc.

– Chapter 5. The detailed design and production document• 5.1. Introducción: lo que debe ser, lo que no debe ser

• 5.2. Estilo: claridad, consistencia, modificabilidad

Page 10: Unidades14a28-PPT.pdf

19 Proyecto Práctico de Diseño de Software

Introducción al diseño arquitectónico

• Arquitectura del software

– analogía con la arquitectura civil: requisitos � diseño

– madurez de la arquitectura del software

• ¿Cómo lograr una descomposición modular eficaz?

– alta cohesión y bajo acoplamiento

– descomposición recursiva

– diseñar para el mantenimiento

– reducir la complejidad de las dependencias

• Criterios para la selección de una arquitectura

– criterios clásicos

– otros criterios

• Reutilización de diseños y componentes

20 Proyecto Práctico de Diseño de Software

1. Análisis

“Los vehículos deben

poder viajar desde la

parte alta a 120 km/h en línea recta y llegar a la parte baja en no más de 3 minutos.”

3. Arquitectura2. Clases deDominio

Vehículo

Camino

vehículo

Camino

4. Diseño

Detallado

Cable

Cable

Columna

Columna

Barandilla

Adaptado de E. Braude,

Software Engineering:

An Object-Oriented Perspective

Relación entre análisis, arquitectura y diseño detallado

Page 11: Unidades14a28-PPT.pdf

21 Proyecto Práctico de Diseño de Software

Estilos arquitectónicos de puentes

22 Proyecto Práctico de Diseño de Software

Arquitectura del software: definiciones

• Paul Clements 1996

– La arquitectura del software es a grandes rasgos, una vista del sistema que

incluye los componentes principales del mismo, la conducta de esos componentes según se percibe desde el resto del sistema y las formas en que los componentes interactúan y se coordinan para alcanzar la misión del sistema.

• Len Bass 1998

– La arquitectura del software de un programa o sistema de computación es la estructura o las estructuras del sistema, que contienen componentes de software,

las propiedades externamente visibles de dichos componentes y las relaciones entre ellos.

• IEEE Std. 1471-2000

– La arquitectura del software es la organización fundamental de un sistema encarnada en sus componentes, las relaciones entre ellos y con el entorno, y los

principios que orientan su diseño y evolución.

Page 12: Unidades14a28-PPT.pdf

23 Proyecto Práctico de Diseño de Software

Cohesión y acoplamiento

1

2 3 4

5 6Alta cohesión Bajo acoplamientoPuente

componente

componente

Adaptado de E. Braude,

Software Engineering: An Object-Oriented Perspective

24 Proyecto Práctico de Diseño de Software

Cómo lograr una buena descomposición modular

A B C

D E F

Mal

A D E

B C F

Bien

¿Cómo acertar de antemano? � Estilos arquitectónicos

Page 13: Unidades14a28-PPT.pdf

25 Proyecto Práctico de Diseño de Software

Descomposición modular recursiva: 7±2

26 Proyecto Práctico de Diseño de Software

Criterios para la selección de una arquitectura

• Criterios clásicos:

– Extensibilidad

– Modificabilidad

– Simplicidad

– Eficiencia

• Otros criterios:

– Reuso

– Escalabilidad

– Coste

– Requisitos no funcionales

Page 14: Unidades14a28-PPT.pdf

27 Proyecto Práctico de Diseño de Software

Reutilización

• Diseños reutilizables

– Estilos arquitectónicos: formas típicas de sistemas

– Marcos (frameworks): aplicaciones o sistemas incompletos

– Líneas de productos: generalizaciones de aplicaciones exitosas

– Patrones de diseño: heurísticas para solución con formas típicas

• Componentes reutilizables

– Dificultades para el reuso

– Elección de componentes para el reuso

– Desarrollo para el reuso

28 Proyecto Práctico de Diseño de Software

Descomposición basada en marcos de trabajo

Capa de marcos

Capa de aplicación

Java.awt

MiAplicación

Window

VentanaDialogo Empleado

1 ventanaEmpleado

Page 15: Unidades14a28-PPT.pdf

29

Noción de “componente”

Unidad autónoma, reemplazable y reutilizable, habitualmente ejecutable…

Proyecto Práctico de Diseño de Software

30 Proyecto Práctico de Diseño de Software

Niveles de descomposición modular (UML 2.x)

Nivel 1Subsistema

Nivel 2Componente

(...)Nivel N-1

ComponenteNivel NClase

(UML 1.x)

(UML 1.x)

Page 16: Unidades14a28-PPT.pdf

31 Proyecto Práctico de Diseño de Software

Noción de dependencia

<<component>>

A

<<component>>

B

<<component>>

C

E F

Dependencia A�C:

• A requiere la presencia de C

• Los cambios de C pueden afectar a A

32 Proyecto Práctico de Diseño de Software

Noción de interfaz

Dos componentes pueden ofrecer la misma interfaz

Dos interfaces no necesariamente

disjuntas

Page 17: Unidades14a28-PPT.pdf

33 Proyecto Práctico de Diseño de Software

Representación de interfaces: abreviada y completa

Novedad en UML2

34 Proyecto Práctico de Diseño de Software

Cómo instanciar las interfaces de un componente (1)package GestiónEmpleados;

public interface iEmpleado {

public modificar( ) { };

}

public class EmpleadoFijo implements iEmpleado {

public modificar( ) { };

}

public class EmpleadoTemporal implements iEmpleado {

public modificar( ) { };

}

====================

class Departamento {

iEmpleado e = new EmpleadoFijo( );…

e.modificar( );

}

El componente proporciona sólo una interfaz, el tipo abstracto de datos.

Es necesario que la clase cliente (Departamento) conozca las clases concretas EmpleadoFijo, etc.: estas clases deben ser públicas.

Nada le impide usarlas sólo para invocar los constructores (salvo el buen estilo del programador).

La dependencia es potencialmente “peligrosa”.

Page 18: Unidades14a28-PPT.pdf

35 Proyecto Práctico de Diseño de Software

Cómo instanciar las interfaces de un componente (2)package GestiónEmpleados;

public interface iGestorEmpleados {

public int crearEmpleado( ); // el gestor debe mantener algún tipo de lista

public modificarEmpleado(int e);

}

class EmpleadoFijo {…} // no visible desde fuera, idem EmpleadoTemporal

public class GestorEmpleados implements iGestorEmpleados {

public int crearEmpleado( ) {…}; // usa new EmpleadoFijo( )

public modificarEmpleado (int e) {…}; // usa EmpleadoFijo.modificar( )

}

====================

class Departamento {

int e = ge.crearEmpleado ( ); // se supone que existe GestorEmpleados ge

ge.modificarEmpleado(e);

}

GestorEmpleados no puede recibir ni devolver valores de tipo EmpleadoFijo, EmpleadoTemporal, etc.

Es necesario un mecanismo de traducción de los identificadores públicos a las instancias de EmpleadoFijo, etc. (una lista interna).

El componente proporciona sólo una interfaz, el gestor.

La clase cliente sólo usa el gestor y los identificadores públicos.

36 Proyecto Práctico de Diseño de Software

Cómo instanciar las interfaces de un componente (3)package GestiónEmpleados;

public interface iEmpleado {

public modificar( ) { };

}

public interface iGestorEmpleados {

public iEmpleado crearEmpleado( ); // el gestor debe mantener algún tipo de lista

public modificarEmpleado(iEmpleado e);

}

====================

class Departamento {

iEmpleado e = ge.crearEmpleado ( ); // se supone que existe GestorEmpleados ge

e.modificar( );

}

La clase cliente no puede usar el constructor directamente, pero sí el tipo abstracto en el resto de operaciones.

El componente proporciona dos interfaces, el tipo abstracto de datos y el gestor.

Page 19: Unidades14a28-PPT.pdf

37 Proyecto Práctico de Diseño de Software

Cómo instanciar las interfaces de un componente (4)

Caso 1 Caso 2(parámetros int)

Caso 3 (parámetros iEmpleado)

38 Proyecto Práctico de Diseño de Software

Interfaces proporcionadas y requeridas

requiere,

usa

proporciona,

realiza

Page 20: Unidades14a28-PPT.pdf

39 Proyecto Práctico de Diseño de Software

Cableado de componentes

“ball and socket”

cableado “en árbol”

cableado “independiente”

cableado con dependencia

40 Proyecto Práctico de Diseño de Software

Anidamiento de componentes

delegación

puerto

El conjunto de interfaces de un puerto debe ser consistente

Page 21: Unidades14a28-PPT.pdf

41 Proyecto Práctico de Diseño de Software

Diagrama de despliegue

entorno de ejecución software

dispositivo hardware

nodo ruta de comunicación

42 Proyecto Práctico de Diseño de Software

Herramientas de modelado UML: Altova UModel

• Objetivo de las herramientas CASE

• Otras herramientas alternativas

• Altova UModel

– Instalación

– Licencias

– Requisitos HW y SW

– Diagramas de Componentes y Clases

– Diagramas de Despliegue

– Ejercicios en clase: transparencias 31-41

Page 22: Unidades14a28-PPT.pdf

43

Objetivo de las herramientas CASE

• Mejorar la productividad, el tiempo y coste de desarrollo.

• Mejorar la planificación de un proyecto.

• Automatizar desarrollo del software, documentación, generación

de código, pruebas de errores y gestión del proyecto.

• Ayuda a la reutilización del software.

• Gestión global en todas las fases de desarrollo de software con una misma herramienta.

• Facilitar el uso de las distintas metodologías propias de la

ingeniería del software.

Proyecto Práctico de Diseño de Software

44

Otras herramientas alternativas

• Visio http://www.softwarestencils.com/uml/index.html

• Telelogic Tau http://www.telelogic.com/products/modeler/index.cfm

• swReuser http://www.reusecompany.com/producto.aspx?id=2

• Star UML http://staruml.sourceforge.net/en/

• …

Proyecto Práctico de Diseño de Software

Page 23: Unidades14a28-PPT.pdf

45 Proyecto Práctico de Diseño de Software

Altova Umodel: Instalación

• Ir a:

– http://www.altova.com/download/umodel/uml_tool_enterprise.html

– Download UModel® 2008 Enterprise Edition Setup now

• Seleccionar el botón “Ejecutar”:

• Seguir con la instalación, presionando el botón “Next” cuando sea conveniente, y por último, el botón “Install”.

• Cuando se encuentre Altova UModel instalado completamente en el ordenador, se debe pedir una licencia de evaluación (Request a FREE Evaluation Key).

46 Proyecto Práctico de Diseño de Software

Licencias y requisitos HW y SW

• Licencias– Solicitud de licencia por 30 días.

– Instalar el software en un solo ordenador del equipo de prácticas cada vez, para asegurar la disponibilidad del software a lo largo delcuatrimestre.

– Software disponible en las aulas.

• Hardware:– 133 MHz, Pentium-compatible CPU, o superior.

– 64 megabytes (MB) de memoria RAM como mínimo

– 2 GB de disco duro con un mínimo de 650 MB de espacio libre.

• Software: – UModel es una aplicación Windows de 32-bit que se puede instalar en

Windows 2000 / 2003, Windows XP y Windows Vista.

– Se pueden descargar módulos de integración con Visual Studio .NET (Enterprise Edition) y Eclipse (Enterprise Edition).

Page 24: Unidades14a28-PPT.pdf

47 Proyecto Práctico de Diseño de Software

Aspecto de la herramienta

48 Proyecto Práctico de Diseño de Software

Diagramas importantes para IS2

• Diagrama de Componentes

• Diagrama de Clases

• Diagrama de Despliegue

Page 25: Unidades14a28-PPT.pdf

49 Proyecto Práctico de Diseño de Software

El modelo de 4+1 vistas arquitectónicas

Vista lógica(conceptual)

Vista de proceso(ejecución)

Vista de desarrollo(implementación)

Vista física(despliegue)

Vista de casos de uso

Ingeniería del Software I Ingeniería del Software II

50 Proyecto Práctico de Diseño de Software

Características de cada vista en el modelo 4+1

VistaLógica

(conceptual)Proceso

(ejecución)Desarrollo

(implementación)Física

(despliegue)

AspectoModelo de información

Concurrencia y sincronización

Organización del software en el entorno de desarrollo

Correspondencia software-hardware

StakeholdersUsuarios

finalesIntegradores del sistema Programadores Ingenieros de sistemas

Requisitos Funcionales

Rendimiento

Disponibilidad

Fiabilidad

Concurrencia

Distribución

Seguridad

Gestión del software

Reuso

Portabilidad

Mantenibilidad

Restricciones impuestas por la plataforma o el

lenguaje

Rendimiento

Disponibilidad

Fiabilidad

Escalabilidad

Topología

Comunicaciones

NotaciónClases y

asociacionesProcesos y

comunicaciones

Componentes y

relaciones de uso

Nodos y rutas de comunicación

Proyecto Práctico de Diseño de Software

Page 26: Unidades14a28-PPT.pdf

51 Proyecto Práctico de Diseño de Software

Relaciones entre las cuatro vistas

Vista lógica(conceptual)

Vista de proceso(ejecución)

identificar clases

activas

Vista de desarrollo(implementación)

minimizar dependencias

nuevas clases de diseño

Vista física(despliegue)

requisitos no funcionales

?

Proyecto Práctico de Diseño de Software

52 Proyecto Práctico de Diseño de Software

Vista de casos de uso

Proyecto Práctico de Diseño de Software

Page 27: Unidades14a28-PPT.pdf

53 Proyecto Práctico de Diseño de Software

Vista lógica (conceptual)

Proyecto Práctico de Diseño de Software

54 Proyecto Práctico de Diseño de Software

Vista de proceso (ejecución)

Proyecto Práctico de Diseño de Software

Page 28: Unidades14a28-PPT.pdf

55 Proyecto Práctico de Diseño de Software

Vista de desarrollo (implementación)

Proyecto Práctico de Diseño de Software

56 Proyecto Práctico de Diseño de Software

Vista física (despliegue)

Proyecto Práctico de Diseño de Software

Page 29: Unidades14a28-PPT.pdf

57 Proyecto Práctico de Diseño de Software

Estilos arquitectónicos (Shaw & Garlan)

• Flujo de datos– Tuberías y filtros

– Secuencial por lotes

• Componentes independientes– Sistemas cliente-servidor– Procesos paralelos – Sistemas de eventos

• Máquinas virtuales

• Repositorios– Bases de datos– Entornos de desarrollo– Editores– Sistemas hipertexto

• Arquitectura en capas– Arquitectura MVC / RUP– Arquitectura en cuatro capas

– Arquitectura en tres escalones

Proyecto Práctico de Diseño de Software

58 Proyecto Práctico de Diseño de Software

Arquitectura de flujo de datos: DFDs

crear

cliente

cajero

finaliza con

cliente

asignar

cliente a

cajero

informar

log de estadísticas

lista de clientes / cajeros

lista de cajeros libres cola de clientes

tiempo de llegada de clientes

tiempo medio entre

llegadas de clientes

- nº de cajeros

- velocidad media de cada cajero

- tiempo medio de llegada entre clientes

crear

banco

Adaptado de W. Haythorn,

What Is Object-Oriented Design?

Page 30: Unidades14a28-PPT.pdf

59 Proyecto Práctico de Diseño de Software

Arquitectura de tuberías y filtros

filter

filter

filter

filter filter

filter

pipe

< stream

stream >

Adaptado de E. Braude,

Software Engineering: An Object-Oriented Perspective

pipe

60 Proyecto Práctico de Diseño de Software

Arquitectura cliente-servidor

Catalogue

server

Librarycatalogue

Video

server

Film clip

files

Picture

server

Digitised

photographs

Web server

Film and

photo info

Client 1 Client 2 Client 3 Client 4

Internet

Adaptado de I. Sommerville,

Software Engineering

Page 31: Unidades14a28-PPT.pdf

61 Proyecto Práctico de Diseño de Software

Arquitectura de procesos paralelos

Customer:customer n

withdraw

Customer:customer n+1

Session:session k

Session:session m

deposit

create

Account:customer n+1 saving

Account:customer nchecking

create retrieve

retrieve

Adaptado de E. Braude,

Software Engineering: An Object-Oriented Perspective

62 Proyecto Práctico de Diseño de Software

Adaptado de I. Sommerville,

Software Engineering

Arquitectura de sistema de eventos

Sub-system

1

Event and message handler

Sub-system

2

Sub-system

3

Sub-system

4

Page 32: Unidades14a28-PPT.pdf

63 Proyecto Práctico de Diseño de Software

Arquitectura de máquina virtual

260Mhz & 64MB

400Mhz & 128MB

260Mhz & 32MB

assemble {

{ 260MHz & 64MB }and{ { 400MHz & 128MB } and { 260MHz & 32MB } }

}

Adaptado de E. Braude,

Software Engineering: An Object-Oriented Perspective

64 Proyecto Práctico de Diseño de Software

Adaptado de I. Sommerville,

Software Engineering

Arquitectura de repositorio

Project

repository

Design

translatorProgram

editor

Design

editor

Code

generator

Design

analyser

Report

generator

Page 33: Unidades14a28-PPT.pdf

65 Proyecto Práctico de Diseño de Software

Arquitectura en capas: modelo OSI

Presentation

Session

Transport

Network

Data link

Physical

7

6

5

4

3

2

1

Communications medium

Application

Presentation

Session

Transport

Network

Data link

Physical

Application

Network

Data link

Physical

Adaptado de I. Sommerville,

Software Engineering

66 Proyecto Práctico de Diseño de Software

Arquitectura en capas: juegos interactivos

Definición de reglas

del juego

Jugador TurnoMovimiento

Lanzamiento

de Dado

Selección

de Ficha

Avance y Captura

Ejecución de movimientos

Representación

gráfica

Adaptado de E. Braude,

Software Engineering: An Object-Oriented Perspective

Page 34: Unidades14a28-PPT.pdf

67 Proyecto Práctico de Diseño de Software

Arquitectura modelo-vista-controlador (original)

Adaptado de E. Braude,

Software Engineering: An Object-Oriented Perspective

C

M

V

Acciones del

usuario

Información

al usuario

Controlador

Modelo

Vista

Modificaciones en la vista

Consultas y

modificaciones

en el modelo

Consultas al

modelo

68 Proyecto Práctico de Diseño de Software

Arquitectura modelo-vista-controlador (moderna)

Vista

Modelo

Controlador

Comunicación con el usuario

Comportamientos complejos

Consultas en

el modelo

Consultas y modificaciones

en el modelo

V

M

C

C

M

VModelo-Vista-Controlador original

Page 35: Unidades14a28-PPT.pdf

69 Proyecto Práctico de Diseño de Software

Arquitectura en Cuatro Capas

70 Proyecto Práctico de Diseño de Software

Arquitectura en Tres Escalones

Page 36: Unidades14a28-PPT.pdf

71 Proyecto Práctico de Diseño de Software

Tema IVDiseño detallado

– Unidad 21 – Introducción al diseño detallado: diseño por contratos

– Unidad 22 – Diseño detallado con UML (1): polimorfismo

– Unidad 23 – Diseño detallado con UML (2): interacciones

– Unidad 24 – Diseño detallado con UML (3): máquinas de estados

– Unidad 25 – Patrones de diseño (1)

– Unidad 26 – Patrones de diseño (2)

– Unidad 27 – Implementación de asociaciones UML en Java (artículo y ex.)

– Unidad 28 – Herencia múltiple

72 Proyecto Práctico de Diseño de Software

Introducción al diseño detallado: diseño por contratos

• Qué es el diseño detallado

• Nivel de detalle en el modelo de diseño

• Diseño por contratos

– Noción de contrato

– Especificación formal del contrato: sintaxis y semántica

– Uso de pre- y post- condiciones

– Invariantes de clase

– Contratos y herencia: subcontratación

• Especificación de algoritmos

– Diagramas de actividad

– Pseudocódigo

Page 37: Unidades14a28-PPT.pdf

73 Proyecto Práctico de Diseño de Software

Diseño por contratos: PPCs e invariantes

• PPCs de operación

– CuentaCorriente.meterDinero(cantidad: Moneda)

• Pre:

• Post: saldo’ = saldo + cantidad

– CuentaCorriente.sacarDinero(cantidad: Moneda)

• Pre: saldo – cantidad ≥ 0

• Post: saldo’ = saldo – cantidad

• Invariantes de clase

– CuentaCorriente: saldo ≥ 0

CuentaCorriente

saldo

meterDinero(cantidad)

sacarDinero(cantidad)

74 Proyecto Práctico de Diseño de Software

Diseño por contratos: subcontratación

• PPC’s de operación

– CuentaCorriente.sacarDinero(cantidad: Moneda)

• Pre: saldo – cantidad ≥ 0

• Post: saldo’ = saldo – cantidad

• PPC’s de operación redefinida en la subclase

– CuentaCredito.sacarDinero(cantidad: Moneda)

• Pre: saldo + credito – cantidad ≥ 0

• Post: saldo’ = saldo – cantidad

– Pre: menos restrictiva, o igual

– Post: más restrictiva, o igual

• Invariantes de clase (más restrictivo, o igual)

– CuentaCorriente: saldo ≥ 0

– CuentaCredito: (credito ≥ 0) AND (saldo + credito ≥ 0)

CuentaCorriente

saldo

sacarDinero(cantidad)

CuentaCredito

credito

sacarDinero(cantidad)

¿Es correcta esta generalización?

Page 38: Unidades14a28-PPT.pdf

75 Proyecto Práctico de Diseño de Software

Diseño por contratos: uso correcto de jerarquías

• CaminoOblicuo.distancia.post

• CaminoEsquinado.distancia.post

2

12

2

12 )()( yyxxd −+−=

)()( 1212 yyxxd −+−=

CaminoOblicuo

origen: Punto

distancia( ): Float

destino: Punto

CaminoEsquinado

origen: Punto

distancia( ): Float

destino: Punto

¿Cuál sería correcta?

(x1, y1)

(x2, y2)

76 Proyecto Práctico de Diseño de Software

Especificación de algoritmos

m4

m100

m400

no bisiesto bisiesto

[sí]

[sí]

[no]

[no]

[no]

[sí]

Bisiesto (x) =

m4(x) AND (

(NOT m100(x) OR

(m100(x) AND m400(x)))

= m4(x) AND (NOT m100(x) OR m400(x))

NoBisiesto (x) =NOT m4(x) OR (m100(x) AND NOT m400(x))

Page 39: Unidades14a28-PPT.pdf

77 Proyecto Práctico de Diseño de Software

Diseño detallado con UML (1): polimorfismo

• Asignación polimórfica

– variables y argumentos

• Invocación polimórfica de operaciones

– interfaz y comportamiento

• Redefinición polimórfica de operaciones

– sobreescritura y sobrecarga

• Signatura de la operación

– distinción de operaciones por su signatura

• Visibilidad

• Interfaces

– Clases y operaciones abstractas

– Generalización vs. Realización

78 Proyecto Práctico de Diseño de Software

Asignación polimórfica de “variables”

: CuentaCredito juan: Persona

public class CuentaCorriente {

}

public class CuentaCredito extends CuentaCorriente {

}

public class Persona {

private CuentaCorriente titularDe;public asignarCuenta (CuentaCorriente cc) {

titularDe = cc;

}

}

public class Main {

public static void main(String[] args) {

Persona juan = new Persona();

CuentaCorriente ccr = new CuentaCredito();juan.asignarCuenta(ccr);

}

}

PersonaCuentaCorrientetitularDe

CuentaCredito

Variable polimórfica

Argumento polimórfico

Page 40: Unidades14a28-PPT.pdf

79 Proyecto Práctico de Diseño de Software

Invocación polimórfica de operaciones

public class CuentaCorriente {

public Moneda saldo;

public void sacarDinero (Moneda cantidad) { } }

public class CuentaCredito extends CuentaCorriente {

public Moneda credito;

public void sacarDinero (Moneda cantidad) { } }

public class Persona {

private CuentaCorriente titularDe;

public asignarCuenta (CuentaCorriente cc) {

titularDe = cc; }

public sacarDinero (Moneda cantidad) {

titularDe.sacarDinero(cantidad); }}

public class Main {

public static void main(String[] args) {

Persona juan = new Persona();

CuentaCorriente ccr = new CuentaCredito();

juan.asignarCuenta(ccr);

juan.sacarDinero(100); }

}

sacarDinero(100)

: CuentaCredito juan: Persona

Persona

CuentaCorriente

titularDesaldo

sacarDinero(cantidad)

CuentaCredito

credito

sacarDinero(cantidad)

Asignación polimórfica

Invocación polimórfica

80 Proyecto Práctico de Diseño de Software

Redefinición polimórfica de operaciones

• Polimorfismo: capacidad de ejecutar distintos comportamientos en respuesta al mismo mensaje (= invocación de operación).

• Una operación polimórfica es aquélla que tiene muchas implementaciones.

• No confundir sobreescritura con sobrecarga de operaciones:– sobreescribir: redefinir en otra clase el comportamiento de la misma operación

• el método se selecciona en tiempo de ejecución– sobrecargar: reutilizar el nombre de operación, pero con distintos parámetros

• el método se selecciona en tiempo de compilación, no es polimorfismo

sobrecargasobreescritura (polimorfismo)

CuentaCorriente

saldo

sacarDinero(cantidad)

CuentaCredito

credito

sacarDinero(cantidad)

sacarDinero( )

Page 41: Unidades14a28-PPT.pdf

81 Proyecto Práctico de Diseño de Software

Signatura de la operación

• Define los elementos que identifican unívocamente una operación:

– nombre de operación, número (orden) y tipo de los parámetros.

• Una clase no puede tener dos operaciones con la misma signatura o firma.

• Los nombres de los parámetros no pertenecen a la signatura.

• ¿Pertenece el tipo del valor de retorno a la signatura? Depende...

– Según el estándar de UML, sí.

– Pero el tipo del retorno no sirve para distinguir qué operación hay que ejecutar.

�No se puede usar para sobrecargar operaciones

p1 : Punto

posiciónX = 3posiciónY = -5

PuntoposiciónX: CoordenadaposiciónY: CoordenadaobtenerPosición( ): CoordenadasPolaresobtenerPosición( ): CoordenadasCartesianas

c := obtenerPosición ( )¿Qué operación se invoca? Depende del tipo de “c”...

«instance of»

Clase mal definida

82 Proyecto Práctico de Diseño de Software

Distinción de operaciones por su signatura

Nombre Signatura Clase Resultado

distinto distinta

igual

distintamisma sobrecarga

subclase sobrecarga

igualmisma error

subclase sobreescritura

• En función del nombre de la operación, su signatura, y su clase, puede ser:

– una operación distinta,

– una operación sobrecargada,

– una operación sobreescrita, o

– un error (detectable por el compilador).

CuentaCorriente

saldo

sacarDinero(cantidad: Moneda)sacarDinero(cantidad: MonedaEuropea)

CuentaCredito

credito

sacarDinero(cantidad: Moneda)sacarDinero(cantidad: MonedaEuropea)

Page 42: Unidades14a28-PPT.pdf

83 Proyecto Práctico de Diseño de Software

Visibilidad

• Niveles de visibilidad (diferentes en cada lenguaje):+ public: visible para todas las clases (opción “por defecto” para operaciones).

~ package: visible para todas las clases que estén en el mismo paquete.

# protected: visible para las subclases.

– private: visible sólo para la clase (opción “por defecto” para atributos).

UML Java VB.NET (C#)

Public Public Public

Package Protected

Protected Protected-Friend

friendlyFriend

(Internal)Protected

Private Private Private

84 Proyecto Práctico de Diseño de Software

Visibilidad privada entre objetos de la misma clase

public class Elemento {

private String nombre;

private void escribir() {System.out.println(this.nombre);

}

public void prueba(Elemento p) {

p.nombre=“e3”;p.escribir();

}

public Elemento(String n) {

nombre=n;

}

}

class Main {

public static void main(String[] args) {Elemento e1=new Elemento(“e1”);

Elemento e2=new Elemento(“e2”);

e1.prueba(e2);

}

}

Ejecución y resultado:

C:\java Main

e3

� A través de la operación pública prueba, el objeto e1 manipula el atributo privado nombre de e2, e invoca su operación privada escribir.

� ¿Cuál es el problema? En realidad, ninguno, si se entiende bien qué significa la visibilidad privada.

• La visibilidad es una propiedad de las clases, no de los objetos: un objeto puede acceder a operaciones y atributos privados de otros objetos de la misma clase.

Page 43: Unidades14a28-PPT.pdf

85 Proyecto Práctico de Diseño de Software

Visibilidad privada entre clase y superclase

public class Rectángulo {

private int base, altura;

private boolean invariante ( ) {

return (base > 0) && (altura > 0)

}

public int area() { return base * altura }

}

public class Cuadrado extends Rectángulo {

private boolean invariante ( ) {return (base > 0) && (base = altura)

}

public int area () { return base * base }

}

Siendo Cuadrado subclase de Rectángulo, las instancias de la clase Cuadrado tienen una base y una altura, y por tanto parece que deberían poder acceder a ellas.

Compilación y resultado:� La clase Cuadrado no puede ver los atributos base

y altura: error de compilación.

� Aun resolviendo este error, la clase Cuadrado no redefine correctamente la operación invariante, ya que no puede verla. Sería considerada una operación distinta, no una operación redefinida. No es detectado por el compilador, lo cual es grave.

� En cambio, corrigiendo la visibilidad de los atributos base y altura, la operación area síquedaría bien redefinida.

� Los objetos de la clase Cuadrado tienen esos atributos, pero no son accesibles desde esta clase.

� ¿Cuál es el problema? En realidad, ninguno, si se entiende bien qué significa la visibilidad privada.

� Solución: usar visibilidad protected.

• La visibilidad es una propiedad de las clases, no de los objetos: un objeto no puede acceder a “sus” operaciones y atributos privados definidos en una superclase.

86 Proyecto Práctico de Diseño de Software

Figuraposición

dibujar( )

Rectángulobase

altura

dibujar( )

Cuadrado{base=altura}

dibujar( )

Círculoradio

dibujar( )

Clases y operaciones abstractas

• Operación abstracta: sólo se especifica la

signatura, no la implementación.

– Una clase con una o varias operaciones abstractas

está incompleta: no puede tener instancias directas.

– Tanto las operaciones abstractas como las concretas pueden ser redefinidas (polimórficas).

• Clase abstracta: está incompleta, no puede tener

instancias directas.

– Puede tener instancias indirectas a través de sus

subclases concretas.

– Una clase concreta...

• no puede tener operaciones abstractas.

• debe proporcinar implementaciones para todas las operaciones abstractas heredadas.

Page 44: Unidades14a28-PPT.pdf

87 Proyecto Práctico de Diseño de Software

• Encapsulamiento: separación de interfaz e implementación en una clase:

– una clase puede realizar una o varias interfaces.

– una interfaz puede ser realizada por una o varias clases.

• Interfaz: conjunto de operaciones que ofrecen un servicio coherente:

– no contiene la implementación de las operaciones (métodos).

– una interfaz no puede tener atributos ni asociaciones navegables (esta restricción ha desaparecido en UML 2.0).

– análoga a una clase abstracta con todas sus operaciones abstractas: no puede tener instancias directas.

– distinta de “interfaz natural”: conjunto de operaciones públicas de una clase (accesibles a través de cualquier asociación navegable hacia la clase).

Notaciones para uso y realización de interfaces

Documento

ImprimibleImpresora

Interfaces

Documento

«interface»Imprimible

imprimir( )

Impresora

88 Proyecto Práctico de Diseño de Software

«interface»

Figura

Círculo Rectángulo

Cuadrado

«interface»

Imprimible

Generalización vs. Realización• La realización puede entenderse como una

“generalización débil”: se hereda la interfaz, pero no la implementación:

– reduce la dependencia.

– disminuye la reutilización.

– alternativa a la generalización múltiple, no soportada por muchos lenguajes.

• Las interfaces son elementos generalizables:

– jerarquías mixtas de interfaces y clases.

• Criterio de diseño: comprometerse sólo con la interfaz.

– declarar el tipo de las variables y parámetros de operaciones como interfaces, no como clases.

– servirá cualquier instancia compatible con la interfaz.

• Ejemplo:Figura f = new Cuadrado ( );

f.imprimir

Page 45: Unidades14a28-PPT.pdf

89 Proyecto Práctico de Diseño de Software

Diseño detallado con UML (2): interacciones

• Diagramas de interacción: colaboración y secuencia

– Mensajes y operaciones

– Foco de control

– Números de secuencia

• Mensajes síncronos y asíncronos

– Flujo de información y flujo de control

– Hilos de ejecución concurrente

• Tipos de relaciones entre clases en UML

– Dependencias inducidas por las relaciones entre clases

• Tipos de enlaces de comunicación: estructurales y contextuales

– Correspondencia diagramas de interacción-diagramas de clases

– Creación y destrución de objetos y enlaces

• Ley de Demetra (Law of Demeter): “No hable con desconocidos”

90 Proyecto Práctico de Diseño de Software

banco : Banco

cuenta1 : Cuenta

cuenta2 : Cuenta

1: sacarDinero( )

2: meterDinero( )

banco : Banco cuenta1 : Cuenta cuenta2 : Cuenta

sacarDinero( )

meterDinero( )

Modelado dinámico: diagramas de interacción

Diagrama de colaboración

Transferencia de dinero entre dos cuentas:- sacar dinero de una cuenta, y- meter el dinero en la otra cuenta.

Mensaje

Diagrama de secuencia

Objeto

Page 46: Unidades14a28-PPT.pdf

91 Proyecto Práctico de Diseño de Software

banco : Banco

Ana : Cliente

origen : Cuenta destino : Cuenta

sacarDinero( )

meterDinero( )

emitirTransferencia( )

¿Quién activa la secuencia de mensajes?

• El iniciador puede ser...

– Un objeto del sistema, que solicita un servicio de otra parte del sistema.

– Un actor externo al sistema (instancia de actor).

• En análisis se omiten detalles de interfaz de usuario por simplicidad.

El sistema entero se puede representar como un único objeto, en un diagrama con sólo dos líneas de vida que representa la comunicación actor-sistema.

92 Proyecto Práctico de Diseño de Software

CuentaCorrientesaldo

obtenerSaldo( )

CuentaCréditocredito

obtenerCredito( )

esDisponible(cantidad): boolean

ok :=

(cantidad <= c + s)

b : Banco cc : CuentaCrédito

ok := esDisponible(cantidad)

s := obtenerSaldo( )

c := obtenerCredito( )

Mensajes y operaciones

• Un mensaje es una petición de servicio al objeto receptor:

– Se corresponde (típicamente) con la invocación de una operación.

– La operación debe estar definida en la (super)clase del objeto receptor.

– Puede cambiar el estado del objeto receptor.

• Argumentos y valores de retorno.

• Invocación local de operaciones (autodelegación).

Page 47: Unidades14a28-PPT.pdf

93 Proyecto Práctico de Diseño de Software

banco : Banco

Ana : Cliente

origen : Cuenta destino : Cuenta

sacarDinero( )

meterDinero( )

emitirTransferencia( )

Diagramas de secuencia: foco de control

• El foco de control muestra el periodo de tiempo durante el cual un objeto está ejecutando una operación como respuesta a un mensaje recibido:

– Retorno implícito al final (puede hacerse explícito): no es un nuevo mensaje, y por tanto debe ser anónimo (aunque en algunas herramientas no sea así).

– Anidamiento de ejecuciones (sombreado opcional): mecanismo de delegación.

94 Proyecto Práctico de Diseño de Software

banco : Banco

Ana : Cliente

origen : Cuenta

destino : Cuenta

1.1: sacarDinero( )

1.2: meterDinero( )1: emitirTransferencia(origen, destino, cantidad)

banco : Banco

Ana : Cliente

origen : Cuenta destino : Cuenta

sacarDinero( )

meterDinero( )

emitirTransferencia( )

Diagramas de colaboración: números de secuencia

• Forma alternativa de expresar la secuencia de mensajes y el anidamiento.

• Esquema de numeración anidada:

– El número del mensaje recibido se usa como prefijo para los mensajes enviados.

– Activador: mensaje que invoca la operación desde la que se envían otros.

– Predecesor: mensajes anteriores enviados en la misma ejecución.

Page 48: Unidades14a28-PPT.pdf

95 Proyecto Práctico de Diseño de Software

Mensajes síncronos y asíncronos

• Invocación síncrona de operación:

– El mensaje incluye el retorno (implícito o explícito), el emisor queda bloqueado.

– Comunicación bidireccional con un único mensaje.

• Envío asíncrono de señal:– El mensaje no incluye el retorno, el emisor no queda bloqueado (concurrencia).

– Puede tener argumentos, pero no valor de retorno.

– La comunicación bidireccional requiere un nuevo mensaje de respuesta.

– El mensaje lleva el nombre de la señal (no necesariamente un verbo).

Señales que aceptan los objetos

de una clasebanco1 : Banco banco2 : Banco banco3 : Banco

transferenciaSolicitada(número, datos)

transferenciaSolicitada(número, datos)

transferenciaAceptada(número)

transferenciaDenegada(número)

Banco

«signal» transferenciaSolicitada( )

«signal» transferenciaAceptada( )

«signal» transferenciaDenegada( )

96 Proyecto Práctico de Diseño de Software

Hilos de ejecución concurrente

• Un objeto activo posee un hilo de ejecución propio.

• Clases y objetos activos se representan con doble trazo vertical a los lados.

• ¿Quién puede enviar un mensaje?

– Un objeto activo.

– Un objeto pasivo que tenga el foco de control.

• ¿Quién puede recibir un mensaje asíncrono?

• Sólo los objetos activos.

• Un mensaje síncrono desvía el hilo de ejecución al objeto delegado.

• Un mensaje asíncrono puede comunicar dos hilos de ejecución distintos, o desdoblar un hilo existente.

a b c d e

r

p

q

s

Page 49: Unidades14a28-PPT.pdf

97 Proyecto Práctico de Diseño de Software

Tipos de relaciones entre clases en UML

Dependencia

El elemento dependiente requiere la presencia del elemento independiente.

Los cambios en el elemento independiente pueden

afectar al elemento dependiente.

Asociación

Especificación de un conjunto de conexiones entre instancias.

Representan la estructura y posibilidades de

comunicación del sistema.

Generalización

Relación entre un elemento general y un elemento específico.

El elemento específico puede añadir información y

debe ser consistente con el elemento general.

RealizaciónRelación donde un elemento realiza o implementa la especificación dada por otro elemento.

98 Proyecto Práctico de Diseño de Software

Figura

FiguraColoreada Color1

miColor

Dependencias inducidas por las relaciones entre clases

public class FiguraColoreada extends Figura {

private Color miColor;

public void desplazar (Vector desplazamiento) {

Posicion p = new Posicion ( );

...

}

...

}

Figura

FiguraColoreada Color

PosicionVector

generalización

asociación

variable localparámetro

(asociaciones contextuales)

Page 50: Unidades14a28-PPT.pdf

99 Proyecto Práctico de Diseño de Software

banco : Banco

Ana : Cliente

origen : Cuenta

destino : Cuenta

«parameter»

1.1: sacarDinero(cantidad)

«parameter»

1.2: meterDinero(cantidad) 1: emitirTransferencia

(origen, destino, cantidad)

«self»

1.1.1: ok :=

esDisponible(cantidad)

Enlaces de comunicación estructurales y contextuales

• El envío de mensajes tiene lugar en un contexto determinado, normalmente la ejecución de una operación. El contexto delimita los destinos válidos.

• ¿A quién puedo enviar un mensaje? Mis conocidos son...

– Un objeto conectado mediante un enlace navegable (instancia de asociación).

– Un objeto recibido como parámetro en esta activación («parameter»).

– Un objeto creado localmente en esta activación, o variable local («local»).

– Yo mismo, el emisor del mensaje («self»).

Por cierto, ¿cómo se nombran los objetos?- nombre arbitrario

- valor identificador

- nombre de parámetro

- nombre de variable

100 Proyecto Práctico de Diseño de Software

Diagramas de interacción vs. Diagramas de clases

• Un diagramas de clases especifica la estructura del sistema, que sirve de

base para su comportamiento: asociaciones, operaciones.

• Un diagrama de interacción ilustra un comportamiento posible del sistema

(es decir, ejemplifica, no especifica).

• Las diversas interacciones ayudan a detectar las clases, asociaciones y

operaciones requeridas: reglas de coherencia.

Diagramas de interacción

(modelo dinámico)

Diagramas de clases

(modelo estático)

Objeto Instancia de clase

EnlaceInstancia de asociación

(excepto enlaces contextuales)

MensajeOperación o señal visible en la

(super)clase receptora

Page 51: Unidades14a28-PPT.pdf

101 Proyecto Práctico de Diseño de Software

banco : Banco cuenta1 : CuentaCorriente

cuenta2 : CuentaCrédito

s := obtenerSaldo( )

abrirCuenta(s)

cerrarCuenta( )

Creación y destrucción de objetos

{transient}=

{new} + {destroyed}

Cancelar una cuenta y transferir el saldo a una nueva de otro tipo

banco : Banco

cuenta1 : CuentaCorriente

{destroyed}

cuenta2 : CuentaCrédito

{new}

1: s := obtenerSaldo( )

3: cerrarCuenta( )

2: abrirCuenta(s)

102 Proyecto Práctico de Diseño de Software

Creación y destrucción de enlaces

• Implícita en la creación/destrucción de un objeto:

– El enlace creado puede ser estructural o contextual («local»).

• Creación de un enlace con un objeto existente:

– El enlace contextual «parameter» se transforma en un nuevo enlace estructural.– Si asociación unidireccional: sólo el objeto origen puede crear o destruir enlaces.

• Destrucción del enlace sin destruir el objeto enlazado.

banco : Banco

titular : Titularcuenta1 : Cuenta cuenta2 : Cuenta

2: desasignarTitular(titular)

{destroyed}{new}

1: asignarTitular(titular)

Page 52: Unidades14a28-PPT.pdf

103 Proyecto Práctico de Diseño de Software

Ley de Demetra: “No hable con desconocidos”

• Si dos objetos pueden comunicarse, entonces el código de sus respectivas clases debe manifestarlo claramente (dependencias explícitas).

• El objeto x, en respuesta al mensaje m(a, b, c...), puede enviar

mensajes sólo a:

– El objeto x («self»).

– Los argumento del mensaje m: a, b, c... («parameter»).

– Objetos creados por x en el curso de su respuesta a m («local»).

– Objetos directamente enlazados con x («association»).

• Formulada en términos de UML 1.x:

– Todo enlace es instancia de una asociación (estructural / contextual).

– Toda asociación debe ser declarada (dependencia explícita).

• La Ley de Demetra no es una regla absoluta.

104 Proyecto Práctico de Diseño de Software

¿Qué prohíbe la Ley de Demetra?

public class CuentaCorriente {

private Moneda saldo;

public Moneda obtenerSaldo() { }

}

public class Persona {

private CuentaCorriente titularDe;

public asignarCuenta (CuentaCorriente cc) {

titularDe = cc; }

public void mostrarSaldoActual() {titularDe.obtenerSaldo().escribir();

}

}

public class Main {

public static void main(String[] args) {

Persona juan = new Persona();

CuentaCorriente cc = new CuentaCorriente();

juan.asignarCuenta(cc);juan.mostrarSaldoActual();

}

}

¿Cuál es el problema?

� La clase Persona tiene una dependencia

implícita, poco clara, con la clase Moneda.

� Solución: en lugar de enviar un mensaje al objeto devuelto por otro mensaje, declarar una variable

«local», haciendo explícita la dependencia.

public class Persona {

private CuentaCorriente titularDe;public asignarCuenta (CuentaCorriente cc) {

titularDe = cc; }

public void mostrarSaldoActual() {

Moneda saldo = titularDe.obtenerSaldo();

saldo.escribir();}

}

Page 53: Unidades14a28-PPT.pdf

105 Proyecto Práctico de Diseño de Software

Diseño detallado con UML (3): máquinas de estados

• Estados, eventos y transiciones.

– Estados y transiciones.

– Eventos y transiciones.

– Transiciones con guardas.

– Transiciones con acciones.

– Estados con acciones y actividades.

• Correspondencia diagramas de estados-diagramas de clases.

• Comunicación entre máquinas de estados.

• Diseño e implementación de máquinas de estados.

– Secuencia de acciones en un cambio de estado.

• Aplicación de las máquinas de estados al diseño de interfaces.

106 Proyecto Práctico de Diseño de Software

Estacionado VolandoEstacionado Volando

despegar

aterrizar

retirar colisionar

Máquinas de estados: estados, eventos y transiciones

Transición

EstadoEvento

Pseudo-estado inicial

Estado final

Los eventos causan las

transiciones entre estados.

Los eventos de creación y destrucciónpueden ser implícitos o explícitos.

Clase Avión

Page 54: Unidades14a28-PPT.pdf

107 Proyecto Práctico de Diseño de Software

Estados y transiciones

• Un estado es una situación en la vida de un objeto caracterizada por

satisfacer una condición, realizar una acción o esperar un evento.

• Un estado tiene duración, una transición es instantánea.

• Cada estado tiene un nombre (sustantivo, participio, gerundio...).

• El estado de un objeto está relacionado con los valores de sus atributos, los

enlaces con otros objetos y las actividades que esté realizando.

• Estados distintos implican reacciones distintas ante el mismo evento.

Personaedad

Empresa1..*

0..1 Jubilado

Parado

Trabajando

Jubilado

Parado

Trabajando

jubilar

jubilar

contratardespedir

Clase Persona

108 Proyecto Práctico de Diseño de Software

Eventos y transiciones

• Un evento representa la ocurrencia de un suceso, dentro o fuera del objeto, que provoca un cambio de estado en el objeto (dispara una transición).

– La sucesión de eventos marca el “camino” seguido por el objeto entre los estados.

– Estados y eventos representan respectivamente intervalos / instantes de tiempo.

– Es un elemento esencial: toda transición debe tener un y sólo un evento.

• Tipos de eventos: – Evento de llamada: recepción de mensaje síncrono / operación– Evento de señal: recepción de mensaje asícrono / señal– Evento de cambio: comprobación continua de una condición lógica / when( )– Evento temporal: tiempo transcurrido desde la entrada en el estado / after( )

• Los mensajes recibidos, síncronos o asíncronos, pueden tener parámetros.

ReproducciónApagado Parado ReproducciónApagado Parado

on

off

play

stop

after(60 s) when(velocidad < 5 cm/s)

misma notación

Clase Reproductor

Page 55: Unidades14a28-PPT.pdf

109 Proyecto Práctico de Diseño de Software

ReproducciónApagado Parado ReproducciónApagado Parado

on

off

play[hayCinta and (not atascada)]

stop

after(60 s) when(velocidad < 5 cm/s)

play[(not hayCinta) or atascada]

Transiciones con guardas• Una guarda es una condición lógica que es evaluada en el momento de

recibir el evento y autoriza o no la transición de estado (guarda tras evento).

– Si la transición no es autorizada por la guarda, el evento no tiene efecto.

– Varias transiciones disparadas por un mismo evento pueden estar guardadas por condiciones mutuamente exclusivas.

– La condición lógica debe ser evaluable (expresión lógica) en el contexto de la clase propietaria (parámetros del evento, atributos y enlaces del objeto, etc.).

Clase Reproductor

Guardas

110 Proyecto Práctico de Diseño de Software

• Una acción es un comportamiento que se ejecuta de modo instantáneo(con tiempo de ejecución despreciable) y atómico (no interrumpible).

– Está asociada a un evento que dispara una transición.

– Es completada antes de que la transición alcance el nuevo estado.

– Puede definirse recursivamente como secuencia de acciones.

• Efectos:

– En el propio objeto: modificar atributos o enlaces, invocar operaciones locales.

– En otros objetos: mensajes síncronos (operaciones) o asíncronos (señales).

Transiciones con acciones

Clase Reproductor

Acciones

ReproducciónApagado Parado ReproducciónApagado Parado

on

off

play[hayCinta and (not atascada)]/altavoz.on

stop/altavoz.off

after(60 s) when(velocidad < 5 cm/s)/altavoz.off

play[(not hayCinta) or atascada]

Page 56: Unidades14a28-PPT.pdf

111 Proyecto Práctico de Diseño de Software

Reproducción

entry / altavoz.onexit / altavoz.offdo / reproducir

Reproducción

entry / altavoz.onexit / altavoz.offdo / reproducir

cambiarVolumen(delta)/vol:= vol + delta

Reproducción

cambiarVolumen(delta) / vol:= vol + deltado / reproducir

Reproducción

cambiarVolumen(delta) / vol:= vol + deltado / reproducir

Estados con acciones y actividades

• Dentro de un estado pueden ejecutarse dos tipos de comportamientos:

– Acciones asociadas a eventos puntuales que ocurren dentro de un estado:

• acción de entrada / entry• acción de salida / exit• acción por evento interno / evento

– Actividades asociadas al estado como tal / do• una actividad es duradera e interrumpible.

• puede modificar una condición que genere un evento de cambio.

• No confundir evento interno con autotransición (sale y entra en el estado).

AutotransiciónEvento interno

112 Proyecto Práctico de Diseño de Software

Diagramas de estados vs. Diagramas de clases

• Eventos: operaciones o señales de la clase receptora.

• Guardas y eventos de cambio: valores de atributos (y asociaciones).

• Acciones: operaciones locales o mensajes enviados a otros objetos.

• Actividades: operaciones de la clase receptora.

Mensajes salientes: destinatario(s) designado(s) por el nombre de rol

ReproductorhayCintaatascada

velocidadvolumen

«signal» on( )«signal» off( )«signal» play( )

«signal» stop( )«signal» cambiarVolumen(delta)

reproducir( )

Altavoz

on( )

off( )

1

altavoz

Page 57: Unidades14a28-PPT.pdf

113 Proyecto Práctico de Diseño de Software

Comunicación entre máquinas de estados

Sentado

Levantado

Sentado

Levantado

mover/levantar after(2 s)

/sentar; siguiente.mover

Elemento

«signal» mover( )levantar( )sentar( )

1

siguiente

e1 : Elemento e2 : Elemento e3 : Elemento

2: mover( ) 3: mover( )1: mover( )

1.1: levantar( )

1.2: sentar( )

2.1: levantar( )

2.2: sentar( )

3.1: levantar( )

4: mover( )

3.2: sentar( )

114 Proyecto Práctico de Diseño de Software

Diseño e implementación de máquinas de estados

• Estado implícito.

• Estado explícito.

– almacenado en un atributo del objeto.

– sentencias de control para variar el comportamiento en función del estado.

• Patrón “estado” (variante del anterior):

– asociación con un objeto “estado” que almacena el estado actual.

– responde de modo polimórfico a los eventos recibidos (por cada estado hay una subclase con una única instancia en cada momento).

Reproductor

«signal» on( )«signal» off( )«signal» play( )«signal» stop( )

Apagado Parado

Estado

on( ): Estadooff( ): Estadoplay( ): Estadostop( ): Estado

Reproducción

1

estado

Page 58: Unidades14a28-PPT.pdf

115 Proyecto Práctico de Diseño de Software

Secuencia de acciones en un cambio de estado

• El reproductor recibe la señal on( ).

• Delega el cambio de estado en el objeto que representa estado actual (Apagado).

• El objeto estado crea un objeto que representa el nuevo estado (Parado), y lo devuelve como resultado de ejecutar la operación on( ).

• Se destruye el viejo estado (Apagado).

Reproductor

«signal» on( )

«signal» off( )

«signal» play( )

«signal» stop( )

Apagado Parado

Estado

on( ): Estado

off( ): Estado

play( ): Estado

stop( ): Estado

Reproducción

1

estado

r : Reproductor estado : Apagado

o : Oyente

nuevo : Parado

on( )estado := on( )

new( )

116 Proyecto Práctico de Diseño de Software

Aplicación de las máquinas de estados al diseño de interfaces

• Evitar ventanas superfluas y “callejones sin salida”.

• Habilitar en cada momento sólo los botones que realmente pueden ejecutar una acción significativa.

• Los botones habilitados guían al usuario eficazmente por la aplicación.

• Un buen diseño hace la navegación mucho más intuitiva.

Page 59: Unidades14a28-PPT.pdf

117 Proyecto Práctico de Diseño de Software

Patrones de diseño

• Introducción a los patrones de diseño (Gamma, Helm, Johnson & Vlissides)

– El catálogo de patrones de diseño

– Relaciones entre patrones de diseño

– Relaciones entre marcos y patrones

– Relaciones entre estilos arquitectónicos y patrones de diseño

– Descripción de un patrón de diseño

• Caso de estudio: Abstract Factory

– Problema de mantenimiento: creación de objetos

– Fábricas y productos

• Cómo resolver problemas con patrones de diseño: Herencia vs. Delegación

• Otros patrones de diseño

– Decorator

– Command

• Cómo seleccionar y usar un patrón de diseño

118 Proyecto Práctico de Diseño de Software

El catálogo de patrones de diseño

Propósito

Creación Estructura Comportamiento

Ámbito

Clase(Compilación)

Factory Method Adapter Interpreter

Template Method

Objeto(Ejecución)

Abstract Factory

Builder

Prototype

Singleton

Adapter

Bridge

Composite

Decorator

Facade

Flyweight

Proxy

Chain of Responsibility

CommandIterator

Mediator

Memento

Observer

State

Strategy

Visitor

Page 60: Unidades14a28-PPT.pdf

119 Proyecto Práctico de Diseño de Software

Relaciones entre patrones de diseñoMemento

Iterator

Builder

Command

Composite

Decorator Flyweight

Visitor

Interpreter

Chain of ResponsibilityStrategy

Mediator

Observer

State

Template Method

Prototype

Singleton

Facade

Abstract Factory

Factory Methodinstancia única

instancia única

configurar fabricas dinámicas

definir los pasos de un algoritmo

cambiar la piel en vez de las tripas

Implementado usando

gestión de dependencias

complejas

suele usar

crear compuestos

añadir responsabilidades a objetoscompartir

compuestos

compartir estrategias

compartir estados

añadir operaciones

añadir operaciones

compartir símbolos

terminales

definir la gramática

guardar el estado de la

iteración

evitar la histéresis

enumerar los hijos

combinadas usando

definir la cadena

definir recorridos

Adaptado de E. Gamma et al., Design Patterns:

Elements of reusable Object-Oriented software

120 Proyecto Práctico de Diseño de Software

Descripción de un patrón de diseño

Abreviada Extendida

1. Nombre

2. Problema

3. Solución

4. Consecuencias

1. Nombre y clasificación

2. Propósito

3. También conocido como

4. Motivación

5. Aplicabilidad

6. Estructura

7. Participantes

8. Colaboraciones

9. Consecuencias

10. Implementación

11. Código de ejemplo

12. Usos conocidos

13. Patrones relacionados

Page 61: Unidades14a28-PPT.pdf

121

Abstract Factory: introducción

• Con este patrón se pretende resolver un problema básico de programación:

los constructores no pueden invocarse de modo polimórfico.

– Es decir, para instanciar un objeto es necesario mencionar su clase concreta.

– Esto genera ramificaciones condicionales y acoplamiento con las subclases.

– La solución es un “truco” para acceder a los constructores de modo “polimórfico”, y así desacoplar al cliente de los constructores concretos.

• Z declara una variable polimórfica de tipo A: ¿cómo se le asigna un valor?

Proyecto Práctico de Diseño de Software

122

Abstract Factory: el problema y la solución

• Resulta que Z no depende sólo de A, también depende de B y C, y además hay sentencias de ramificación múltiple.

• En la solución, en todo caso, siempre es necesario referirse a una clase concreta en algún lugar, dentro o fuera de Z. Pero usando Abstract Factory, la única clase concreta mencionada es la factoría concreta.

• Su utilidad es general, pero especialmente se manifiesta cuando la factoría es capaz de responsabilizarse de una familia de productos.

// Código problemáticopublic class Z {

A a;

switch (…) {case …: a = new B( ); break;

case …: a = new C( ); break;

}

}

// Código mejoradopublic class Z {

…// instanciación de fFactoría f = …;

// “constructor” polimórficoA a = f.createA( ); …

}

Proyecto Práctico de Diseño de Software

Page 62: Unidades14a28-PPT.pdf

123 Proyecto Práctico de Diseño de Software

Caso de estudio (1): Abstract Factory

• Una situación real:

– Se desea desarrollar una aplicación con interfaz gráfica de usuario (GUI),

que sea fácil de portar a dos sistemas operativos: Windows y Macintosh.

– Las GUI manejan una serie de objetos, generalmente conocidos como

Widgets, tales como: ScrollBar, List, Button, etc.

• Problema de diseño:

– La GUI presenta una apariencia diferente (look and feel) para cada uno

de de estos objetos en cada sistema operativo.

– La aplicación debe poder crear los objetos con la apariencia apropiada para cada sistema operativo.

124 Proyecto Práctico de Diseño de Software

Caso de estudio (2): problema de mantenimiento

• La creación de Widgets es diferente en cada sistema:

– ScrollBar sb = new WindowsScrollBar();

– ScrollBar sb = new MacScrollBar();

• Si se crean muchos Widgets (como suele ocurrir en aplicaciones de cierta

complejidad) será muy difícil cambiar de una apariencia a otra, dado que hay

que modificar muchas instrucciones que están diseminadas por diferentes

partes del programa (problema de mantenimiento).

• Solución: patrón de diseño Abstract Factory (fábrica abstracta).

– Una “fábrica” es un objeto que se encarga de crear otros objetos.

• Los elementos de este patrón son:

– Una fábrica abstracta y varias fábricas concretas.

– Un familia de productos abstractos y varias familias de productos concretos.

Page 63: Unidades14a28-PPT.pdf

125 Proyecto Práctico de Diseño de Software

Caso de estudio (3): fábricas y productos

WindowsFactoryWindowsFactoryWindowsFactoryWindowsFactory

createScrollBar()

createButton()

createMenu()

MacFactoryMacFactoryMacFactoryMacFactory

createScrollBar()

createButton()

createMenu()

GUIFactoryGUIFactoryGUIFactoryGUIFactory

createScrollBar()createButton()

createMenu()

WidgetWidgetWidgetWidget

WindowsScrollBarWindowsScrollBarWindowsScrollBarWindowsScrollBar

scrollTo()

MacScrollBarMacScrollBarMacScrollBarMacScrollBar

scrollTo()

ScrollBarScrollBarScrollBarScrollBar

scrollTo()

ButtonButtonButtonButton

press()

MenuMenuMenuMenu

popUp()

Para toda la aplicación:

- una fábrica abstracta

- dos fábricas concretas

Por cada tipo de Widget:

- un producto abstracto

- dos productos concretos

126 Proyecto Práctico de Diseño de Software

Caso de estudio (4): solución al problema de mantenimiento

• Creación de Widgets con contructores concretos, antes…– ScrollBar sb = new WindowsScrollBar();

– ScrollBar sb = new MacScrollBar();

• …y después, a través de operaciones abstractas de la fábrica.– ScrollBar sb = guiFactory.createScrollBar();

• Hemos transformado la ramificación condicional en invocación polimórfica.

• La variable global guiFactory debe ser inicializada al comienzo del programa con una de las fábricas concretas:– GUIFactory guiFactory = new MacFactory();

• Las operaciones de creación en las fábricas concretas usan los constructores concretos (Factory Method: invocar un constructor mediante una operación):– public ScrollBar createScrollBar() {return new WindowsScrollBar();}

– public ScrollBar createScrollBar() {return new MacScrollBar();}

Page 64: Unidades14a28-PPT.pdf

127 Proyecto Práctico de Diseño de Software

Abstract Factory: ejemplo

Adaptado de E. Gamma et al.,

Design Patterns: Elements of reusable Object-Oriented software

128 Proyecto Práctico de Diseño de Software

Abstract Factory: patrón

Adaptado de E. Gamma et al.,

Design Patterns: Elements of reusable Object-Oriented software

Page 65: Unidades14a28-PPT.pdf

129 Proyecto Práctico de Diseño de Software

Herencia vs. Delegación

c.x( ) c.x( )

A

x( )

B

x( )

C

x( )

1

c

1

c

Dos formas de reutilizar / refactorizar

A B

C

x( )

130 Proyecto Práctico de Diseño de Software

Flexibilidad: combinar herencia y delegación

La combinación de asociación/delegación y herencia posibilita modificar el comportamiento en tiempo de ejecución.

Proyecto Práctico de Diseño de Software

Page 66: Unidades14a28-PPT.pdf

131 Proyecto Práctico de Diseño de Software

Decorator: ejemplo (editor de texto)

Adaptado de E. Gamma et al.,

Design Patterns: Elements of reusable Object-Oriented software

132 Proyecto Práctico de Diseño de Software

Decorator: ejemplo (scroll y borde)

Adaptado de E. Gamma et al.,

Design Patterns: Elements of reusable Object-Oriented software

Advertencias sobre la notación en Gamma:

• los roles se nombran al revés que en UML

• la flecha negra indica multiplicidad mínima 1.

• component->Draw( ) ≡ component.Draw( )

• Decorator::Draw( ) ≡ super.Draw( )

Page 67: Unidades14a28-PPT.pdf

133 Proyecto Práctico de Diseño de Software

Decorator: patrón

Adaptado de E. Gamma et al.,

Design Patterns: Elements of reusable Object-Oriented software

134 Proyecto Práctico de Diseño de Software

Decorator: alternativas

• No requieren añadir generalización a TextView.

• Preservan la identidad de los objetos.

• Pero… se pierde la esencia de Decorator: que el objeto no “sepa” que ha sido decorado.

• Alternativa 1– El número y tipo de decoradores está

rígidamente determinado en tiempo de compilación.

– Hay que añadir un atributo a TextView por cada decorador y modificar la operación draworiginal (y todas las operaciones decoradas).

• Alternativa 2– Menor impacto sobre TextView: añadir un

solo atributo, modificar una vez todas las operaciones para iterar sobre todos los decoradores.

– Variante: cadena en lugar de lista (patrón Chain of Responsibility)

Proyecto Práctico de Diseño de Software

Page 68: Unidades14a28-PPT.pdf

135 Proyecto Práctico de Diseño de Software

Command: ejemplo (menú y paste)

Adaptado de E. Gamma et al.,

Design Patterns: Elements of reusable Object-Oriented software

136 Proyecto Práctico de Diseño de Software

Command: ejemplo (open y macro)

Adaptado de E. Gamma et al., Design Patterns:

Elements of reusable Object-Oriented software

Page 69: Unidades14a28-PPT.pdf

137 Proyecto Práctico de Diseño de Software

Command: patrón

Adaptado de E. Gamma et al.,

Design Patterns: Elements of reusable Object-Oriented software

138 Proyecto Práctico de Diseño de Software

Cómo seleccionar un patrón de diseño

Objetivo Patrón

Proporcionar una interfaz única que dé acceso a un

conjunto de objetos de diversas clasesFacade

Conseguir que un objeto se comporte de manera

determinada por su estado actualState

Encapsular diversas formas de “visitar” los objetos de

una colección, de tal modo que el código cliente pueda

seleccionar una de ellas en tiempo de ejecución

Iterator

Facilitar la respuesta de entidades interesadas en los

cambios de una fuente de informaciónObserver

Interpretar sentencias escritas en una gramática formal Interpreter

Page 70: Unidades14a28-PPT.pdf

139

Herencia múltiple

• Qué es la herencia múltiple

– Frente a clasificación múltiple

– Frente a interfaces múltiples

• Cuándo es necesaria

– Desempeñar dos o más roles

– Reutilizar y redefinir código

• Soluciones parciales

– Interfaces

– Delegación

• Problemas conceptuales

• Estrategia de implementación

– Limitaciones

Proyecto Práctico de Diseño de Software

140

Axp( )

Byq( )

c1

«instance of» «instance of»

¿Qué es la herencia múltiple?

Cxyp( )q( )

c1

«Interface»A

p( )

«Interface»B

q( )

«instance of»

Axp( )

Byq( )

C

p( )

c1

«instance of»

Herencia múltiple Clasificación múltiple Interfaces múltiples

Proyecto Práctico de Diseño de Software

Page 71: Unidades14a28-PPT.pdf

141

A

p( )

B

q( )

C

p( )q( )

c1

«instance of»

¿Cuándo es necesaria la herencia múltiple?

public class C extends A, B { // ¡ficticio!public p ( ) {

...super.p( );...

};public q ( ) {

...super.q( );...

};}

public class Main {public static void main(String[] args) {

C c1 = new C( );A a1 = c1;B b1 = c1;a1.p( );b1.q( );

}}

Reutilizar y redefinir operaciones

Desempeñar roles distintos

Proyecto Práctico de Diseño de Software

142

Interfaces: desempeñar roles distintos

C

p( )q( )

c1

«Interface»A

p( )

«Interface»B

q( )

«instance of»

Delegación: reutilizar y redefinir operaciones

a.p( ) b.q( )

A

p( )

B

q( )

C

p( )q( )

c1

1a 1b

«instance of»

Herencia múltiple: soluciones parciales

Proyecto Práctico de Diseño de Software

Page 72: Unidades14a28-PPT.pdf

143

¿Qué hace G.p( )? ¿Qué es G.x?

Herencia múltiple: problemas conceptuales

Dxp( )

Exp( )

Fxp( )

Gxp( )

Proyecto Práctico de Diseño de Software

144

Herencia múltiple: estrategia de implementación

ca.p( ) cb.q( )

A

p( )

B

q( )

C

p( )q( )

«Interface»iA

p( )

«Interface»iB

q( )

Ca Cb1

ca

1

cb

A

p( )

B

q( )

C

p( )q( )

Proyecto Práctico de Diseño de Software