Documente Academic
Documente Profesional
Documente Cultură
Programacin Orientada a
Objetos
Tabla de Contenido
INTRODUCCIN ................................................................................................................................... 5
DIAGRAMA DE SECUENCIA DEL ESCENARIO DEL CURSO NORMAL DEL CASO DE USO 3. REGISTRAR COBRO DE ABONO DE
ESTACIONAMIENTO ............................................................................................................................................ 30
VISTA REGISTRAR COBRO DE ABONO DE ESTACIONAMIENTO DIAGRAMA DE CLASES DE ANLISIS .................................. 31
CONSIGNAS PARA EL DISEO E IMPLEMENTACIN: .................................................................................................. 32
EJERCICIO 4: CASO PRCTICO MERCADO DE ABASTO ................................................................................... 33
PRESENTACIN DEL CASO DE ESTUDIO .................................................................................................................. 33
MODELO DE DOMINIO ....................................................................................................................................... 34
DIAGRAMA DE MQUINA DE ESTADO DE LA CLASE PUESTO ...................................................................................... 34
VISTA PARCIAL DEL DIAGRAMA DE CASOS DE USO ................................................................................................... 35
PROTOTIPO DE LA INTERFAZ DE USUARIO PARA LA FUNCIONALIDAD DEL ALQUILER DE UN PUESTO .................................. 36
DESCRIPCIN CON RESUMEN ESENCIAL DEL CASO DE USO 1. REGISTRAR ALQUILER DE PUESTO ...................................... 37
DIAGRAMA DE SECUENCIA DEL ESCENARIO DEL FLUJO BSICO DEL CASO DE USO 3. REGISTRAR ALQUILER DE PUESTO ........ 38
VISTA REGISTRAR ALQUILER DE PUESTO DIAGRAMA DE CLASES DE ANLISIS ............................................................. 39
CONSIGNAS PARA EL DISEO E IMPLEMENTACIN: .................................................................................................. 40
EJERCICIO 5: CASO PRCTICO PANADERA ................................................................................................. 41
PRESENTACIN DEL CASO DE ESTUDIO .................................................................................................................. 41
PROTOTIPO DE LA INTERFAZ DE USUARIO ASOCIADOS A LA FUNCIONALIDAD DE REGISTRAR COBRO ................................. 42
DESCRIPCIN CON RESUMEN ESENCIAL DEL CASO DE USO 1. REGISTRAR VENTA........................................................... 43
CONSIGNAS: ..................................................................................................................................................... 44
EJERCICIO 6: CASO PRCTICO CONSULTORIO ODONTOLGICO ....................................................................... 45
PRESENTACIN DEL CASO DE ESTUDIO .................................................................................................................. 45
DESCRIPCIN CON RESUMEN ESENCIAL DEL CASO DE USO 1. GENERAR AGENDA MENSUAL DE ODONTLOGO .................. 46
CONSIGNAS: ..................................................................................................................................................... 47
Introduccin
La gua prctica del Mdulo Programacin Orientada a Objetos incluye los casos de estudio vinculados a los
contenidos desarrollados en el apunte terico del mdulo. El objetivo de esta gua es brindar una
herramienta de apoyo, que facilite el desarrollo de los temas y posibilite aplicar los conocimientos
adquiridos, mostrando casos prcticos y su resolucin propuesta.
En el apunte terico se trabaj alrededor de los siguientes ejes temticos: los lenguajes de programacin y
los paradigmas de programacin, presentados de forma introductoria. Luego una parte desarrolla el
paradigma de objetos con todo su fundamento terico; a continuacin, se presenta el UML como lenguaje
de modelado para sistemas orientados a objeto y por ltimo, se introduce la programacin orientada a
objetos en el lenguaje JAVA.
Este enfoque se utiliza dada la importancia de transmitir que la programacin del software se desarrolla en
forma evolutiva (en espiral); esa evolucin se da desde el inicio, teniendo en cuenta los resultados
obtenidos previamente; en otras palabras, antes de llegar a la programacin se ha modelado lo que el
usuario necesita, el diseo, y en ese momento inicia la programacin con todas herramientas necesarias
para que satisfaga las necesidades para las que fue creado.
El desarrollo de software se realiza en forma de evolucin continua y espiralada del conocimiento; para que
ese proceso sea correcto, los pasos previos que se deben realizar se basan en varias formas de
entendimiento del problema, utilizando modelos, los cuales son de gran utilidad.
Es importante que el estudiante aprenda a programar conociendo los conceptos que fundamentan el
paradigma; en este caso nos referimos la forma de representar e interpretar el problema.
El material prctico est organizado partiendo de un caso de estudio basado en un Complejo de Cines, este
caso ya se ha trabajado en el apunte terico. Se utilizan los modelos ya realizados y su solucin en lenguaje
java. Luego se presentan tres casos de estudio ms que van evolucionando desde los requerimientos
(necesidades del usuario), los cuales ya han sido esquematizados con modelos construidos en el lenguaje
UML1. Tambin se han desarrollado representaciones de las formas en que el software le ser presentado
al usuario (prototipos de interfaz de usuario2).
Finalmente, los ltimos dos casos no tienen modelos de UML, solo tienen la descripcin de la funcin que
se espera obtener, esto es porque tambin hay que preparar a los estudiantes para las situaciones en las
que tengan que programar basados en pedidos escritos, no modelizados e informales, debido a que hay
organizaciones en las que se trabaja de esta forma, sin modelos previos.
Para la instalacin de las aplicaciones necesarias para trabajar con la programacin en Java (denominado
usualmente implementacin en JAVA), se han creado los siguientes instructivos:
Instructivo de instalacin de Java JDK y NetBeans IDE.
Instructivo de creacin de un nuevo proyecto en NetBeans.
Instructivo de diseo de interfaces visuales con Java Swing en NetBeans IDE.
Tambin se ha creado un repositorio pblico, que contiene estos instructivos y la implementacin en cdigo
Java de los casos de estudio utilizados.
El repositorio se encuentra en: https://github.com/111milprogramadores
Finalmente, en el repositorio tambin hay un instructivo para la descarga del proyecto desde el repositorio
pblico de 111mil creado en la herramienta GitHub3.
3 GitHub: Es una plataforma de desarrollo colaborativo de software para alojar proyectos utilizando el sistema de control de
versiones Git. El cdigo se almacena de forma pblica, aunque tambin se puede hacer de forma privada, creando una cuenta
de pago.
Una pizzera de la ciudad ofrece a sus clientes una amplia variedad de pizzas de fabricacin propia, de varios
tamaos (8, 10 y 12 porciones). Los clientes tienen a disposicin un men que describe para cada una de
las variedades, el nombre, los ingredientes y el precio segn el tamao y el tipo (a la piedra, a la parrilla, de
molde) de la pizza. Los clientes realizan sus pedidos en el mostrador.
El pedido debe contener el nombre del Cliente, para llamarlo cuando su pedido est listo; la cantidad de
pizzas, el tamao, la variedad, la fecha del pedido, la hora en la que el pedido debe entregarse y la demora
estimada informada al cliente.
El pedido va a la cocina y cuando est preparado se informa al que lo tom para que se genere la factura
correspondiente y se le entregue el pedido al cliente.
El dueo de la pizzera ha manifestado la necesidad de acceder al menos a la siguiente informacin:
Variedades y tipos de pizzas ms pedidas por los clientes.
Ingresos (recaudaciones) por perodos de tiempo.
Pedidos (cantidad y monto) por perodos de tiempo.
Puede tener hasta dos ingresos sin crdito, es decir saldo negativo, que se descontarn de la siguiente
vez que acredite dinero en su cuenta.
La persona mientras tenga crdito puede ingresar a la playa con cualquiera de los vehculos registrados.
La persona puede en cualquier momento agregar y/o cambiar los vehculos con los que ingresar a la
playa de estacionamiento.
El valor del estacionamiento es por el da completo, sin lmite de tiempo ni inferior ni superior; es decir
se paga un ingreso diario, que es vlido independientemente de la cantidad de ingresos que haga
durante el mismo da y del tiempo que permanezca en la playa.
Al ingresar se le entrega a la persona un comprobante que contiene: dominio del vehculo, apellido y
nombre del dueo del vehculo, el valor del ingreso, la fecha de ingreso y el saldo disponible. Tambin
se informa el nmero de ingreso del da. El portn por el que ingresa y el usuario logueado.
Si el vehculo no est registrado se guarda en el ingreso el nmero de dominio del vehculo y se informa
como observacin que no est registrado.
El primer ingreso del da se cobra, descontando del saldo disponible. A partir del segundo ingreso del
da en adelante, el monto debe figurar en cero y se debe informar que nmero de ingreso, por ejemplo:
Segundo ingreso del da.
A las personas que desean ingresar a la playa de estacionamiento sin tener el abono de pago anticipado,
se les cobra al momento del ingreso, registrando como observacin el nmero de dominio del vehculo,
entregndoles un comprobante con el monto cobrado, los datos del comprobante en ese caso son:
dominio del vehculo, monto, fecha de ingreso, nmero de vez que ingresa a la playa de
estacionamiento, usuario logueado, fecha y hora y portn por el que ingresa.
Si la persona tiene abono, puede tener hasta el valor de dos estacionamientos como saldo negativo,
que se descontarn de la siguiente vez que acredite dinero en su cuenta.
El mercado est organizado en sectores. Cada sector contiene puestos, los cuales son alquilados a
empresas y quinteros (genricamente clientes) para que all realicen sus ventas. Existen distintos tipos de
puestos (con techo, sin techo, con cmara refrigerante, etc.) y distintas dimensiones para cada puesto
(10m2, 15m2, etc.), para poder ajustarse mejor a las necesidades de cada cliente.
El precio del alquiler depende del sector en el que se encuentre el puesto, el tipo de puesto y sus
dimensiones, y est predefinido.
Cuando un cliente desea alquilar uno o ms puestos, se verifica la disponibilidad del tipo de puesto que
requiere. Si existe disponibilidad y el cliente est de acuerdo con el precio, se realiza un contrato de alquiler
por cada puesto que se alquile. En el contrato se especifica la fecha de inicio y fin del alquiler, el monto
mensual del alquiler y tiene adems un nmero que identifica el contrato que es nico y el nombre del
responsable por parte del Mercado que intervino en la firma del contrato y el responsable de la registracin
del mismo. Adems, cada puesto cuenta con un medidor para el consumo de energa elctrica.
Mensualmente se registran las lecturas de cada medidor, ya que el consumo de cada puesto es facturado
al cliente que est alquilando ese puesto. En el momento de efectuar el alquiler, se registra en el contrato
la ltima lectura del medidor del puesto que se est alquilando. Los aspectos vinculados a la facturacin
quedan excluidos del alcance del sistema, como as tambin la gestin de cobro de los alquileres.
La Panadera que se describe en este caso de estudio, pertenece a la Fundacin Brisas de Cambio, ubicada
en el interior de la provincia de Crdoba. La Fundacin tiene el propsito fundamental de contener
laboralmente a un grupo numeroso de jvenes y adultos con discapacidades intelectuales y fsicas. Su
objetivo es desarrollar proyectos productivos que les permita desempearse en un oficio para sentirse
tiles y adquirir a diario el conocimiento necesario para desempearse en esta actividad dentro de un
ambiente laboral sano.
En este contexto, la panadera est atendida por este grupo de personas con capacidades especiales y la
intencin es desarrollar un producto de software que asista a las personas en el proceso de venta y cobro
de los productos que la panadera vende.
En este consultorio odontolgico trabajan varios profesionales que brindan sus servicios. Cuando un
paciente necesita atencin, debe solicitar un turno previamente. No se atiende a pacientes que no tienen
turno. El odontlogo para el que el paciente solicita el turno es el que lo va a atender. Cada Odontlogo
tiene una agenda con los das y horarios en los que puede atender, que se crea mensualmente en funcin
de la disponibilidad que el odontlogo informa, con turnos de 30 minutos de duracin. Esta agenda genrica
representa los das y horarios de atencin que tiene disponible ese odontlogo en trminos generales y la
duracin de su consulta. Esta informacin se tomar como base para crear la agenda cada mes,
considerando para cada mes los das y/u horarios que en ese mes no podr atender.
Cuando el paciente llama por telfono, se le pregunta el motivo de la consulta y en funcin de eso se le
asigna uno o ms turnos. Por ejemplo, si lo que debe hacerse es un tratamiento de conducto, se le asignan
dos turnos de media hora, consecutivos.
Soluciones Propuestas
Modelo de Dominio
entity
entity
entity Genero
PaisDeOrigen
Pelicula genero 1 nombre
idioma 1 paisDeOrigen aoEstreno
nombre disponible
duracion
fechaIngreso
nombre calificacion
tituloOriginal
entity personajes
calcularDuracionEnFuncion() entity
actor Personaje
estaDisponible() Calificacion
nombreEnPelicula 1..* 1
entity estaEnCartelera() nombre
Actor mostrarFuncionesHabilitadas()
1
animado
apellido entity
nombre funciones 1 Sala
pelicula sala
0..* capacidad
1 rol numero
entity entity 1
Rol Funcion 1..*
nombre diaSemana
sexo duracion sala
horaInicio
numero
entity
1 calcularDisponibilidad() Cine
capacidadSala()
Sexo direccion
estaEnCurso()
nombre hayLugar() fechaInauguracion
mostrarDiaHora() nombre
precioEntrada
1 mostrarCine()
1..* mostrarInfoHorariosFuncion()
entradas funcion
0..*
programaciones
entity funciones
0..* horariosFunciones
Entrada
entity 0..*
fechaHoraFuncion
fechaHoraVenta Programacion entity
precioCobrado fechaFin HorarioFuncion
ticketNro fechaHoraCreada diaDeSemana
estaAnulada() fechaInicio duracionIntervalo
estaCompleta() duracionPublicidad
estaIniciadaFuncion() esTrasnoche
estaVigente() horaPrimeraFuncion
mostrarProgramacion() horaUltimaFuncion
mostrarHorarioFuncion()
include
3 Registrar 1 Imprimir
Venta de Entradas
Entradas
20 Iniciar Sesin
de Trabajo
Vendedor
14 Registrar
Pelcula
extend
Responsable de
Programacin 11 Generar
Programacin de
Funciones
Usuario
8 Registrar
Cliente Web Reserva Web
6 Registrar
Reserva
7 Registrar
Reserva
Operador Telefnica
Telefonico
Descripcin con resumen esencial del Caso de Uso 14. Registrar Pelcula
Diagrama de Secuencia del escenario del curso normal del Caso de Uso 14. Registrar Pelcula
15 Registrar Elenco de
:Responsable de Pelcula
Programacin : :GestorPelicula :Pelicula :Calificacion :Genero :PaisDeOrigen
PantAdministracionPelicula
opcionNuevaPelicula()
habilitarVentana()
nuevaPelcula()
pedirNombrePelicula()
tomarNombrePelicula()
tomarNombrePelicula()
validarPelicula()
*existeNombre()
buscarGenero()
*getNombre()
buscarCalificacion()
*getNombre()
buscarPaisDeOrigen()
*getNombre()
visualizarGeneros()
visualizarCalificaciones()
visualizarPaisesDeOrigen()
tomarSeleccionGenero()
tomarSeleccionCalificacion()
tomarSeleccionPaisDeOrigen()
tomarSelecciones()
pedirIngresoDatosRestantes()
tomarDuracion()
tomarTituloOriginal()
tomarAoEstreno()
tomarDatosRestantesPelicula()
llamarCURegElenco()
include
asignarEstadoPelicula()
visualizarEstadoPelicula()
pedirConfirmacionRegistracion()
tomarConfirmacionRegistracion()
tomarConfirmacion()
validarDatosMinimos()
crearPelicula()
new()
nueva: Pelicula
finCU()
entity
control PaisDeOrigen
GestorPelicula
entity idioma
aoEstreno Genero nombre
calificacion
nombre getNombre()
calificaciones
duracion getNombre()
elenco 1
estadoPelicula paisDeOrigen
genero genero 1
generos
nombrePelicula entity
paisDeOrigen Calificacion
paisesDeOrigen entity
pelicula nombre Pelicula
premio getNombre() aoEstreno
tituloOriginal mostrarCalificacion() disponible
asignarEstadoPelicula() new() duracion
calificacion nombre
buscarCalificacion()
buscarGenero() tituloOriginal
1
buscarPaisDeOrigen() calcularDuracionEnFuncion()
cancelarCU() estaDisponible()
crearPelicula() estaEnCartelera()
finCU() existeNombre()
llamarCURegComentario() getCalificacion()
llamarCURegElenco() getCines()
llamarCURegPremio() getComentario()
nuevaPelcula() entity getDatos()
entity
pedirSeleccionDatos() Comentario comentario getDuracion()
Rol
registrarComentario() getElenco()
registrarPremio() nombre autor 0..* getFuncion()
tomarConfirmacion() descripcion getFuncion()
tomarDatosRestantesPelicula() fechaIngreso getFuncionesHabilitadas()
tomarNombrePelicula() rol 1 getGenero()
tomarSelecciones() getNombre()
validarDatosMinimos() getPaisDeOrigen()
validarPelicula() personajes getPelicula()
entity
Personaje 1..* getPremio()
mostrarCine()
nombre mostrarFuncionesHabilitadas()
boundary
nombreEnPelicula new()
PantAdministracionPelicula
rol seleccionarProgramacion()
botonCancelar getPersonaje() validarDisponibilidadLugar()
botonConfirmar getRol()
botonEditar
botonEliminar 0..1
botonNuevo premiado
comboGenero actor
1
grillaComentarios entity
grillaPaisOrigen Actor
grillaPremios
animado
grillaPromociones premio
apellido
labelGenero
nombre 0..*
labelNombre
lblAoEstreno entity
lblCalificacion Premio
lblDuracion fechaPremio
lblTituloOriginal gano
radioCalificacion
txtAoEstreno getRubroPremio()
txtDuracion getTipoPremio()
txtNombre
txtTituloOriginal
habilitarVentana()
mostrarMensajePeliculaExiste()
opcionNuevaPelicula()
pedirConfirmacionRegistracion() rubroPremio 1
pedirIngresoDatosRestantes() entity
pedirNombrePelicula() tipoPremio 1 RubroPremio
pedirSeleccionesDatos() entity
tomarAoEstreno() descripcion
TipoPremio nombre
tomarConfirmacionRegistracion()
tomarDuracion() descripcion getDescricpion()
tomarNombrePelicula() nombre getNombre()
tomarSeleccionCalificacion() setDescricpion()
tomarSeleccionGenero() setNombre()
tomarSeleccionPaisDeOrigen()
tomarSelecRegComentario()
tomarSelecRegPremio()
tomarTituloOriginal()
visualizarCalificaciones()
visualizarEstadoPelicula()
visualizarGeneros()
visualizarPaisesDeOrigen()
Una pizzera de la ciudad ofrece a sus clientes una amplia variedad de pizzas de fabricacin propia, de varios
tamaos (8, 10 y 12 porciones). Los clientes tienen a disposicin un men que describe para cada una de
las variedades, el nombre, los ingredientes y el precio segn el tamao y el tipo (a la piedra, a la parrilla, de
molde) de la pizza. Los clientes realizan sus pedidos en el mostrador.
El pedido debe contener el nombre del Cliente, para llamarlo cuando su pedido est listo; la cantidad de
pizzas, el tamao, la variedad, la fecha del pedido, la hora en la que el pedido debe entregarse y la demora
estimada informada al cliente.
El pedido va a la cocina y cuando est preparado se informa al que lo tom para que se genere la factura
correspondiente y se le entregue el pedido al cliente.
El dueo de la pizzera ha manifestado la necesidad de acceder al menos a la siguiente informacin:
Variedades y tipos de pizzas ms pedidas por los clientes.
Ingresos (recaudaciones) por perodos de tiempo.
Pedidos (cantidad y monto) por perodos de tiempo.
Modelo de Dominio
entity
entity TipoPizza
Pedido
Factura
- fechaHoraCreacion - descripcion VariedadPizza
- fechaHoraEmision - nombre
- fechaHoraEntrega
- numero - ingredientes
- nombreCliente +tipoPizza
1
1 +detallesPedido
entity 1..*
EstadoPedido
entity
- nombre
estado DetallePedido
+ esFacturado()
- cantidad
+ esPteFacturacion() 1
- precio
+ calcTotalItem()
+ cancelar()
+ getEstado()
+detalleFactura
+ getPizza()
+ mostrarDetallePedido()
+ setEstado()
1..*
20 Informar Cierre
Pedido /termi nar()
15. Cancelar Pedido /cancelar()
Cancelado
PteFacturacin
Facturado
25. Confirmar
Pedido
Responsable de Cocina
Vendedor
20. Informar Cierre
Pedido
Responsable Pizzera
14. Actualizar
Precios
Flujo Bsico
1. Vendedor: selecciona la opcin Generar Factura.
2. Sistema: busca y muestra la lista de pedidos que estn listos y no hayan sido facturados an y solicita se
seleccione uno.
3. Vendedor: selecciona el pedido que desea facturar.
4. Sistema: muestra los datos completos del pedido y calcula el monto total a cobrar.
5. Sistema: solicita la confirmacin de la generacin de la factura.
6. Vendedor: confirma la generacin de la factura.
7. Sistema: genera la factura en estado Generada y actualiza el estado del pedido a Facturado.
8. Sistema: solicita confirmacin de la impresin de la factura.
9. Vendedor: confirma la impresin.
10. Sistema: imprime la factura. Fin del caso de uso.
Flujos Alternativos
A1: No hay pedidos pendientes de facturacin.
A2: El vendedor no confirma la generacin de la factura.
A3: El vendedor NO confirma la impresin.
Observaciones:
1. El Vendedor puede cancelar la ejecucin del caso de uso en cualquier momento.
Diagrama de Secuencia del escenario del curso normal del Caso de Uso 22 Generar Factura.
:Vendedor
:PantallaFacturacion :GestorFacturacion :Pedido :EstadoPedido elegido: Pedido :DetallePedido :Pizza :EstadoFactura :Factura :EstadoPedido :ImpresorFactura
opcionGenerarFactura()
habilitarVentana()
nuevaFactura()
buscarPedidosPtesFacturacion()
*esPteFacturacion()
esPteFacturacion()
*mostrarNumero()
*mostrarNombreCliente()
*getFechaHoraCreacion()
mostrarPedidosPtesFacturacin()
tomarSeleccionPedido()
pedidoAFacturar()
obtenerDatosPedidoCompleto()
mostrarPedido()
obtenerDetallesPedido()
*mostrarDetallePedido()
getPizza()
calcTotalItem()
calcTotalPedido()
pedirConfirmacionFacturacion()
tomarConfirmacionFacturacion()
tomarConfirmacionFacturacion()
generarFactura()
obtenerFechaYHoraActual()
obtenerNumeroFactura()
*getNumero()
buscarEstadoGenerada()
*esGenerada()
new()
buscarEstadoFacturado() :Factura
*esFacturado()
actualizarEstadoPedido()
facturar()
pedirConfirmacionImpresionFactura()
tomarConfirmacionImpresionFactura()
tomarConfirmacionImpresionFactura()
imprimir()
finCU()
boundary control
PantallaFacturacion GestorFacturacion
- checkPedidoElegido - estadoFactura
- grillaPedidoAFacturar - estadoPedido
- grillaPedidosPtes - fechaYHoraActual boundary
- lblPedidoAFacturar - numeroFactura ImpresorFactura
- lblPedidosParaFacturar - pedidoAFacturar
- factura
+ habilitarVentana() - pedidos
+ mostrarPedidosPtesFacturacin() + imprimir()
+ actualizarEstadoPedido()
+ opcionGenerarFactura() + buscarEstadoFacturado()
+ pedirConfirmacionFacturacion() + buscarEstadoGenerada()
+ pedirConfirmacionImpresionFactura() + buscarPedidosPtesFacturacion()
+ tomarConfirmacionFacturacion() + finCU()
+ tomarConfirmacionImpresionFactura() + generarFactura()
+ tomarSeleccionPedido() + nuevaFactura()
+ obtenerDatosPedidoCompleto()
+ obtenerFechaYHoraActual()
entity + obtenerNumeroFactura()
EstadoFactura + pedidoAFacturar()
- nombre + tomarConfirmacionFacturacion() entity
+ tomarConfirmacionImpresionFactura() Pedido
+ esGenerada()
+ esPteFacturacion() - fechaHoraCreacion
- fechaHoraEntrega
+estado 1
entity - nombreCliente
Factura - numero
- fechaHoraEmision + calcTotalPedido()
- numero + cancelar()
+ confirmar()
+ buscarItemsAFacturar() +factura + esPteFacturacion()
+ calcTotalFactura() + facturar()
+ getDetalleFactura() 0..1 + getDetallePedido()
+ getEstado() + getEstado()
entity
+ getNumero() + mostrarNombreCliente()
Pizza
+ new() + mostrarNumero()
- nombre + setEstado() + new()
- precio + obtenerDetallesPedido()
+ getNombre() + setEstado()
+ getPizza() + terminar()
+ getPrecio() +detallesPedido
+pizza +detalleFactura 1..*
+ getTamaoPizza()
+ getTipoPizza() 1 entity
+ getVariedadPizza() DetallePedido +estado
1
1..*
+ setNombre() - cantidad entity
+ setPrecio() - precio EstadoPedido
+ calcTotalItem() - nombre
estado 1
+ cancelar()
+ esFacturado()
+ getEstado()
+ esPteFacturacion()
+ getPizza()
+ mostrarDetallePedido()
+ setEstado()
Si la persona tiene abono, puede tener hasta el valor de dos estacionamientos como saldo negativo,
que se descontarn de la siguiente vez que acredite dinero en su cuenta.
Modelo de Dominio
Propietario AbonoPropietario
apellido fecha
dni hora
nombre montoCobrado
acreditarMonto() 1 nroComprobante
calcularSaldoActual() propietario saldoActual
conocerVehiculo() conocerIngreso()
cuantosIngresosPeriodo() getFecha()
getApellido() getHora() usuario
getDni() getNroComprobante()
getNombre() 1
getSaldoActual()
obtenerVehiculosPropietario() mostrarFechaYHora() Usuario
setApellido() new()
setDni() apellido
setFecha()
setNombre() nombre
setHora() permiso
nombreUsuario
setMontoCobroda()
setNroComprobante() password 1..*
Permiso
setSaldoActual() conocerPermisos()
descripcin
vehiculo
nombre
1
1..* Vehiculo usuario
ingreso 0..*
Modelo 1 dominio
vehiculo Ingreso
1..* nombre conocerModelo() 0..1
codigoBarra
modelo fechaEgreso
modelo fechaIngreso
tipoVehiculo
horaEgreso
horaIngreso
Marca portn Portn
monto
nombre 1 nroTicket descripcin
1
conocerModelo() observacion nombre
TipoVehculo
conocerPorton()
descricpin conocerTarifa()
nombre conocerUsuario()
conocerVehiculo()
determinarNroIngreso()
tarifa
tarifa 1..* 1
Tarifa
cantidadIngresosSinSaldo
esDeAbono
fecha
montoIngreso
conocerTipoVehiculo()
1 Registrar
Propietario
4. Registrar Ingreso
de Vehculo
2 Registrar Vehculo
Responsable de Caj ero
Estacionamiento
5. Registrar Egreso
de Vehculo
3. Registrar Cobro
de abono de
estacionamiento
Descripcin con resumen esencial del Caso de Uso 3. Registrar Cobro de abono de
estacionamiento
Nombre del Caso de uso: Registrar Cobro de abono de estacionamiento Nro. de Orden: 3
Flujo Bsico
Diagrama de Secuencia del escenario del curso normal del Caso de Uso 3. Registrar Cobro
de abono de estacionamiento
sd Fluj o normal
:Responsable de
Estacionamiento :PantCobroAbono : :Propietario encontrado: :AbonoPropietario :
GestorCobroAbono Propietario ImpresorComprobanteAcreditacion
opcionCobroAbono()
habilitarVentana()
cobroAbono()
pedirDni()
tomarDni()
validarDatoIngresado()
tomarDNI()
buscarPropietario()
*esTuDNI()
getApellido()
getNombre()
conocerSaldoDisponible()
buscarSaldoActual()
*mostrarFechaYHora()
mostrarPropietario()
mostrarSaldoActual()
ingresarMontoAcreditar()
tomarMontoIngresado()
validarMonto()
tomarMontoIngresado()
pedirConfirmacionAcreditacion()
tomarConfirmacionAcreditacion()
tomarConfirmacionAcreditacion()
acreditarMonto()
calcularSaldoActual()
mostrarSaldoActual()
obtenerFechaYHoraActual()
obtenerUltNroCpte()
*getNroComprobante()
crearAbono()
new()
nuev o:
AbonoPropietario
imprimirComprobante()
imprimir()
finCU()
boundary
PantCobroAbono control
GestorCobroAbono
- labelApellido
- lblDni - apellido
- lblMontoAcreditar - dni boundary
- lblSaldoActual - montoAcreditar ImpresorComprobanteAcreditacion
- lblSaldoActualizado - montoActualizado
- comprobanteAcreditacion
- textApellido - nombre
- saldoActual + imprimir()
- textMontoAcreditar
- txtDni + buscarPropietario()
- txtSaldoActual + cobroAbono()
- txtSaldoActualizado + finCU()
+ habilitarVentana() + imprimirComprobante()
+ ingresarMontoAcreditar() + obtenerFechaYHoraActual()
+ mostrarPropietario() + obtenerUltNroCpte()
+ mostrarSaldoActual() + tomarConfirmacionAcreditacion()
+ mostrarSaldoActual() + tomarDNI()
+ opcionCobroAbono() + tomarMontoIngresado()
+ pedirConfirmacionAcreditacion()
+ pedirDni()
+ tomarConfirmacionAcreditacion()
+ tomarDni()
+ tomarMontoIngresado()
+ validarDatoIngresado()
+ validarMonto()
Propietario
- abonoPropietario
AbonoPropietario - apellido
- dni
- fecha - nombre
- hora
- montoCobrado + acreditarMonto()
- nroComprobante + calcularSaldoActual()
- saldoActual + conocerAbono()
+ conocerSaldoDisponible()
+ conocerIngreso() abonoPropietario
+ conocerVehiculo()
+ getFecha() + crearAbono()
+ getHora() 0..*
+ cuantosIngresosPeriodo()
+ getNroComprobante() + getApellido()
+ getSaldoActual() + getDni()
+ mostrarFechaYHora() + getNombre()
+ new() + obtenerVehiculosPropietario()
+ setFecha() + setApellido()
+ setHora() + setDni()
+ setMontoCobroda() + setNombre()
+ setNroComprobante()
+ setSaldoActual()
El mercado est organizado en sectores. Cada sector contiene puestos, los cuales son alquilados a
empresas y quinteros (genricamente clientes) para que all realicen sus ventas. Existen distintos tipos de
puestos (con techo, sin techo, con cmara refrigerante, etc.) y distintas dimensiones para cada puesto
(10m2, 15m2, etc.), para poder ajustarse mejor a las necesidades de cada cliente.
El precio del alquiler depende del sector en el que se encuentre el puesto, el tipo de puesto y sus
dimensiones, y est predefinido.
Cuando un cliente desea alquilar uno o ms puestos, se verifica la disponibilidad del tipo de puesto que
requiere. Si existe disponibilidad y el cliente est de acuerdo con el precio, se realiza un contrato de alquiler
por cada puesto que se alquile. En el contrato se especifica la fecha de inicio y fin del alquiler, el monto
mensual del alquiler y tiene adems un nmero que identifica el contrato que es nico y el nombre del
responsable por parte del Mercado que intervino en la firma del contrato y el responsable de la registracin
del mismo. Adems, cada puesto cuenta con un medidor para el consumo de energa elctrica.
Mensualmente se registran las lecturas de cada medidor, ya que el consumo de cada puesto es facturado
al cliente que est alquilando ese puesto. En el momento de efectuar el alquiler, se registra en el contrato
la ltima lectura del medidor del puesto que se est alquilando. Los aspectos vinculados a la facturacin
quedan excluidos del alcance del sistema, como as tambin la gestin de cobro de los alquileres.
Modelo de Dominio
entity entity
entity TipoPuesto entity
Empleado
Cliente Sector
apellido descripcion
cuit nombre descripcion
dni
domicilio nombre
fechaIngreso getNombre()
legajo razonSocial buscarPuestosDisponibles()
tipoPuesto 1
nombre crearContrato() 1
nombreUsuario cuantosContratosPeriodo() entity sector
password cuantosPuestosAlquila() PrecioAlquiler
getNombreCompleto() existeCliente() fechaVigencia
getCuit() precio
1
1 getDomicilio()
getRazonSocial() estaVigente()
quePuestosAlquila() getPrecio()
dimension
tieneContratoVigente() precioAlquiler 1..*
responsableMercado 1
contrato entity
0..* entity
Dimension
Puesto
empleado entity ancho
Contrato numero
largo
entity fechaCancelacion alquilar() nombre
Sesion fechaFinContrato cancelarAlquiler()
calcularMetrosCuadrados()
fechaFin fechaInicioContrato darBaja()
estaDisponible()
fechaInicio registr montoMensual
horaFin numero estaDisponibleEnFechas()
puesto
horaInicio getEstado()
1 calcularMontoTotalContrato() getLectura()
estaAbierta() cancelar() getNumero() entity
getUsuarioSesion() estaPuestoEnPeriodo() 1
getPrecioAlquiler() lectura Lectura
estaVigente() habilitar()
getNumero() inhabilitar() fechaCaptura
0..*
new() lectura
mostrarDatosPuesto()
new() new() getFechaCaptura()
obtenerFechaRegistro() obtenerFechaUltimaLectura() getLectura()
obtenerPrecioVigente()
tlimaLecturaMedidor 1
estado obtenerUltimaLectura()
entity obtenerUltimaLecturaMedidor()
Los mtodos de seteo estn
Estado 1
setEstado()
especificados a modo de setLectura()
ejemplo en la clase Puesto. Se descripcion setNumero()
asume que en el resto de las nombre setPrecioAlquiler()
clases, se especifica de la esAlquilado()
misma forma esDisponible()
3. Registrar
Puesto /new()
10. Registrar Cancelacin de Contrato
/cancelarAlquiler()
12. Inhabilitar Disponible
Puesto
/inhabilitar() 1. Registrar Alquiler de
Puesto /alquilar()
3. Registrar
Puesto
8. Registrar 6. Registrar
10. Registrar Lectura de Sector
Cancelacin de Consumo de 5. Registrar
Contrato Energa 7. Registrar Tipo de
Dimensin
Puesto
Descripcin con resumen esencial del Caso de Uso 1. Registrar Alquiler de Puesto
Objetivo: Registrar el alquiler de un puesto a un cliente, generando un contrato por un perodo de tiempo definido y
actualizando disponibilidad del puesto.
Flujo Bsico
Diagrama de Secuencia del escenario del flujo bsico del Caso de Uso 3. Registrar Alquiler
de Puesto
sd Analisis Model
:Responsable de Alquileres
: : :TipoPuesto :Dimension :Sector :Puesto elegido: Puesto :Sector :Lectura ultima: Lectura :Estado :Contrato :PrecioAlquiler:PrecioAlquiler:Cliente :Cliente :Sesion :Empleado :Estado
PantAlquilerPuesto GestorAlquilerPuesto
opcionRegAlquilerPuesto()
habilitarVentana()
nuevoAlquiler()
obtenerFechasContrato()
pedirFechasContrato()
tomarFechaInicio()
tomarFechaVencimiento()
tomarFechasContrato()
buscarTiposPuesto()
*getNombre()
buscarDimensiones()
*calcularMetrosCuadrados()
mostrarTiposPuesto()
mostrarDimensiones()
tomarSeleccionTipoPuesto()
tomarSeleccionDimension()
tomarSelecciones()
buscarPuestosDisponiblesPorSector()
buscarPuestosDisponibles()
*estaDisponible()
esDisponible()
*estaDisponibleEnFechas()
*estaPuestoEnPeriodo()
*mostrarDatosPuesto()
*obtenerPrecioVigente()
*estaVigente()
getPrecio()
mostrarPuestosDisponibles()
pedirSeleccionPuesto()
tomarSeleccionPuesto()
puestoSeleccionado()
buscarDatosCliente()
*getRazonSocial()
pedirIngresoCliente()
tomarIngresoCliente()
tomarIngresoCliente()
*existeCliente()
getCuit()
getDomicilio()
mostrarDatosClliente()
obtenerLecturaMedidor()
obtenerUltimaLecturaMedidor()
*getFechaCaptura()
getLectura()
mostrarUltLecturaMedidor()
pedirConfirmacionRegistro()
tomarConfRegistro()
tomarConfirmacionReg()
crearContratoAlquiler()
obtenerUsuarioSesion()
getUsuarioSesion()
getNombreCompleto()
obtenerNroContrato()
*getNumero()
crearContrato()
new()
buscarEstadoAlquilado()
:Contrato
*esAlquilado()
alquilar()
setEstado()
mostrarNroContrato()
pedirConfImpresionContrato()
tomarConfImpresion()
confirmacionImpresion(NO)
finCU()
boundary control
PantAlquilerPuesto GestorAlquilerPuesto
entity
- comboDimension - cliente Cliente
- comboTipoPuesto - contratos
- grillaPuestosDisponibles - fechaInicioContrato - cuit
- lblDimension - domicilio
- fechaVtoContrato
- lblFechaInicio - lecturas - razonSocial
- lblFechaVencimiento - numeroContrato + crearContrato()
- lblNombreCliente - puestoElegido + cuantosContratosPeriodo()
- lblPuestosDisponibles - puestos + cuantosPuestosAlquila()
- lblTipoPuesto - sectores + existeCliente()
- lblUltLecturaMedidor - sesion + getCuit()
- txtFechaInicio - tiposPuesto + getDomicilio()
- txtFechaVencimiento - ultimaLectura + getRazonSocial()
- txtUltLecturaMedidor + quePuestosAlquila()
+ buscarDimensiones()
+ habilitarVentana() + buscarEstadoAlquilado() + tieneContratoVigente()
+ mostrarDatosClliente() + buscarPuestosDisponiblesPorSector()
+ mostrarDimensiones() + buscarTiposPuesto()
+ mostrarNroContrato() + crearContratoAlquiler()
+ mostrarPuestosDisponibles() + finCU()
+ mostrarTiposPuesto() + nuevoAlquiler() -contrato 0..*
+ calcularMetrosCuadrados() entity 1
-dimensi on 1
Empleado -responsabl eMercado
- apellido
- dni
entity - fechaIngreso
PrecioAlquiler - legajo
+tl imaLecturaMedi dor 1
- nombre
- fechaVigencia - nombreUsuario entity
-sector
entity - precio Lectura
- password
Sector + estaVigente()
1 + getNombreCompleto() - fechaCaptura
- descripcion + getPrecio()
- lectura
- nombre -precioAlqui ler 1..*
+ getFechaCaptura()
+ buscarPuestosDisponibles() -lectura
+ getLectura()
0..*
entity
Puesto
- numero
+ alquilar()
+ cancelarAlquiler()
+ darBaja()
+ estaDisponible()
entity + estaDisponibleEnFechas()
Estado + getEstado()
- descripcion -estado + getLectura()
- nombre + getNumero()
+ esAlquilado()
1 + getPrecioAlquiler()
+ esDisponible() + habilitar()
+ inhabilitar()
+ mostrarDatosPuesto()
+ new()
+ obtenerFechaUltimaLectura()
-puesto
+ obtenerPrecioVigente()
+ obtenerUltimaLectura() 1
+ obtenerUltimaLecturaMedidor()
+ setEstado()
+ setLectura()
+ setNumero()
+ setPrecioAlquiler()
La Panadera que se describe en este caso de estudio, pertenece a la Fundacin Brisas de Cambio, ubicada
en el interior de la provincia de Crdoba. La Fundacin tiene el propsito fundamental de contener
laboralmente a un grupo numeroso de jvenes y adultos con discapacidades intelectuales y fsicas. Su
objetivo es desarrollar proyectos productivos que les permita desempearse en un oficio para sentirse
tiles y adquirir a diario el conocimiento necesario para desempearse en esta actividad dentro de un
ambiente laboral sano.
En este contexto, la panadera est atendida por este grupo de personas con capacidades especiales y la
intencin es desarrollar un producto de software que asista a las personas en el proceso de venta y cobro
de los productos que la panadera vende.
Toda la interaccin con el producto debe ser basada en imgenes, y muy simple para lo cual, se presentan
a continuacin una serie de prototipos que ayudarn a visualizar lo que se pretende construir.
El producto de software esencialmente realizar las siguientes funcionalidades. En este caso haremos foco
en el desarrollo del caso de uso que est remarcada, el cual se presenta a continuacin:
Abrir Caja
Registrar Cobro
Supervisor
Registrar
Denominacin
Registrar Dinero
Producto
Administrador del
Sistema
Flujo Bsico
1. Vendedor: selecciona la opcin Registrar Cobro
2. Sistema: muestra imgenes de todos los productos disponibles para la venta con sus precios y solicita se
seleccionen los productos que se incluirn en la venta.
3. Vendedor: selecciona cada uno de los productos.
4. Sistema: para cada producto de venta por unidad solicita se ingrese la cantidad que se desea considerar en la
venta.
5. Vendedor: ingresa la cantidad de cada producto.
6. Sistema: calcula para cada producto en funcin de la cantidad ingresada el precio (precio del producto *
cantidad). Muestra el total de la venta y las imgenes de billetes y monedas para que seleccione el dinero que
recibir para el cobro.
7. Vendedor: selecciona cada uno de los billetes y/o monedas que le entregan para pagar.
8. Sistema: Calcula el vuelto (dinero entregado importe total de venta) y si corresponde entregar dinero como
vuelto, muestra imgenes de cada uno de los billetes y/o monedas que corresponde entregar.
9. Sistema: Actualiza el dinero existente en la caja. Fin del caso de uso.
Flujos Alternativos
A1: Los productos a cobrar son por peso, debe ingresa el precio.
A2: Algunos de los productos a cobrar son por peso, debe ingresa el precio y otros por cantidad, debe ingresar unidades
y calcular el precio.
A3: No hay en la caja billetes y/o monedas para conformar el vuelto.
Observaciones:
1. El Vendedor puede cancelar la ejecucin del caso de uso en cualquier momento.
Consignas:
Implementacin y Diseo:
En este consultorio odontolgico trabajan varios profesionales que brindan sus servicios. Cuando un
paciente necesita atencin, debe solicitar un turno previamente. No se atiende a pacientes que no tienen
turno. El odontlogo para el que el paciente solicita el turno es el que lo va a atender. Cada Odontlogo
tiene una agenda con los das y horarios en los que puede atender, que se crea mensualmente en funcin
de la disponibilidad que el odontlogo informa, con turnos de 30 minutos de duracin. Esta agenda genrica
representa los das y horarios de atencin que tiene disponible ese odontlogo en trminos generales y la
duracin de su consulta. Esta informacin se tomar como base para crear la agenda cada mes,
considerando para cada mes los das y/u horarios que en ese mes no podr atender.
Cuando el paciente llama por telfono, se le pregunta el motivo de la consulta y en funcin de eso se le
asigna uno o ms turnos. Por ejemplo, si lo que debe hacerse es un tratamiento de conducto, se le asignan
dos turnos de media hora, consecutivos.
Descripcin con resumen esencial del Caso de Uso 1. Generar Agenda Mensual de
Odontlogo
Nombre del Caso de uso: Generar Agenda Mensual de Odontlogo Nro. de Orden: 1
Objetivo: generar la agenda para un odontlogo, de un mes en particular, as podrn registrarse los turnos de los
pacientes.
Flujo Bsico
Consignas:
Implementacin y Diseo:
Fuentes de Informacin
Todos los casos de estudio planteados, son elaboracin del equipo de Formadores que prepar el
material. (Meles, Judith /Robles Joaqun / Fey Candelaria).