Documentos de Académico
Documentos de Profesional
Documentos de Cultura
“Reasignar Citas”
A lo largo de este documento os voy a contar paso a paso cómo realizar el análisis y el
diseño del caso de uso de Reasignar Citas de un médico que hemos trabajado en el aula.
Flujo de Eventos
=============
-tiene Cita *
-fechaYHora : Date
* -tiene
Análisis
El primer paso es realizar el Diagrama de Colaboración. Para su realización, lo primero
que tenemos que hacer es tener claro qué vamos a representar. En el diagrama de
colaboración sólo se muestra uno de los diferentes caminos que haya en el flujo de
eventos del caso de uso. En este caso, vamos a realizar diagrama de colaboración del
Caso de Uso Reasignar Citas suponiendo que hay citas libres para la reasignación1.
1
En el enunciado nos dicen que cada médico ya tiene sus citas creadas, por lo que cada objeto tendrá una
lista de citas y las citas podrán tener paciente asignado o no (según si están libres u ocupadas)
En este caso se ha optado por implementar las relaciones entre Paciente y Cita y entre
Médico y Cita de manera doble. Esto es, el Paciente y el Médico tienen una ListaCitas,
y una Cita guarda la referencia tanto al Médico como al Paciente. Obviamente no es la
mejor solución para este caso de uso, pero así veremos el trabajo “extra” que supone
tomar una decisión errónea.
Comenzamos dibujando el actor
encargado de realizar el Caso de
Uso y una única clase frontera que
IU_RC
representará a todas las interfaces
gráficas involucradas en este Caso
Medico Cabecera de Uso
Después del paso 1 tenemos el número de colegiado del médico, pero con eso no
podemos hacer nada. En orientación a objetos no vale con conocer el valor de un
atributo de un objeto, tenemos que conocer cual es la instancia concreta que tiene ese
valor. Para encontrar esa instancia, lo único que podemos hacer es ir preguntando uno a
uno a todos los objetos de tipo Médico a ver qué valor tienen en el atributo
NumColegiado, y cuando lo encontremos, ya sabremos sobre qué instancia concreta
queremos trabajar.
Para trabajar con los objetos, siempre usaremos un gestor como intermediario, nunca
tendremos operaciones que vayan desde la interfaz directamente a un objeto entidad.
Así que tenemos que tener un gestor (le llamaremos Gestor de Médicos, ya que va a
trabajar con la entidad llamada médicos) que nos ofrezca una operación, que lo que
haga sea ir buscando uno por uno en todos los objetos de tipo Médico y mirando a ver
qué valor tiene su atributo NumColegiado y esa operación devolverá como resultado, la
instancia de tipo médico que tiene ese número de colegiado. Los gestores que definamos
conocerán todas las instancias que existan de los objetos de aquella clase que gestionen.
Ya tenemos la lista de todas las citas que hay que reasignar (las de ese médico en ese
día). Ahora tal y como nos dice el flujo de eventos del caso de uso, tenemos que intentar
reasignarlas. Para ello el primer paso es buscar una cita el mismo día a la misma hora
que esté libre (recordad que lo primero que hemos decidido es que sí que iba a haber
citas libres para reasignar, pero aún así tendremos que hacer las operaciones para
buscarlas). ¿Cómo sabemos si una cita está libre? Porque no tiene un paciente asignado
en su atributo Paciente.
Por lo tanto, voy a definir una función BuscarCitaLibre, que dada una cita (de las que
hay que reasignar) obtiene otra cita libre el mismo día a la misma hora
Esta operación se ejecuta
sobre la cita pasada como
parámetro, para saber qué
fecha y hora tenemos que
buscar en las citas libres
Una vez que ya he encontrado una cita libre el mismo día y a la misma hora, lo que
tengo que hacer es reasignar el paciente. Para ello voy a definir una operación
ReasignarCita, que dada la cita vieja y la nueva, reasigna al paciente de una a otra.
Para obtener la
referencia al paciente de
la cita vieja
Cuando ya sé cual es el
objeto Paciente, obtengo
su nombre y su teléfono
Obtengo el objeto
Medico de la CitaNueva
y luego pregunto por el
nombre
Y con esto hemos finalizado el diagrama de colaboración del caso de uso Reasignar
Citas.
Diseño
Gracias al diagrama de colaboración hemos identificado qué operaciones nos hacen
falta y dónde tienen que estar, así que nuestro diagrama de clases (modelo del diseño)
quedaría como sigue.
Ya tenemos una parte del diseño de un caso de uso, el diagrama de clases, ahora vamos
a realizar la otra parte, el diagrama de secuencia. En el diagrama de secuencia vamos a
representar exactamente cómo va a funcionar el caso de uso, qué operaciones se
ejecutan, dónde se ejecuta cada operación, si se repite, etc. Hay que tener en cuenta que
en el diagrama de secuencia se muestran todas las alternativas al flujo de eventos
principal, por lo que hay que ir indicando si esa parte del diagrama se ejecuta siempre o
sólo cuando se cumple una cierta condición.
El único cambio entre un caso y el otro sería que en si no se ha reasignado, los datos a
mostrar son los que contiene el objeto CitaVieja, mientras que si la cita ha sido
reasignada, esos datos son los de CitaNueva. Por lo tanto lo que cambiará será el
parámetro. Es por eso que he preferido representar que los datos se obtienen de un
objeto Cita genérico, porque a veces será CitaNueva y otras veces CitaVieja.
Otra cosa a tener clara es que cuando estamos trabajando con Bases de Datos, el
diagrama de colaboración no nos sirve mas que como una pequeña guía que nos puede
decir cuales son los pasos a seguir, pero nada más. Si estamos trabajando con una Base
de Datos podemos hacer uso de todas las ventajas que nos ofrecen (trabajar con las
claves y no con referencias, posibilidad de unir tablas en una única consulta SQL, etc.).
Por eso el diagrama de secuencia usando SGBD no tiene porqué coincidir en los pasos
con el diagrama de colaboración.
En la operación 3 gracias a las posibilidades que nos ofrece SQL he obtenido casi todos
los datos que necesito para mostrar por pantalla posteriormente. Sólo falta obtener el
nombre del médico.
Al igual que en el diagrama anterior hay una serie de operaciones que sólo se ejecutarán
cuando se cumpla una condición: que haya una cita libre el mismo día a la misma hora.
Y también tenemos una serie de operaciones (de la 18 a la 21) que se van a ejecutar
tanto si hemos encontrado la cita libre o no, pero con una pequeña diferencia.
Si hemos encontrado una cita libre, el número de colegiado que usamos en la consulta
SQL del paso 18 será el número de colegiado que tenga esa cita libre y que lo habremos
obtenido en el paso 15a.
Si no hemos encontrado ninguna cita libre, el número de colegiado del paso 18 será el
que ha introducido el usuario en el primer paso. Por lo tanto, si lo necesitamos en el
paso 18 hay que hacerlo llegar hasta ahí de alguna manera. Esa manera es como un
parámetro de la operación 11. Si la operación 11 encuentra una cita libre, ese número de
colegiado no sirve para nada, pero si no se encuentra la cita libre lo necesitamos para
poder sacar el nombre del médico.