Professional Documents
Culture Documents
Presentacin
Profesores
Grupo M Gonzalo Gnova (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)
Objetivos de la asignatura
Especificacin del diseo de alto y bajo nivel de una aplicacin informtica Aprender...
Redaccin de un documento completo de diseo Desarrollo dirigido por modelos (MDA-MDD-MDE), evolucin de USDP Estndares de documentacin de proyectos Tcnicas de la orientacin a objetos para diseo arquitectnico y detallado
Desarrollar capacidades
Abstraccin y resolucin de problemas Lectura crtica y reflexiva Trabajo en equipo Exposicin de resultados propios Revisin de trabajos ajenos Aprendizaje a partir de errores propios y ajenos
Proyecto Prctico de Diseo de Software 3
Documentacin entregada
Atencin a nombres de archivos y fechas de entrega Dos documentos parciales (el segundo completa al primero):
ej. ProyectoIS2-M05.doc: equipo M05, etc. envo por correo a is.uc3m [at] gmail.com y miembros del equipo revisor ver ndice adaptado del estndar ESA PSS-05-0
Descripcin de la prctica
Ingeniera del Software 1
Realizar un proyecto de ingeniera 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 lmites de carga de trabajo de la asignatura. Describir este subconjunto en forma de requisitos y con los modelos necesarios. Realizar una evaluacin del portal (la parte seleccionada).
penalizacin 1
1-(p-60)/60
0 0 60
Proyecto Prctico de Diseo de Software
120
pginas
8
Calendario de la asignatura
Dedicacin a la asignatura, aproximadamente:
30 horas de clase terica 30 horas de otras actividades en clase 60 horas de trabajo personal y en equipo
Clases tericas
Asistencia no controlada. Dos sesiones en laboratorio. El examen de Test es un reflejo directo del aprovechamiento de las clases tericas, de ah la importancia que se le da en la nota final.
Tutoras colectivas
Asistencia voluntaria. Sirven para que el profesor pueda hacer un seguimiento efectivo del proyecto. Aprovechad la tutora llevando un borrador bien trabajado.
Exposiciones/Revisiones
Asistencia obligatoria a todas las exposiciones, aunque no toque exponer. Dos miembros exponen la prctica, dos responden a revisores y profesores. Tiempo mximo de exposicin: 20 minutos entre ambos.
Calendario completo
Atencin a las fechas de entregas. Atencin a la fecha de confirmacin de equipos de prcticas.
Proyecto Prctico de Ingeniera de Requisitos 10
Evaluacin de la asignatura
Individual Tutoras* Prctica Exp/Ejecucin** Exp/Respuestas Teora Equipo 00% Exp/Preparacin 05% 05% Documentacin 05% Revisiones 30% 05% 10% 50% 50% 100% 50%
* Asistencia NO obligatoria a tutoras colectivas ** Asistencia obligatoria a las exposiciones ajenas (0,5 penalizacin por falta no justificada) *** Se tiene en cuenta la participacin en el debate posterior Posible bonificacin global por participacin e inters (slo a los aprobados)
Ms detalles
Proyecto Prctico de Ingeniera de Requisitos 11
Bibliografa
Diseo arquitectnico, diseo detallado
Eric Braude. Software Engineering. An Object-Oriented Perspective. John Wiley & Sons, 2001. Captulos 5 y 6 Ian Sommerville. Software Engineering, 7th ed. Pearson-Addison Wesley, 2004. Captulos 11-16 Roger Pressman. Ingeniera del software: un enfoque prctico, 6 ed. McGraw-Hill. Captulos 9-11 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns. Elements of reusable Object-Oriented software. Addison-Wesley, 1994.
Ms en la ficha de la asignatura
12
Tema III
Diseo arquitectnico
Unidad 14 La transicin del anlisis al diseo Unidad 15 Introduccin al diseo arquitectnico Unidad 16 Modelado arquitectnico con UML Unidad 17 Herramientas de modelado (laboratorio) Unidad 18 Vistas arquitectnicas Unidad 19 Estilos arquitectnicos Unidad 20 Qu es diseo orientado a objetos? (artculo y examen)
13
Especificacin
Descripcin
14
abstraccin
15
16
Preguntas ms frecuentes
Proyecto Prctico de Diseo de Software 17
18
19
vehculo
Camino
Columna
Proyecto Prctico de Diseo de Software 20
21
22
Cohesin y acoplamiento
componente 4
1 2 3
componente
Alta cohesin
Puente
Bajo acoplamiento
Adaptado de E. Braude, Software Engineering: An Object-Oriented Perspective Proyecto Prctico de Diseo de Software 23
Mal
Cmo acertar de antemano?
Bien
Estilos arquitectnicos
24
25
Otros criterios:
Reuso Escalabilidad Coste Requisitos no funcionales
26
Componentes reutilizables
Dificultades para el reuso Eleccin de componentes para el reuso Desarrollo para el reuso
27
1 ventanaEmpleado
Capa de aplicacin
MiAplicacin
VentanaDialogo
Empleado
28
Nocin de componente
29
(UML 1.x)
(UML 1.x)
30
Nocin de dependencia
Dependencia A C:
<<component>> A
<<component>> B
<<component>> C
31
Nocin de interfaz
Dos componentes pueden ofrecer la misma interfaz
32
33
El componente proporciona slo una interfaz, el tipo abstracto de datos. Es necesario que la clase cliente (Departamento) conozca las clases concretas EmpleadoFijo, etc.: estas clases deben ser pblicas. Nada le impide usarlas slo para invocar los constructores (salvo el buen estilo del programador). La dependencia es potencialmente peligrosa.
34
GestorEmpleados no puede recibir ni devolver valores de tipo EmpleadoFijo, EmpleadoTemporal, etc. Es necesario un mecanismo de traduccin de los identificadores pblicos a las instancias de EmpleadoFijo, etc. (una lista interna).
class Departamento { int e = ge.crearEmpleado ( ); // se supone que existe GestorEmpleados ge La clase cliente slo usa el ge.modificarEmpleado(e); gestor y los identificadores } pblicos.
Proyecto Prctico de Diseo de Software
35
public interface iGestorEmpleados { public iEmpleado crearEmpleado( ); // el gestor debe mantener algn 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,
36
Caso 1
proporciona, realiza
requiere, usa
38
Cableado de componentes
cableado en rbol
39
Anidamiento de componentes
puerto
delegacin
40
Diagrama de despliegue
dispositivo hardware nodo ruta de comunicacin
41
Herramientas de modelado UML: Altova UModel Objetivo de las herramientas CASE Otras herramientas alternativas Altova UModel
Instalacin Licencias Requisitos HW y SW Diagramas de Componentes y Clases Diagramas de Despliegue Ejercicios en clase: transparencias 31-41
42
Objetivo de las herramientas CASE Mejorar la productividad, el tiempo y coste de desarrollo. Mejorar la planificacin de un proyecto. Automatizar desarrollo del software, documentacin, generacin de cdigo, pruebas de errores y gestin del proyecto. Ayuda a la reutilizacin del software. Gestin global en todas las fases de desarrollo de software con una misma herramienta. Facilitar el uso de las distintas metodologas propias de la ingeniera del software.
43
44
Seguir con la instalacin, presionando el botn Next cuando sea conveniente, y por ltimo, el botn Install. Cuando se encuentre Altova UModel instalado completamente en el ordenador, se debe pedir una licencia de evaluacin (Request a FREE Evaluation Key).
Proyecto Prctico de Diseo de Software 45
Hardware:
133 MHz, Pentium-compatible CPU, o superior. 64 megabytes (MB) de memoria RAM como mnimo 2 GB de disco duro con un mnimo de 650 MB de espacio libre.
Software:
UModel es una aplicacin Windows de 32-bit que se puede instalar en Windows 2000 / 2003, Windows XP y Windows Vista. Se pueden descargar mdulos de integracin con Visual Studio .NET (Enterprise Edition) y Eclipse (Enterprise Edition).
Proyecto Prctico de Diseo de Software 46
Aspecto de la herramienta
47
Diagrama de Clases
Diagrama de Despliegue
48
Aspecto
Stakeholders
Requisitos
Funcionales
Gestin del software Reuso Portabilidad Mantenibilidad Restricciones impuestas por la plataforma o el lenguaje
Notacin
Clases y asociaciones
Procesos y comunicaciones
50
requisitos no funcionales
51
52
53
54
55
56
Componentes independientes
Sistemas cliente-servidor Procesos paralelos Sistemas de eventos
Arquitectura en capas
Arquitectura MVC / RUP Arquitectura en cuatro capas Arquitectura en tres escalones
57
crear banco
crear cliente
cola de clientes
log de estadsticas
informar
58
Arquitectura de tuberas y filtros stream > filter pipe filter filter pipe filter filter
filter
< stream
Adaptado de E. Braude, Software Engineering: An Object-Oriented Perspective Proyecto Prctico de Diseo de Software 59
Arquitectura cliente-servidor
Client 1 Client 2 Client 3 Client 4
Internet
deposit withdraw
retrieve
Adaptado de E. Braude, Software Engineering: An Object-Oriented Perspective Proyecto Prctico de Diseo de Software 61
Sub-system 1
Sub-system 2
Sub-system 3
Sub-system 4
Arquitectura de repositorio
Design editor
Code generator
Design translator
Project repository
Program editor
Design analyser
Report generator
7 6 5 4 3 2 1
Application Presentation Session Transport Network Data link Physical Network Data link Physical Communications medium
Arquitectura en capas: juegos interactivos Ejecucin de movimientos Lanzamiento de Dado Definicin de reglas del juego Jugador Representacin grfica
Adaptado de E. Braude, Software Engineering: An Object-Oriented Perspective Proyecto Prctico de Diseo de Software 66
Seleccin de Ficha
Avance y Captura
Movimiento
Turno
Modificaciones en la vista
Controlador
Vista
Informacin al usuario
Consultas al modelo
C V M
Modelo
Adaptado de E. Braude, Software Engineering: An Object-Oriented Perspective Proyecto Prctico de Diseo de Software 67
Comportamientos complejos
Vista
Controlador
V C M
C V M
Modelo
Modelo-Vista-Controlador original
68
69
70
Tema IV
Diseo detallado
Unidad 21 Introduccin al diseo detallado: diseo por contratos Unidad 22 Diseo detallado con UML (1): polimorfismo Unidad 23 Diseo detallado con UML (2): interacciones Unidad 24 Diseo detallado con UML (3): mquinas de estados Unidad 25 Patrones de diseo (1) Unidad 26 Patrones de diseo (2) Unidad 27 Implementacin de asociaciones UML en Java (artculo y ex.) Unidad 28 Herencia mltiple
71
Introduccin al diseo detallado: diseo por contratos Qu es el diseo detallado Nivel de detalle en el modelo de diseo Diseo por contratos
Nocin de contrato Especificacin formal del contrato: sintaxis y semntica Uso de pre- y post- condiciones Invariantes de clase Contratos y herencia: subcontratacin
Especificacin de algoritmos
Diagramas de actividad Pseudocdigo
72
Invariantes de clase
CuentaCorriente: saldo 0
73
d = ( x2 x1 ) 2 + ( y2 y1 ) 2
CaminoEsquinado.distancia.post
CaminoOblicuo origen: Punto destino: Punto distancia( ): Float Cul sera correcta?
d = ( x2 x1 ) + ( y2 y1 )
(x2, y2)
distancia( ): Float
75
Especificacin de algoritmos
Bisiesto (x) = m4(x) AND ( (NOT m100(x) OR (m100(x) AND m400(x)) ) = m4(x) AND (NOT m100(x) OR m400(x)) m4 [s]
[no]
m100 [s]
[no]
[no]
m400
[s]
no bisiesto
bisiesto
76
Signatura de la operacin
distincin de operaciones por su signatura
Visibilidad Interfaces
Clases y operaciones abstractas Generalizacin vs. Realizacin
77
public class CuentaCorriente { } public class CuentaCredito extends CuentaCorriente { } public class Persona { private CuentaCorriente titularDe; public asignarCuenta (CuentaCorriente cc) { titularDe = cc; } }
CuentaCorriente
titularDe
Persona
CuentaCredito
Variable polimrfica
public class Main { public static void main(String[] args) { Persona juan = new Persona(); CuentaCorriente ccr = new CuentaCredito(); juan.asignarCuenta(ccr); } }
: CuentaCredito
juan: Persona
Argumento polimrfico
78
Persona
: CuentaCredito
sacarDinero(100)
juan: Persona
79
sobreescritura (polimorfismo)
sobrecarga
CuentaCredito credito sacarDinero(cantidad)
Proyecto Prctico de Diseo de Software 80
Signatura de la operacin
Define los elementos que identifican unvocamente una operacin:
nombre de operacin, nmero (orden) y tipo de los parmetros.
Una clase no puede tener dos operaciones con la misma signatura o firma. Los nombres de los parmetros no pertenecen a la signatura. Pertenece el tipo del valor de retorno a la signatura? Depende...
Segn el estndar de UML, s. Pero el tipo del retorno no sirve para distinguir qu operacin hay que ejecutar. No se puede usar para sobrecargar operaciones
Punto posicinX: Coordenada posicinY: Coordenada obtenerPosicin( ): CoordenadasPolares obtenerPosicin( ): CoordenadasCartesianas
instance of
82
UML Public
Package
Protected friendly
Private
Private
Proyecto Prctico de Diseo de Software
Private
83
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; } }
84
public class Rectngulo { private int base, altura; private boolean invariante ( ) { return (base > 0) && (altura > 0) } public int area() { return base * altura } } public class Cuadrado extends Rectngulo { private boolean invariante ( ) { return (base > 0) && (base = altura) } public int area () { return base * base } }
85
Clase abstracta: est incompleta, no puede tener radio instancias directas. dibujar( )
Puede tener instancias indirectas a travs de sus subclases concretas. Una clase concreta... no puede tener operaciones abstractas. debe proporcinar implementaciones para todas las operaciones abstractas heredadas.
Crculo
86
Interfaces
Encapsulamiento: separacin de interfaz e implementacin en una clase:
una clase puede realizar una o varias interfaces. una interfaz puede ser realizada por una o varias clases.
interface Figura
Ejemplo:
Figura f = new Cuadrado ( ); f.imprimir
Proyecto Prctico de Diseo de Software
Cuadrado
88
Diseo detallado con UML (2): interacciones Diagramas de interaccin: colaboracin y secuencia
Mensajes y operaciones Foco de control Nmeros de secuencia
Diagrama de secuencia
cuenta1 : Cuenta
cuenta2 : Cuenta
Diagrama de colaboracin
sacarDinero( )
cuenta1 : Cuenta
meterDinero( )
1: sacarDinero( )
Mensaje Objeto
cuenta2 : Cuenta
90
origen : Cuenta
destino : Cuenta
sacarDinero( ) meterDinero( )
El sistema entero se puede representar como un nico objeto, en un diagrama con slo dos lneas de vida que representa la comunicacin actor-sistema.
Proyecto Prctico de Diseo de Software 91
Mensajes y operaciones
Un mensaje es una peticin de servicio al objeto receptor:
Se corresponde (tpicamente) con la invocacin de una operacin. La operacin debe estar definida en la (super)clase del objeto receptor. Puede cambiar el estado del objeto receptor.
ok := esDisponible(cantidad) c := obtenerCredito( ) ok := (cantidad <= c + s) s := obtenerSaldo( ) CuentaCrdito credito obtenerCredito( ) esDisponible(cantidad): boolean
92
origen : Cuenta
destino : Cuenta
sacarDinero( )
meterDinero( )
93
origen : Cuenta
meterDinero( )
1.1: sacarDinero( )
banco : Banco Ana : Cliente 1: emitirTransferencia (origen, destino, cantidad) 1.2: meterDinero( )
destino : Cuenta
94
banco1 : Banco
banco2 : Banco
banco3 : Banco
a p
q r s
96
Asociacin
Relacin entre un elemento general y un elemento especfico. Generalizacin El elemento especfico puede aadir informacin y debe ser consistente con el elemento general. Relacin donde un elemento realiza o implementa la especificacin dada por otro elemento.
Realizacin
97
Figura
generalizacin
FiguraColoreada
Color
Figura
asociacin
Vector
1 miColor
Posicion
FiguraColoreada
Color
parmetro
variable local
(asociaciones contextuales)
98
Por cierto, cmo se nombran los objetos? origen : Cuenta - nombre arbitrario - valor identificador - nombre de parmetro parameter - nombre de variable
self
2: abrirCuenta(s)
101
cuenta1 : Cuenta
{new}
titular : Titular
{destroyed}
cuenta2 : Cuenta
102
Ley de Demetra: No hable con desconocidos Si dos objetos pueden comunicarse, entonces el cdigo de sus respectivas clases debe manifestarlo claramente (dependencias explcitas). El objeto x, en respuesta al mensaje m(a, b, c...), puede enviar mensajes slo 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).
104
Diseo detallado con UML (3): mquinas 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. Comunicacin entre mquinas de estados. Diseo e implementacin de mquinas de estados.
Secuencia de acciones en un cambio de estado.
105
Evento
Transicin
Pseudoestado inicial
retirar
colisionar
Estado final Los eventos causan las transiciones entre estados. Los eventos de creacin y destruccin pueden ser implcitos o explcitos.
Proyecto Prctico de Diseo de Software 106
Estados y transiciones
Un estado es una situacin en la vida de un objeto caracterizada por satisfacer una condicin, realizar una accin o esperar un evento. Un estado tiene duracin, una transicin es instantnea. 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.
jubilar
Jubilado
Clase Persona
Trabajando
jubilar
107
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 transicin).
La sucesin 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 transicin debe tener un y slo un evento.
Tipos de eventos:
Evento de llamada: recepcin de mensaje sncrono / operacin misma notacin Evento de seal: recepcin de mensaje ascrono / seal Evento de cambio: comprobacin continua de una condicin lgica / when( ) Evento temporal: tiempo transcurrido desde la entrada en el estado / after( )
play Reproduccin
Clase Reproductor
after(60 s)
play[(not hayCinta) or atascada] on Apagado off Parado stop when(velocidad < 5 cm/s)
Clase Reproductor
after(60 s)
109
Efectos:
En el propio objeto: modificar atributos o enlaces, invocar operaciones locales. En otros objetos: mensajes sncronos (operaciones) o asncronos (seales).
play[(not hayCinta) or atascada] on Apagado off Parado play[hayCinta and (not atascada)]/altavoz.on Reproduccin stop/altavoz.off when(velocidad < 5 cm/s)/altavoz.off
Acciones
Clase Reproductor
after(60 s)
110
Evento interno
Reproductor hayCinta atascada velocidad volumen signal on( ) signal off( ) signal play( ) signal stop( ) signal cambiarVolumen(delta) reproducir( )
Proyecto Prctico de Diseo de Software
Altavoz
Elemento
mover /levantar
1.2: sentar( )
2.2: sentar( )
3.2: sentar( )
e2 : Elemento 3: mover( )
e3 : Elemento 4: mover( )
1.1: levantar( )
2.1: levantar( )
Proyecto Prctico de Diseo de Software
3.1: levantar( )
113
Apagado
Parado
Reproduccin
114
Apagado
Parado
Reproduccin
estado : Apagado
estado := on( )
new( )
nuevo : Parado
115
Evitar ventanas superfluas y callejones sin salida. Habilitar en cada momento slo los botones que realmente pueden ejecutar una accin significativa. Los botones habilitados guan al usuario eficazmente por la aplicacin. Un buen diseo hace la navegacin mucho ms intuitiva.
Proyecto Prctico de Diseo de Software 116
Patrones de diseo
Introduccin a los patrones de diseo (Gamma, Helm, Johnson & Vlissides)
El catlogo de patrones de diseo Relaciones entre patrones de diseo Relaciones entre marcos y patrones Relaciones entre estilos arquitectnicos y patrones de diseo Descripcin de un patrn de diseo
Cmo resolver problemas con patrones de diseo: Herencia vs. Delegacin Otros patrones de diseo
Decorator Command
117
Comportamiento Interpreter Template Method Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor
mbito
Objeto
(Ejecucin)
118
Memento Iterator
evitar la histresis
Builder
aadir responsabilidades a objetos compartir compuestos
Composite
combinadas usando
definir la gramtica
Decorator
compartir estrategias cambiar la piel en vez de las tripas
Flyweight
compartir smbolos terminales
Visitor
definir la cadena
Command
Strategy
compartir estados
State
definir los pasos de un algoritmo
Prototype
Observer
instancia nica
Abstract Factory
instancia nica
1. 2. 3. 4.
121
Resulta que Z no depende slo de A, tambin depende de B y C, y adems hay sentencias de ramificacin mltiple. En la solucin, en todo caso, siempre es necesario referirse a una clase concreta en algn lugar, dentro o fuera de Z. Pero usando Abstract Factory, la nica clase concreta mencionada es la factora concreta. Su utilidad es general, pero especialmente se manifiesta cuando la factora es capaz de responsabilizarse de una familia de productos.
122
Problema de diseo:
La GUI presenta una apariencia diferente (look and feel) para cada uno de de estos objetos en cada sistema operativo. La aplicacin debe poder crear los objetos con la apariencia apropiada para cada sistema operativo.
123
Si se crean muchos Widgets (como suele ocurrir en aplicaciones de cierta complejidad) ser muy difcil cambiar de una apariencia a otra, dado que hay que modificar muchas instrucciones que estn diseminadas por diferentes partes del programa (problema de mantenimiento). Solucin: patrn de diseo Abstract Factory (fbrica abstracta).
Una fbrica es un objeto que se encarga de crear otros objetos.
WindowsScrollBar scrollTo()
MacScrollBar scrollTo()
125
Hemos transformado la ramificacin condicional en invocacin polimrfica. La variable global guiFactory debe ser inicializada al comienzo del programa con una de las fbricas concretas:
GUIFactory guiFactory = new MacFactory();
Las operaciones de creacin en las fbricas concretas usan los constructores concretos (Factory Method: invocar un constructor mediante una operacin):
public ScrollBar createScrollBar() {return new WindowsScrollBar();} public ScrollBar createScrollBar() {return new MacScrollBar();}
126
Adaptado de E. Gamma et al., Design Patterns: Elements of reusable Object-Oriented software Proyecto Prctico de Diseo de Software 127
Adaptado de E. Gamma et al., Design Patterns: Elements of reusable Object-Oriented software Proyecto Prctico de Diseo de Software 128
C x( )
1 c x( )
1 c
A x( ) x( )
c.x( )
Dos formas de reutilizar / refactorizar
c.x( )
129
Adaptado de E. Gamma et al., Design Patterns: Elements of reusable Object-Oriented software Proyecto Prctico de Diseo de Software 131
Adaptado de E. Gamma et al., Design Patterns: Elements of reusable Object-Oriented software Proyecto Prctico de Diseo de Software 132
Decorator: patrn
Adaptado de E. Gamma et al., Design Patterns: Elements of reusable Object-Oriented software Proyecto Prctico de Diseo de Software 133
Decorator: alternativas
No requieren aadir generalizacin 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 nmero y tipo de decoradores est rgidamente determinado en tiempo de compilacin. Hay que aadir un atributo a TextView por cada decorador y modificar la operacin draw original (y todas las operaciones decoradas).
Alternativa 2
Menor impacto sobre TextView: aadir un solo atributo, modificar una vez todas las operaciones para iterar sobre todos los decoradores. Variante: cadena en lugar de lista (patrn Chain of Responsibility)
134
Adaptado de E. Gamma et al., Design Patterns: Elements of reusable Object-Oriented software Proyecto Prctico de Diseo de Software 135
Adaptado de E. Gamma et al., Design Patterns: Elements of reusable Object-Oriented software Proyecto Prctico de Diseo de Software 136
Command: patrn
Adaptado de E. Gamma et al., Design Patterns: Elements of reusable Object-Oriented software Proyecto Prctico de Diseo de Software 137
138
Cundo es necesaria
Desempear dos o ms roles Reutilizar y redefinir cdigo
Soluciones parciales
Interfaces Delegacin
139
Qu es la herencia mltiple?
A x p( ) y q( ) B x p( ) A y q( ) B Interface A p( ) Interface B q( )
C p( ) instance of instance of x y p( ) q( )
instance of c1 c1
instance of c1
Herencia mltiple
Clasificacin mltiple
Proyecto Prctico de Diseo de Software
Interfaces mltiples
140
C p( ) q( ) instance of c1
public class Main { public static void main(String[] args) { C c1 = new C( ); A a1 = c1; B b1 = c1; a1.p( ); b1.q( ); } }
141
C p( ) q( ) p( ) q( )
instance of c1
D x p( )
E x p( ) x p( )
Qu hace G.p( )?
x p( )
Qu es G.x?
143
C p( ) q( )
Ca
1 ca p( ) q( )
1 cb
Cb
ca.p( ) cb.q( )
Proyecto Prctico de Diseo de Software 144