Entornos Desarrollo - Tema 6
Entornos Desarrollo - Tema 6
Entornos Desarrollo - Tema 6
2.3.- Relaciones.
Los DCU son grafos no conexos en los que los nodos son actores y casos de uso, y las aristas
son las relaciones entre ellos. Representan qué actores realizan las tareas descritas en los casos
de uso, en concreto qué actores inician un caso de uso. Además existen otros tipos de relaciones
que se usan para especificar relaciones más complejas, como uso o herencia entre casos de uso
o actores. Existen diferentes tipos de relaciones entre elementos:
Asociación: representa la relación entre el actor que lo inicia y el caso de uso.
Inclusión: se utiliza cuando queremos dividir una tarea de mayor envergadura en otras más
sencillas, que son utilizadas por la primera. Representa una relación de uso, y son muy
útiles cuando es necesario reutilizar tareas.
Extensión: se utiliza para representar relaciones entre un caso de uso que requiere la
ejecución de otro en determinadas circunstancias.
Generalización: se usa para representar relaciones de herencia entre casos de uso o
actores.
A continuación las vemos con un poco más de detalle.
2.3.1.- Interacción o asociación.
Hay una asociación entre un actor y un caso de uso si el actor interactúa con el sistema para
llevar a cabo el caso de uso o para iniciarlo. Una asociación se representa mediante un línea
continua que une un actor con un caso de uso. Por ejemplo, un usuario de un sistema de venta
por Internet puede hacer un pedido, lo que se representa del siguiente modo:
2.3.2.- Generalización.
Es posible que, igual que con los diagramas de clases, existan casos de uso que tengan
comportamientos semejantes a otros que los modifican o completan de alguna manera. El caso
base se define de forma abstracta y los hijos heredan sus características añadiendo sus propios
pasos o modificando alguno. Normalmente la herencia se utiliza menos en DCU que en
diagramas de clases. Por ejemplo, el usuario del sistema de venta por Internet puede a su vez
darse de alta en la página web para que tengan sus datos registrados a la hora de hacer el
pedido, en este caso el usuario es la generalización del socio. Ambos actores pueden hacer un
pedido, pero solo el socio puede modificar sus datos en el sistema.
2.3.3.- Extensión.
Se utiliza una relación entre dos casos de uso de tipo "extends" cuando se desea especificar que
el comportamiento de un caso de uso es diferente dependiendo de ciertas circunstancias.
La principal función de esta relación es simplificar el flujo de casos de uso complejos. Se utiliza
cuando existe una parte del caso de uso que se ejecuta sólo en determinadas ocasiones, pero no
es imprescindible para su completa ejecución. Cuando un caso de uso extendido se ejecuta, se
indica en la especificación del caso de uso como un punto de extensión. Los puntos de extensión
se pueden mostrar en el diagrama de casos de uso.
Por ejemplo, cuando un usuario hace un pedido si no es socio se le ofrece la posibilidad de darse
de alta en el sistema en ese momento, pero puede realizar el pedido aunque no lo sea.
2.3.4.- Inclusión.
Se incluye una relación entre dos casos de uso de tipo "include" cuando la ejecución del caso de
uso incluido se da en la rutina normal del caso que lo incluye. Esta relación es muy útil cuando se
desea especificar algún comportamiento común en dos o más casos de uso, aunque es frecuente
cometer el error de utilizar esta técnica para hacer subdivisión de funciones, por lo que se debe
tener mucho cuidado cuando se use. Por ej, a la hora de hacer un pedido se debe buscar la
información de los artículos para obtener el precio, es un proceso que necesariamente forma
parte del caso de uso, sin embargo también forma parte de otros, como son el que visualiza el
catálogo de productos y la búsqueda de un artículo concreto, y dado que tiene entidad por sí solo
se separa del resto de casos de uso y se incluye en los otros tres. Las ventajas de esta
asociación son:
Las descripciones de los casos de uso son más cortas y se entienden mejor.
La identificación de funcionalidad común puede ayudar a descubrir el posible uso de
componentes ya existentes en la implementación.
Las desventajas son:
La inclusión de estas relaciones hace que los diagramas sean más difíciles de leer, sobre
todo para los clientes.
Cuando usamos relaciones de inclusión o extensión no podemos olvidar que los casos de
uso extendidos o incluidos deben cumplir con las características propias de un caso de uso,
es decir, deben representar un flujo de actividad completo desde el punto de vista de lo que
un actor espera que el sistema haga por él, así como no utilizar estas herramientas sólo para
descomponer un caso de uso de envergadura en otros más pequeños, piedra angular del
diseño estructurado y no del orientado a objetos.
2.4.- Elaboración de casos de uso.
Sea cual sea el tipo de diagrama que estemos creando, al hacerlo realizamos un proceso de
abstracción por el cual representamos elementos de la realidad esquemáticamente, y en el DCU
pasa igual, necesitamos abstraer la realidad en un dibujo, en el que representamos qué cosas
pueden hacerse en nuestro sistema y quien las va a hacer. Necesitamos diagramas que incluyan
suficiente información para que el equipo de desarrollo tome las decisiones más adecuadas en la
fase de análisis y diseño para una construcción de software que cumpla con los requerimientos,
así como que sean útiles en la fase de implementación en un lenguaje orientado a objetos.
Partiremos de una descripción lo más detallada posible del problema a resolver y trataremos de
detectar quien interactúa con el sistema, para obtener los actores diagrama de casos de uso, a
continuación buscaremos qué tareas realizan estos actores para determinar los casos de uso más
genéricos. El siguiente paso es refinar el diagrama analizando los casos de uso más generales
para detectar casos relacionados por inclusión (se detectan fácilmente cuando aparecen en dos o
más casos de uso generales), extensión y generalización. Al diagrama generado se le denomina
diagrama frontera. Se define como el DCU que incluye todos los casos de uso genéricos del
sistema, que podrán ser desglosados después en nuevos DCU que los describan si es necesario.
Se especifica enmarcando los casos de uso en un recuadro, que deja a los actores fuera.
Invocación de métodos.
Los mensajes, que significan la invocación de métodos, se representan como flechas horizontales
que van de una línea de vida a otra, indicando con la flecha la dirección del mensaje, los
extremos de cada mensaje se conectan con una línea de vida que conecta a las entidades al
principio del diagrama. Los mensajes se dibujan desde el objeto que envía el mensaje al que lo
recibe, pudiendo ser ambos el mismo objeto y su orden viene determinado por su posición
vertical, un mensaje que se dibuja debajo de otro indica que se envía después, por lo que no se
hace necesario un número de secuencia.
Iteraciones y condicionales.
Además de presentar acciones sencillas que se ejecutan de manera secuencial también se
pueden representar algunas situaciones más complejas como bucles usando marcos,
normalmente se nombra el marco con el tipo de bucle a ejecutar y la condición de parada.
También se pueden representar flujos de mensajes condicionales en función de cierto valor.
Por último destacar que se puede completar el diagrama añadiendo etiquetas y notas en el
margen izquierdo que aclare la operación que se está realizando.
3.2.- Elaboración de un diagrama de secuencia.
Vamos a generar el diagrama de secuencia para el caso de uso Hacer pedido. En él se establece
la secuencia de operaciones que se llevarán a cabo entre los diferentes objetos que intervienen
en el caso de uso. Este es el diagrama ya terminado, en él se han incluido todas las entidades
(actores, objetos y sistema) que participan en el diagrama, y se han descrito todas las
operaciones, incluidos los casos especiales, como es el registro de usuarios o la gestión de los
datos bancarios. También incluye el modelado de acciones en bucle, como es la selección de
artículos y de acciones regidas por condición, como es la posibilidad de cancelar el pedido si hay
problemas con la tarjeta de crédito.
Transiciones: Relación entre dos estados que indica que un objeto en el primer estado
realizará ciertas acciones y pasará al segundo estado cuando ocurra un evento específico
y satisfaga ciertas condiciones. Se representa mediante una línea dirigida del estado inicial
al siguiente. Podemos encontrar diferentes tipos de transacciones:
o Secuencial o sin disparadores: Al completar la acción del estado origen se ejecuta la
acción de salida y, sin ningún retraso, el control sigue por la transición y pasa al
siguiente estado.
o Bifurcación(Decision node): Especifica caminos alternativos, elegidos según el valor
de alguna expresión booleana. Las condiciones de salida no deben solaparse y
deben cubrir todas las posibilidades (puede utilizarse la palabra clave else). Pueden
utilizarse para lograr el efecto de las iteraciones.
o Fusión (Merge node): Redirigen varios flujos de entrada en un único flujo de salida.
No tiene tiempo de espera ni sincronización.
o División (Fork node): Permiten expresar la sincronización o ejecución paralela de
actividades. Las actividades invocadas después de una división son concurrentes.
o Unión (Join node): Por definición, en la unión los flujos entrantes se sincronizan, es
decir, cada uno espera hasta que todos los flujos de entrada han alcanzado la
unión.
Objetos: Manifestación concreta de una abstracción o instancia de una clase. Cuando
interviene un objeto no se utilizan los flujos de eventos habituales sino flujos de objetos (se
representan con una flecha de igual manera) que permiten mostrar los objetos que
participan dentro del flujo de control asociado a un diagrama de actividades. Junto a ello se
puede indicar cómo cambian los valores de sus atributos, su estado o sus roles.
Se utilizan carriles o calles para ver QUIENES son los responsables de realizar las distintas
actividades, es decir, especifican qué parte de la organización es responsable de una actividad.
Cada calle tiene un nombre único dentro del diagrama.
Puede ser implementada por una o varias clases.
Las actividades de cada calle se consideran independientes y se ejecutan
concurrentemente a las de otras calles.
5.2.- Elaboración de un diagrama de actividad.
El siguiente diagrama de actividad representa el caso de uso hacer pedido, en el aparecen los
elementos que hemos visto en las secciones anteriores.
En las bifurcaciones se ha añadido la condición que indica si se pasa a una acción o a otra.
Las acciones Seleccionar artículo y Seleccionar cantidad se han considerado concurrentes.
En este otro diagrama se simplifican las acciones a realizar y se eliminan los objetos para facilitar
la inclusión de calles que indican quien realiza cada acción:
Nota: Para añadir las calles en Visual Paradigm se utiliza la herramienta del panel "Vertical
Swimlane".
6.- Diagramas de estados.
Basado en los statecharts de David Harel. Representan máquinas de estados (autómatas de
estados finitos) para modelar el comportamiento dinámico basado en la respuesta a ciertos
eventos de aquellos objetos que requieran su especificación, normalmente por su
comportamiento significativo en tiempo real y su participación en varios casos de uso. El resto de
objetos se dice que tienen un único estado. En relación con el diagrama de estados se cumple
que:
Un objeto está en un estado concreto en un cierto momento, que viene determinado,
parcialmente, por los valores de sus atributos.
La transición de un estado a otro es momentánea y se produce cuando ocurre un
determinado evento.
Una máquina de estados procesa un evento cada vez y termina con todas las
consecuencias del evento antes de procesar otro. Si ocurren 2 eventos de forma
simultánea, se procesan como si se hubieran producido en cualquier orden, sin pérdida de
generalidad.
Un diagrama de máquina de estados expresa el comportamiento de un objeto como una
progresión a través de una serie de estados, provocada por eventos y las acciones relacionadas
que pueden ocurrir. Por ej, aquí tenemos el diagrama de estados de una puerta.
Los datos que debemos incluir para elaborar la DCU, el contrato, eran:
Nombre: nombre del caso de uso.
Actores: aquellos que interactúan con el sistema a través del caso de uso.
Propósito: breve descripción de lo que se espera que haga.
Precondiciones: aquellas que deben cumplirse para que pueda llevarse a cabo el caso de
uso.
Flujo normal: flujo normal de eventos que deben cumplirse para ejecutar el caso de uso
exitosamente.
Flujo alternativo: flujo de eventos que se llevan a cabo cuando se producen casos
inesperados poco frecuentes. No se deben incluir aquí errores como escribir un tipo de
dato incorrecto o la omisión de un parámetro necesario.
Postcondiciones: las que se cumplen una vez que se ha realizado el caso de uso.
Para incluir el nombre, actores, propósito, precondiciones y postcondiciones abrimos la
especificación del caso de uso. Esto da lugar a la aparición de una ventana con un conjunto de
pestañas que podemos rellenar:
En la pestaña "General" rellenamos el nombre "Hacer pedido", y tenemos un espacio para
escribir una breve descripción del caso de uso, por ejemplo: "El cliente visualiza los
productos que están a la venta, que se pueden seleccionar para añadirlos al pedido. Puede
añadir tantos artículos como desee, cada artículo añadido modifica el total a pagar según
su precio y la cantidad seleccionada. Cuando el cliente ha rellenado todos los productos
que quiere comprar debe formalizar el pedido. En caso de que el cliente no sea socio de la
empresa antes de formalizar la compra se le indica que puede hacerse socio, si el cliente
acepta se abre el formulario de alta, en caso contrario se cancela el pedido. En caso de
que se produzca algún problema con los datos bancarios se ofrecerá la posibilidad se
volver a introducirlos. Al finalizar un pedido se añade al sistema con el estado pendiente."
En la pestaña "Valores etiquetados" encontramos un conjunto de campos predefinidos,
entre los que se encuentran el autor, precondiciones y postcondiciones, que podemos
rellenar de la siguiente manera:
Autor: usuario.
Precondiciones: Existe una campaña abierta con productos de la temporada actual a la
venta.
Postcondiciones: Se ha añadido un pedido con un conjunto de productos para servir con
el estado "pendiente" que deberá ser revisado. También se pueden incluir otros datos
como la complejidad, el estado de realización del caso de uso.
Para incluir el resto de los datos en el caso de uso hacemos clic en la opción "Open Use Case
Details..." del menú contextual, lo que da lugar a la aparición de una ventana con una serie de
pestañas. En ellas se recupera la información de la especificación que hemos rellenado antes,
además, podemos rellenar el flujo de eventos del caso de uso, en condiciones normales
usaríamos la pestaña "Flow of events", sin embargo como esta opción solo está disponible en la
versión profesional, utilizaremos la pestaña "Descripción", que está disponible en la versión
community. Para activarla pulsamos el botón "Create/Open Description". Podemos añadir varias
descripciones de diferentes tipos, pulsando el botón "Nuevo". Para añadir filas al flujo de eventos
pinchamos en el botón. En principio añadimos la descripción principal, luego
añadiremos otras alternativas. Esta es la descripción principal, en ella se describe el flujo normal
de eventos que se producen cuando se ejecuta el caso de uso sin ningún problema.
Añadimos un par de descripciones alternativas para indicar que hacer cuando el usuario no es
socio y cuando los datos no son correctos.