Ingeniera del Software Ejemplo TPV Diagrama de Casos
































- Slides: 32
Ingeniería del Software Ejemplo TPV: Diagrama de Casos de Uso TPV Comprar productos Registrar Productos CLIENTE CAJERO Iniciar sesión 1
Ingeniería del Software Ejemplo TPV: caso de uso real (1) Caso de uso: Actores: Propósito: Tipo: Resumen: Comprar productos en efectivo v 1 Cliente (iniciador), Cajero Capturar una venta y su pago en efectivo Primario y real Un Cliente llega a la caja registradora con los artículos que desea comprar. El Cajero registra los artículos y recibe un pago en efectivo. Al terminar la operación, el Cliente se marcha con los productos comprados. Referencias cruzadas: R 1. 1, R 1. 2, R 1. 3, R 1. 4, R 1. 5, R 1. 7 2
Ingeniería del Software Ejemplo TPV: caso de uso real (2) a e b c d f g h i j 3
Ingeniería del Software Ejemplo TPV: caso de uso real (3) Curso normal de los eventos Acción de los actores 1. Este caso de uso comienza cuando un Cliente llega a un TPV con productos que desea comprar. 2. Para cada producto, el Cajero teclea el código de producto en a de la ventana -cp. Si hay más de un producto, es opcional añadir la cantidad en e. Se añade el producto con h. 4. Al terminar de introducir el producto, el Cajero oprime el botón i para indicar al TPV que se concluyó la captura de productos. 6. . Respuesta del sistema 3. 5. Incorpora a la transacción actual la información correspondiente. Del producto actual se presenta el precio en f de la ventana-cp. Calcula y presenta en c el total de la venta. 4
Ingeniería del Software Diagrama de clases Gerente Cajero Cliente inicia TPV gestiona inicia Sólo hay una TPV! está Tienda ofrece registra Venta fecha importe esta. Terminada Catálogo contiene consta * Linea. Venta referencia cantidad * Producto cp descripción precio requiere Pago Sólo hay una venta! monto 5
Ingeniería del Software Ejemplo: Caso de uso Comprar productos : Sistema : Cajero Iniciar. Venta() * Añadir. Producto(cp, c) Terminar. Venta() : importe Efectuar. Pago(monto) : cambio 6
Ingeniería del Software Contrato Iniciar. Venta § § § Name: Iniciar. Venta() Responsabilities § Iniciar el registro de una venta Preconditions § No existe una venta ya iniciada Postconditions § Se dio de alta una instancia v de Venta con fecha actual § Se dio de alta una instancia de la asociación ‘tiene’ entre v y la instancia de TPV Salida 7
Ingeniería del Software Diagrama de secuencia: Iniciar. Venta : TPV iniciar. Venta() crear() : Venta 8
Ingeniería del Software Código Java Iniciar. Venta: TPV package TPV; import java. util. *; class TPV { private Catalogo catalogo; private Venta venta; . . . private boolean es. Nueva. Venta() { return (venta==null) || (venta. esta. Terminada())} public void Iniciar. Venta () { if (es. Nueva. Venta()) { venta = new Venta(); } } } 9
Ingeniería del Software Código Java Añadir. Producto: Venta package TPV; import java. util. *; class Venta { private Vector linea. Venta = new Vector(); private Date fecha = new Date(); private float importe = 0; private boolean esta. Terminada = false; . . . } 10
Ingeniería del Software Contrato Añadir. Producto § § § Name: Añadir. Producto(cp, c) Responsabilities § Registrar una línea de venta. Preconditions § Existe un producto p con p. cp = cp § c >= 0 § Existe una Venta v asociada a TPV Postconditions § Se dio de alta una instancia de Línea. Venta lv con lv. cantidad = c § Se dio de alta una instancia de la asociación ‘consta’ entre lv y la Venta v § Se dio de alta una instancia de la asociación ‘referencia’ que asocia lv y el producto p con p. cp = cp Salida § p. descripción y p. precio 11
Ingeniería del Software Diagrama de secuencia: Añadir. Producto § Selección de la clase controlador : TPV Añadir. Producto(cp, c) : Tienda Añadir. Producto(cp, c) Fachada sistema Fachada negocio : Cajero Añadir. Producto(cp, c) Rol (actor) : Gestor Añadir. Producto(cp, c) CU o transacción 12
Ingeniería del Software Diagrama de secuencia: Añadir. Producto : TPV añadir. Producto(cp, c) : Catálogo producto(cp) : Producto obtener(cp) p : Venta agregar. LV(p, c) crear(p, c) : Linea. Venta p. precio p. descripción 13
Ingeniería del Software Diagrama de clases: Añadir. Producto TPV inicia. Venta(): añadir. Producto(cp, cantidad) terminar. Venta(): real efectuar. Pago(real): real Catálogo producto(cp): producto Venta fecha: date importe: float esta. Terminada: boolean agregar. LV(producto, cantidad) Producto cp: int precio: real descipcion: string obtener(cp): producto 14
Ingeniería del Software Código Java Añadir. Producto: TPV package TPV; import java. util. *; class TPV { private Catalogo catalogo; private Venta venta; . . . public void añadir. Producto (int cp, int cantidad) { Producto p = catalogo. producto(cp); venta. agregar. LV(p, cantidad); } } 15
Ingeniería del Software Contrato Añadir. Producto § § § Name: Añadir. Producto(cp, c) Responsabilities Quién es el responsable de comprobar esto? § Registrar una línea de venta. Preconditions § Existe un producto p con p. cp = cp § c >= 0 § Existe una Venta v asociada a TPV Postconditions § Se dio de alta una instancia de Línea. Venta lv con lv. cantidad = c § Se dio de alta una instancia de la asociación ‘consta’ entre lv y la Venta v § Se dio de alta una instancia de la asociación ‘referencia’ que asocia lv y el producto p con p. cp = cp Salida § p. descripción y p. precio 16
Ingeniería del Software Código Java Añadir. Producto: Catalogo package TPV; import java. util. *; public class Catalogo { private Hashtable catalogo = new Hashtable(); public Catalogo() { catalogo c = new catalogo. put(new } producto(100, 2, “producto 100”); Integer(100), c); producto(200, 1, “producto 200”); Integer(200), c); public producto (int cp) { return (producto) catalogo. get(new Integer (cp)); } } 17
Ingeniería del Software Código Java Añadir. Producto: Producto package TPV; public class Producto { private int cp = 0; private float precio = 0; private String descripcion = “”; public producto (int cp, float precio, String descripcion) { this. cp = cp; this. precio = precio; this. descripcion = descripcion; }. . . } 18
Ingeniería del Software Código Java Añadir. Producto: Venta package TPV; import java. util. *; class Venta { private Vector linea. Venta = new Vector(); private Date fecha = new Date(); private float importe = 0; private boolean esta. Terminada = false; . . . public void agregar. LV (producto p, int c){ linea. Venta. add. Element(new Linea. Venta(p, c)); } } 19
Ingeniería del Software Código Java Añadir. Producto: Linea. Venta package TPV; class Linea. Venta { private int cantidad; private Producto producto; . . . public Linea. Venta (producto p, int cantidad) { this. producto = p; this. cantidad = cantidad; } } 20
Ingeniería del Software Contrato Terminar. Venta § § § Name: Terminar. Venta() : importe Responsabilities § Finalizar el registro de una venta y mostrar el importe pagado Preconditions § Existe una Venta v asociada a TPV Postconditions § v. importe = suma de los subtotales de todas lineas de venta asociadas a la Venta v § v. terminada = verdadero Salida § importe = v. importe 21
Ingeniería del Software Diagrama de secuencia: Terminar. Venta : TPV : Venta : Linea. Venta : Producto terminar. Venta() terminar() total() * subtotal() precio() importe 22
Ingeniería del Software Diagrama de clases: Terminar. Venta TPV inicia. Venta(): añadir. Producto(cp, cantidad) terminar. Venta(): real efectuar. Pago(real): real Catálogo producto(cp): producto Venta agregar. LV(producto, cantidad) terminar(): real Linea. Venta subtotal(): real Producto obtener(cp): producto precio() 23
Ingeniería del Software Código Java Terminar. Venta: TPV package TPV; import java. util. *; class TPV { private Catalogo catalogo; private Venta venta; . . . public float terminar. Venta () { venta. terminar(); return (float) venta. total(); } } 24
Ingeniería del Software Código Java Terminar. Venta: Venta package TPV; import java. util. *; class Venta { private Vector linea. Venta = new Vector(); private Date fecha = new Date(); private float importe = 0; private boolean esta. Terminada = false; . . . public void terminar () { esta. Terminada = true; } public float total() { float total = 0; enumeration e = linea. Venta. elements(); while (e. has. More. Elements()) { total += ( (Linea. Venta) e. next. Element() ). subtotal(); } importe = total; return total; } } 25
Ingeniería del Software Código Java Terminar. Venta: Linea. Venta package TPV; class Linea. Venta { private int cantidad; private Producto producto; . . . public float subtotal () { return cantidad * producto. precio(); } } 26
Ingeniería del Software Código Java Terminar. Venta: Producto package TPV; public class Producto { private int cp = 0; private float precio = 0; private String descripcion = “”; public float precio () { return precio; }. . . } 27
Ingeniería del Software Diagrama de secuencia: Efectuar. Pago : TPV : Venta efectuar. Pago(monto) crear(monto) : Pago cambio 28
Ingeniería del Software Diagrama de clases: Efectuar. Pago TPV inicia. Venta(): añadir. Producto(cp, cantidad) terminar. Venta(): real efectuar. Pago(real): real Catálogo producto(cp): producto Venta agregar. LV(producto, cantidad) terminar() importe() efectuar. Pago(real): real Producto obtener(cp): producto 29
Ingeniería del Software Código Java Efectuar. Pago: TPV package TPV; import java. util. *; class TPV { private Catalogo catalogo; private Venta venta; . . . public float efectuar. Pago (float monto) { return venta. efectuar. Pago(monto); } } 30
Ingeniería del Software Código Java Efectuar. Pago: Venta package TPV; import java. util. *; class Venta { private Vector linea. Venta = new Vector(); private Date fecha = new Date(); private float importe = 0; private boolean esta. Terminada = false; private Pago pago; public void efectuar. Pago (float monto) { pago = new Pago(monto) return pago. monto - importe } } 31
Ingeniería del Software Código Java Efectuar. Pago: Pago package TPV; public class Pago { private float monto; public Pago (float monto) { this. monto = monto; } } 32