domingo, 26 de julio de 2009

Práctico 4 - Análisis - DSS y Contratos

Ejercicio 2 (básico, imprescindible)

Considerar el Modelo de Dominio presentado en el siguiente diagrama.




a) Realizar los Diagramas de Secuencia del Sistema para los siguientes casos de uso descritos en alto nivel:

i)
Prestar de un libro


“Dado el identificador de una persona, el de un libro, y una fecha de devolución, registra el préstamo de ese libro a esa persona.”


ii)
Devolver un libro:


“Dado el identificador de una persona y el de un libro, registra la devolución del libro que tenía esa persona. En caso de haber expirado la fecha de devolución se incrementa su deuda en 10
veces la cantidad de días que se demoró en devolver el libro.”

iii)
Pagar una deuda:


“Dado el identificador de una persona y un monto, registra el pago (parcial o total) de la deuda que tenía esa persona.”


b)
Realizar el/los contratos para la/las operaciones de sistema identificadas a
partir de los casos de uso anteriores.

Solución:




Ejercicio 3 (medio, imprescindible)

Considerar el Modelo de Dominio presentado en el siguiente diagrama.




a) Expresar las siguientes restricciones en OCL

i)
La matrícula identifica a los vehículos y la cédula de identidad a las
personas.

ii)
El dueño actual de un vehículo no puede ser un dueño anterior.

b)
Realizar el Diagrama de Secuencia del Sistema para el siguiente caso de
uso descrito en alto nivel:

“Dadas la matrícula de un vehículo y el documento de una persona, se debe realizar la compra del vehículo por parte de la persona. En caso de que el vehículo tenga dueño, éste pasa a ser
dueño anterior.”

c)
Realizar el/los contratos para la/las operaciones del sistema.


d)
Presentar mediante snapshots el efecto de aplicar la operación de venta
de un vehículo a una persona, considerando que el vehículo tenía otro dueño antes de ejecutar la operación.

Solución:




Ejercicio 4 (medio, imprescindible)

Se desea hacer un prototipo reducido para bedelía donde pueda tenerse
registrados los cursos y los estudiantes, así como qué estudiantes están inscriptos a cada curso. Notar que los cursos tienen un cupo de 30 estudiantes. Para ello, el Analista ha construido el Modelo de Dominio presentado en el siguiente diagrama.



El Analista ha identificado cuatro operaciones de sistema, a saber:

Dar de alta un nuevo curso.

nuevoCurso(nombre:String, codigo:Integer)


Dar de alta un nuevo estudiante. El sistema devuelve el número que le
asignó al estudiante. El sistema asigna números a partir de cero, en forma ascendente.

nuevoEstudiante(nombre:String):Integer


Obtener la cantidad de estudiantes inscriptos a un curso.


darCantInscriptos(codigo:Integer):Integer


Inscribir al estudiante al curso.

inscribir(numero:Integer, codigo:Integer)


a)
Realizar el Diagrama de Secuencia del Sistema para el siguiente
comportamiento descrito en alto nivel; considere un sistema sin memoria:

“Para dar de alta un curso se ingresa el nombre y código del mismo. Acto
seguido se inscriben los estudiantes, los cuales deben ser ingresados previamente en el sistema en caso de no estarlo. Finalmente se consulta la cantidad de inscriptos del curso.”

b) ¿Cómo se debería modificar el Diagrama de Secuencia anterior si se considera un sistema con memoria?

c)
Realizar los contratos de software para las cuatro operaciones.


d)
Considere que el sistema no contiene inicialmente ninguna instancia creada.

Simule la aplicación exitosa de las operaciones nuevoCurso, nuevoEstudiante
e inscribir, en ese orden, con los datos que desee. Muestre el estado del sistema luego de aplicar cada operación.


Solución:

a)

Nota: para los DSS, paso a utilizar el Visual Paradigm, porque en el Visio logré armar unas cosas mas o menos parecidas a DSSs, pero no encontré forma de poner los recuadros de "loop", "alt", etc. (si alguien sabe cómo se hace...).
Y en el Visual Paradigm, no logro que me subraye el nombre de las instancias de objetos (ej.: Sistema)




b)



c)

Coming (not so) soon....

d)





Ejercicio 5 (medio, imprescindible)

Considerar el Modelo de Dominio presentado en el siguiente diagrama.



a) Realizar el/los Diagramas de Secuencia del Sistema para el siguiente caso de uso descrito en alto nivel:

“Dados los datos de un vehículo, darlo de alta en el sistema”

b) Discutir distintas alternativas considerando que se espera agregar nuevos
tipos de vehículos al sistema.

Solución:

a)



Ejercicio 6 (avanzado, de práctica)

Considerando los siguientes artefactos se pide:

a) Construir el Modelo de Dominio y presentarlo en un diagrama utilizando UML.

b) Realizar el/los Diagramas de Secuencia del Sistema para los casos de uso incluidos en el Modelo de Casos de Uso.

Visión del Problema

Se desea implementar un sistema de compras por Internet para un
supermercado.

Modelo de Casos de Uso

Los actores que interactúan con el sistema son: cliente y administrador.

Caso de Uso: Proceso de compra

Un cliente se conecta al sitio del supermercado, una vez dentro,
puede navegar por distintas góndolas de productos. El cliente posee un carrito, al cual puede agregar unidades de productos.
Cuando escogió todo lo necesario, hace efectiva la compra. Al realizarse la compra, el sistema calcula el monto a pagar en base al contenido del carrito, y solicita al cliente sus datos personales y los datos de su tarjeta de crédito (número, marca y fecha de vencimiento). El sistema efectúa la autorización de la tarjeta, obteniendo el código de autorización. La compra es realizada y se registra los productos comprados, los datos del cliente y el código de autorización de compra, y finalmente el cliente se retira.

Solución:



b)

Versión 1:

Nota: Acabo de darme cuenta que cuando exporto como imagen, el Visual Paradigm no incluye la parte de "sd {nombre}"... ahora ya ví cómo hacer para que lo incluya, pero en las imágenes anteriores falta. Sorry...




Ahora... surgen las dudas...

Ahí asumí que todo eso de "navega por distintas góndolas de productos" era paye para distraer y confundir. Pero...

En el teórico, ponen un ejemplo de un supermercado real ("físico") donde la parte de que el cliente con su carrito (físico) se pasea por las góndolas (físicas) y agarra con la mano productos (físicos) y los mete dentro de su carrito (creo que ya se entendió la idea...), no es relevante para el sistema, pues son eventos externos que no atraviesan la frontera del mismo.

Pero acá todo es virtual; el cliente navegando por las góndolas y viendo los productos, es un evento (o varios eventos) originado en el exterior y que ATRAVIESA la frontera del sistema, pues todo eso de navegar y ver son funcionalidades que mi sistema tiene que proveer...

Así que tendría que reflejar todo eso en mi DSS (verdad????).

Ahora, este "análisis" es un prodigio de ambigüedad (por no decir una porquería), si yo hiciera un análisis tan malo, me echaban del trabajo... es más, al que lo hizo, yo no le daba el título de Analista...
A qué se refiere con "navegar"? Cómo "navega" el cliente???

Cómo reflejo en un DSS las operaciones de "navegar", si en el DSS me dicen que tengo que poner los parámetros con sus tipos, y yo acá no sé ni cómo pretende navegar, menos voy a saber qué operaciones poner y ni hablar de parámetros!! Pongo un "navegarGondola" que reciba de parámetro un DataType "NavOpcion", enumerado, con valores posibles "anterior" y "siguiente" (una navegación básica....)?? No pongo parámetros, asumo que estos se definirán en una etapa posterior (en el diseño, por ej.) y ahí se modificará el DSS para adecuarlo a la opción tomada??

Ante la ambigüedad, asumo las 2 cosas. Meto un DataType de parámetro para que se vea que la navegación no se hace mágicamente leyéndole la mente al usuario, y asumo que más adelante se va a modificar esto.


Ahora... siguiendo con nuestro análisis metodología "Dimensión Desconocida"... la parte de la autorización de la tarjeta de crédito:

Esto en realidad, aunque el "análisis" no lo aclara, va a ser una interacción entre el Sistema y otro software (el de la institución administradora de la tarjeta de crédito). Debería reflejarlo en el DSS, verdad? (verdad????) No es como el caso de una respuesta que el sistema le da al usuario, que ahí sí, es mejor no ponerla en el DSS...

Acá surge otra duda: El actor "administrador" que menciona la letra, y que yo asumí que sería un tipo de usuario del sistema que no intervenía en este caso de uso sino en otro, y que lo ponían para marear, ¿no será en realidad la Institución Administradora de las Tarjetas de Crédito????

Bueno, acá también, asumo que la respuesta es "Sí a todo"...

Con todo esto, acá va la...

Versión 2:



Pero ahora, surgen dudas dentro de las dudas... es que sin dudas, casi que podríamos ser felices, y eso es algo que no debe suceder... :-)

Más allá de "eso está bien????", ¿está bien que el sistema recuerde cosas "temporalmente" (la góndola, el producto actual)? O sería mejor que en los mensajes 1: y 2: el sistema no recuerde nada, y cambiar para que los mensajes 2: y 3: sean:

2: p:=navegarProductosGondola(g:Gondola, navOp:NavOpcion):Producto

y

3: agregarProdACarrito(p:Producto, cantidad:Integer)

???




No hay comentarios:

Publicar un comentario