1 ingeniería del software ejercicios de diseño caso de uso generar facturas (junio 2003) caso de...

32
1 Ingeniería del Software Ejercicios de Diseño Caso de Uso Generar Facturas (Junio 2003) Caso de Uso Grado de Ocupación (Febrero 2004) Caso de Uso Clientes Pelicula (Junio 2004) Caso de Uso Programar Pases (Septiembre 2004) Caso de Uso Eliminar Pases (Febrero 2005) Se pide:

Upload: sandra-crespo-ferreyra

Post on 03-Feb-2016

229 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

1

Ingeniería del Software

Ejercicios de Diseño

Caso de Uso Generar Facturas (Junio 2003) Caso de Uso Grado de Ocupación (Febrero

2004) Caso de Uso Clientes Pelicula (Junio 2004) Caso de Uso Programar Pases (Septiembre

2004) Caso de Uso Eliminar Pases (Febrero 2005)

Se pide:

Diagrama de Secuencia

Page 2: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

2

Ingeniería del Software

Ejercicios de Diseño

Caso de Uso Generar Facturas (Junio 2003)

Se pide:

Diagrama de Secuencia

Page 3: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

3

Ingeniería del Software

Llamada

teléfonoDestino: Stringdia: Integermes: Integeraño: Integerinicio: Integerduración: Integer/importe: Real

Cliente

teléfono: Stringnombre: Stringnif: Stringdirección: String

Factura

mes: Integeraño: Integercobrada: Boolean=False/total: Integer=0

Tarifa

tipo: Stringprecio: Real

*

1 *

1

* 0..1

/pertenece

1 *

Ejercicio 1: Caso de uso: Generar Facturas

Page 4: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

4

Ingeniería del Software

:Administrador :Sistema

generarFacturas(año,mes)

Ejercicio 1: Caso de uso: Generar Facturas

Page 5: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

5

Ingeniería del Software

Contrato de la operación generarFacturas: Operación: generarFacturas(año: Integer; mes: Integer)Responsabilidades: Generar las facturas mensuales de los

clientesPrecondiciones: argumentos no nulos y válidosPostcondicones: • 1. Se ha dado de alta una instancia de factura para

cada cliente que tenga como mínimo una llamada en el mes y año indicado

• 2. Se ha asignado el importe de cada llamada• 3. Se han asignado los atributos mes, año, cobrado y

total de la instancia creada.• 4. Se asocia la factura al cliente• 5. Se asocian las llamadas a la factura creada 

Page 6: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

6

Ingeniería del Software

generarFacturas(año,mes)

:GestorFacturas

gF(año,mes)

importe

[n>0]

precio?()*

*

:Factura

[n>0] importe()

:Tarifa

importeLlamada()

:Cliente :Llamada

numLlamadas(año,mes)

n

* b := añoMes?(año,mes)

[n>0] asociarLlamada()

* asociarLlamada()

Page 7: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

7

Ingeniería del Software

generarFacturas(año,mes)

:GestorFacturas

gF(año,mes)

importe

[n>0]

precio?()*

*

:Factura

[n>0] importe()

:Tarifa

importeLlamada()

[n>0] * asociarLlamada()

:Cliente :Llamada

n := numLlamadas(año,mes)

Page 8: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

8

Ingeniería del Software

Escogemos el patrón controlador para gestionar el evento externo generarFacturas. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos un controlador de caso de uso: GestorFacturas. Además, esta clase artificial agrupa a todos los clientes de la compañía. Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento.

 Por el patrón experto, el método gF es el encargado de verificar que el

cliente haya realizado llamadas en ese mes y año (numLlamadas()>0) para poder crear una factura. El método generarFacturas de la clase GestorFacturas aplica el método gF de Cliente a cada cliente.

 Utilizando el patrón experto, se asigna la responsabilidad de calcular el

importe de las distintas llamadas de un cliente a la clase Llamada. Se calcula el /importe de cada llamada - importeLlamada() - y se acumula para el atributo /total de Factura. Para ello debe consultarse el precio de la tarifa de cada llamada.

 Utilizando el patrón creador, cada Cliente crea su Factura, la asocia a su

atributo /pertenece y le asigna los valores pertinentes – mes, año, /total –.

 Por último, el Cliente, siendo el experto en llamadas, es el que debe

asociar la Factura creada a cada Llamada.

Page 9: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

9

Ingeniería del Software

Ejercicios de Diseño

Caso de Uso Grado de Ocupación (Febrero 2004)

Se pide:

Diagrama de Secuencia

Page 10: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

10

Ingeniería del Software

Grado de Ocupación: Modelo de Dominio

-ciclo-título-categoría-director-actores-descripción-duración-imagen

Película

-nombre-butacas

Sala

-fecha-horaInicio-horaFin-precio-/vendidas

Pase

*

-End9

*

-End10

-fecha-hora-/importe

Cesta

-num

Entradas*-End11

*-End12

Page 11: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

11

Ingeniería del Software

Grado de Ocupación: Diagrama de Secuencia de Sistema

:Administrador :Sistema

gradoOcupacion(ciclo, fecha) : go

Page 12: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

12

Ingeniería del Software

Contrato de la operación gradoOcupación:

Operación: gradoOcupacion(ciclo, fecha) : goResponsabilidades: Obtener el grado de ocupación de un

determinado ciclo en una fecha concretaPrecondiciones: argumentos no nulos y válidosPostcondicones:Salida:

go = ratio (en tanto por ciento) entre el total de entradas de un ciclo vendidas hasta una fecha y el total de entradas disponibles de un ciclo determinado.

Page 13: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

13

Ingeniería del Software

Grado de Ocupación: Modelo de Dominio

Película

ciclo

título

director

actores

descripción

duracion

imagen

Sala

nombre

butacas

Pase

fecha

horaIncio

horaFin

precio

/vendidas

Entradas

num

Cesta

fecha

hora

importe

* *

*

*

Page 14: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

14

Ingeniería del Software

Grado de Ocupación: Modelo de Dominio: Normalización

Película

ciclo

título

director

actores

descripción

duracion

imagen

Sala

nombre

butacas

Pase

fecha

horaIncio

horaFin

precio

/vendidas

Entradas

num

Cesta

fecha

hora

importe

* *

*

*

Page 15: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

15

Ingeniería del Software

Grado de Ocupación: Diagrama de clases: accesibilidad

Película

ciclo

título

director

actores

descripción

duracion

imagen

Sala

nombre

butacas

Pase

fecha

horaIncio

horaFin

precio

/vendidas

Entradas

num

Cesta

fecha

hora

importe

* *

*

*Controlador

Page 16: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

16

:Pase:Pelicula

Ingeniería del Softwaregra

doO

cupaci

on(c

iclo

,fech

a)

:GestorOcupacion

Tbutacas(ciclo)

butacas()

:Pelicula :Pase :Sala

butacasPase()*

*

TVendidas(ciclo,fecha)

tv

*

vendidasPase(fecha)*

v

:Cesta

vendidas(fecha)*

v

comprobar(fecha)

go=tb/tv*100

tb

b

:Pase:Entradas

Page 17: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

17

Ingeniería del Software

Escogemos el patrón controlador para gestionar el evento externo gradoOcupación. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos un controlador de caso de uso: GestorOcupación. Además, esta clase artificial agrupa a todas las películas del festival. Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento.

 Por el patrón experto, el método TButacas es el encargado de obtener el

total de butacas disponibles para un ciclo determinado. Para ello, primero se seleccionan todas las películas del ciclo. Con ellas, también por el patrón experto, se seleccionan todos los pases y salas donde se proyecta la película. Acumulamos el resultado en la variable tb.

 Por el patrón experto, el método TVendidas es el encargado de obtener el

total de entradas vendidas hasta una fecha. Para ello, primero se seleccionan todas las películas del ciclo. Con ellas, también por el patrón experto, se seleccionan todos los pases. Ahora, también por el patrón experto, seleccionamos las entradas y cestas con fecha menor o igual a la proporcionada. Acumulamos el resultado en la variable tv.

Por último, se obtiene el valor de go = tb / tv * 100

Page 18: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

18

Ingeniería del Software

Examen Junio 2003-2004

4a Parte: Diseño: ClientesPelicula

Se pide:

Diagrama de secuencia

Page 19: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

19

Ingeniería del Software

Grado de Ocupación: Modelo de Dominio

-código-ciclo-título-categoría-director-actores-descripción-duración-imagen

Película

-código-nombre-butacas

Sala

-fecha-horaInicio-horaFin-precio-/vendidas

Pase

*

-End9

*

-End10

-fecha-hora-/importe

Cesta

-num

Entradas*-End11

*-End12

-nombre-dni-cc-e-mail

Cliente

-End13*

-End141

Page 20: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

20

Ingeniería del Software

Grado de Ocupación: Diagrama de Secuencia de Sistema

:Administrador :Sistema

clientesPelícula(código) : clientes

Page 21: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

21

Ingeniería del Software

Contrato de la operación clientesPelícula:

Operación: clientesPelícula(código) : clientesResponsabilidades: Obtener los clientes que hayan

comprado entradas de cualquier pase de una película

Precondiciones: argumento no nulo y válidoPostcondicones:Salida:

clientes = lista de los nombres e e-mails de los clientes que hayan comprado entradas de cualquier pase de una determinada película.

Page 22: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

22

:Entradas:Pase

Ingeniería del Software

clie

nte

sPelic

ula

(códig

o)

:GestorClientesPelicula

CP(código)

EntradasPase()

:Pelicula :Pase :Entradas

PasesPelicula()

:Cesta

CestaEntrada()

:Cliente

*

*

ClienteCesta()

nombre,e-mail

nombre,e-mailLista(nombre,

e-mail)

eliminarRepetidos()

Lista(nombre,e-mail)

Lista(nombre,e-mail)

Lista(nombre,e-mail)

Page 23: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

23

Ingeniería del Software

Escogemos el patrón controlador para gestionar el evento externo ClientesPelícula. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos un controlador de caso de uso: GestorClientesPelícula. Además, esta clase artificial agrupa a todas las películas del festival. Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento.

 Por el patrón experto, el método CP es el encargado de buscar la película.

Por el patrón experto, el método PasesPelícula es el encargado de buscar todos los pases de la película, y el método EntradasPase, todas las entradas vendidas de un determinado pase.

Por el patrón experto, el método CestaEntrada es el encargado de obtener la cesta que incluía la entrada venida, y el método ClienteCesta el cliente que realizó esa compra. De ese cliente se obtiene su nombre e e-mail.

Por último, el método EliminarRepetidos elimina los nombres e e-mails que pudieran estar repetidos de los clientes que compraron alguna entrada para una determinada película.

Page 24: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

24

Ingeniería del Software

Examen Febrero 2004-2005

Eliminar Pases

Se pide:

Diagrama de secuencia

Page 25: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

25

:Administrador

ObtenerCiclos() : listaCiclos

ObtenerPelículas(nombre) : listaPelículasCompleta

EliminarPases(listaPelículas, fecha)

:Sistema

Diagrama de Secuencia de Sistema

Ingeniería del Software

Page 26: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

26

Ingeniería del Software

Modelo de dominio

1 *Ciclo

nombre...

Película

título...

Pase

fechahora/venta

* * Sala

códigoSalaaforo

Page 27: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

27

:Pase

Ingeniería del Software

ObtenerCiclos()

:GestorEliminarPases

ObtenerNombre()

:Ciclo

Lista(nombre)

nombre

*

Page 28: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

28

Ingeniería del Software

Escogemos el patrón controlador para gestionar el evento externo ObtenerCiclos. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos un controlador de caso de uso: GestorEliminarPases. Además, esta clase artificial agrupa a todos los ciclos del festival. Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento.

 Por el patrón experto, el método ObtenerNombre es el encargado de

buscar el nombre del ciclo.

Page 29: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

29

:Pase

Ingeniería del Software

ObtenerPelículas(nombre)

:GestorEliminarPases

ObtenerTítulo()

:Película

Lista(título)

título

*

ObtenerTitulos()

:Ciclo

Lista(título)

Page 30: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

30

Ingeniería del Software

Escogemos el patrón controlador para gestionar el evento externo ObtenerPelículas. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos el mismo controlador de caso de uso que para la operación anterior: GestorEliminarPases. Además, esta clase artificial agrupa a todos los ciclos del festival y los tiene accesibles para recorrido y de forma directa (hash). Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento.

 Por el patrón experto, el método ObtenerTítulos es el encargado de

buscar las películas asociadas al ciclo nombre.

Por el patrón experto, el método ObtenerTítulo es el encargado de buscar el título de la película.

Page 31: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

31

:Pase

Ingeniería del Software

Elim

inarP

ase

s(Li

staPelíc

ula

s, f

ech

a)

:GestorEliminarPases

EliminarPase(fecha)

:Pase

EliminarPases(titulo,fecha)

:Pase:Pelicula

ComprobarPase()

[ok] EliminarAsocSala()

ok

ok

[ok] EliminarAsocPase()

[ok]

*

*

Page 32: 1 Ingeniería del Software Ejercicios de Diseño  Caso de Uso Generar Facturas (Junio 2003)  Caso de Uso Grado de Ocupación (Febrero 2004)  Caso de Uso

32

Ingeniería del Software

Escogemos el patrón controlador para gestionar el evento externo EliminarPases. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos el mismo controlador de caso de uso que para la operación anterior: GestorEliminarPases. Además, esta clase artificial agrupa también todas las películas del festival con acceso directo (hash). Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento.

 Por el patrón experto, el método EliminarPases de Película es el

encargado de eliminar los pases de las películas cuyo título aparece en ListaPelículas y cumplan las condiciones impuestas. En el caso de cumplirlas, eliminaremos su asociación con el pase (realizado por EliminarAsocPase) y por último lo destruiremos.

Por el patrón experto, el método EliminarPase de Pase es el encargado de comprobar si Pa.venta=0 y Pa.fecha > fecha (realizado por ComprobarPase). En el caso de cumplirse la condición, eliminaremos su asociación con Sala (realizado por EliminarAsocSala).

Nota: podría ser que la Sala también tuviera una asociación con Pase. En ese caso, también deberíamos acceder a Sala para eliminarla.