3.4- Análisis de casos de uso.
 

    Otra de las herramientas esenciales para obtener una mayor comprensión del problema son los diágramas de casos de uso. A continuación se da una definición y se muestra también como fueron empleados para la realización de la aplicación.

3.4.1 Introducción.

    Los casos de uso como los describe Karl E. Wiegers son "escenarios en los cuales el usuario interactúa con el sistema que se está definiendo para lograr cierto objetivo específico o realizar alguna tarea en particular". El método que seguimos en nuestro desarrollo es el siguiente: a partir de entrevistas con los futuros usuarios del sistema, se intentan descubrir las diversas situaciones que se puedan presentar durante la utilización del sistema. Por ejemplo, si el cliente menciona la necesidad de cargar archivos desde el disco, entonces una de las situaciones de uso potenciales del sistema será: "El usuario carga un archivo de datos". Nótese que los escenarios se describen como enunciados en el lenguaje del cliente. Una vez que se obtienen la mayor parte de las situaciones (recordemos que la naturaleza cíclica del proceso implica que posteriormente podrían aparecer nuevas situaciones que no hubiesen sido contempladas durante la primera aproximación, y que por ello se deben realizar varias entrevistas con el cliente), debemos intentar reagruparlas y encontrar casos de uso generales que abarquen varias de las situaciones antes encontradas. Así, el escenario de caso de uso es una instancia del caso de uso general.

    Hemos visto como los casos de uso son escenarios que se pueden presentar durante la utilización del sistema, pero también debemos tomar en cuenta a los actores. Un actor, de acuerdo con la definición que encontramos en el tutorial de UML (www.rational.com), es "alguien o algo que debe interactuar con el sistema en desarrollo". Así, podemos pensar por ejemplo en que un doctor es un actor en un sistema médico. Estos dos componentes, actores y casos de uso serán entonces representados en diagramas llamados ‘diagramas de casos de uso’. En estos diagramas se muestran los actores y los casos de uso, así como las relaciones que existan entre ellos, pues no todos los actores están relacionados con todos los casos de uso. También existen relaciones entre los casos de uso, destacan dos tipos distintos, aquellas de <<uso>> y las de <<extensión>>. Las relaciones de <<uso>> muestran comportamientos que son comunes a uno o más casos de uso, las relaciones de <<extensión>> muestran comportamientos opcionales.
 

3.4.2- Descripción de los casos de uso.
 

Enseguida veremos como se aplicó lo antes mencionado dentro del proyecto.

    Para comenzar, retomamos las situaciones potenciales de utilización del sistema, pero detallandolas más, primero se muestra el nombre del caso de uso y enseguida sus instancias:
 

Caso de uso: Transferencia de Datos

- El usuario introduce un stack de imágenes.
- El usuario guarda un stack de imágenes (procesadas o no).
- El usuario guarda los datos de la reconstrucción (volumen).
- El usuario carga una reconstrucción.
 

Caso de uso: Seleccionar Parámetros

- El usuario introduce los datos del stack de imágenes.
- El usuario selecciona un tipo de procesamiento y los parámetros específicos al proceso.
- El usuario selecciona parámetros diversos del despliegue.
 

Caso de uso: Procesar Datos

- El usuario realiza una segmentación.
- El usuario realiza una reconstrucción.
 

Caso de uso: Interactuar con Datos

- El usuario interactúa con la imagen 3D (rotación...).
- El usuario interactúa con la imagen 2D (selección...)
- El usuario interactúa con el histograma.
 

Caso de uso: Desplegar Datos

- El sistema despliega datos en forma de montaje (2D).
- El sistema muestra datos en forma de imagen 3D.
- El sistema muestra datos en forma de histograma.
 
 

En lo que concierne a los actores, para nuestro proyecto solo tenemos un actor que es el usuario.

El diagrama a continuación muestra los casos de uso ,sus relaciones así como al actor antes mencionado.

3.5- Prototipo de la interfaz de usuario.

    Es importante presentar al futuro cliente/usuario un prototipo de la interfaz que tendrá la aplicación. Para ello se puede hacer uso de los diágramas de flujo de la interfase, que muestran que interfases irán apareciendo dependiendo de las acciones que tome el usuario.

    En este caso, el requerimiento para la interfaz de usuario es sencillo, básicamente se trata de una ventana con un área gráfica en donde se verán las imágenes con las que se esta trabajando y un menú a partir del cual se pueden realizar las acciones tales como cargar/guardar, seleccionar procesos y ayuda.

    Posteriormente se tendrán que agregar nuevas ventanas ya que cada proceso necesita ser configurado de manera distinta.
 

    Para realizar un prototipo simplemente se debe de dar al usuario una idea de la apariencia de la aplicación, esto es como un 'esqueleto' no funcional, para facilitar esto es recomendable hacer uso de alguna herramienta de construccion de interfases de usuario, tal como Visual C++, o en nuestro caso "form design", de xforms.

3.6 Análisis de clases.

    Otro paso fundamental dentro de la etapa de análisis del sistema es la de la realización de un diagráma de clases 'inicial',  en realidad este diagrama retoma las tarjetas CRC que se realizaron anteriormente, tomando en cuenta su disposición, así como el estudio de los casos de uso y finalmente el estudio a nivel generalizado del comportamiento en el tiempo de los objetos instanciados a partir de las clases, como veremos adelante.

3.6.1 Determinación de las clases.

    Lo que se hace para pasar de las tarjetas a clases, es tomar cada tarjeta, y crear una clase para ella. Los atributos y responsabilidades de la clase se encuentran a partir de las responsabilidades de la tarjeta CRC. Las relaciones entre clases aparecen a partir de los colaboradores. En este momento también pueden descubrirse atributos comunes entre abstracciones y en ese caso es conveniente pensar en alguna abstracción a nivel superior de la cual hereden las clases que compartan atributos.

    En nuestro caso podemos pensar que el Volumen 3D, el Stack de Imágenes y el Histograma son todos colecciones de datos, que comparten responsabilidades tales cómo el desplegarse, cargar datos y almacenarlos. Por ello desde un principio decidimos reagruparlos al hacerlos heredar de una clase abstracta llamada Coleccion de Datos. Esto permitirá posteriormente simplificar el estudio de las instancias de esta clase, por ejemplo al realizar el diágrama de secuencia de cargado de datos, pues todas las clases hijas lo realizarán de la misma manera.

    A continuación se mencionan las clases propuestas con detalle.

3.6.2 Diccionario de datos de las clases.

    El diccionario de datos de las clases simplemente detalla cada una de las clases que se han descubierto, se muestra el nombre de la clase (que por convención se hace con un 'C_' y el nombre con mayusculas en sus letras iniciales y sin espacios), sus atributos y sus operaciones. No se da aún un tipo de dato para los atributos pues esto es parte del diseño. (Esto se hizo siguiendo un ejemplo de la Universidad de Munich.)

Nota: Dentro de las operaciones no se muestran aquellas que permiten tener acceso a los atributos, se supondrá que para cada atributo hay operaciones que realizan dicha tarea. Otra cosa importante es que C_Punto y C_Color no habian sido descubiertas como abstracciones originalmente, pero dado que el volúmen y el histograma son clases instanciadas a partir de C_ColeccionDeDatos, necesitan hacer uso de otra clase para su instancia, por ello se incluyen en el diccionario.
La aplicación es una abstracción general del sistema y es conveniente representarla desde el inicio.
 
 

Nombre:         C_ColeccionDeDatos Una colección de datos (es una clase abstracta de donde se derivan otras).
Atributos:         Datos    Un arreglo de datos de tipos variados.
Operaciones:    CargaDatos Carga los datos a partir del disco.
                         GuardaDatos Guarda los datos en el disco.
                         CambiaDatos Cambia los datos.
                         DespliegaDatos Despliega los datos.
                         Configura Configura la colección si es necesario.
 

Nombre:         C_StackDeImagenes Una colección de imágenes. Hereda de C_ColeccionDeDatos.
Atributos:         NumeroDeImagenes El número total de imágenes del stack.
                         TamanoDeImagen El tamaño de la imagen (en puntos).
                         DistanciaEntreImagenes La distancia entre dos cortes (en mm).
                         DatosDelPaciente Pequeño texto para datos útiles.
                         TamanoDelPixel Tamaño de un pixel (en mm).
                         TamanoDelDato Formato de imágen (bytes/pixel).
 

Nombre:         C_Imagen Una imagen.
Atributos:         DatosDeImagen Información que define la imágen
                         NumeroDeImagen Un número que identifica la imágen dentro del stack.
Operaciones:    Copia copia los datos de la imagen a otra o desde otra.
 

Nombre:         C_volumen3D Una colección de puntos en el espacio 3D.
Atributos:         NumeroDePuntos El número de puntos del que se compone el volúmen.
                         Orientación La orientación del volúmen en el espacio.
                         Normales Las normales a los puntos.
Operaciones:   CambiaOrientación cambia la orientación del volumen3D
 

Nombre:         C_Punto Un punto en el espacio tridimensional.
Atributos:         CoordX La coordenada X
                         CoordY La coordenada Y
                         CoordZ La coordenada Z
 

Nombre:         C_Histograma  La información de una imagen representada como histograma.
Atributos:         ImagenFuente La imagen a la cual se le calcula el histograma.
Operaciones:    Calcula Calcula el histograma para la imagen dada.
 

Nombre:         C_Color Un color definido como tres niveles, R, G y B.
Atributos:         NivelR La componente roja del color.
                         NivelG La componente verde del color.
                         NivelB La componente azul del color.
 

Nombre:         C_ProcesadorDeImagenes Se encarga de aplicar procesos sobre colecciones de datos.
Atributos:         TipoDeProceso Identifica el tipo de proceso que se va a aplicar.
Operaciones:    AplicaProceso Aplica un algoritmo o proceso determinado.
                         SeleccionaProceso Selecciona uno de los posibles procesos a aplicar.
                         Configura Asigna los parámetros necesarios al proceso.
 

Nombre:         C_VistaGrafica Se encarga de toda la interaccion visual.
Atributos:         TipoDeDespliegue Define el tipo de interfase a presentar.
Operaciones:    AbreVentana Abre una ventana.
                         EsperaInteraccion Recibe la interaccion.
                       EnviaDatosAVentanaGrafica Despliega datos de la coleccion.

Nombre:         C_Aplicacion
Operaciones:    Inicia Inicia la aplicación.
 

3.6.3 Diagramas de secuencia.

    Hemos definido las abstracciones iniciales para la aplicación, pero debemos encontrar cual será el tipo de relación que existe entre estas abstracciones. Una herramienta útil para aclarar este punto son los diagramas de secuencia. Estos diagramas muestran los mensajes que se intercambian las instancias de las clases durante el tiempo. Desde un principio intentamos aclarar qué tipo de relación existe entre las abstracciones. (Véanse algunos consejos).

    Una aproximación util es de realizar un diagrama de secuencia por cada caso de uso o que sea representativo de cada uno de estos. En nuestro caso vamos a escojer los siguientes:

    Normalmente los mensajes que se ven en los diagramas de secuencia deben corresponder estrechamente con las operaciones disponibles para cada clase, pero en esta etapa en la que aún se está buscando comprender bien el problema, pueden aparecer mensajes textuales que posteriormente serán refinados y corresponderan a funciones concretas de cada clase.

    Se presenta primeramente un diagrama 'general' de la aplicación que muestra de manera global la interacción entre el actor y la aplicación y enseguida se muestran los demás.
 

Los diagramas de secuencia son los siguientes: 
Diagrama de secuencia Cargar/Guardar Datos.
 
 
 

 
 Diagrama de secuencia: Interactuar y desplegar datos.
 

 

 
 Diagrama de secuencia: Procesar Datos.
 

 
 3.6.4- Diagrama de Clases

    Terminamos la etapa de análisis con un diagrama de clases que muestra las abstracciones mínimas propuestas para la resolución del problema, así como las relaciones que existen entre ellas.

El diagrama es el siguiente.

 
 

3.7 Conclusión del análisis.

    El análisis es una etapa fundamental dentro de la realización de una aplicación, esta etapa se puede resumir en una sola frase: Entender el problema. Cuando terminamos el análisis tenemos ya una comprensión mayor del problema, sabemos cuales son las abstracciones claves,  y empezamos a estudiar como se desenvuelve la aplicación en el tiempo. Es aconsejable documentar esta etapa incluyendo en la documentación los varios resultados como los que obtuvimos aquí.

    La etapa siguiente es la del diseño, cuyo objetivo principal es de construir un diagrama de clases mas detallado, refinado y orientado a la implementación partiendo del diagrama de clases de análisis, y es la que se verá a continuación.
 


  Regresar al indice.             Ir a página siguiente.