Sunteți pe pagina 1din 106

Un Proceso Software

basado en UML
Anlisis y Diseo del Software
Curso 2004/2005
Jess Garca Molina
Departamento de Informtica y Sistemas
Universidad de Murcia
http://dis.um.es/~jmolina
2
Contenidos
Introduccin
Dimensiones de un mtodo
Mtodos pesados vs. Desarrollo gil
Modelado del Negocio
Modelado de Requisitos
Modelado del Anlisis
Patrones GRASP
Modelado del Diseo
Casos Prcticos
3
Contenidos
Introduccin
Dimensiones de un mtodo
Mtodos pesados vs. Desarrollo gil
Modelado del Negocio
Modelado de Requisitos
Modelado del Anlisis
Patrones GRASP
Modelado del Diseo
Patrones de Diseo
4
Mtodo
Establece cmo abordar de un modo sistemtico la
construccin de software.
Se describe el problema y la solucin mediante un
conjunto de modelos.
Ayuda pero no asegura el xito.
Es difcil asegurar la calidad del software.
Un mtodo ofrece guas y es fruto de la experiencia.
No sustituye a la necesidad creativa.
Lo ms importante son las personas.
5
Mtodo
Dimensin Tecnolgica
Conceptos, Notacin, Tcnicas y Herramientas
Dimensin Proceso
Conjunto de pasos a realizarse y resultados obtenidos en
cada paso (entregables)
Dimensin Organizacin
Cmo organizar las personas para acomodar el proceso
6
Tecnologa
Conceptos
Qu conceptos soporta? Paradigma?
Notacin
Modelos soportados
Representacin de los modelos
Grfica, Especificaciones formales,
Expresividad de la notacin
Agregacin, Generalizacin, Interfaces, Roles,
Legibilidad de la notacin
7
Tecnologa
Notacin
Sintaxis y Semntica bien definidos?
Conexiones entre modelos.
Capturan la semntica de las propiedades?
Reglas para transformar y razonar sobre los modelos
Crecimiento (Scalability)
Ofrece el conjunto de modelos una visin consistente y
completa del sistema?.
Existe un mecanismo para particionar en subsistemas?
Es posible generacin de cdigo?
8
Tecnologa
Conceptos
Orientacin a objetos
Diseo estructurado
Notacin
Especificaciones formales
Plantillas
Diagramas
9
Proceso
Un proceso bien definido es necesario para
desarrollar sistemas software de manera
repetible y predecible
Permite un negocio sostenible y que puede
mejorar en cada nuevo proyecto,
incrementando la eficiencia y productividad de
la organizacin
G. Booch
10
Proceso
Un proceso software debe indicar:
la secuencia de actividades a realizar por
el equipo de desarrollo: flujo de actividades
los productos que deben crearse: qu y
cundo
una asignacin de tareas a cada miembro del
equipo y al equipo como un todo
heursticas
los criterios para controlar el proceso
11
Proceso
Para qu contexto de desarrollo es
apropiado?
Nuevo software, Reingeniera,
Prototipado, Desarrollo de componentes
En qu grado cubre el ciclo de vida?
Anlisis, Diseo, Implementacin, Pruebas
12
Proceso
Basados en casos de uso
Debe ser iterativo e incremental.
Conviene centrarse en los aspectos crticos en las
primeras iteraciones para minimizar riesgos.
Rpida retroalimentacin
Establecer un proceso marco: Cada empresa
de desarrollo debe definir su propio proceso.
13
Organizacin
Software de alta calidad no puede producirse sin
una organizacin adecuada.
Reutilizacin
Factora software
Comprar antes que construir
Especializacin
Trabajos y responsabilidades organizadas en una
cadena de valor.
Adecuar tareas a las capacidades del personal
Mltiples facetas: Marketing, Ventas,
Planificacin, Diseo, Produccin, etc.
14
Mtodo completo
Adems de tecnologa, proceso y organizacin:
Guas para la gestin y planificacin del proyecto
Guas de estimacin de costes
Guas para elaboracin de los entregables
Mtricas
Polticas y procesos para asegurar calidad del
software
Programas de entrenamiento
Descripciones de roles
Ejemplos elaborados de aplicacin y ejercicios
para el aprendizaje
Tcnicas para adecuacin del mtodo
15
Mtodo
TECNOLOGIA
PROCESO ORGANIZACION
(OO, UML, Rational Rose)
(Larman)
(CARM-Sanidad)
16
Mtodos Pesados y Agiles
Proceso Unificado, UP
Marco para definir procesos
Rational Unified Process, RUP
Estndar de facto
Movimiento de la Extreme Programming, XP
Rechazo a procesos pesados como RUP
Movimiento del Desarrollo Agil
Mtodos giles y Modelado gil
17
Mtodos Pesados y Agiles
Proceso pesado
Muchos artefactos creados en un ambiente
burocrtico
Muchas actividades realizadas con rigidez y
control
Planificacin detallada a largo plazo
Predictivos en vez de adaptativos
El Proceso Unificado (RUP)
Extreme Programming, XP
Valores
Comunicacin
Simplicidad
Realimentacin
Valenta
Principios
Aceptar cambios
Asumir Simplicidad
Rpida Realimentacin
Cambio incremental
Trabajo de calidad
Prcticas
El juego de la planificacin
Versiones pequeas
Metfora
Diseo simple
Pruebas
Recodificacin
Programacin por parejas
Cdigo colectivo
Integraciones continuas
Semanas de 40 horas
Cliente en el equipo
Estndares de codificacin
20
Manifiesto para el Desarrollo de
Software gil
Nosotros estamos descubriendo mejores formas de desarrollar
software hacindolo y ayudando a hacerlo.
A travs de nuestro trabajo hemos llegado a apreciar:
- Personas e interacciones antes que procesos y herramientas
- Trabajar con el software antes que documentacin
- Colaborar con el cliente antes que la negociacin de un contrato
- Responder al cambio antes que seguir un plan
Esto es, aunque reconocemos que los tems de la derecha tienen
valor, nosotros valoramos ms los tems de la izquierda.
21
Principios detrs del Manifiesto de gil
Satisfacer al cliente es lo principal
Aceptar los cambios
Versiones pequeas
Integrar a la gente del negocio
Motivacin del equipo
La conversacin cara a cara es el
medio ms eficiente de comunicacin
Software funcionando es la mejor
medida de progreso.
Mantener velocidad constante por
parte de todos
Atencin continua a la excelencia
tcnica y buenos diseos mejorar la
agilidad.
Simplicidad es esencial
Las mejores arquitecturas, requisitos
y diseos surgen de equipos que se
auto-organizan.
A intervalos regulares, el equipo
refleja cmo llegar a ser ms
efectivo.
http://www.agilealliance.com
22
Mtodos giles
Iteraciones corta de duracin fijada.
Refinamiento evolutivo de planificacin,
requisitos y diseo.
Simplicidad, ligereza, comunicacin.
Ejemplos: Scrum, XP, DSDM,..
23
Modelado gil (http://www.agilemodeling.com)
El propsito de modelar es principalmente comprender y
comunicar no documentar.
No hay que modelar todo el diseo software
Se define y muestra cmo poner en prctica un conjunto
de valores, principios y prcticas para un modelado
efectivo y ligero.
Se explora como aplicar las tcnicas de modelado en
proyectos con enfoque gil (XP)
Explorar cmo mejorar el modelado en procesos
predictivos como el RUP
24
Modelado gil (http://www.agilemodeling.com)
Utilizar herramientas simples: pizarras y fotografas
Herramientas CASE de modelado son complementarias
Integrada con un IDE y con ingeniera inversa
Programar por pares
Modelo estructural y de comportamiento en paralelo
No complicarse la vida con UML
Los modelos sern imprecisos e incompletos
Lo importante es el diseo OO
Dedicar al modelado unas pocas horas (un da a lo sumo)
al inicio de la iteracin.
25
Tendencia
Enfoque industrial para la produccin de software:
Capacidad de producir software de alta calidad a bajo coste
Automatizacin
Estndares
Reutilizacin: Componentes, Patrones, Frameworks
Configurar soluciones
MDA: nuevo paradigma de desarrollo dirigido por
modelos
26
Un proceso simple
Descrito en UML y Patrones, C. Larman,
Prentice-Hall, 2002.
Fcil de aprender y usar.
No incluye modelado del negocio.
Conforma con UP
Dirigido por casos de usos.
Desarrollo iterativo e incremental
Conforma con modelado gil
27
Etapas del Proceso
Inicio
Comprender procesos del negocio (opcional)
Obtener y especificar requisitos del sistema
Identificar y especificar clases y colaboraciones
para objetos del dominio (anlisis)
Resolver problemas de diseo (arquitectura,
base de datos, redes, patrones, nuevas clases y
colaboraciones,..)
Implementacin y pruebas
Validacin
28
Etapas del Proceso
Modelado del Negocio (opcional)
Modelado de Requisitos
Modelado del Anlisis
Modelado del Diseo
Implementacin
Pruebas
M o d e l o d e C a s o s
d e U s o
M o d e l o d e
D o m i n i o
M o d e l o d e R e q u i s i t o s
D i a g r a m a d e
S e c u e n c i a d e l
S i s t e m a ( D S S )
( u n o p o r c a s o d e u s o )
C o n t r a t o s
( u n o p o r i n t e r a c c i n )
C o l a b o r a c i o n e s
( u n a p o r c o n t r a t o )
D i a g r a m a d e
C l a s e s
M o d e l o d e A n l i s i s
P a q u e t e s
P a t r o n e s d e D i s e o P e r s i s t e n c i a
D i s e o G U I
E s t r u c t u r a s d e
D a t o s
A r q u i t e c t u r a d e l
S i s t e m a
D i s t r i b u c i n
M o d e l o d e l D i s e o
D i a g r a m a s
d e P r o c e s o
M o d e l o d e
N e g o c i o
El Proceso
30
Inicio
Estudio de necesidades de la empresa, ver si es
viable, alternativas, anlisis de riesgos,
oportunidad.
Definicin de objetivos del proyecto
Estimacin aproximada del coste
Duracin una o dos semanas
Debemos abordar el proyecto?
31
Inicio
Primeros talleres de requisitos
Plan para la primera iteracin
Casos de uso escritos en formato breve, excepto
unos pocos que se consideran claves.
Se identifican riesgos
Escribir borrador del documento Visin y
Especificacin Complementaria
Prototipado
32
Contenidos
Introduccin
Dimensiones de un mtodo
Mtodos pesados vs. Desarrollo gil
Modelado del Negocio
Modelado de Requisitos
Modelado del Anlisis
Patrones GRASP
Modelado del Diseo
Patrones de Diseo
33
Modelado del Negocio
Objetivo:
Comprender el conjunto de procesos de
negocio que tienen lugar dentro de una
empresa, como paso previo a establecer los
requisitos del sistema a desarrollar.
Cmo consigue la empresa sus objetivos?
34
Procesos de Negocio
Una organizacin tiene una serie de objetivos que
satisface a travs de Procesos de Negocio
Elementos de un proceso de negocio:
Flujo de Tareas, Agentes, Informacin y Reglas Negocio
Reglas de Negocio regulan el funcionamiento de
la empresa
Describen restricciones y comportamientos
NO son requisitos, pero influyen en ellos
35
Procesos y Reglas del Negocio
Procesos del Negocio
Reglas del Negocio
datos
tarea1
tarea2
tarea3
tarea4 tarea5
Determinan polticas y estructura de la informacin
RN1
RN3
RN2
Ejemplo
Empresa que fabrica productos bajo demanda
Objetivos
Estratgicos
Subobjetivos
Procesos
del Negocio
Registrar
pedido
Generar
pedidos a
proveedor
Gestionar
almacn
Fabricar
productos
Casos de
Uso del
Negocio
Fabricar
productos
pedidos
Gestionar
almacn de
materiales
Realizar
pedidos a
proveedores
Registrar
pedidos de
clientes
Reducir tiempo de
fabricacin un 15%
...
Incrementar las
ventas un 25%
Satisfacer pedido
de cliente
37
Etapas del modelado del negocio
Identificar y definir los procesos de negocio segn
los objetivos de la organizacin.
Definir un caso de uso del negocio para cada
proceso del negocio (diagrama de casos de uso del
negocio muestra el contexto y los lmites de la
organizacin).
Identificar los roles implicados en los diferentes
procesos del negocio (diagrama de roles).
38
Etapas del modelado del negocio
Modelar el flujo de tareas asociado a cada proceso de
negocio mediante escenarios (diagramas de
secuencia) y diagramas de procesos (diagramas de
actividades) que muestran la interaccin entre roles
para conseguir el objetivo.
Especificar las informaciones y actividades incluidas
en cada diagrama de actividades.
39
Diagrama Casos de Uso del Negocio
Cl iente
Registrar Pedido
Fabricar Producto
Gestin Almacen
Proveedor Pedidos Proveedores
40
Diagrama Casos de Uso del Negocio
Worker
Fabricar Producto
Jefe Tcnico Operario Puesto
Gestin Almacen
Operario Almacen
41
Casos de Uso del Negocio
Descripcin Textual
Plantillas
Diagramas
Diagrama de casos de uso del negocio
aspecto estructural de colaboracin entre roles
Escenario:
aspecto de comportamiento de la colaboracin
Diagrama de Proceso:
workflow que realiza el caso de uso del negocio
42
Ejemplo de Caso de Uso del Negocio
Registrar Pedido
1. El cliente realiza un pedido que incluir la fecha del pedido, los datos del cliente y los productos
solicitados.
2. El comercial revisa el pedido (completndolo si es necesario) y le da curso, envindolo al jefe
tcnico para que realice el anlisis del mismo.
3. El jefe tcnico analiza la viabilidad de la fabricacin de cada producto del pedido por separado.
- si el producto pedido est en el catlogo, se acepta la fabricacin del mismo,
- en caso contrario, el producto es especial, y el jefe tcnico estudia su fabricacin
- si sta es viable, la fabricacin del producto especial es aceptada,
- si no es viable, el producto no ser fabricado.
4. Una vez estudiado el pedido completo, el jefe tcnico
- informa al departamento comercial de la aceptacin/rechazo de cada producto integrante del pedido.
- si todos los productos de un pedido han sido aceptados, genera una orden de trabajo para cada producto,
a partir de una plantilla de fabricacin (la estndar, si el producto estaba catalogado, o bien una nueva
generada para el producto, si ste estaba fuera del catlogo). Cada orden de trabajo es enviada al jefe de
produccin, y queda pendiente de su lanzamiento.
5. El comercial comunica al cliente el resultado del anlisis de su pedido.
Plantilla Caso de Uso del Negocio
Proceso de
Negocio
Registrar Pedido
Objetivo Registrar pedido de un cliente
Descripcin 1. El cliente enva una orden de pedido, que debe incluir la fecha de solicitud, datos del
cliente y productos solicitados. Es posible que sea un empleado del departamento comercial
quien introduzca el pedido, a peticin de un cliente que realiz su pedido por telfono o lo
envi por fax o correo ordinario al dpto. comercial de la empresa.
2. El empleado revisa el pedido (completndolo, si es necesario), y comienza su
procesamiento envindolo al jefe tcnico, encargado de su anlisis.
3. El jefe tcnico analiza la viabilidad de cada producto pedido por separado:
Si el producto pedido est en el catlogo, su fabricacin es aceptada.
En caso contrario es considerado un producto especial y estudia su produccin:
- Si es viable, la fabricacin del producto especial es aceptada;
- Si no es viable, el producto especial no ser fabricado.
4. Una vez estudiado el pedido completo, el jefe tcnico...
Informa al depto comercial de la aceptacin o rechazo de cada producto pedido;
Si todos los productos de un pedido han sido aceptados, se crea una orden de trabajo
para cada producto, a partir de una plantilla de fabricacin (la estndar si el producto
estaba catalogado, o una nueva, especficamente diseada para el producto, si ste no
estaba en el catlogo). Cada orden de trabajo es enviada al jefe de produccin, y queda
pendiente de su lanzamiento.
5. El comercial comunica al cliente el resultado final del anlisis de su pedido.
Prioridad Bsico
Riesgos ...
Posibilidades
...
Tiempo Ejec. ...
Coste Ejec. ...
Roles Internos
Rol Externo
44
Modelado del negocio
Identificamos los agentes o roles participantes
(En el ejemplo: Cliente, Comercial, Jefe Tcnico y
Jefe Produccin )
Creamos escenarios para mostrar la
colaboracin entre los agentes, distinguimos
entre flujos bsicos y alternativos:
Escenarios: diagramas de secuencia (objetos
son roles)
Workers en Registrar Pedido
Cl iente
Comercial
1 1..n
Jefe Tcnico
1 1..5
Jefe Produccin
1..3
1
1..n 1 1..5 1
1
Escenario Registrar Pedido
: Cliente : Comercial : Jefe Tcnico : Jefe Produccin
[ ok] realizar Produccin
responder estudio
aceptar pedido
cursar pedido
estudiar pedido
47
Flujos de actividades
Mostrar flujo del proceso mediante
diagramas de proceso
diagramas de actividades con calles que
corresponden a roles
una actividad puede ser compleja para ser
descrita en otro diagrama.
Incluir slo informaciones relevantes
Realizar
Pedido
Cursar Pedido
propio?
Confirmar
Pedido
Si
Rechazar
Pedido
Generar Ordenes de
Trabajo
Analizar
Viabilidad
viable?
Crear Plantilla
si
Jefe Tcnico Comercial Cliente
Actividad compleja:
otro diagrama
Diagrama de
Proceso
Inicio
Introducir
Pedido
Cursar Pedido
Denegar Pedido
Aceptar Pedido
Analizar Pedido
Viable
Viable
[no]
Ordenar
Fabricacion
Planificar
Produccion
[si]
Jefe Producci on Jefe Tecnico Comercial Cliente
Diagrama de
Proceso
50
Reglas de Negocio
Reglas de restriccin
Especifican polticas o condiciones que restringen la
estructura y comportamiento de las informaciones
Estmulo-Respuesta
Restriccin de operacin
Restriccin de estructura
Reglas de derivacin
Especifican polticas o condiciones para inferir nuevos
hechos a partir de otros.
Glosario
...
Objeto de Informacin: Pedido

...
Actividad: Ordenar fabricacion
Actividad: Notificar aceptacion de pedido
Atributos
Codigo de pedido
Fecha de solicitud
Fecha lmite de entrega
Conjunto de {Producto}
Cliente
Importe total
Estado Actual
Restricciones
- El cdigo de pedido identificar unvocamente el
pedido, y ser asignado automticamente por el
sistema
- La fecha de solicitud ser anterior a la fecha lmite de
entrega.
- Un pedido contendr al menos un producto; no existe
lmite mximo de productos.
- Un pedido siempre ser solicitado por uno y
solamente un cliente.
- El importe total ser calculado a partir del precio de
cada producto pedido.
Clase del Dominio : - por especificar -
Origen: Analizar viabilidad
Agente: Jefe Tecnico
Precondiciones: La fabricacion de todos los productos
pedidos es viable. Existe una plantilla de fabricacin para
cada uno de dichos productos.
Postcondiciones: Ha sido creada una orden de trabajo
para cada producto, con estado pendiente, y ha sido enviada
al jefe de produccin para su planificacin.
Origen: Analizar viabilidad
Agente: Comercial
Precondiciones: La fabricacin de todos los productos
pedidos es viable.
Postcondiciones: Se ha comunicad al cliente la
aceptacin de su pedido. El estado del pedido es aceptado.
Trazabilidad
Caso de Uso : - por especificar-
Caso de Uso : - por especificar-
52
Especificacin de las actividades
Contrato: nombre de la actividad realizada por los actores
Origen: Actividad/es precedente/s
Agente: Actor que realiza la actividad
Precondicin: Estado previo a la realizacin de la actividad
Postcondicin: Estado posterior a la realizacin de la
actividad
Caso de uso: Nombre del caso de uso que se corresponde
con la actividad. Este campo no se rellenar hasta que no
se identifiquen los casos de uso.
53
Especificacin de las informaciones
Nombre de la informacin
Atributos: Listado de los atributos de la informacin
Restricciones: Restricciones sobre los atributos de la
informacin, referidas tanto al significado como al
valor de los mismos.
Clase: Nombre de la clase que modelar esta
informacin. En principio no se indica nada, y slo se
rellena este campo cuando la clase es identificada en
el modelado conceptual.
54
Contenidos
Introduccin
Dimensiones de un mtodo
Mtodos pesados vs. Desarrollo gil
Modelado del Negocio
Modelado de Requisitos
Modelado del Anlisis
Patrones GRASP
Modelado del Diseo
Patrones de Diseo
55
Modelado de Requisitos
Objetivo:
Se establecen los requisitos funcionales y
no funcionales del sistema.
A partir del modelo del negocio (si se hace)
se construye el modelo de casos de uso y
el modelo conceptual.
56
Tipos de Requisitos
Funcionales
No Funcionales
Usabilidad
Fiabilidad
Rendimiento
Adaptabilidad, Mantenimiento, Configurable
Implementacin: lenguajes, herramientas,..
GUI
Legales
57
Del modelo de negocio al modelo de
requisitos
Extraer los casos de uso del sistema a
partir de las actividades que aparecen en
los diagramas de actividades.
Establecer el modelo conceptual a
partir de las informaciones incluidas en los
diagramas de actividades.
58
actor
Del modelo de negocio al modelo de
requisitos
De los diagramas de proceso...
Concepto del
Dominio
Caso de Uso
objeto
actividad
rol
Diagrama de Casos de Uso Registrar Pedido
Analizar Produccion
Ordenar Fabricacion
JefeTecnico
Introducir Pedido
Cliente
Informar Pedido
Cursar Pedido
JefeProduccion
Planificar Produccion
Comercial
60
Identificacin de casos de uso
Objetivos Estrtegicos casos de uso del negocio
Ejemplo: Evitar prdidas
Objetivos de Usuario casos de uso
Ejemplo: Realizar Venta
Subfunciones casos de uso?
Ejemplo: Iniciar sesin (Login)
61
Identificacin de casos de uso
Establecer los lmites del sistema
Identificar los actores principales
Es el cliente un actor en el sistema TPV?
Identificar sus objetivos de usuario
Posible uso de los eventos externos
Definir un caso de uso por objetivo de usuario
Excepcin: casos de uso para manejar informacin
(crear, eliminar, modificar, consultar)
Formato expandido y esencial
62
Plantilla usecases.org
Actor Principal
Personas involucradas e Intereses
Precondiciones
Postcondiciones
Escenario Principal (Flujo Bsico)
Extensiones (Flujos Alternativos)
Requisitos especiales
Tecnologa y Lista Variaciones de datos
Frecuencia
Cuestiones abiertas
63
Ejemplo: Terminal Punto de Venta
Casos de Uso
Cajero
Realizar Venta
Cliente
Registrar Productos
Inicia
Gerente
Gestion Usuarios
Administrador
Sistema
64
Caso de uso Realizar Venta
Resumen: Un cliente llega al TPV con un conjunto de artculos. El
Cajero registra los artculos y se genera un ticket. El cliente paga en
efectivo y recoge los artculos.
Actor Principal: Cajero
Personal Involucrado e Intereses:
Cajero: quiere entradas precisas, rpida y sin errores de pago
Compaa: quiere registrar transacciones y satisfacer clientes.
...
Precondicin: El cajero se identifica y autentica
Postcondiciones: Se registra la venta. Se calcula el
impuesto. Se actualiza contabilidad e inventario...
65
Caso de uso Realizar Venta
Flujo Bsico:
1. A: El cliente llega al TPV con los artculos.
2. A: El cajero inicia una nueva venta
3. A: El cajero introduce el identificador de cada artculo.
4. S: El sistema registra la lnea de venta y presenta descripcin del
artculo, precio y suma parcial.
El Cajero repite los pasos 3 y 4 hasta que se indique.
5. S: El Sistema presenta el total
6. A: El Cajero le dice al Cliente el total a pagar
7. S: El Cliente paga y el sistema gestiona el pago.
8. S: El Sistema registra la venta completa y actualiza Inventario.
9. S: El Sistema presenta recibo
66
Caso de uso Realizar Venta
Extensiones (Flujos Alternativos):
3a. Identificador no vlido
1. El Sistema seala el error y rechaza la entrada
3-6a. El Cliente pide eliminar un artculo de la compra
1. El Cajero introduce identificador a eliminar
2. El sistema actualiza la suma
...
7a. Pago en efectivo
1. El Cajero introduce cantidad entregada por el cliente
2. El Sistema muestra cantidad a devolver
...
....
67
Caso de uso Realizar Venta
Requisitos especiales:
- Interfaz de usuario con pantalla tctil en un monitor de pantalla
plana. El texto debe ser visible a un metro de distancia.
- Tiempo de respuesta para autorizacin de crdito de 30 sg. El 90%
de las veces
...
Lista de Tecnologa y Variaciones de Datos:
- El identificador podra ser cualquier esquema de cdigo UPC, EAN,..
- La entrada de informacin de la tarjeta se realiza mediante un lector
de tarjetas.
...
Cuestiones Pendientes:
- Explorar cuestiones de recuperacin de accesos a servicios remotos
- Qu adaptaciones son necesarias para diferentes negocios?
68
Diagramas de estado de casos de uso
Esperando
Venta
Introduciendo
Articulos
crearNuevaVenta
int roducirArt iculo
EsperandoPago
finalizarVent a
Autorizando
Pago
real izarPagoEnEfect ivo
realizarPagoACredito
realizarPagoConCheque
Procesar Venta
69
Elaboracin de casos de uso
Cundo?
Al principio de la iteracin en formato extendido y
esencial, se refinan a lo largo de las iteraciones
Dnde?
En talleres de captura de requisitos
Quin?
Usuarios finales, clientes, desarrolladores
Cmo? (Herramientas)
Herramientas de requisitos web-enabled integradas
con un procesador de texto (texto cdu) y
herramientas CASE UML (diagramas de cdu)
70
Recomendaciones sobre casos de uso
Define bien los lmites del sistema.
Los actores interaccionan con el sistema.
Pregunta qu quieren los actores del sistema:
Objetivos.
Distingue el flujo normal de los flujos alternativos.
Lo importante es escribir la descripcin del caso
de uso, no dibujar diagramas de casos de uso.
Uso limitado de las relaciones include y extend
71
Recomendaciones sobre casos de uso
Usa include para factorizar parte de un flujo que
aparece en varios casos de uso.
Las extensiones pueden incluirse dentro del caso
de uso base como flujos alternativos en vez de
incluir casos de uso aparte.
El propio sistema puede disparar casos de uso.
No incluir casos de uso CRUD; casos de uso Crear
y Consulta si son relevantes.
No especificar casos de uso que incluyan detalles
de diseo de interfaces de usuario.
72
Modelo Conceptual (o Dominio)
Representa el vocabulario del dominio:
ideas, conceptos, objetos
No son modelos de elementos software
Clases conceptuales
Clases no incluyen operaciones, slo
atributos
Atributos: nmeros o texto
Asociaciones entre clases
73
Identificar Clases Conceptuales
Si se hace modelado del negocio:
Los objetos informacin, entrada y salida de las
actividades de los diagrama de proceso, representan
entidades y conceptos del dominio.
Una clase conceptual para cada informacin
relevante.
De la especificacin del diccionario se extraen:
atributos, asociaciones, restricciones
Se refina a lo largo de las iteraciones
Ms vale que sobren clases que falten
74
Del Modelo del Negocio al Modelo
Conceptual
Objeto informacin Pedido (modelo del negocio)
Atributos: codigo, importe, estado, fechaTopeEntrega,..
Asociaciones: Pedido-Cliente y Pedido-Producto,..
Restricciones: fechaTopeEntrega > fechaRecepcion, ..
Tambin es posible identificar objetos que pasan por
varios estados (diagrama de estados preliminar)
75
Identificar Clases Conceptuales
Si no se hace modelado del negocio:
Usar una lista de categoras de clases
Identificar nombres de las frases
Categoras de clases
Objetos fsicos
Especificaciones o descripciones de cosas
Lugares
Transacciones
Lneas de una transaccin
76
Identificar Clases Conceptuales
Categoras de clases (continua)
Contenedores de cosas
Cosas en un contenedor
Dispositivos externos al sistema
Conceptos abstractos
Eventos
Procesos
Reglas y Polticas
Catlogos
Contratos, documentos legales
Instrumentos y servicios financieros
Manuales, documentos, trabajos, libros
Modelo
Conceptual
Gerente
Cajero
Pago
Cliente
TPV
1 1 1 1
Iniciado por
1
1
1
1
Registra Ventas
Venta
1
1
1
1
pagado por
1
1
1
1
iniciada por
1
1
1
1
capturada en
Catalogo Productos
Tienda
direccion
nombre
Lineas Venta
cantidad
1..n
1
1..n
1
Contenidas en
Producto
1..n
1
1..n
1
Contiene
1
0..n
1
0..n
Descrita por
Item
0..n 1 0..n 1
Almacena
1
0..1
1
0..1
Registra venta de
0..n 0..n
Describe
1
0..n
1..n
1
Usado-por
Modelo conceptual inicial
Modelo
Propio
EnCatalogo
Cliente Pedido
1..n 1 1..n 1
1
1
1
1
Plantill a
1 1 1 1
EspecificacinTarea
OrdenTarea
Puesto Produccin
1
0..n
1
0..n
Material
LineaMaterial
Tarea
1..n 1..n
11
1
1
1
1
1 1..n 1 1..n
79
Identificar Asociaciones
Se incluyen aquellas:
para la que el conocimiento de la relacin deba
mantenerse algn tiempo
derivadas de la Lista de Asociaciones
Lista de Asociaciones
A es parte fsica de B
A es parte lgica de B
A est fsicamente contenida en B
A est lgicamente contenida en B
A es una descripcin de B
80
Identificar Asociaciones
Lista de Asociaciones (continua)
A es una lnea de una transaccin o informe B
A es conocido/registrado/informado/capturado en B
A es miembro de B
A es una subunidad organizacional de B
A usa o maneja a B
A comunica con B
A est relacionado a una transaccin B
A es el siguiente a B
A es apropiado por B
A es un evento relacionado con B
81
Identificar Asociaciones
Encontrar clases conceptuales es ms importante que
encontrar asociaciones. Se debe dedicar ms tiempo a
encontrar clases conceptuales que asociaciones
Centrarse en las asociaciones necesita-conocer
Muchas asociaciones dificultan la comprensin de los
diagramas
Evitar asociaciones redundantes
En la implementacin se notar que falta o sobra alguna
asociacin
82
Asociaciones en TPV
A es parte fsica de B
TPV-Caja
A es parte lgica de B
LineaVenta-Venta
A est fsicamente contenida en B
Item-Tienda, TPV-Tienda
A est lgicamente contenida en B
EspecificacionProducto-CatalogoProductos
A es una descripcin de B
EspecificacionProducto-Item
83
Asociaciones en TPV
A es una lnea de una transaccin o informe B
LineaVenta-Venta
A es conocido/registrado/informado/capturado en B
Venta-TPV
A es miembro de B
Cajero-Tienda
A usa o maneja a B
Cajero-TPV, Gerente-TPV
A comunica con B
Cliente-Cajero
A est relacionado a una transaccin B
Cliente-Pago, Cajero-Pago
A es el siguiente a B
LineaVenta-LineaVenta
A es apropiado por B
TPV-Tienda
84
Atributos
Son valores de tipos de datos: Identidad no tiene sentido
Tipos Primitivos: Boolean, Date, Numero, Time, String
Tipos no primitivos: Direcciones, Colores, Nmero Tlfno,
Nmero Seguridad Social, DNI, Cdigo de Producto
Universal, Cdigo Postal,..
Tipos no primitivos se deben modelar como clases si:
Estn formados por varias partes
Son aplicables operaciones
Tiene otros atributos
Es una cantidad con una unidad
No utilizar atributos como claves ajenas
85
Documentos de Anlisis Requisitos
Casos de Uso
Especificacin Complementaria
Captura otros requisitos
Glosario
Captura trminos y definiciones
Visin
Define visin del producto de las personas
involucradas, en trminos de sus necesidades y
caractersticas.
86
Especificacin Complementaria
Funcionalidad
Abarca varios casos de uso
Ej. Almacenar informacin errores, Cualquier uso requiere
autenticacin de usuario
Requisitos No Funcionales (Atributos de calidad)
Usabilidad, Mantenimiento, Adaptacin, Fiabilidad, Rendimiento
Restricciones Implementacin (hardware, software, desarrollo)
Componentes comprados y free open source
Interfaces
Reglas de Negocio (Ej. Reglas de descuento, Clculo impuestos)
Cuestiones Legales
Cuestiones sobre el entorno fsico y operacionales
Informacin en dominios relacionados
87
Visin
Oportunidad
Definicin del problema
Alternativas
Descripcin personal involucrado (stakeholder)
Objetivos usuario
Perspectiva del producto
Beneficios del producto
Lista de caractersticas del producto
Coste y precio
Otros requisitos y restricciones
88
Lista de Caractersticas del Sistema
Alguna funcionalidad no puede ser asignada
a un caso de uso:
El sistema debe hacer transacciones con sistemas
externos de inventario, contabilidad y clculo de
impuestos
Para algunas aplicaciones conviene ms una
lista de caractersticas que casos de uso
Ej. Servidor de aplicacin
89
Qu hacemos primero?
1. Escribir un borrador poco elaborado de la Visin
en la Etapa Inicial
2. Identificar objetivos del usuario y casos de uso
para ellos
3. Escribir algunos casos de uso y comenzar
Especificacin Complementaria
4. Refinar Visin
90
Elaboracin de Requisitos y Visin
Cundo?
Etapa Inicial, un poco
Modelado de requisitos en cada iteracin
Dnde?
Inicio en talleres de requisitos, se completa despus
Quin?
Analista de sistemas, Arquitecto Software, Usuarios
Cmo?
Herramientas de requisitos web-enabled integradas
con un procesador de texto
91
Casos de uso e iteraciones
Asignar prioridad a casos de uso
Escribir casos de uso en su forma expandida
Asignar casos de uso a iteraciones.
Varias versiones de un caso de uso complejo,
para aadir complejidad de modo incremental.
Necesidad de comunicacin con el usuario
Al final un caso de uso esencial se transforma
en su forma concreta.
92
Iteraciones
Dirigidas por el riesgo
Asociar a cada caso de uso un nivel de riesgo
e importancia para el negocio
Comenzar pronto con la programacin
Realizar pruebas
Rpida retroalimentacin
Se obtiene la arquitectura en las primeras
iteraciones
93
Prototipo Inicial
Utilizar los casos de uso.
Incluye las interfaces de usuario
Sirve para validar los requisitos: analista y
usuarios llegan a un acuerdo sobre la
funcionalidad y vocabulario.
Prototipo desechable
Fcil de construir con herramientas visuales.
94
Contenidos
Introduccin
Dimensiones de un mtodo
Mtodos pesados vs. Desarrollo gil
Modelado del Negocio
Modelado de Requisitos
Modelado del Anlisis
Patrones GRASP
Modelado del Diseo
Patrones de Diseo
95
Modelo del anlisis
Objetivo:
A partir de los casos de uso obtener el diseo
preliminar del sistema que deber ser
refinado en el modelo del diseo.
Nivel de abstraccin ms alto que en el
diseo. Visin ideal del sistema.
Se define una arquitectura del sistema.
96
Modelo del anlisis
Para cada caso de uso se define un
diagrama de secuencia del sistema que
muestra los eventos que un actor genera
durante la interaccin con el sistema (caja
negra)
Cada evento da origen a una operacin del
sistema
El efecto de las operaciones se describen
mediante contratos especificados mediante
una plantilla (opcional) .
97
Modelo del anlisis
Para cada operacin del sistema se define
una colaboracin (diagrama de interaccin)
que muestra cmo deben colaborar los objetos
para satisfacer la postcondicin expresada en el
contrato de dicha operacin.
Disear las colaboraciones, asignando
responsabilidades a las clases. Utilizaremos
patrones GRASP (luego patrones de diseo).
Crear el modelo de clases a partir del modelo
conceptual, conforme se definen las
colaboraciones
: Cajero
:Sistema
* introducirItem(upc,cantidad)
finalizarVenta()
crearPago(cantidad)
Cajero
Realizar Venta
Cliente
Operacin
Operacin
Operacin
CONTRATOS
crearNuevaVenta
Diagrama de Secuencia del Sistema
(Caso de Uso Realizar Venta)
: Cajero
:Sistema
* introducirItem (CUP, cantidad)
finalizarVenta ()
crearPago()
Operaciones
del sistema
eventos del
sistema
crearNuevaVenta()
1. Cliente llega al TPV con
item
2. Cajero inicia venta
3. Cajero introduce id item
4. Sistema registra lnea de
venta y presenta parcial
Cajero repite pasos 3 y 4
hasta que acaba
5. Sistema presenta total
6. Cajero requiere pago
7. ...
100
Contratos
Descripcin detallada del comportamiento del
sistema en trminos de cambios de estado a los
objetos en el Modelo Conceptual, tras la ejecucin
de una operacin del sistema.
Definicin basada en pre y postcondiciones
Las postcondiciones indican
Creacin y Eliminacin de objetos
Creacin o Eliminacin de asociaciones
Modificacin de atributos
101
Contratos
Las postcondiciones sern incompletas y se
descubrirn detalles en el diseo.
Escribimos las postcondiciones a partir del
modelo conceptual.
Son redundantes los contratos con los
casos de uso?
102
Contratos
tiles cuando hay mucha complejidad y la
precisin es un valor aadido
Normalmente no son necesarios, si un
equipo escribe un contrato para cada caso de uso
es una seal de unos casos de uso muy pobres o
falta de colaboracin con los expertos o que les
gusta escribir documentacin innecesaria
En la prctica la mayora de detalles se pueden
inferir de los casos de uso de modo obvio,
aunque obvio es un concepto muy escurridizo.
103
Contratos
1. Identificar operaciones del sistema en DSS
2. Construir un contrato para operaciones
complejas y quiz sutiles en sus resultados, o
que no estn claras en el caso de uso.
3. Describir postcondiciones
Creacin/Eliminacin de instancias
Creacin/Eliminacin de asociaciones
Modificacin de atributos
No olvidar crear asociaciones!
Se puede usar OCL
104
Plantilla de un Contrato
Estado de objetos del dominio despus de que
se complete la operacin
Postcondiciones
Suposiciones relevantes sobre el estado del
sistema o de objetos del modelo conceptual,
antes de ejecutar la operacin. Suposiciones
no triviales
Precondiciones
Casos de uso en los que puede tener lugar
esta operacin
Referencias
cruzadas
(opcional)
Signatura de la operacin
Nombre operacin
105
Contrato IntroducirItem
Nombre: introducirItem (itemID: itemID, cantidad: integer)
Referencias Cruzadas: Registrar Venta
Precondiciones: Hay una venta en curso
Postcondiciones:
- Se cre una instancia lv de LineaVenta
- Se asoci ldv a la venta en curso v
- Se asign cantidad a lv.cantidad
- lv se asoci a una EspecificacinProducto segn itemID
106
Colaboracin
Diagramas de secuencia o colaboracin
Crear estos diagramas es una actividad de
AOO/DOO muy creativa.
Diseo de colaboraciones es la parte ms difcil.
Punto de partida para la programacin.
Crear diagramas en parejas.
Crear modelo de clases de anlisis en paralelo.
Diagrama de Colaboracin
: TPV : Vent a
lv : Lineas
Venta
: Li neas
Venta
: Catalogo
Productos
:
Product o
GUI
2: [nuev venta] crear()
6: AddLineaVenta(esp, cant)
8: add(lv)
3: crear()
7: crear(esp,cant)
4: esp:= especificacion(cup)
5: esp:= find(cup)
1: IntroducirProducto(cup, cant)
108
Modelo de clases del anlisis
El modelo de clases del anlisis se crea a partir
del modelo conceptual.
Se aade una clase por cada tipo de objeto del
dominio que participa en la colaboracin.
Se aaden atributos segn los contratos.
Se aaden mtodos segn las colaboraciones.
Para aquellas clases con objetos con
comportamiento dependiente del estado, se
construye una mquina de estados:
Dispositivos, Controladores, Ventanas, etc.
109
Modelo del anlisis
En la primera iteracin, en esta fase se definen
los subsistemas.
En el modelo del diseo se refinarn las
colaboraciones del anlisis para aadir aspectos
relacionados con la plataforma, patrones de
diseo, etc.
110
Contenidos
Introduccin
Dimensiones de un mtodo
Mtodos pesados vs. Desarrollo gil
Modelado del Negocio
Modelado de Requisitos
Modelado del Anlisis
Patrones GRASP
Modelado del Diseo
Patrones de Diseo
111
Patrones GRASP
Describen los principios bsicos de asignacin
de responsabilidades a clases.
Distribuir responsabilidades en la parte ms
difcil del diseo OO. Consume la mayor parte
del tiempo.
Patrones GRASP:
Experto Creador
Bajo Acoplamiento Alta Cohesin
Controlador Polimorfismo
Indireccin Variaciones Protegidas
112
Responsabilidades y Mtodos
Contrato u obligacin de una clase.
Dos categoras:
Conocer
datos encapsulados privados
existencia de objetos conectados
datos derivados o calculados
Hacer
Algo l mismo, como crear un objeto o realizar un clculo
Iniciar una accin en otros objetos
Controlar y coordinar actividades en otros objetos
113
Responsabilidades y Mtodos
Responsabilidades conocer se pueden inferir de
las asociaciones y atributos del modelo
conceptual.
Puede asignarse a varias clases y mtodos
dependiendo de su granularidad.
Una responsabilidad se implementa mediante uno
o ms mtodos.
Diagramas de interaccin muestran elecciones en
la asignacin de responsabilidades.
114
Experto
Cmo se asignan responsabilidades?
Asignar una responsabilidad a la clase que
tiene la informacin necesaria para
cumplimentarla
Heursticas relacionadas
Distribuir responsabilidades de forma homognea
No crear clases dios
Beneficios
Se conserva encapsulacin: Bajo acoplamiento
Alta Cohesin: clases ms ligeras
115
Ejemplo 1
Quin es el responsable de conocer el total de
una venta?
Venta
fecha
nota
LineaVenta
cantidad
1..* 1..1 1..* 1..1
contiene
Producto
descripcion
precio
codigo
0..* 0..*
Descrita por
1
116
Ejemplo 1
Quin es el responsable de conocer el total de
una venta?
: Venta : LineaVenta : Producto
* st:=subtotal()
p:=getPrecio()
t:=total()
117
Ejemplo 2
:Mensaje
:LectorCorreo :Buzon :Carpeta
1: mensajesPeriodo(f1,f2) 2: * mensajesPeriodo(f1, f2)
3: * enFecha(f1,f2)
Quin es el responsable de conocer todos los
mensajes recibidos entre dos fechas?
Ejemplo 3
Subastas por internet
Participante
nombre
apellidos
numID
domicilio
direccionEnv io
telef ono
reputacion
PagoAnunc io
PagoCuot a
EdicionSubasta
idEdici on
f echaI ni cio
f echaCi erre
es tado
Adjudicacion
PujaOrdinaria
datosTarjeta
estado
+p
+pa
+pc
+puja
ArticuloConcreto
codArticulo
+art
AnuncioSubasta
pv pRecomend
pujaMinima
cuota
gastosEnv io
plazo
f ormaPago
anticipo
+es +anuncios
+as
+adjudicaciones
+pujas
+as
+articulos
Ejemplo 3
Quin es el responsable de obtener la puja
ganadora?
: Sistema
as :
AnuncioSubasta
pujas :
Puj aOrdi naria
:
ControladorAnuncios
:
CatalogoAdjudi caciones
: Edici onSubasta : Anunci oSubasta
5: obtenerAdjudicacion()
1: cerrarEdicionSubasta(es)
6: pg : = get()
7: adj:= crearAdjudicacion(this, pg,a)
2: cerrar()
4: * cerrar()
3: * as: = get()
120
Creador
Quin es responsable de crear una
nueva instancia de una cierta clase?
Asignar a la clase B la responsabilidad de
crear instancias de una clase A si:
B es una agregacin de objetos de A
B contiene objetos de A
B registra instancias de A
B hace un uso especfico de los objetos de A
B proporciona los datos de inicializacin necesarios
para crear un objeto de A
121
Creador
Quin debera crear una instancia de la clase
LineaVenta?
Una instancia de la clase Venta es una agregacin de
instancias de la clase LineaVenta
Venta incluir crearLineaVenta(int cantidad)
Beneficios:
Bajo acoplamiento
Ejemplo Quin debera crear
una instancia de puja?
: Pujador
:
ControladorPujas
po :
PujaOrdinaria
as :
AnuncioSubasta
puj as :
PujaOrdinaria
7: numPujas := comprobarPujas(p) 9: numSerie := generarNumSerie()
1: pujarAnuncio(partID, numAnuncio, valorPuja, datosTarjeta)
6: po := crearPuja(p, valorPuja, datosTarjeta)
4: p := getParticipante(partID)
8: [numPujas < 3] po := crear(as, p, valorPuja, datosTarjeta)
10: add(po)
: CatalogoParticipantes
: CatalogoSubastas
2:as := getSubast a(numAnunci o)
123
Bajo Acoplamiento
Cmo reducir las dependencias entre
clases?
Asignar responsabilidad de modo que se
consiga un bajo acoplamiento
Es un patrn evaluativo
No considerarlo de forma independiente, sino
junto a los patrones Experto y Alta Cohesin.
Beneficios: Facilita i) reutilizacin, ii)
comprensin de las clases y iii) mantenimiento
124
Tipos de dependencias
Existe acoplamiento entre una clase A y otra B
si:
i) A posee un atributo de tipo B
ii) A tiene un mtodo con un parmetro, una variable
local o devuelve un valor de tipo B
iii) A es subclase directa o indirecta de B
iv) A implementa la interfaz B (Java)
125
Ejemplo
: TPV p: Pago :Venta
:GUI
efectuarPago()
crear()
agregarPago(p)
126
Ejemplo
: TPV : Venta :Pago
:GUI
efectuarPago()
efectuarPago()
crear()
127
Alta Cohesin
Canto estn de relacionadas las
responsabilidades de una clase?
Asignar una responsabilidad de modo que la
cohesin siga siendo alta
Baja Cohesin: Clases con responsabilidades
que deberan haber delegado. Son clases
dios. Difciles de comprender, reutilizar,
mantener.
Ejemplo anterior: En el primer caso TPV tendra
ms operaciones, mejor delegar.
128
Alta Cohesin
Muy baja cohesin:
Clase AccesoBD-RPC
Mezcla de funcionalidad
Baja cohesin:
Clase AccesoBD
Muchos mtodos
Alta cohesin:
Clase AccesoBD + Familia de clases relacionada
Cohesin moderada:
Clase Empresa: conoce empleados e informacin
financiera
129
Alta Cohesin
Una clase con alta cohesin no tiene muchos
mtodos, que estn muy relacionados
funcionalmente, y no realiza mucho trabajo.
Colabora con otras clases.
Beneficios
Mejora reutilizacin
Clases ms claras, se comprenden mejor
Mejora mantenimiento
130
Controlador
Quin se encarga de atender los
eventos del sistema
Asignar responsabilidad de manejar eventos
externos a un controlador:
i) el sistema global, dispositivo o subsistema
ii) un manejador de los eventos de un caso
de uso
El mismo controlador para todos los eventos de
un mismo caso de uso.
131
Controlador
Cualquier arquitectura distingue entre capa
presentacin y capa del dominio.
Las clases de la interfaz (capa presentacin) no
deben encargarse de realizar las tareas
asociadas a un evento. Deben delegarlas a un
controlador.
Separar interfaz de la lgica de aplicacin.
Las operaciones del sistema en la capa del
dominio.
132
Controlador
Un controlador es un objeto que no pertenece
a la capa de presentacin, se encarga de
recibir y manejar un evento del sistema
procedente normalmente de una interfaz
grfica.
Una clase controlador incluye un mtodo para
cada operacin del sistema que maneja.
Controlador fachada vs. Controlador caso de
uso
133
Controlador
Cundo debemos escoger un controlador de
caso de uso ?
Cuando con las otras alternativas obtenemos
controladores saturados
Es posible llevar el estado de la sesin
En el Proceso Unificado se distingue entre:
objetos entidad (dominio)
objetos control (controladores)
objetos frontera (interfaces GUI)
134
Controlador
Alumno
Matriculacion
Objeto Entidad
Objeto Control
GUIMatricul a
Objeto Frontera
Ejemplo
:AppletTPV :TPV :Venta
introItem(cant,cod)
crearLineaVenta(cant,cod)
introItem
evento
controlador
Acoplamiento adecuado de la capa presentacin con
la capa del dominio
136
Ejemplo
introProd
evento
Acoplamiento inadecuado de la capa presentacin
con la capa del dominio
:AppletTPV :Venta
crearLineaVenta(cant,cod)
137
Controlador
Dado el evento Introducir tem, tendramos
varios posibles controladores:
i) TPV, ii) Tienda, iv) Manejador Compra
Beneficios de un controlador:
Favorece la reutilizacin
Posibilidad de capturar informacin sobre el estado
de una sesin
138
Polimorfismo
Cmo manejar las alternativas basadas en el
tipo? Cmo crear componentes software
conectables (pluggable)?
Cuando las alternativas o comportamiento
relacionado varan segn el tipo asigne la
responsabilidad para el comportamiento a los tipos
para los que vara el comportamiento.
139
Polimorfismo
No realizar anlisis de casos de uso basado en
el tipo de los objetos.
if tipoPago = Cheque then autorizarPagoCheque
else if tipoPago = Efectivo then autorizarPagoEfectivo
else if tipoPago = Tarjeta then autorizarPagoTarjeta
else if
Sustituir anlisis de casos de uso por jerarqua
de herencia.
140
Polimorfismo
Pago
fechaPago
cantidad
(from Clases)
PagoCheque PagoTarjeta PagoEfectivo
141
Polimorfismo
IAdaptadorCalcDeImpuestos
getImpuestos(v : Venta) : List of LineaImpuesto
<<Interface>>
AdaptadorMasterImpuestos AdaptadorImpuestosPro
Se aaden fcilmente las extensiones necesarias por nuevas
variaciones.
Los clientes no son afectados por nuevas implementaciones.
Usar si realmente el punto de variacin est motivado
142
Indireccin
Cmo evitar un acoplamiento directo
entre dos clases?
Asignar la responsabilidad a un intermediario
que crea una indireccin
Ejemplo: Los adaptadores de clculo de impuestos
143
Variaciones Protegidas (VP)
Cmo disear objetos, subsistemas y
sistemas de manera que las variaciones o
inestabilidades en estos elementos no
tenga un impacto indeseable sobre otros
elementos?
Identificar los puntos de variacin previstos y
asignar responsabilidades para crear una
interface alrededor de ellos
144
Variaciones Protegidas (VP)
Ejemplo: Adaptadores de clculo de impuestos,
se combina indireccin con polimorfismo
VP es un principio fundamental que motiva la
mayora de mecanismos y patrones en
programacin y diseo destinados a
proporcionar flexibilidad y proteccin frente al
cambio.
145
Variaciones Protegidas (VP)
Diseos dirigidos por datos
Lectura de cdigos, valores, nombres de ficheros,.., de una
fuente externa
Bsqueda de servicios
Servicios de nombres (JNDI de Java) o traders para obtener un
servicio (UDDI para servicios web)
Diseos dirigidos por un intrprete
Diseos reflexivos o de nivel meta
Usar la instropeccin
Acceso Uniforme
Principio de Sustitucin de Liskov
146
Variaciones Protegidas (VP)
Diseos de ocultacin de la estructura
Principio no hables con extraos
VP se aplica a puntos de variacin y puntos de
evolucin.
VP es esencialmente lo mismo que los principios
Ocultacin de Informacin y Abierto-Cerrado
147
No hables con extraos
No enviar mensajes sobre objetos indirectos,
sino sobre la instancia actual (self),
parmetros de mtodos, atributos de la
instancia actual y elementos de colecciones de
la instancia actual.
class A { class B {
B at1; C at2;
void met1() { C getAt2() {return at2;}
C obj = at1.getAt2(); }
obj.met2();}
}
148
No hables con extraos
class A { class B {
B at1; C at2;
void met1(..) { C getAt2() {return at2;}
at1.met3;} void met3() {at2.met2;}
} }
class C {
void met2() {..}
}
Evitar recorrer largos caminos en la estructura de
objetos y entonces enviar un mensaje: diseo frgil
149
No hables con extraos
class Registro {
private Venta venta;
public void metodoFragil () {
Dinero cantidad =
venta.getPago().getCantidadEntregada()
...
}
}
Dinero cantidad =
venta.getCantidadEntregadaEnPago()
Casos de Uso
AltaUsuario
RealizarPedido
Autenticacin
Usuario
Ejemplo 1: PetStore
Precondiciones: El usuario debe estar autenticado.
Comentarios:
Alternativas:
3.1) El producto se encuentra en el carro de compras.
3.1.1) S: El sistema incrementa en uno el nmero de unidades del producto del carro de compras.
9.1) La forma de pago es contra reembolso. En este caso, el usuario no tiene que introducir los datos de la tarjeta de
crdito.
9.2) La forma de pago es mediante transferencia bancaria. En este caso, el usuario no tiene que introducir los datos de la
tarjeta de crdito.
Flujo Principal:
1. A: Inicia compra
2. S: Crea un carro de compras nuevo asociado a la sesin del usuario.
3. A: El Usuario selecciona y aade un producto al carro de compras.
4. S: El sistema genera un nuevo tem en el carro de compras correspondiente al nuevo producto.
5. S: Actualiza el importe total del carro de compras.
6. A: El Usuario selecciona un producto del carro de compras e introduce el nmero de unidades del producto que
desea.
7. S: Actualiza el carro de compras reflejando las nuevas unidades. Si el nmero de unidades era cero, elimina el
producto del carro de compras.
8. A: El Usuario finaliza la compra.
9. A: El Usuario introduce los datos personales del pedido: direccin, localidad, provincia, cdigo postal.
10. A: El Usuario introduce los datos de la tarjeta de crdito: tipo de tarjeta, numero de tarjeta, mes y ao de caducidad.
11. S: Genera pedido de compras con sus correspondientes lneas de pedido.
Actores: Usuario
Objetivo: Realizar una compra seleccionando y aadiendo productos al carro de compras, pudiendo cambiar el nmero de
unidades de un producto del carro y generando un pedido en el momento que el usuario decida finalizar la compra.
Nombre: RealizarPedido
Pedido
numero
nifCliente
direccion
localidad
provincia
codigoPostal
tipoTarjetaCredito
numeroTarjetaCredito
caducidadMes
caducidadYear
tipoPago
LineaItems
total
estado
LineaItem
unidades
total
1..n 1 1..n 1
Producto
nombre
numero
descripcion
precio
categoria
origenFoto
1
1
1
1
ItemCarro
unidades
total
1 1 1 1
Usuario
nombre
nif
correo
usuario
clave
0..n 1 0..n 1
CarroCompras
precioTotal
items
tamao
0..n 1 0..n 1
1
1
1
1
Modelo Conceptual
Diagrama de Secuencia del Sistema para
Realizar Pedido
: Usuario
: Sistema
cerrarPedido(nif,direcc,localidad,provincia,CP,tTarjeta,nTarjeta,cMes,cAo,tPago)
aadirItem(codigo)
cambiarUnidades(codigo,unidades)
Colaboracin AadirItem
: Usuario
: CarroCompras
: ItemCarro
i : ItemCarro
: Producto
: MostrarProductos : Aadir
: CatalagoProductos
11: recalcularTotal()
1: aadirItem(codigo)
5: i:=getItemCarro(codigo)
10: [nuevoItem]put(codigo,i)
6: [!nuevoItem]incrementarUnidades()
9: [nuevoItem]i:=creaItem(p) 7: [nuevoItem]p:=get(codigo)
2: aadirItem(codigo)
3: [primer producto] crear()
4: aadirItem(codigo)
8: [nuevoItem]p:=buscar(codigo)
Diagrama de Clases (Struts y JDBC)
JDBCDAOFactory
JDBCItemDAO
JDBCUsuarioDAO
JDBCPedidoDAO
JDBCLineaItemDAO
LineaItem DAO
PedidoDAO
UsuarioDAO
ItemDAO
HttpServlet
ActionForm
LoginForm ModificarCarroForm PedidoForm RegistroForm
AadirCarroAction Most rarAnimal esAction EditarPedidoAction
EditarRegistroAction
SalvarPedidoAction
LoginAction
SalvarRegistroAction
ModificarCarroAct ion
Action
ActionServlet
IServicios
Servi ceImpl FachadaCarroCompras
CarroCompras
precioTotal
items
tamao
ItemCarro
unidades
t otal
Producto
nombre
numero
descripcion
precio
categoria
origenFot o
LineaItem
unidades
total
Pedido
numero
nifCliente
direccion
localidad
provincia
codigoPostal
tipoTarjetaCredito
numeroTarjetaCredito
caducidadMes
caducidadYear
t ipoPago
LineaItems
total
estado
Usuario
nombre
nif
correo
usuario
clave
DAOFactory
ExtendedActionServlet
1 0..n 0..n 1
1 11 1
1 1 1 1
1..n 1 1..n 1
0..n
1
0..n
1
Colaboracin Aadir Item (Struts y JDBC)
: U s u a r i o
: C a rr o C om p ra s
: It e m C a r r o
i : It e m C a r r o
: M o s t r a r P r o d u c t o s
: S e r vi c e Im p l : E x t e n d e d A c t i o n S e r vl e t a c a : A a d i r C a r r o A c t i o n
: F a c h a d a C a r r o C o m p r a s
: P r o d u c t o
: M o s t r a r C a r r o
3 : a c a : = g e t A c t i o n ( )
O b t i e n e e l
A c t i o n F o r w a r d
O b t ie n e
A a d i r C a r r o A c ti on
H a c e u s o d e l p a t r n D A O
p a r a r e c u p e r a r e l p r o d u c t o
O t i e n e u n
C a r r o C o m p r a s V O
a c c e d i d o d e s d e J S P
1 4 : re c a lc u la r T o t a l( )
1 6 : a f: = f i n d F o r w a r d ( " s u c e s s " )
1 : a a d i rI t e m ( c o d i g o )
2 : p r o c e s s ( )
6 : a a d i rI t e m ( c o d i g o )
4 : a f: = p e r fo r m ( )
1 7 : m o s t r a r ( )
5 : a a d i rI t e m ( c o d i g o )
1 5 : c c V O : = l i s t a r C a r r o C o m p r a s ( )
9 : i : = g e t It e m C a r r o ( c o d i g o )
1 3 : [n u e v oI t e m ]p u t ( c o d ig o ,i )
1 0 : [ !n u e vo It e m ] i n c r e m e n t a r U n i d a d e s ( )
1 2 : [ n u e vo It e m ] i : = c r e a It e m ( p )
1 1 : [ n u e vo It e m ] p : = r e c u p e r a r P r o d u c t o ( c o d i g o )
7 : [ p r i m e r p r o d u c t o ] c r e a r ( )
8 : a a d i rI t e m C a r r o ( c o d i g o )
Ejemplo 2: Caso de uso Realizar Venta
en sistema TPV
Resumen: Un cliente llega al TPV con un conjunto de artculos. El
Cajero registra los artculos y se genera un ticket. El cliente paga en
efectivo y recoge los artculos.
Actor Principal: Cajero
Personal Involucrado e Intereses:
Cajero: quiere entradas precisas, rpida y sin errores de pago
Compaa: quiere registrar transacciones y satisfacer clientes.
...
Precondicin: El cajero se identifica y autentica
Postcondiciones: Se registra la venta. Se calcula el
impuesto. Se actualiza contabilidad e inventario...
158
Caso de uso Realizar Venta
Flujo Bsico:
1. A: El cliente llega al TPV con los artculos.
2. A: El cajero inicia una nueva venta
3. A: El cajero introduce el identificador de cada artculo.
4. S: El sistema registra la lnea de venta y presenta descripcin del
artculo, precio y suma parcial.
El Cajero repite los pasos 3 y 4 hasta que se indique.
5. S: El Sistema presenta el total
6. A: El Cajero le dice al Cliente el total a pagar
7. S: El Cliente paga y el sistema gestiona el pago.
8. S: El Sistema registra la venta completa y actualiza Inventario.
9. S: El Sistema presenta recibo
159
Caso de uso Realizar Venta
Extensiones (Flujos Alternativos):
3a. Identificador no vlido
1. El Sistema seala el error y rechaza la entrada
3-6a. El Cliente pide eliminar un artculo de la compra
1. El Cajero introduce identificador a eliminar
2. El sistema actualiza la suma
...
7a. Pago en efectivo
1. El Cajero introduce cantidad entregada por el cliente
2. El Sistema muestra cantidad a devolver
...
....
160
Caso de uso Realizar Venta
Requisitos especiales:
- Interfaz de usuario con pantalla tctil en un monitor de pantalla
plana. El texto debe ser visible a un metro de distancia.
- Tiempo de respuesta para autorizacin de crdito de 30 sg. El 90%
de las veces
...
Lista de Tecnologa y Variaciones de Datos:
- El identificador podra ser cualquier esquema de cdigo UPC, EAN,..
- La entrada de informacin de la tarjeta se realiza mediante un lector
de tarjetas.
...
Cuestiones Pendientes:
- Explorar cuestiones de recuperacin de accesos a servicios remotos
- Qu adaptaciones son necesarias para diferentes negocios?
Modelo
Conceptual
Gerente
Cajero
Pago
Cliente
TPV
1 1 1 1
Iniciado por
1
1
1
1
Registra Ventas
Venta
1
1
1
1
pagado por
1
1
1
1
iniciada por
1
1
1
1
capturada en
Catalogo Productos
Tienda
direccion
nombre
Lineas Venta
cantidad
1..n
1
1..n
1
Contenidas en
Producto
1..n
1
1..n
1
Contiene
1
0..n
1
0..n
Descrita por
Item
0..n 1 0..n 1
Almacena
1
0..1
1
0..1
Registra venta de
0..n 0..n
Describe
1
0..n
1..n
1
Usado-por
: Cajero
:Sistema
* introducirItem(upc,cantidad)
finalizarVenta()
realizarPago(cantidad)
Cajero
Realizar Venta
Cliente
Operacin
Operacin
Operacin
CONTRATOS
crearNuevaVenta
Operacin: crearVenta()
Caso de Uso: Realizar venta
Precondicin:
Postcondicin:
una instancia de Venta v fue creada
v se asoci con TPV
atributos de v fueron inicializados
: Cajero
: TPV
: Venta : LineaVenta
1. crearVenta
1.1. crear
1.1.1. crear
Operacin: introducirItem(itemID: itemID, cantidad: Dinero)
Caso de Uso: Realizar venta
Precondicin: se est procesando una venta
Postcondicin:
una instancia de LineaVenta lv fue creada
lv se asoci con la Venta actual
lv.cantidad = cantidad
lv se asoci con el Producto cuyo cdigo es itemID
: Cajero
: TPV
: CatalogoProducto
:
Producto
: Venta lv :
LineaVenta
: LineaVenta
1. introducirItem(cant, id)
1.1. p:= getProducto(id )
1.2. crearLV( )
1.1.1. p:=get(id)
1.2.1. lv:=crear( )
1.2.2. add(lv)
Operacin: finalizarVenta()
Caso de Uso: Realizar venta
Precondicin: se est procesando una venta
Postcondicin:
v.esCompleta = true, siendo v la venta actual
: Cajero
: TPV : Venta
1. finalizarVenta( )
1.1. completar( )
El sistema presenta el total de la venta ms impuestos
: Venta : LineaVenta : Producto
public getTotal() {
int total = 0;
for each lv:LineaVenta
total = total + lv.getSubtotal;
return total;}
{st = lv.cantidad + lv.producto.precio }
1. getTotal( )
1.1. * st:= getSubtotal( )
1.1.1. pr:= getPrecio( )
Operacin: crearPago(cantidad:Dinero)
Caso de Uso: Realizar venta
Precondicin: se est procesando una venta
Postcondicin:
una instancia de Pago p fue creada
p.cantidadEntregada = cantidad
p se asoci con la venta actual
se asoci la venta actual con Tienda (para registrarla)
: Cajero
: TPV v : Venta
: Pago
: Tienda
: Venta
1. realizarPago(cant ) 1.1. crearPago(cant )
1.2. aadirVenta(v )
1.1.1. crear( cant)
1.2.1. add(v)
el sistema imprime el recibo con la cantidad a devolver
:Cliente v : Venta p : Pago
1.2. getTotal( )
dev = p.cantidad - v.getTotal
1. getDevolucion( ) 1.1. getCantidad( )
Operacin: Inicio
Postcondicin:
Una instancia de Tienda, TPV y CatalogoProductos es creada.
Instancias de Producto son creadas y asociadas a
CatalogoProductos
Tienda se asocia a CatalogoProductos
Tienda se asocia a TPV
TPV se asocia a CatalogoProductos
Raiz
: Tienda : CatalogoProducto
p :
Producto
:
Producto
: TPV
1.1.2. cargarProd( )
1. crear( ) 1.1. crear( )
1.2. crear( )
1.1.2.1. crear( )
1.1.1. crear( )
1.1.2.2. add(p)
Producto
precio
descripcion
id
getPrecio()
CatalogoProducto
cargarProd()
getProducto()
1..n 1 1..n 1
LineaVenta
1
1..n
1
1..n
describe
Pago
cantidad
getCantidad()
TPV
crearVenta()
finalizarVenta()
introducirItem()
realizarPago()
Venta
completar()
crearLV()
crearPago()
getDevolucion()
getTotal()
1..n
1
1..n
1
1
1
1
1
pagada
1 1 1 1
Captura
Tienda
aadirVenta()
1
1
1
1
posee
1
1
1
1
Usa
0..n
1
0..n
1
registra
Modelo de
Clases
public class Producto {
private itemID id;
private Dinero precio;
private String descripcion;
public Producto(ItemID id, Dinero precio, String desc) {
this.id = id;
this.precio = precio;
this.descripcion = desc;}
public ItemId getId() { return id; }
public Dinero getPrecio() { return precio; }
public String getDescripcion() { return descripcion; }
}
public class CatalogoProducto {
private Map productos = new HashMap ();
public CatalogoProductos () {
ItemId id1 = new ItemID(100);
ItemId id2 = new ItemID(200);
Dinero precio1 = new Dinero (3);
Dinero precio2 = new Dinero (5);
Producto p;
p:= new Producto (id1, precio1, producto 1);
productos.put(id1, p);) }
p = new Producto (id2, precio2, producto 2);
productos.put(id2, p);)
}
public Producto getProducto (ItemId id) { return (Producto) productos.get(id); }
}
public class TPV {
private CatalogoProducto catalogo;
private Venta venta;
public TPV(CatalogoProducto cp) { catalogo = cp; }
public void crearNuevaVenta () { venta = new Venta(); }
public void finalizarVenta () { venta.completar(); }
public void introducirItem (ItemId id, int cant) {
Producto p = catalogo.getProducto (id);
Venta.crearLineaVenta(p, cant); }
public void realizarPago() { venta.crearPago(cant) }
}
public class Pago {
private Dinero cantEntregada;
public Pago (Dinero cantidad) { cantEntregada = cantidad; }
public Dinero getCantEntregada () { return cantEntregada; }
}
public class Venta {
private List lineaVentas = new ArrayList();
private Date fecha = new Date();
private boolean esCompleta;
private Pago pago;
public Dinero getDevolucion() { return pago.getCantEntregada(). minus(getTotal() ); }
public void completar() { esCompleta = true; }
public void crearLineaVenta(Producto p, int cant) {
lineaVentas.add(new LineaVenta(p,cant)); }
public Dinero getTotal() {
Dinero total = new Dinero();
Iterator i = lineaVentas.iterator();
while (i.hasNext()) {
LineaVenta lv = (LineaVenta) i.next();
total.add(lv.getSubtotal()); }
return total;
}
public void crearPago (Dinero cantEntregada) { pago = new Pago(cantEntregada); }
}
public class LineaVenta {
private int cantidad;
private Producto producto;
public LineaVenta(Producto p, int cant) {
this.producto = p;
this.cantidad = cant; }
public Dinero getSubtotal () { return producto.getPrecio().times(cantidad); }
}
public class Tienda {
private CatalogoProducto catalogo;
private TPV tpv;
public TPV getTPV { return TPV; }
}
Teleoperador
Realizar puja ordinaria
Participante
Anular anuncio de subasta
Anular edicin de subasta
Crear edicin de subasta
Incrementar of erta
Devolv er artculo
Administrador
Login
Conf irmar compra
Participante
Cancelar puja ordinaria
Rechazar adjudicacin
Cerrar edicin de subasta
Realizar pago de subasta ordinaria
Notif icar adjudicatario
Env iar artculo
Sistema
Pujador
Ejemplo 3. La Megasubasta
Un pujador slo puede
hacer hasta 3 pujas por
anuncio de subasta.
Representa la
especif icacin de un
tipo de artculo.
Articulo
idEspec
caracteristicas
pv pRecomend
PagoAdjudicacion
importe
f echaPago
medioPago
datosTarjeta
EdicionSubasta
idEdicion
f echaInicio
f echaCierre
ArticuloConcreto
codArticulo 1 n 1 n
PagoCuota
importe
f echaPago
Adjudicacion
1
1
1
1
1
0..1
1
0..1
AnuncioSubasta
numAnuncio
pv pRecomend
pujaMinima
cuota
gastosEnv io
plazo
f ormaPago
anticipo
1..n 1 1..n 1
0..n
1
0..n
1
1..n 0..n 1..n 0..n
Tarjeta de crdito
Niv el de crdito
PujaOrdinaria
numSerie
v alorPuja
datosTarjeta
f echa
1 1 1 1
0..1 1 0..1 1
1
0..n
1
0..n
Participante
nombre
apellidos
numID
domicilio
direccionEnv io
telef ono
reputacion
n 1 n 1
es titular
0..n
1
0..n
1
realiza
177
Caso de Uso: Crear edicin
Use Case UC1: Crear edicin de subasta
Personal Involucrado:
Administrador: Desea que la lectura de datos sea correcta.
Proveedor: Desea que el anuncio refleje fielmente la informacin
proporcionada por l.
Participante: Desea que la descripcin del artculo se ajuste a la
realidad, as como la fotografa. Que los datos
mostrados en el anuncio sean correctos.
Actor: Administrador
Precondiciones: El Administrador est identificado y autenticado en
el sistema.
Postcondiciones: Se cre una nueva edicin de subasta con un
conjunto de anuncios de subasta.
178
Caso de Uso: Crear edicin
Escenario Principal (o Flujo Bsico):
1. El Administrador quiere crear una edicin de subasta.
2. El Administrador introduce la fecha de inicio y cierre de la edicin.
3. El Sistema registra la nueva edicin, le asigna un nmero de edicin y solicita
la introduccin de nuevos anuncios de subasta en la misma.
Para cada subasta que el Administrador desea crear se realizan los pasos 4-11
4. El Administrador crea una nueva subasta ordinaria.
5. El Administrador elige el artculo a subastar y el nmero de artculos.
6. El Administrador introduce (en cualquier orden) el valor de la puja mnima, la
cuota de participacin, los gastos de envo y el plazo de entrega.
7. El Sistema valida los datos.
8. El Sistema presenta al Administrador los datos introducidos con el IVA
calculado al valor de puja mnima, a la cuota de participacin y a los gastos de
envo.
9. El Administrador guarda los cambios.
10. El Sistema registra la nueva subasta y asigna un nmero a la subasta.
11. El Sistema establece el estado de los artculos subastados a En subasta.
: Administrador
: Sistema
crearEdicion(fechaInicio, fechaFin)
* introducirSubasta(idEspec, cantidad, puja, cuota, gastos, plazo)
Con idEspec se
indica la
especificacin de un
artculo.
Operacin: crearEdicion (fechaInicio: Fecha, fechaFin: Fecha)
Caso de Uso: Crear edicin de subasta
Precondiciones: El Administrador est identificado y autenticado.
Postcondiciones:
- Se cre una instancia edicionActual de EdicionSubasta.
- Se inicializ edicionActual.idEdicion
- edicionActual.fechaInicio = fechaInicio
- edicionActual.fechaCierre = fechaFin
- Se cre una coleccin de tipo AnuncioSubasta y se asoci con edicionActual.
- Se insert edicionActual con el CatalogoEdiciones
: Administrador
:
ControladorAnuncios
edicionActual :
EdicionSubasta
: CatalogoEdiciones : AnuncioSubasta
: Edi cionSubasta
Se crea la
coleccin de
anuncios de
subasta.
3. generarIdEdi cion()
1. crearEdicion(fechaInici o, fechaFin) 2. edicionActual := crear(fechaInici o, fechaFi n)
5. addEdicion(edicionActual )
4. anuncios := crear()
6. add(edicionActual )
Operacin: introducirSubasta(idEspec: idEspec, cantidad: integer, puja: tipoDinero, cuota:
tipoDinero, gastos: tipoDinero, plazo: intervalo)
Caso de Uso: Crear edicin de subasta
Precondiciones:
Se est creando una edicin de subasta (ControladorAnuncios tiene asociada una
edicionActual)
Postcondiciones:
- Se cre una instancia as de AnuncioSubasta.
- Se inicializ as.numSubasta
- Se asoci as con edicionActual.
- Se asoci as con cantidad instancias de ArticuloConcreto basndose en idEspec.
- Los atributos as.nombreArticulo, as.descArticulo y as.pvpRecomend se inicializaron de
acuerdo con los atributos del Articulo a cuyo a.idEspec es idEspec.
- as.pujaMinima = puja
- as.cuota = cuota
- as.gastosEnvio = gastos
- as.plazo = plazo
- as.formaPago y as.anticipo tomaron valores por defecto.
- Se cre una coleccin pujas para objetos de tipo PujaOrdinaria y se asoci con as.
- Se cre una coleccin adjudicaciones para objetos de tipo Adjudicacion y se asoci
con as.
- Se asoci as con la coleccin de AnuncioSubasta de edicionActual (se insert en la
coleccin).
- Se insert as en el CatalogoSubastas
: Administrador
:
ControladorAnuncios
edicionActual :
EdicionSubasta
as : AnuncioSubasta
:
PujaOrdinaria
: CatalogoArticulos : Articulo
a : Articulo : ArticuloConcreto
as tambin obtiene
de a los atributos
nombre, descripcin
y pv p (se obv ia).
: AnuncioSubasta
: CatalogoSubastas : Subasta
if (num >= cantidad) {
while (cantidad > 0) {
ArticuloConcreto ac = a.getArticuloConcreto();
ac.setEstado("En subasta");
articulos.add(ac);
cantidad--;
}
}
: Articulo
: Adjudicacion
Itera sobre la coleccin
buscando un artculo
disponible.
1: introducirSubasta(idEspec, cantidad, puja, cuota, gastos, plazo) 4: as := crearSubasta(a, cantidad, puja, cuota, gastos, plazo)
2: a := getArticulo(idEspec)
14: addSubasta(as)
5: as := crear(edicionActual, a, cantidad, puja, cuota, gastos, plazo)
13: add(as)
6: pujas := crear()
9: num := getNumArticulos()
10: [num >= cantidad] *ac := getArticuloConcreto()
8: articulos := crear()
12: add(ac)
7: adjudicaciones := crear()
3: a: = get(idEspec)
11: [1..cantidad]* get()
15: add(as)
Use Case UC2: Realizar puja ordinaria
Personal Involucrado: La Mega Subasta, Pujador
Actor: Pujador
Precondiciones: Pujador es autenticado
Postcondiciones: Una puja ordinaria es creada.
Escenario Principal (o Flujo Bsico):
1. El Pujador decide pujar en un anuncio de subasta.
2. El Sistema comprueba que el Pujador no ha pujado tres veces en el
anuncio.
3. El Pujador introduce el valor de la puja y los datos de su tarjeta de
crdito (la primera vez).
4. El Sistema pide confirmacin para crear la puja.
5. El Pujador acepta.
6. El Sistema se comunica con la Entidad de Crdito y carga el valor
de la cuota de participacin del anuncio de subasta en la tarjeta
especificada por el Pujador.
7. El Sistema registra el pago de la cuota realizado (importe y fecha de
pago).
8. El Sistema registra la nueva puja (le asigna un nmero de serie y
almacena el valor de la puja, los datos de la tarjeta y la fecha de
realizacin).
9. El Sistema notifica al usuario.
: Pujador
: Sistema : GestorPagos
pujarAnuncio(partID, numAnuncio, valorPuja, datosTarjeta)
pagar(pago)
Se considera el escenario en
el que el Pujador es un
Participante que ha entrado
en el sistema y est pujando
por Internet.
pagoCuota()
Operacin: pujarAnuncio (partID: NumID, numAnuncio: NumSubasta, valorPuja: real,
datosTarjeta: DatosTarjeta)
Casos de Uso: Realizar puja ordinaria
Controlador: ControladorPujas
Precondiciones:
Postcondiciones:
- Se cre una instancia po de PujaOrdinaria.
- po.numSerie se inicializ.
- po.valorPuja = valorPuja;
- po.datosTarjeta = datosTarjeta;
- po.fecha = fechaActual
- po se asoci con el AnuncioSubasta as cuyo numAnuncio es numAnuncio.
- po se asoci con el Participante cuyo numID es partID.
- po se inserto en la coleccin de pujas de AnuncioSubasta
: Pujador
:
ControladorPujas
po :
PujaOrdinaria
: Subasta
: CatalogoParticipantes
: Participante
as :
AnuncioSubasta
: CatalogoSubastas
pujas :
PujaOrdinaria
7: numPujas := comprobarPujas(p) 9: numSerie := generarNumSerie()
La puja se
introduce en
CatalogoPujas.
private int comprobarPujas(Participante p) {
int numPujas = 0;
Iterator it = pujas.iterator();
while (it.hasNext())
{
PujaOrdinaria puja = (PujaOrdinari a)it.next();
if (puja.getParticipante().equals(p))
{
numPujas++;
}
}
return numPujas;
}
Insercin ordenada:
consideramos que la
coleccin est ordenada
de mayor a menor valor de
puja.
1: pujarAnuncio(partID, numAnuncio, valorPuja, datosTarjeta)
2: as := getSubasta(numAnuncio)
6: po := crearPuja(p, valorPuja, datosTarjeta)
4: p := getParticipante(partID)
5: p := get(partID)
8: [numPujas < 3] po := crear(as, p, valorPuja, datosTarjeta)
10: add(po)
3: as := get(numAnuncio)
Operacin: pagoCuota()
Casos de Uso: Realizar puja ordinaria
Controlador: ControladorPujas
Precondiciones: Se est creando una puja ordinaria po.
Postcondiciones:
- Se cre una instancia pc de PagoCuota.
- tarjetaOrigen = datosTarjeta de po e importe = el valor de la cuota (en el
AnuncioSubasta as asociado con la PujaOrdinaria po).
- Se asoci la instancia po de PujaOrdinaria con la instancia pc de PagoCuota.
- Se realiz el pago especificado en pc a travs del GestorPagos.
- Se asoci el PagoCuota pc con el CatalogoPagos del ControladorPujas
(se insert en el catlogo).
: Pujador
:
ControladorPujas
po :
PujaOrdinaria
PujaOrdinaria
en curso.
: GestorPagos
pc :
PagoCuota
:
CatalogoPagos
: Pago
: AnuncioSubasta
1: pagoCuota()
5: pagar(pc)
6: addPago(pc)
2: pc := anotarPagoCuota()
4: pc := crear(cuota, datosTarjeta)
3: cuota := getCuota()
7: add(pc)
Use Case UC4: Cerrar edicin de subasta
Personal Involucrado: La Mega Subasta, los Pujadores.
Actor: Sistema
Precondiciones: La fecha de cierre de una edicin de subasta ha vencido.
Postcondiciones: Se cierran los anuncios de subasta de la edicin. Se emite la lista de
resultados.
Escenario Principal (o Flujo Bsico):
1. El Sistema comprueba que la fecha de cierre de una edicin de
subasta ha vencido y procede a cerrarla.
2. El Sistema obtiene los anuncios de subasta de la edicin de
subasta.
Para cada anuncio de subasta el Sistema realiza los pasos 3-6:
3. El Sistema establece el estado de la subasta a Cerrado.
4. El Sistema obtiene una lista de las Pujas ganadoras (las de mayor
valor y tantas como artculos subastados).
5. El Sistema registra las adjudicaciones asociando para cada una la
Puja ganadora, el anuncio de subasta y uno de los artculos
subastados.
6. El Sistema establece el estado de los artculos subastados a
Adjudicado.
7. El Sistema emite la lista de resultados de la edicin de subasta.
Operacin: cerrarEdicionSubasta(es: EdicionSubasta)
Caso de Uso: Cerrar edicin de subasta
Precondiciones: La fecha de cierre de la edicin de subasta ha vencido.
Postcondiciones:
Para cada AnuncioSubasta as de la EdicionSubasta es:
Se crearon n instancias adj de Adjudicacion (n = nmero de pujas
adjudicatarias de as).
Para cada Adjudicacion adj:
adj se asoci con as, la PujaOrdinaria adjudicataria y un ArticuloConcreto.
adj se asoci a la coleccin de objetos de tipo Adjudicacion de as.
: Sistema
as :
AnuncioSubasta
pujas :
PujaOrdinaria
adj :
Adjudicacion
: ArticuloConcreto
Se crean tantas adjudicaciones
como pujas ganadoras haya.
Cada adjudicacin se asocia
con un ArticuloConcreto, una
puja adjudicataria y con la
subasta.
:
ControladorAnuncios
Se recorre la coleccin de
pujas obteniendo las pujas
ganadoras (consideramos
que la coleccin est
ordenada de mayor a menor
valor de puja).
adjudicaciones :
Adjudicacion
: EdicionSubasta
int numAjudicaciones =
Minimo(pujas.length(),
articulos.length());
: AnuncioSubasta
5: numAdjs = calcularAdjudicaciones()
1: cerrarEdicionSubasta(es)
6: [1..numAdjs]* pg := get()
8: [1..numAdjs]* adj := crear(as, pg, a)
7: [1..numAdjs]* a:= get()
9: [1..numAdjs]* add(adj)
2: cerrar()
4: * cerrar()
3: * as := get()
Profesor
Contratado
empresa
cuentaBancaria
Alumno
Uni versitari o
Alumno
Titulado
Curso
P.E.
Curso
Master
Curso Especialista
Universitario
Laboratorio
Aula
Proyecto
Presupuestari o
Catlogo Curso
Pago
Curso
0..n
0..n
0..n
0..n
asi gnado
0..n
0..n
0..n
0..n
reservada
1 1 1 1
se_abre
0..n
1
0..n
1
Preinscripcin
matriculable
1 0..n 1 0..n
posee
Matricula
1
1
1
1
pagado por
1
0..n
1
0..n
tiene
Alumno
expediente
dni
nombre
0..n
1
0..n
1
realiza
0..n 1 0..n 1 realiza
Profesor
nombre
dni
Grupo
1..n
1
1..n
1
pertenece
Calificacin
0..n
1
0..n
1
Curso
0..n
1..n
0..n
1..n
participa
1
0..n
1
0..n
tiene
1
1..n
1
1..n
Especificacin Curso
nombre
horario
duracin
num creditos
corte matrcula
num max alum
num min alum
programa
cri terio seleccin
presupuesto
reqPreinscripcion
0..1
1
0..1
1
posee
Profesor
Universitari o
0..n
1
0..n
1
registra
Ejercicio 4. Gestin Cursos de
Promocin Educativa
Rebajar Mnimo
Registrar curso
Cerrar curso
Responsable
Aprobar curso
Servicio CPE
Servicio Contabilidad
Crear proyecto
Matriculacin
Realizar preinscripcin
Alumno
Avisar admitidos
Cancelar curso
Fin matriculacion
Sist ema
Caso de uso: Registrar Curso
Actor Principal: Responsable
Precondiciones:
El responsable se identifica y se autentica
Se est en el periodo de registro de cursos de PE.
Postcondiciones: Se registra el curso
Flujo Bsico:
1. El responsable comienza un nuevo registro.
2. El responsable introduce los siguientes datos del curso: nombre, duracin, fecha realizacin, fecha
preinscripcin, horario, n crditos equivalencia, si est abierto o cerrado a titulados, n max alumno,
n min. alumnos, programa y criterio de seleccin.
3. El responsable introduce el presupuesto global del curso, coste de la matricula, ayudas externas, pago
del profesorado, costes de publicidad, costes en material fungible.
4. El responsable introduce las aulas y laboratorios que requiere para la ejecucin del curso, as como
sus horarios respectivos.
5. El sistema accede al sistema de organizacin docente y comprueba que los requisitos de aulas y
laboratorios son factibles.
6. El responsable introduce para cada profesor su nombre, dni, la empresa a la que pertenece ( en caso
de pertenecer a alguna ), si pertenece o no a la universidad, su carga respecto al curso en crditos y su
cuenta bancaria si procede.
7. El sistema recoge los datos del profesorado, accede al sistema de organizacin docente y comprueba
que las cargas asignadas a los profesores universitarios son correctas.
8. El sistema registra el curso.
: Responsable
: SistemaGCPE :SistemaOrganizacionDocente
1: crearCurso(especificacion)
2: *addReqAulaLab(reqAulaLab)
3: *addProfesorado(nombre,dni,tipo,empresa,cuentaBancaria, cargaDocente)
5: finalizarRegistro()
Si es una nueva edicin
del curso y no ha habido
cambio alguno enla
especificacin,
presupuesto, ni en los
requerimientos de aulas,
entonces se aprueba el
curso 'aprobarCurso()'.
4: datosProfesor:= *getDatosProfesor(dni)
: Responsabl e
: Control adorRegi s trarCurso c : Curs o
: Catal ogoEspeci ficac iones : Especi f icacin
Curs o
espec :
Especi ficacionCurs o
El estado del curso
es aprobado si se
genera el mensaj e
7 y regi strado si no
se genera.
Si l a edi cin del
curso no es l a
primera pasar a
estado aprobado.
Si espec se cre
en 4, se aade al
catl ogo.
: Partici pacionCur so
: Matricula
: Preinscri pci on
: CriterioPreinscr i pci on
:FactoriaCriterios
Se crearn l os
cirterios el egi dos en
datosEspeci ficacin.
1: crearCurso(datosEspeci ficacion,resp) 7: create(espec)
2: espec := getEspeci ficacion(datosEspeci ficacion)
11: addEspeci f i ca ci on(espe c)
4: [espec = nul l ] create(datosEspeci fi caci on,resp)
10: create()
8: create()
9: create()
3: espec := get(datosEspeci fi caci on)
6: addCriterio(criterio)
5: criterio:= createCriterio()
: Responsable
: ControladorRegistrarCurso c : Curso p : Profesor
Uni versi tari o
Esta col aboracin ser a para el caso
de que el profesor f uera de tipo
uni versitario. Si fuese de tipo
contratado ser a el mi smo proceso
obviando los pasos de acceso al
sistema de organizaci on docente.
: CatalogoProfesor
part :
ParticipacionCurso
: ParticipacionCurso
: ParticipacionCurso
Si la carga en cursos de PE del
profesor no excede la cantidad
estipulada se realizarn los
pasos del 4 al 9.
Est e mensaj e y los si gui entes
se generarn si el profesor
cumple lascondi ciones
est ablecidas en cuant o a su
carga docente.
Trata el caso de aadir un
profesor universitario, sino lo
fuera necesitara el resto de
datos empresa y
cuentaBancaria.
:SistemaOrganizacionDocente
Si el profesor no est
en el catlogo se
piden sus datos, se
crea y se aade al
catlogo.
: Profesor
1. addProfesorado(nombre,dni ,ti po,empresa,cuentaBancaria,cargaDocente) 5. addParticipacion(p,cargaDocente)
2. p := getProfesor(dni)
9. add(part)
6. creat e(cargaDocente,p)
7. addParticipacion(part)
8. add(part)
3. datosProfesor:= getDatosProfesor(dni)
4. create(datosProfesor)
Caso de uso: Realizar Preinscripcin
Actor Principal: Alumno
Precondiciones:
El alumno se identifica y autentica.
El curso ha sido aprobado por el Consejo de Gobierno.
Se est en el periodo de preinscripcin del curso.
Postcondiciones:
El alumno se preinscribe en el curso.
Se envi un e-mail al alumno indicando si fue aceptada o rechaza su preinscripcin.
Flujo Bsico:
1. El alumno comienza una nueva preinscripcin.
2. El alumno elige un curso sobre el que se desea preinscribirse.
3. El sistema comprueba que el alumno no realiz con anterioridad el curso y que no
estaba preinscrito con anterioridad.
4. El sistema accede al sistema de gestin acadmica y comprueba que los datos
acadmicos del alumno cumplen los requisitos para preinscribirse en el curso.
5. El sistema crea y enva un e-mail al alumno confirmando la preinscripcin.
6. El sistema aade el alumno a la lista de preinscritos.
: ControladorPreisncripcionCurso
: Alumno
: Catlogo
Curso
: Curso
c : Curso
: (CatalogoAlumno)
preins :
Preinscripcin
: Preinscripcin
a : Alumno
Si preinscrito = true,
los mensajes del 10 al
14 no son generados.
: Preinscripcin
La preinscripcin
se crea en estado
no admitido.
: EspecificacionCurso
:SistemaGestinAcadmica
: Alumno
Si el alumno no est
en el catlogo se
piden sus datos, se
crea y se aade al
catl ogo.
:Criterio
7: addPreisncripcion(a)
1: realizarPreinscripcion(idCurso,dniAlumno)
2: c := getCurso(idCurso)
3: c := get(idCurso)
12: [expValido= true] create(a,c)
8: preinscrito:= isAlumnoPreinscrito(a.dni)
10: [prei nscrito= false] expValido:= isExpedVal ido(a) 4: a := getAlumno(dniAlumno)
5: datosAlumno:= getDatosAlumno(dniAlumno)
6: create(datosAlumno)
13: addPreinscripcion(preins)
9: *get() 15: add(preins)
14: add(preins)
11: *aplicar()
200
Contenidos
Introduccin
Dimensiones de un mtodo
Mtodos pesados vs. Desarrollo gil
Modelado del Negocio
Modelado de Requisitos
Modelado del Anlisis
Patrones GRASP
Modelado del Diseo
Patrones de Diseo
201
Modelo del diseo
Objetivo:
Refinar el diseo del sistema del modelo del
anlisis considerando los requisitos no
funcionales y restricciones del entorno de
implementacin.
De manera iterativa se refina el modelo de
clases y las colaboraciones del anlisis hasta
obtener un diseo del sistema adecuado para
pasar a la implementacin.
202
Cuestiones del diseo
Identificar clases (atributos y mtodos) e
interfaces en el modelo de clases del diseo
Establecer asociaciones entre clases.
Establecer navegabilidad para todas las
asociaciones.
Determinar visibilidad entre clases.
Incluir relaciones de dependencia entre clases.
203
Cuestiones del diseo
Definicin de la arquitectura del sistema
Subsistemas: Paquetes
Patrones de diseo
Estructuras de datos
Diseo del interfaz de usuario
Manejo de la persistencia
Distribucin
204
Validacin del sistema
Utilizar los casos de uso.
Para cada caso de uso comprobar que el
sistema muestra el comportamiento esperado,
considerando el escenario principal y los
excepcionales o alternativos.
Considerar requisitos no funcionales.
205
Programacin Prueba primero
Prctica promovida por XP
Ciclo escribo cdigo de prueba, escribo cdigo de
produccin, pruebo
Ventajas
Se escriben las pruebas!
Satisfaccin del programador: He superado la prueba!
Ayudan a comprender mejor las interfaces y
comportamiento
Verificacin de la correccin
No hay miedo a los cambios: existen cientos de pruebas
de unidad!
206
Programacin Prueba primero
Antes de escribir el mtodo getTotal() en la clase
Venta, escribimos un mtodo de prueba de unidad en
una clase TestVenta que
Crea una venta
Le aade varias lneas de venta
Obtiene el total y comprueba si tiene el valor esperado
Luego escribimos el mtodo getTotal() y realizamos la
prueba.
Junit es un framework open source para pruebas de
unidad para cdigo Java (www.junit.org).
207
Programacin Prueba primero
class TestVenta extends TestCase {
public void pruebaTotal() {
Dinero total = new Dinero (7.5);
Dinero precio = new Dinero (2.5);
ItemID id = new ItemId (1);
Producto p = new Producto (id, precio, producto 1);
Venta venta = new Venta ();
venta. crearLineaVenta(p,1);
venta. crearLineaVenta(p,2);
assertEquals(venta.getTotal(), total);
}
}
208
Arquitectura de tres capas
Presentacin
Lgica de la Aplicacin
Almacenamiento
Principio de Separacin Modelo-Vista
Los objetos del modelo o dominio no conocen
directamente a los objetos de la vista o presentacin
209
Separacin Modelo-Vista
Los objetos del modelo (dominio) no deben
conocer directamente a los objetos de la vista
(presentacin).
Las clases del dominio encapsulan la
informacin y el comportamiento relacionado
con la lgica de la aplicacin.
Las clases de la interfaz (ventanas) son
responsables de la entrada y salida,
capturando los eventos, pero no encapsulan
funcionalidad de la aplicacin.
210
Separacin Modelo-Vista
Justificacin
Clases cohesivas
Permitir separar el desarrollo de las clases de la
vista y del dominio
Minimizar el impacto de los cambios en la interfaz
sobre las clases del modelo.
Facilitar conectar otras vistas a una capa del
dominio existente.
Permitir varias vistas simultneas sobre un mismo
modelo.
Permitir que la capa del modelo se ejecute de
manera independiente a la capa de presentacin.
211
Iteracin 2: Ejemplo TPV
Se considera nueva funcionalidad del caso de uso
Registrar Venta: desarrollo incremental
Uso de servicios externos (impuestos, autorizaciones,..)
Reglas para establecer precios
Reglas de negocio conectables
Diseo para actualizar ventana cuando cambia el total de
la venta
No se refina el caso de uso.
Talleres de requisitos para escribir en detalle otros
casos de uso
: Calculo
Impuestos
: Cajero
: Sistema
: Servicio
Autorizacion
: Servicio
Contabilidad
crearNuevaVenta
* introducirItem(id,cant)
finalizarVenta
li : = get Impuestos(venta)
real izarPago (numTarj, fecha)
ok:=solicitarAutorizacion
putAdmisible(admisible)
addVenta(venta)

S-ar putea să vă placă și