Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Elaboración de Un Proyecto de Software
Elaboración de Un Proyecto de Software
Proyecto Prctico
de Diseo de Software
Curso 2010-2011
Gonzalo Gnova
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)
Web de la asignatura
http://www.ie.inf.uc3m.es/grupo/docencia/reglada/Is1y2/IS2.htm
Objetivos de la asignatura
Aprender...
Desarrollar capacidades
Documentacin entregada
Descripcin de la prctica
ADD: 15 a 20 pginas.
DDD: 30 a 40 pginas.
TOTAL: 45 a 60 pginas (sin contar ndices ni anexos). Trabajo excesivo?
Factor de penalizacin en la calificacin del documento por exceso de pginas.
penalizacin
1
1-(p-60)/60
0
0
60
Proyecto Prctico de Diseo de Software
120
pginas
8
Nombre
Nombre
Ana Garca
25
35
60
Ana Garca
40
15
55
Juan Gmez
25
35
60
Juan Gmez
43
11
54
Isabel Lpez
25
35
60
Isabel Lpez
47
16
63
Pedro Fernndez
25
35
60
Pedro Fernndez
50
18
68
240
TOTAL 180
60
240
MAL
BIEN
9
Proyecto
Proyecto
Prctico
Prctico
dede
Ingeniera
Diseo de
deSoftware
Requisitos
Calendario de la asignatura
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
05% Documentacin
30%
05% Revisiones
05%
50%
10%
50%
50%
100%
Ms detalles
Proyecto Prctico de Ingeniera de Requisitos
11
Bibliografa
Ms en la ficha de la asignatura
12
Tema III
Diseo arquitectnico
13
Especificacin
Descripcin
Vista
abstracta
modelo especificativo
abstracto del dominio
modelo especificativo
abstracto del sistema
Vista
concreta
modelo especificativo
concreto del dominio
modelo especificativo
concreto del sistema
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
14
especificacin
B
descripcin
A
C
realidad
abstracto
dominio
sistema
concreto
abstraccin
15
Iteracin 1
Iteracin 2
Iteracin 3
Anlisis
(versin 1)
Anlisis
(versin 2)
Anlisis
(versin 3)
Diseo
(versin 1)
Diseo
(versin 2)
Implementacin
(versin 1)
16
Preguntas ms frecuentes
Proyecto Prctico de Diseo de Software
17
18
19
2. Clases de
Dominio
3. Arquitectura
Cable
Vehculo
Camino
Columna
vehculo
Barandilla
Cable
4. Diseo
Detallado
Adaptado de E. Braude,
Software Engineering:
An Object-Oriented Perspective
Camino
Columna
Proyecto Prctico de Diseo de Software
20
21
22
Cohesin y acoplamiento
componente
1
2
componente
Alta cohesin
Puente
Bajo acoplamiento
Adaptado de E. Braude,
Software Engineering: An Object-Oriented Perspective
23
Bien
Mal
24
25
Extensibilidad
Modificabilidad
Simplicidad
Eficiencia
Otros criterios:
Reuso
Escalabilidad
Coste
Requisitos no funcionales
26
Reutilizacin
Diseos reutilizables
Componentes reutilizables
Dificultades para el reuso
Eleccin de componentes para el reuso
Desarrollo para el reuso
27
Window
1 ventanaEmpleado
Capa de marcos
Capa de aplicacin
MiAplicacin
VentanaDialogo
Empleado
28
Nocin de componente
29
Nivel 2
Componente
(...)
Nivel N-1
Componente
Nivel N
Clase
(UML 1.x)
(UML 1.x)
30
Nocin de dependencia
Dependencia AC:
<<component>>
A
A requiere la presencia de C
Los cambios de C pueden afectar a A
<<component>>
<<component>>
31
Nocin de interfaz
Dos componentes pueden
ofrecer la misma interfaz
Dos interfaces no
necesariamente
disjuntas
32
33
El componente proporciona
slo una interfaz, el tipo
abstracto de datos.
}
public class EmpleadoFijo implements iEmpleado {
public modificar( ) { };
====================
La dependencia es
potencialmente peligrosa.
class Departamento {
e.modificar( );
}
Proyecto Prctico de Diseo de Software
34
}
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( )
}
====================
El componente proporciona
slo una interfaz, el gestor.
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 {
35
El componente proporciona
dos interfaces, el tipo
abstracto de datos y el gestor.
}
====================
class Departamento {
e.modificar( );
La clase cliente no puede usar
}
el constructor directamente,
36
Caso 3
(parmetros iEmpleado)
Caso 1
Caso 2
(parmetros int)
37
proporciona,
realiza
requiere,
usa
38
Cableado de componentes
cableado
independiente
cableado
en rbol
cableado con
dependencia
Proyecto Prctico de Diseo de Software
39
Anidamiento de componentes
puerto
delegacin
El conjunto de interfaces de un
puerto debe ser consistente
40
Diagrama de despliegue
dispositivo
hardware
nodo
ruta de comunicacin
entorno de
ejecucin
software
41
Instalacin
Licencias
Requisitos HW y SW
Diagramas de Componentes y Clases
Diagramas de Despliegue
Ejercicios en clase: transparencias 31-41
42
43
Visio http://www.softwarestencils.com/uml/index.html
swReuser http://www.reusecompany.com/producto.aspx?id=2
44
Ir a:
http://www.altova.com/download/umodel/uml_tool_enterprise.html
Download UModel 2008 Enterprise Edition Setup now
45
Licencias y requisitos HW y SW
Licencias
Solicitud de licencia por 30 das.
Instalar el software en un solo ordenador del equipo de prcticas cada
vez, para asegurar la disponibilidad del software a lo largo del
cuatrimestre.
Software disponible en las aulas.
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
Vista lgica
(conceptual)
Vista de desarrollo
(implementacin)
Vista de proceso
(ejecucin)
Vista fsica
(despliegue)
Lgica
(conceptual)
Proceso
(ejecucin)
Desarrollo
(implementacin)
Fsica
(despliegue)
Aspecto
Modelo de
informacin
Concurrencia y
sincronizacin
Correspondencia
software-hardware
Stakeholders
Usuarios
finales
Programadores
Ingenieros de sistemas
Requisitos
Funcionales
Rendimiento
Disponibilidad
Fiabilidad
Concurrencia
Distribucin
Seguridad
Rendimiento
Disponibilidad
Fiabilidad
Escalabilidad
Topologa
Comunicaciones
Notacin
Clases y
asociaciones
Procesos y
comunicaciones
Componentes y
relaciones de uso
Nodos y rutas de
comunicacin
50
Vista lgica
(conceptual)
Vista de desarrollo
(implementacin)
?
identificar
clases
activas
Vista de proceso
(ejecucin)
Vista fsica
(despliegue)
requisitos no funcionales
51
52
53
54
55
56
Flujo de datos
Tuberas y filtros
Secuencial por lotes
Componentes independientes
Sistemas cliente-servidor
Procesos paralelos
Sistemas de eventos
Mquinas 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
57
crear
cliente
crear
banco
cola de clientes
asignar
cliente a
cajero
cajero
finaliza con
cliente
log de estadsticas
Adaptado de W. Haythorn,
What Is Object-Oriented Design?
informar
58
filter
filter
filter
pipe
< stream
Adaptado de E. Braude,
Software Engineering: An Object-Oriented Perspective
59
Arquitectura cliente-servidor
Client 1
Client 2
Client 3
Client 4
Video
server
Picture
server
Web server
Film clip
files
Digitised
photographs
Film and
photo info
Internet
Catalogue
server
Library
catalogue
Adaptado de I. Sommerville,
Software Engineering
Proyecto Prctico de Diseo de Software
60
Customer:
customer n
Customer:
customer n+1
Session:
session m
create
Session:
session k
Account:
customer n
checking
Account:
customer
n+1 saving
retrieve
create
retrieve
deposit
withdraw
Adaptado de E. Braude,
Software Engineering: An Object-Oriented Perspective
61
Sub-system
1
Sub-system
2
Sub-system
3
Sub-system
4
Adaptado de I. Sommerville,
Software Engineering
Proyecto Prctico de Diseo de Software
62
Adaptado de E. Braude,
Software Engineering: An Object-Oriented Perspective
63
Arquitectura de repositorio
Design
editor
Design
translator
Code
generator
Project
repository
Design
analyser
Program
editor
Report
generator
Adaptado de I. Sommerville,
Software Engineering
Proyecto Prctico de Diseo de Software
64
Application
Application
Presentation
Presentation
Session
Session
Transport
Transport
Network
Network
Network
Data link
Data link
Data link
Physical
Physical
Physical
Communications medium
Adaptado de I. Sommerville,
Software Engineering
65
Seleccin
de Ficha
Avance y Captura
Definicin de reglas
del juego
Movimiento
Jugador
Turno
Representacin
grfica
Adaptado de E. Braude,
Software Engineering: An Object-Oriented Perspective
Proyecto Prctico de Diseo de Software
66
Acciones del
usuario
Modificaciones
en la vista
Controlador
Informacin
al usuario
Vista
Consultas al
modelo
C
V
M
Consultas y
modificaciones
en el modelo
Modelo
Adaptado de E. Braude,
Software Engineering: An Object-Oriented Perspective
67
Comunicacin
con el usuario
Comportamientos
complejos
Vista
V
C
M
Controlador
Consultas y modificaciones
en el modelo
Consultas en
el modelo
Modelo
C
V
M
Modelo-Vista-Controlador original
68
69
70
Tema IV
Diseo detallado
71
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
CuentaCorriente
saldo
meterDinero(cantidad)
sacarDinero(cantidad)
Invariantes de clase
CuentaCorriente: saldo 0
73
PPCs de operacin
CuentaCorriente.sacarDinero(cantidad: Moneda)
Pre: saldo cantidad 0
Post: saldo = saldo cantidad
CuentaCorriente
saldo
sacarDinero(cantidad)
CuentaCredito
credito
sacarDinero(cantidad)
Es correcta esta generalizacin?
74
CaminoOblicuo.distancia.post
d = ( x2 x1 ) 2 + ( y2 y1 ) 2
CaminoOblicuo
origen: Punto
destino: Punto
CaminoEsquinado.distancia.post
distancia( ): Float
d = ( x2 x1 ) + ( y2 y1 )
Cul sera
correcta?
(x2, y2)
CaminoEsquinado
origen: Punto
destino: Punto
distancia( ): Float
(x1, y1)
75
Especificacin de algoritmos
Bisiesto (x) =
m4(x)
AND
(
(NOT m100(x)
OR
(m100(x) AND m400(x))
)
[no]
m4
[s]
m100
[no]
[s]
NoBisiesto (x) =
NOT m4(x) OR (m100(x) AND NOT m400(x))
[no]
no bisiesto
m400
[s]
bisiesto
76
Signatura de la operacin
distincin de operaciones por su signatura
Visibilidad
Interfaces
Clases y operaciones abstractas
Generalizacin vs. Realizacin
77
CuentaCorriente
titularDe
Persona
CuentaCredito
Variable polimrfica
: CuentaCredito
juan: Persona
Argumento polimrfico
78
CuentaCorriente
saldo
sacarDinero(cantidad) titularDe
Persona
CuentaCredito
credito
sacarDinero(cantidad)
Asignacin polimrfica
Invocacin polimrfica
: CuentaCredito
juan: Persona
sacarDinero(100)
79
sobreescritura
(polimorfismo)
CuentaCorriente
saldo
sacarDinero(cantidad)
sacarDinero( )
sobrecarga
CuentaCredito
credito
sacarDinero(cantidad)
Proyecto Prctico de Diseo de Software
80
Signatura de la operacin
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...
p1 : Punto
posicinX = 3
posicinY = -5
Punto
posicinX: Coordenada
posicinY: Coordenada
obtenerPosicin( ): CoordenadasPolares
obtenerPosicin( ): CoordenadasCartesianas
instance of
c := obtenerPosicin ( )
Qu operacin se invoca?
Depende del tipo de c...
Clase mal
definida
81
Nombre Signatura
Clase
Resultado
distinto
distinta
misma
sobrecarga
subclase
sobrecarga
misma
error
CuentaCorriente
saldo
sacarDinero(cantidad: Moneda)
sacarDinero(cantidad: MonedaEuropea)
distinta
igual
igual
subclase sobreescritura
CuentaCredito
credito
sacarDinero(cantidad: Moneda)
sacarDinero(cantidad: MonedaEuropea)
82
Visibilidad
Niveles de visibilidad (diferentes en cada lenguaje):
+
~
#
public: visible para todas las clases (opcin por defecto para operaciones).
package: visible para todas las clases que estn en el mismo paquete.
protected: visible para las subclases.
private: visible slo para la clase (opcin por defecto para atributos).
UML
Java
VB.NET (C#)
Public
Public
Public
Protected
Protected-Friend
Package
Protected
Friend
(Internal)
friendly
Private
Private
Protected
Private
83
class Main {
public static void main(String[] args) {
Elemento e1=new Elemento(e1);
Elemento e2=new Elemento(e2);
e1.prueba(e2);
}
}
Ejecucin y resultado:
C:\java Main
e3
A travs de la operacin pblica prueba, el objeto
e1 manipula el atributo privado nombre de e2, e
invoca su operacin privada escribir.
Cul es el problema? En realidad, ninguno, si se
entiende bien qu significa la visibilidad privada.
84
85
Figura
posicin
dibujar( )
Crculo
Rectngulo
base
altura
dibujar( )
Cuadrado
{base=altura}
dibujar( )
86
Interfaces
Imprimible
interface
Imprimible
Impresora
imprimir( )
Documento
Documento
interface
Imprimible
interface
Figura
Crculo
Rectngulo
Ejemplo:
Figura f = new Cuadrado ( );
f.imprimir
Proyecto Prctico de Diseo de Software
Cuadrado
88
Diagrama de secuencia
banco : Banco
cuenta1 : Cuenta
cuenta2 : Cuenta
Diagrama de colaboracin
sacarDinero( )
meterDinero( )
cuenta1 : Cuenta
Mensaje
1: sacarDinero( )
Objeto
banco : Banco
cuenta2 : Cuenta
2: meterDinero( )
Proyecto Prctico de Diseo de Software
90
banco : Banco
origen : Cuenta
destino : Cuenta
Ana : Cliente
emitirTransferencia( )
sacarDinero( )
meterDinero( )
Mensajes y operaciones
cc : CuentaCrdito
CuentaCorriente
saldo
obtenerSaldo( )
ok := esDisponible(cantidad)
c := obtenerCredito( )
ok :=
(cantidad <= c + s)
s := obtenerSaldo( )
CuentaCrdito
credito
obtenerCredito( )
esDisponible(cantidad): boolean
92
banco : Banco
origen : Cuenta
destino : Cuenta
Ana : Cliente
emitirTransferencia( )
sacarDinero( )
meterDinero( )
93
origen : Cuenta
destino : Cuenta
Ana : Cliente
origen : Cuenta
emitirTransferencia( )
sacarDinero( )
meterDinero( )
1.1: sacarDinero( )
banco : Banco
Ana : Cliente
1: emitirTransferencia
(origen, destino, cantidad)
destino : Cuenta
1.2: meterDinero( )
94
banco1 : Banco
banco2 : Banco
Seales que
aceptan los objetos
de una clase
banco3 : Banco
transferenciaSolicitada(nmero, datos)
Banco
transferenciaSolicitada(nmero, datos)
transferenciaAceptada(nmero)
signal transferenciaSolicitada( )
signal transferenciaAceptada( )
signal transferenciaDenegada( )
transferenciaDenegada(nmero)
95
p
q
r
s
96
Asociacin
Realizacin
97
Figura
generalizacin
FiguraColoreada
asociacin
Figura
Vector
FiguraColoreada
Color
1
miColor
Color
parmetro
Posicion
variable local
(asociaciones contextuales)
98
self
1.1.1: ok :=
esDisponible(cantidad)
1.1: sacarDinero(cantidad)
parameter
banco : Banco
Ana : Cliente
1: emitirTransferencia
(origen, destino, cantidad)
destino : Cuenta
1.2: meterDinero(cantidad)
99
Diagramas de clases
(modelo esttico)
Objeto
Instancia de clase
Enlace
Instancia de asociacin
(excepto enlaces contextuales)
Mensaje
100
cuenta1 : CuentaCorriente
s := obtenerSaldo( )
abrirCuenta(s)
cuenta2 : CuentaCrdito
cerrarCuenta( )
1: s := obtenerSaldo( )
cuenta1 : CuentaCorriente
{destroyed}
banco : Banco
3: cerrarCuenta( )
{transient}
=
{new} + {destroyed}
cuenta2 : CuentaCrdito
{new}
2: abrirCuenta(s)
101
cuenta1 : Cuenta
2: desasignarTitular(titular)
{new}
titular : Titular
{destroyed}
cuenta2 : Cuenta
102
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).
103
104
Estados y transiciones.
Eventos y transiciones.
Transiciones con guardas.
Transiciones con acciones.
Estados con acciones y actividades.
105
Evento
Clase Avin
Transicin
despegar
Estacionado
Volando
aterrizar
Pseudoestado
inicial
retirar
colisionar
Estado final
Los eventos causan las
transiciones entre estados.
106
Estados y transiciones
Parado
Persona
edad
Empresa
1..*
contratar
0..1
Jubilado
despedir
Clase Persona
Trabajando
jubilar
107
Eventos y transiciones
Tipos de eventos:
play
Apagado
Parado
Reproduccin
off
Clase Reproductor
after(60 s)
stop
when(velocidad < 5 cm/s)
108
on
Apagado
Parado
Reproduccin
off
Clase Reproductor
Guardas
stop
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]
play[hayCinta and (not atascada)]/altavoz.on
on
Apagado
Parado
off
Clase Reproductor
after(60 s)
Reproduccin
stop/altavoz.off
Acciones
110
Evento interno
Reproduccin
Reproduccin
entry / altavoz.on
exit / altavoz.off
do / reproducir
cambiarVolumen(delta)
/vol:= vol + delta
Reproductor
hayCinta
atascada
velocidad
volumen
signal on( )
signal off( )
signal play( )
signal stop( )
signal cambiarVolumen(delta)
reproducir( )
Proyecto Prctico de Diseo de Software
Altavoz
1
on( )
altavoz off( )
Mensajes salientes:
destinatario(s) designado(s)
por el nombre de rol
112
Elemento
mover
/levantar
signal mover( )
1
levantar( )
siguiente
sentar( )
after(2 s)
/sentar; siguiente.mover
Levantado
1.2: sentar( )
2.2: sentar( )
e1 : Elemento
3.2: sentar( )
e2 : Elemento
e3 : Elemento
2: mover( )
1: mover( )
1.1: levantar( )
3: mover( )
2.1: levantar( )
4: mover( )
3.1: levantar( )
113
Estado implcito.
Estado explcito.
almacenado en un atributo del objeto.
sentencias de control para variar el comportamiento en funcin del estado.
signal on( )
signal off( )
signal play( )
signal stop( )
Apagado
Estado
on( ): Estado
estado off( ): Estado
play( ): Estado
stop( ): Estado
Parado
Reproduccin
114
Reproductor
r : Reproductor
signal on( )
signal off( )
signal play( )
signal stop( )
Apagado
Estado
1
on( ): Estado
estado
off( ): Estado
play( ): Estado
stop( ): Estado
Parado
Reproduccin
estado : Apagado
o : Oyente
on( )
estado := on( )
new( )
nuevo : Parado
115
116
Patrones de diseo
117
Estructura
Factory Method
Adapter
Interpreter
Template Method
Abstract Factory
Builder
Prototype
Singleton
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Chain of Responsibility
Command
Iterator
Mediator
Memento
Observer
State
Strategy
Visitor
(Compilacin)
mbito
Objeto
(Ejecucin)
Comportamiento
118
guardar el
estado de la
iteracin
crear compuestos
Builder
Memento
Composite
combinadas usando
Iterator
definir la
gramtica
Flyweight
Decorator
compartir estrategias
definir recorridos
aadir operaciones
Command
Visitor
compartir
smbolos
terminales
cambiar la piel en
vez de las tripas
definir la cadena
compartir estados
Strategy
evitar la histresis
compartir
compuestos
Chain of Responsibility
Interpreter
aadir operaciones
State
definir los pasos de
un algoritmo
Mediator
Template Method
configurar fabricas
dinmicas
Prototype
suele usar
Abstract Factory
instancia nica
gestin de
dependencias
complejas
Observer
Implementado usando
Factory Method
instancia nica
Singleton
Facade
1.
2.
3.
4.
Nombre
Problema
Solucin
Consecuencias
Extendida
1. Nombre y clasificacin
2. Propsito
3. Tambin conocido como
4. Motivacin
5. Aplicabilidad
6. Estructura
7. Participantes
8. Colaboraciones
9. Consecuencias
10. Implementacin
11. Cdigo de ejemplo
12. Usos conocidos
13. Patrones relacionados
Proyecto Prctico de Diseo de Software
120
121
A a;
switch () {
case : a = new B( ); break;
case : a = new C( ); break;
}
}
// Cdigo mejorado
public class Z {
// instanciacin de f
Factora f = ;
// constructor polimrfico
A a = f.createA( );
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
124
ScrollBar
Button
scrollTo()
press()
Menu
popUp()
GUIFactory
createScrollBar()
createButton()
createMenu()
WindowsScrollBar
MacScrollBar
scrollTo()
WindowsFactory
MacFactory
scrollTo()
createScrollBar()
createButton()
createMenu()
createScrollBar()
createButton()
createMenu()
125
126
127
128
x( )
1
c
x( )
A
x( )
B
x( )
c.x( )
c.x( )
129
130
131
132
Decorator: patrn
133
Decorator: alternativas
Alternativa 1
Alternativa 2
134
135
136
Command: patrn
Patrn
Facade
State
Iterator
Observer
Interpreter
138
Herencia mltiple
Qu es la herencia mltiple
Frente a clasificacin mltiple
Frente a interfaces mltiples
Cundo es necesaria
Desempear dos o ms roles
Reutilizar y redefinir cdigo
Soluciones parciales
Interfaces
Delegacin
Problemas conceptuales
Estrategia de implementacin
Limitaciones
139
Qu es la herencia mltiple?
A
x
p( )
y
q( )
x
p( )
y
q( )
Interface
A
Interface
B
p( )
q( )
C
instance of
p( )
instance of
instance of
x
y
p( )
q( )
instance of
c1
c1
c1
Herencia mltiple
Clasificacin mltiple
Interfaces mltiples
140
p( )
Reutilizar y
redefinir
operaciones
q( )
C
p( )
q( )
instance of
Desempear
roles
distintos
c1
// ficticio!
Interface
B
p( )
q( )
p( )
a
q( )
1
p( )
q( )
a.p( )
b.q( )
p( )
q( )
instance of
instance of
c1
c1
142
D
x
p( )
x
p( )
x
p( )
Qu hace G.p( )?
x
p( )
Qu es G.x?
143
Interface
iA
Interface
iB
p( )
q( )
p( )
q( )
p( )
C
p( )
q( )
q( )
Ca
1
ca
p( )
q( )
Cb
cb
ca.p( )
cb.q( )
Proyecto Prctico de Diseo de Software
144