Citation preview

Tutorial Rational Rose 7 En este tutorial usaremos como ejemplo base una Floristería virtual.

1. Definición del problema: Floristería virtual En este ejemplo se pretende desarrollar una tienda de flores virtual. Para ello una empresa decide montar una franquicia de reparto de flores y creará una página Web que colocará en Internet; las floristerías se harán miembros de la franquicia y serán las encargadas del reparto de las flores solicitadas por Internet. Los usuarios se conectarán a la máquina Web y realizarán pedidos, (encargarán ramos de flores) que serán enviados a otra tercera persona. Una vez que el usuario ha realizado el pedido, la aplicación se encargará de buscar la floristería más cercana al domicilio del destinatario, que se encuentre registrada en el sistema y la notificará que debe realizar una entrega. Cuando esta floristería haya realizado la entrega entrará en el sistema y registra la fecha y hora en que realizo la entrega. La aplicación debe de llevar un registro de fechas tales como fecha en la que se realiza el pedido, fecha en la que de debe entregar, la fecha de real de la entrega, etc. Cuando un cliente hace un pedido, se le proporciona un identificador único para poder seguir el estado de su pedido. El usuario puede entrar en el sistema y seguir el estado de su pedido así como anular la entrega si aún no se ha realizado. 2. Creación de Casos de Uso 2.1 Actores Los actores no son parte del sistema ellos representan a una persona o cosa que debe interactuar con el sistema. Lo único que un actor puede hacer es: Introducir información al sistema 

Recibir información del sistema.



Entrar y recibir información del sistema.

Los actores se deben de buscar y encontrar en la definición del problema. En UML, un actor es representado por un muñeco de alambre como el mostrado en la figura.

Figura 2.1 Icono de un Actor Actores de la Floristería virtual serán:  Las Personas de desean enviar flores.



Las empresas o personas encargadas de enviar físicamente las flores a las



personas destino del pedido. El administrador que será el encargado de dar de alta las Tiendas en el sistema.



El asignador, entendiéndose como un proceso encargado de asignar los pedidos



realizados por los clientes a la tienda que deberá hacer la entrega. Los destinatarios de los pedidos.

2.1.1 Creación de Diagrama de Casos de Uso Un diagrama de casos de uso es la representación gráfica que relaciona los actores con los casos de uso y sus relaciones dentro del sistema. Cada sistema típicamente debe tener un diagrama de casos de uso. Dependiendo la complejidad del sistema y el nivel de detalle que se quiera entrar el sistema puede tener varios diagramas de casos de uso. Comenzamos representando el comportamiento de los movimientos de las actividades de la floristería por medio de casos de uso en Rational Rose. -Se pincha con el botón derecho sobre la pestaña Use Case View -Seguidamente se selecciona New, y a continuación Use Case Diagram

Figura 2.2.1.1 Selección diagrama de Casos de Uso - Así tendremos creado el nuevo diagrama de casos de uso.

Figura 2.3.1.2 Obtención diagrama de Casos de Uso - Al cual nombraremos, en este caso, como Floristería. Y hacer doble clic encima del diagrama para que nos muestre por pantalla el Toolbox de este diagrama, y su ventana correspondiente.

Figura 2.4.1.3 Floristería -Una vez abierta la ventana de Casos de uso es posible añadir casos de uso y actores directamente en la ventana, a través de la barra de herramientas.

Puntero de ratón normal, permite la selección de los elementos ya existentes en el diagrama de casos de uso.

Añade un texto o etiqueta al diagrama de casos de uso.

Añade una nota de texto al diagrama de casos de uso. La nota puede estar asociada al diagrama o a un elemento en particular.

Establece una relación entre una nota de texto y un elemento. La nota y el elemento con el que se establece la relación deben estar previamente en el diagrama.

Añade un paquete al diagrama. Los paquetes son agrupaciones de elementos. Se pueden definir paquetes de casos de uso, de clases de componentes, etc.

Añade un nuevo caso de uso al Diagrama.

Añade un nuevo actor al diagrama.

Establece una relación entre un caso de uso y un actor.

Establece una relación o dependencia entre paquetes.

Establece una generalización entre casos de uso o actores.

- O bien como se detalla a continuación:

2.1.2 Creación de Actores 1. Se pulsa con el botón derecho en la pestaña del árbol marcada como Use Case View, para que aparezca visible el menú contextual. 2. Se selecciona la opción New Actor. Un nuevo actor llamado New Class se añadirá al árbol. 3. Cuando el nombre del actor se encuentra todavía seleccionado se introduce el nombre correcto de este.

Figura 2.1.5.1 Creación de un nuevo actor Repetir el proceso anterior para crear los usuarios de la aplicación ·

*Cliente.- Personas que desean enviar flores.

·

*Tienda.- Empresas o personas encargadas de enviar físicamente las flores a las personas destino del pedido.

·

*Administrador.- Persona encargada en dar de alta las Tiendas en el sistema.

·

*Asignador.- Proceso encargado de leer los nuevos pedidos y asignárselos a la tienda que realizará la entrega.

Hacer notar que los destinatarios no se han considerado como actores del sistema, aunque en la vida real sean personas físicas, pero su papel no es relevante en la aplicación. Por lo tanto, no siempre cualquier persona que aparezca en la definición de un problema se debe considerar como actor del sistema.

Resaltar que se ha creado un actor con nombre Asignador, que sin ser una persona física, sino un ente abstracto, se ha considerado como un actor del sistema, al ser de vital importancia y tener unas tareas bien definidas (Asignar cada pedido a la floristería más cercana al domicilio cliente).

Figura 2.1.6.2 Vista del árbol de Casos de Uso (actores) Documentación de los Actores Una vez creados los actores se debería comentar su papel en el sistema. 1. Se hace doble clic el icono de un actor.

Figura 2.1.7.3 Documentación de actores 2. Se selecciona la pestaña de General y se introduce la documentación asociada al actor, en la ventana rotulada como Documentation.

Figura 2.1.8.4 Documentación de actores II Si la documentación asociada al actor es demasiado extensa para introducirla en la anterior ventana es posible añadir información externa al sistema en un archivo, para ello: 1. Se hace doble clic el icono de un actor. 2. Se selecciona la pestaña Files y se pulsa en el interior de la ventana con el botón derecho de ratón.

Figura 2.1.9.5 Documentación de actores por medio de fichero 3. En el menú contextual se selecciona Insert File. 4. Se abrirá un explorador que permitirá anexar un archivo.

Figura 2.1.10.5 Documentación de actores por medio de fichero II 2.2 Casos de Uso Definen el diálogo entre el actor y el sistema. Definen los requisitos funcionales del Sistema. Deben de ser intuitivos y sistemáticos. En UML, un caso de uso se representa como un ovalo.

Figura 2.2 Icono de un Caso de Uso 2.2.1 Creación de Casos de Uso. 1. Se pulsa con el botón derecho en la pestaña del árbol marcada como Use Case View, para que aparezca visible el menú contextual. 2. Se selecciona la opción New Use Case. Un nuevo Caso de Uso llamado New Case se añadirá al árbol.

Figura 2.2.1 Creación de un Caso de Uso 3. Con el Caso de uso aun seleccionado se introduce el nombre del caso de uso.

Figura 2.2.2 Creación de un Caso de Uso II Una vez creados los casos de uso del sistema se debería comentar su misión en el sistema y su propósito funcional. 1. Se hace doble clic el icono del un actor. 2. Se selecciona la pestaña de General y entrar la documentación asociada al actor, en la ventana rotulada como Documentation. Casos de uso de la Floristería virtual. 1. Mantenimiento de tienda.  Crear una nueva tienda. 

Modificar una existente.



Borrar una tienda.

2. Hacer un pedido  Crear un nuevo usuario 

Crear un nuevo destinatario



Confirmar el pedido.

3. Hace el seguimiento del pedido  Obtener nuevos pedidos 

Concertar cita con el destinatario.



Informar de la entrega.

4. Asignar pedidos a Tiendas

Figura 2.2.3 Vista del Árbol de los Casos de Uso Cada caso de uso se puede dividir a su vez en una serie de casos de uso, llamados sus flujos, hasta completar la mínima acción que puede realizar el sistema. En el ejemplo que nos ocupa se pueden definir cuatro casos de uso básicos, uno para cada actor, a su vez cada caso de uso se puede dividir a su vez en múltiples casos. Asociación de documentos externos en un caso de uso. Al igual que en los actores es posible la asignación de documentos externos para documentar el funcionamiento de los casos de uso. 2.3 Relación Entre Los Casos De Uso Debe existir una relación entre el actor y el caso de uso. Este tipo de relación es con frecuencia referenciada como asociación. La asociación representa la comunicación entre el actor y los casos de uso. En UML una asociación se representa como una línea que une el actor con un caso de uso. Una asociación puede ser navegable en ambos sentidos, aunque lo normal es que sea navegable en sentido del actor al caso de uso. El sentido de navegabilidad esta representado por una punta de flecha en la relación que uno el actor con el caso de uso. Si la relación es navegable en ambos sentidos no existe punta de flecha en ningún sentido. 2.4 Diagramas De Casos De Uso Una vez obtenidos los elementos necesarios para la creación de nuestro diagrama, simplemente tenemos que seleccionar los elementos y arrastrarlos a la ventana del diagrama (situada a la derecha) y colocarlos. 2.4.1 Creación de Asociaciones de comunicaciones en Rational Rose. 1. Se pulsa con el ratón en la barra de herramientas el botón marcado como una

flecha 2. Se pulsa sobre el actor inicio de la relación y se arrastra el ratón hasta soltarlo sobre el caso de uso objeto de la relación.

2.5 Los Estereotipos Un estereotipo es una extensión del vocabulario de UML que permite crear nuevos bloques de construcción derivados a partir de los existentes, pero específicos a un problema concreto. De esta manera se pueden definir nuevas clases a partir de las existentes, pero con características propias de tal forma que a cada estereotipo puede proporcionar sus propias restricciones y notaciones. Cada estereotipo puede proporcionar su propio icono. Los estereotipos no son específicos de los casos de uso, estos también se pueden aplicar a las clases y a las relaciones, tanto a las relaciones entre clases, como a las relaciones entre los actores y los casos de uso. Para modificar los estereotipos 1. Se hace doble clic sobre la relación, clase o caso de uso sobre al que se desea cambiar el estereotipo. 2. En la pestaña General del dialogo se selecciona el estereotipo deseado de la lista desplegable con nombre “Estereotype” o se introduce un nuevo valor.

2.5.1 Borrado de Elementos del Diagrama El botón suprimir tan sólo elimina los elementos del diagrama, no del proyecto en curso. Para eliminar un elemento del proyecto se deben seguir los siguientes pasos: 1. Se pulsa con el botón derecho del ratón sobre el elemento que se desea eliminar en el árbol de la ventana izquierda. 2. Se selecciona Delete en el menú contextual. 3. Eliminar un elemento del árbol lo elimina de todos los diagramas donde se esta utilizando, estén o no visible actualmente. La combinación de teclas “Ctrl+D” elimina el elemento actualmente seleccionado. 2.5.2 Comentarios Si un elemento es utilizado en varios diagramas, la modificación de los parámetros de uno de ellos se verá reflejado en todos, independientemente del diagrama seleccionado actualmente.

Figura 2.5.2.1 Vista del Diagrama de Casos de Uso

Tenemos la posibilidad de añadir notas con el fin de aclarar la estructura o la participación de algún componente el diagrama; para ello tendremos que seleccionar de la caja de herramientas la nota, introducir el texto y colocarla donde sea necesario.

Figura 2.5.2.2 Vista del Diagrama de Casos de Uso con nota aclaratoria.

3 Creación de Clases 3.1 Que es una clase Se define una clase como un conjunto de Objetos que comparte una estructura y comportamiento común. En UML una clase se representa mediante un rectángulo dividido en tres compartimentos que contienen de arriba abajo las siguientes informaciones: ·

* El nombre de un estereotipo entre “”, en una línea por debajo el nombre de la clase por un icono que puede representar el estereotipo de la misma.

·

* En un segundo compartimento los atributos de la clase según la sintaxis: visibilidad nombre_atributo:expesión_tipo=valor_inicial {cadena_propiedades} visibilidad es un símbolo que puede ser:

La visibilidad puede abarcar un quinto símbolo ‘$’ que representa un atributo estático, es decir un atributo cuyo valor es común a todas las instancias de la clase. Este atributo estará a continuación de uno de los símbolos anteriormente comentados. La representación de la visibilidad de las operaciones y de los atributos en modo icono o texto se modificar activando la opción Visibility as icons dentro de la pestaña Notación del menú Tools-Options. Después de hacer esto, las clases previamente diseñadas no cambiarán su visualización, para mostrar los atributos u operaciones con su nueva notación, actualizar el diagrama pulsando las opciones de menú Format AutosizeAll. * expresión_tipo representa un tipo de datos definido al que pertenece el atributo. Los tipos de datos tipos son int, float, char,... , aunque también es posible definir como tipo de dato clases que se hayan diseñado previamente. * valor_inicial corresponde al valor inicial que el atributo adquiere de forma automática al ser creado el objeto. * cadena_propiedades corresponde a un conjunto de propiedades aplicables al atributo -En el tercer compartimento se especifican las operaciones de la clase según la sintaxis: Visibilidad nombre_operación (lista_parámetros): expresión_tipo_valor_retorno { cadena_propiedades } * visibilidad es similar a lo definido para los atributos. * expresión_tipo_valor_retorno representa el tipo de dato del valor devuelto por la operación. * lista_parámetros es una secuencia de expresiones, separadas por comas, con la siguientes sintaxis: nombre_parametro:expresión_tipo=valor_por_defecto * expresión_tipo indica el tipo de dato al que pertenece el parámetro.

* valor_por_defecto corresponde al valor que se utilizará en el caso de que la llamada a operación se realice sin especificar dicho parámetro. * cadena_propiedades corresponde a un conjunto de propiedades aplicables a la operación.

Figura 3.1 Representación de Unas clase 3.1.1 Creación de una clase 1. Se pulsa con el botón derecho en la pestaña del árbol marcada como Logical View, para que aparezca visible el menú contextual. 2. Se selecciona la opción New Class. Una nueva Clase llamada New Class se añadirá al árbol.

Figura 3.1.1 Creación de clases 3. Con la clase todavía seleccionada, se introduce el nombre correcto de la clase: Una vez creados las nuevas clases del sistema se debería comentar su misión en el sistema y su propósito funcional. 1. Se hace un doble clic en el icono de la clase.

2. Se selecciona la ventana de Documentación y introduce la documentación asociada a la clase.

Figura 3.1.2 Documentación de clases 3.1.2 Añadir Atributos a una Clase 1. Se pulsa con el botón derecho en la clase a la que se quiere añadir un nuevo atributo, para que aparezca visible el menú contextual. 2. Se selecciona la opción New / Attribute. Un nuevo atributo se añadirá a la clase.

Figura 3.1.2.1 Inserción de atributos de clases 3. Con el atributo todavía seleccionado, se introduce el nombre correcto, tipo de dado y valor inicial de acuerdo a lo explicado al comienzo de este capítulo.

4. Para modificar la visibilidad, se hace doble click sobre el icono del atributo y se cambia dentro de la pestaña General la visibilidad del atributo, marcando el botón que se encuentra dentro del cuadro Export Control. En esta misma pestaña se puede cambiar el nombre, el estereotipo, el tipo de atributo, el valor inicial, así como añadir comentarios del significado del atributo.

Figura 3.1.2.2 Modificación de la visibilidad 1.

En la pestaña Detail se podrá modificar si el atributo es contenido por valor o por referencia, así como si el atributo es estático o no.

Una manera más fácil pero más lenta de añadir atributos es abriendo el dialogo de especificaciones de la clase, haciendo doble clic sobre esta y pulsado sobre la pestaña Attibutes. En esta pestaña del dialogo se pueden añadir todos los atributos necesarios así como asignar la visibilidad, tipo de atributo y valor inicial de una manera más visual.

Figura 3.1.2.3 Añadir nuevos atributos 3.1.3 Añadir Operaciones a una clase 1. Se pulsa con el botón derecho sobre la clase a la que se quiere añadir una nueva Operación, para que aparezca visible el menú contextual. 2. Se selecciona la opción New / Operation. Una nueva operación se añadirá a la clase. 3. Se modifica el nombre de la operación, tipo de valor retornado, atributos de entrada de parámetros y sus valores iniciales de acuerdo a lo explicado al comienzo de este capítulo. 4. Para modificar la visibilidad, se hace doble click sobre de la operación y se cambia dentro de la pestaña General la visibilidad de la operación, marcando el botón que se encuentra dentro del cuadro Export Control. En esta misma pestaña se puede cambiar el nombre, el estereotipo, el tipo de atributo retornado, así como añadir comentarios al funcionamiento de la operación.

Figura 3.1.3.1 Añadir nuevas operaciones 5. En la pestaña Detail se podrán modificar los atributos de entrada de la operación, sus tipos y valores iniciales. Para añadir nuevos parámetros de entrada o eliminar los existentes: ·

* Se pulsa con el botón derecho sobre la ventana arguments.

·

* Se selecciona Insert en el menú conextual.

·

* Se Modifica el nombre del argumento por defecto "argname", por el nombre deseado.

Figura 3.1.3.2 Argumentos de las operaciones. ·

* Se seleccionan las especificaciones del argumento y ahí podemos incluir el tipo de dato.

Figura 3.1.3.3 Argumentos de las operaciones (tipo) ·

Se selecciona la columna Default y se introduce el valor de entrada por defecto.

3.2 Clases Especiales Existen dos tipos de clases, una se define como una extensión de concepto básico de clase y otra como una clase cuyos atributos y operaciones reúnen una propiedad especial. Estos tipos de clase son: * Clase Plantilla o patrón. * Clase Utilidad 3.2.1 Clases Plantilla (Templates) Las clases plantilla se basan en un principio de genericidad dentro de las distintas técnicas desarrollas en el campo de la ingeniería del software y se plantea como una idea de parametrizar el desarrollo de módulos reutilizables. La idea se basaba en la definición del modulo de software de forma genérica de modo que la utilización del mismo en un caso concreto se realizaría dando valores a los parámetros definidos a priori. Generalmente el uso más frecuente de las clases plantilla se realizan en la implementación de las llamadas clases contenedoras. Una clase contenedora tiene por finalidad almacenar y permitir acceder a un conjunto, normalmente homogéneo de objetos bajo unas determinadas condiciones. La finalidad de la clase es por lo tanto independiente del objeto almacenado. Los ejemplos más típicos de este tipo de clases son las clases vector de Java, y vector de las STL (Stardar Template Library) de C++. Una clase plantilla se representa en UML en base a la representación de una clase normal modificada con un rectángulo situado en la esquina superior derecha con líneas discontinua donde se indican lo parámetros de la clase separados por comas. Para crear una clase plantilla (Template ) se deben seguir los siguientes pasos: 1. Se pulsa con el botón derecho en la pestaña del árbol marcada como Logical View, para que aparezca visible el menú contextual. 2. Se selecciona la opción New / Class. Una nueva Clase se añadirá al árbol. 3. Se hace un doble clic sobre la nueva clase, o se pulsa con el botón derecho y se selecciona la opción Open Specificacion. 4. Se selecciona la Pestaña General. 5. Se selecciona en la lista desplegable Type el tipo de clase ParametrizedClass y se validan los cambios pulsado el botón Apply

Figura 3.2.1 Clases Plantilla 6. Se selecciona la pestaña Detail (detalle). 7. Se pulsa con el botón derecho en el campo de Formal Arguments (argumentos formales) para desplegar el menú. 8. Se selecciona el menú Insert (insertar), que insertará un nuevo argumento con un nombre de argname y un tipo de argtype. 9. Con el argname seleccionado, se introduce el nombre del argumento. 10. Se pulsa para seleccionar el argtype y se introduce el tipo del argumento.

Figura 3.2.2 Argumentos. 11. Se repiten los pasos del 7 al 10 para cada argumento. 12. Se pulsa el botón OK para cerrar la Specification (Especificación).

Figura 3.2.3 Representación de una clase Plantilla Se pueden crear clases parametrizables directamente desde la barra de herramientas. Si este icono no se muestra en la barra de Herramientas, se puede añadir con la opción Customize que aparece al pulsar con el botón derecho de sobre la barra de herramientas, para su personalización.

Figura 3.2.4 Personalización de la barra de herramientas.

3.2.2 Clases Utilidad Una clase utilidad aglutina un conjunto de atributos y operaciones que no son propios de una clase especifica y son de definición global. Según la especificación de UML una clase utilidad se representa mediante el símbolo de una clase normal con un estereotipo Rational Rose suministra un símbolo especifico heredado de la notación OMT, en el que se representa mediante una clase con sombra.

Figura 3.2.2.1 Representación de una clase Utilidad

Para crear una clase utilidad, se deben seguir los siguientes pasos: 1. Se pulsa con el botón derecho en la pestaña del árbol marcada como Logical View, para que aparezca visible el menú contextual. 2. Se selecciona la opción New / Class. Una nueva Clase se añadirá al árbol. 3. Se hace doble clic sobre la nueva clase, o pulsar con le botón derecho y seleccionar la opción Open Specificacion. 4. Se selecciona la Pestaña General. 5. Se selecciona en la lista desplegable Type el tipo de clase ClassUtility.

Figura 3.2.2.2 Representación de una clase Utilidad II 6. Se pulsa el botón OK para cerrar la Specification (Especificación). Tenemos la oportunidad de crear las Clases Utilidad directamente, haciendo clic con el botón derecho del ratón en Logical View -->New -->Class Utility

Figura 3.2.2.3 Representación de una clase Utilidad III 3.3 Los Paquetes Si un sistema contiene sólo unas pocas clases, estas se pueden manejar fácilmente. La mayoría de los sistemas están compuestos de muchas clases, y se necesita un mecanismo para agruparlas y facilitar su uso, mantenimiento reutilización. Aquí es donde se usa el concepto de paquete. Un paquete en la vista lógica (Logical View) de un modelo es una colección de paquetes y/o clases relacionados. Un paquete se crea por el agrupamiento de clases u otros paquetes. Un paquete se puede ver desde el nivel más alto del modelo o se puede entrar en él para observar en más detalle su contenido. Cada paquete contiene una interface que es implementado por sus clases públicas. Estas clases, se encargan de la comunicación con los otros paquetes. El resto de las clases de un paquete son clases de implementación y generalmente privadas, por lo que no se comunican con las clases de otros paquetes. Si el sistema es complejo, los paquetes se crearan en la Fase de implementación para facilitar el desarrollo. Para sistemas más simples, las clases que se encuentran en el análisis se suelen agrupar en un paquete. En los procesos de análisis y diseño, el concepto de un paquete se usa para agrupar las clases que son necesarias para llevar a cabo las decisiones arquitectónicas hechas en el sistema. En el UML, los paquetes son representados como carpetas (Folders).

Figura 3.3 Representación de una clase Utilidad 3.3.1 Creación de paquetes 1. Se pulsar con el botón derecho en el árbol de la ventana izquierda. 2. En el menú emergente se selecciona New Package (nuevo paquete).

Figura 3.3.1 Representación de una clase Utilidad (Paquete) 3. Mientras el paquete está todavía seleccionado, se introduce el nombre del paquete. Al introducir el nuevo paquete se deberían recolocar las clases previamente creadas en el modelo. 3.3.2 Recolocado de Clases 1. Se pulsa con el botón derecho sobre la clase a recolocar. 2. Se arrastra la clase al paquete deseado. 3. Se repiten los pasos para cada una de las clases que se desea recolocar. 3.4 Diagramas de clases Según vamos añadiendo clases al modelo, la presentación de las clases no es suficiente, debido a que necesitamos tener una visión global de todas ellas y de sus relaciones entre

si. Los diagramas de clases se crean para tener una imagen de algunas o todas las clases del modelo. El diagrama de clases principal en la vista lógica del modelo es típicamente un dibujo con los paquetes del sistema. Cada paquete contendrá sus diagramas de clases. El cual también mostrará las clases del sistema. 3.4.1 Creación de un diagrama de Clases 1. Para crear el diagrama principal del sistema, se pulsa sobre el símbolo nombrado como Main dentro del la carpeta Logical View en el árbol de la ventana izquierda. 2. Se pulsa sobre una de las clases previamente creadas y se arrastra a la ventana derecha. 3. Se repite este último paso para todas las clases. Una vez abierta la ventana del diagrama de Clases es posible añadir nuevas clases directamente en la ventana, a través de la barra de herramientas.

Puntero de ratón normal, permite la selección de los elementos ya existentes en el diagrama de casos de uso.

Añade un texto o etiqueta al diagrama de Clases.

Añade una nota de texto al diagrama de clases. La nota puede estar asociada al diagrama o a un elemento en particular.

Establece una relación entre una nota de texto y un elemento. La nota y el elemento con el que se establece la relación deben estar previamente en el diagrama.

Añade una clase de tipo interface al diagrama.

Añade un clase al diagrama.

Añade una asociación unidireccional entre dos clases.

Establece una asociación entre una relación y una clase (por lo que crea una clase relación).

Añade un paquete al diagrama. Los paquetes son agrupaciones de objetos, se pueden definir paquete de casos de uso, de clases de componentes, etc.

Establece una relación o dependencia entre paquetes.

Establece una generalización entre dos clases.

3.5 Relaciones entre clases Del mismo modo que los objetos colaboran entre si a través de una conexión establecida en las relaciones de enlace o agregación podemos establecer relaciones entras las clases que nos permitan definir un jerarquía dentro del modelo. En UML se han establecido los siguientes tres tipos básicos de relaciones entre clases: * Asociación. * Herencia o Generalización. * Dependencia. Basados en estos tres tipos básicos se derivan dos mas: * Agregación, es una especialización de la relación de asociación. * Instanciación es una especialización de la relación de dependencia. 3.5.1 Relación de asociación La relación de asociación establece la existencia de una dependencia ente dos clases sin establecer una direccionabilidad en la misma. Generalmente se produce una cierta dualidad en la relación. Supongamos que nuestra empresa en la encargada de suministrar las flores a todas la floristerías de la cadena, por lo tanto cada vez que se hace un pedido, podemos establecer una relación con el nombre de Suministro. Desde el punto de vista del suministrador la floristería tiene el rol de cliente, mientras que desde el punto de vista de la floristería el suministrador tiene el papel de proveedor o servidor. En base a esta dualidad entre los elementos de una asociación se pueden nombrar. * La relación en sí.

* Los extremos de la asociación, lo que se denomina papel o rol, cada extremo tiene un rol. La importancia de la relación en una asociación lleva incluso a crear una clase asociada lo que se denomina una clase asociación, nuestro ejemplo se puede crear una clase asociación que reuniera el conjunto de facturas pendientes de pago por una floristería. Volviendo a los extremos de la asociación es necesario que definamos un nuevo concepto, la cardinalidad de la asociación. Esta parte de la orientación a objetos a sido heredada del modelo entidad relación. Hasta ahora hemos hablado de asociaciones uno a uno, es decir por cada objeto de un extremo esta asociado a uno del otro. Pero pueden existir combinaciones básicas: * Uno a uno * Uno a muchos * Muchos a muchos Volviendo al ejemplo anterior el proveedor puede suministrar flores a muchas floristerías. Por lo que se establece una relación de uno a muchos. Si en el sistema existiesen varios suministradores, estos podrían también suministrar flores a todas las floristerías, por lo que estas podrían tener varios suministradores, en consecuencia se establecería una relación de muchos a muchos entre la clase floristería y la clase suministrador. A parte de la cardinalidad o multiplicidad del rol de una asociación se puede completar la información asociada al rol con información adicional, estas son condiciones o restricciones adicionales como por ejemplo en una asociación de uno a muchos podemos decir si el conjunto de objetos son ordenados o no. Cuando la relación de asociación la tenemos determinada de una forma unívoca un valor a uno o a un conjunto de valores del extremo de cardinalidad mayor que uno podemos hablar de una relación cualificada. Indicar que aunque las relaciones de asociación se han planteado como relaciones existentes entre clases de distintas también podríamos establecer relaciones de una clase consigo misma. Estas son relaciones recursivas. La clase persona establece relaciones recursivas para definir relaciones de parentesco, relaciones de tipo, hermandad, paternidad, etc. 3.5.2 Creación de una relación de asociación 1. Se pulsa sobre el botón de relación de asociación en la barrar de herramientas. 2. Se pulsa sobre la clase origen de la relación. 3. Se arrastra el ratón y se suelta sobre la clase destino de la asociación

Figura 3.2 Representación de una Asociación 3.5.3 Creación de Una relación de Agregación Una relación de agregación es una relación cualificada en la cual uno de los objetos es parte integrante de otro objeto y sin el cual este no puede existir. Supongamos que nuestro negocio es de reparación de vehículos, nosotros al referirnos al objeto motor que siempre estará integrado en un coche y nunca podrá existir un objeto motor sin su objeto contenedor, en este caso un coche. Si por el contrario, fuéramos una fabrica de coches, todas las piezas del coche serian objetos independientes que pueden combinarse para formar otro objeto, pero que pueden existir libremente, cuando están en el almacén en espera de ser montadas. En UML la relación de agregación es representada como un diamante en el lado de la clase contenedora. Para crear una clase de agregación se deben seguir los siguientes pasos. 1. Se pulsa con el botón derecho del ratón sobre una relación entre clases, previamente existente en el extremo más próximo a la clase donde se desea insertar el diamante (la clase contenedora). 2. Se selecciona Agragate en el menú contextual. Un refinamiento de la asociación de agregación, se refiere a si el objeto esta contenido por valor o por referencia. Si esta contenido por valor, implica una propiedad en exclusiva del objeto contenedor, mientras que si es por referencia, el objeto contenido puede estar compartido por varias clases contenedores. Una relación de agregación por valor se representa con el diamante relleno, mientras que si es por referencia, el diamante no estará relleno.

Figura 3.5.3 Representación de una Agregación por referencia 3.5.4 Añadir un nombre a una relación

1. Se hace doble clic sobre la relación a la que se desea asignar un nombre, o se pulsa con el botón derecho sobre ella y se selecciona la opción Open Specification. 2. Se asigna el nombre de la relación en la casilla Name. 3.5.5 Creación de nombres de roles en la relación. 1. Pulsar con el botón derecho ratón sobre una relación entre clases, previamente existente en el extremo de la clase donde se desea insertar el rol. 2. Se selecciona Rol Name. 3. Esto creará un nombre de rol en el extremo de la relación y el cursor permanecerá parpadeando en su interior. 4. Con el nombre de la relación todavía seleccionado introducir el nombre correcto de la relación. 3.5.6 Indicadores de Multiplicidad Aunque la multiplicidad esta definida para las clases, está define el número de objetos que participan en una relación. La cardinalidad o multiplicidad de una relación un UML aparece en los extremos de la relación con la siguiente notación: * Limite inferior .. Limite superior. Por ejemplo 1..6,0..6, 1..* * Valor único, por ejemplo, 0,2 Para indicar la multiplicidad “ n “ es decir muchos, se puede sustituir tanto el valor único como el límite superior por un asterisco. 1. Se pulsa con el botón derecho del ratón sobre una relación entre clases, previamente existente, en el extremo de la clase donde se desea añadir la multiplicidad. 2. Se selecciona Multiplicity, en el nuevo menú flotante se indica la multiplicidad. 3. Se repiten los pasos en el otro extremo de la relación.

Figura 3.5.6. Nombre, roles y Cardinalidad de la Relación 3.5.7 Relaciones Recursivas 1. Se selecciona el icono de relación de asociación en la barra de herramientas.

2. Se pulsa sobre la clase a la que se va añadir la relación recursiva y se arrastra el ratón liberándolo fuera de la clase. 3. Se vuelve a pulsar con el ratón en el interior de la clase donde se desea crear la relación recursiva.

Figura 3.5.7 Cardinalidad y Relación Recursiva 3.5.8 Navegabilidad de las Relaciones Una relación recursiva es el ejemplo mas típico de una lista de objetos, de tal manera que el primer objeto tendrá una referencia al segundo y este al tercero y así sucesivamente hasta el final de la lista. Las listas suelen ser simplemente enlazadas o doblemente enlazadas, de manera que la navegabilidad se pueda realizar en uno o en otro sentido. La navegabilidad se representa en UML como una punta de flecha en sentido de la clase que pose la referencia a la otra. Si las dos clases poseen una referencia entre si, en vez de aparecer una punta de flecha en cada extremo, como se podía esperar, ningún extremo de la relación mostrará punta de flecha. Para cambiar la navegabilidad a una relación se debe seguir la siguiente secuencia de pasos: 1. Se pulsa con el botón derecho del ratón sobre una relación entre clases, previamente existente en el extremo de la clase donde se desea modificar la navegabilidad. 2. Pulsar sobre Navigable. Si la relación es Navegable estará marcada por el símbolo√, en caso contrario no aparecerá ningún símbolo). 3.5.9 Relaciones cualificadas Las relaciones cualificadas son aquellas que utilizan una clave de búsqueda del objeto en el lado de la multiplicidad “muchos” de una asociación: El objeto fuente junto con su valor cualificador se relacionan con sólo un objeto destino. (O conjunto de objetos destino).

Supongamos que un objeto posee una relación a un conjunto de objetos de otro tipo. Si las búsquedas en este conjunto de objetos se hacen siempre por un valor concreto esto implica que se debe recorrer el conjunto de objetos hasta encontrar el valor buscado. Si la relación estuviera cualificada por este valor, con tener la clave de búsqueda nos permitiría acceder al objeto. Como ejemplo si tenemos un objeto Tienda, que posee una serie de clientes, estos pueden estar cualificados por su DNI, de tal manera que con conocer su clave (DNI), nos permite acceder al resto de sus datos (Domicilio, nombre, apellidos, etc.). Estas clases están implementadas en C++ por las clases map y multimap, mientras en Java por la clase HasTable. Si la relación esta cualificada, la clave o claves aparecen encerradas en un rectángulo en el extremo que le corresponda. Para crear una relación cualificada. 1. Se pulsa con el botón derecho del ratón sobre una relación entre clases, previamente existente. 2. Se selecciona New Key/Qualifier. 3. Se modifica en el menú “Key Qualifier Specification for name” el parámetro Name, introduciendo el nombre del parámetro. 4. Se modifica el menú “Key Qualifier Specification for name” el parámetro Type indicando el tipo del parámetro contenido. 5. Se pulsa sobre el Botón OK para confirma los cambios

Figura 3.5.9 Relación Cualificada 3.5.10 Clases Asociación Las clases asociación permiten modelar una asociación como una clase que define las propiedades de la asociación. La clase asociación define atributos descriptivos de la asociación de las clases que no pueden asignarse a una de las clases de forma aislada. Representa con claridad el concepto de instancia de asociación (Enlace). Para crear una clase asociación se deben seguir los siguientes pasos: 1. Se añade al diagrama de clases la nueva clase asociación, como una clase normal.

2. Se selecciona en la barra de herramientas el botón con una línea sólida horizontal y una línea en diagonal a trazas 3. Se pulsa con el botón derecho del ratón sobre una relación entre clases, previamente existente. 4. Se arrastra el puntero del ratón y se libera sobre la clase relación.

Figura 3.5.10 Creación de una Clase Asociación 3.5.11 Generalización (Herencia) La generalización es relación entre un elemento general (Llamado superclase o Clase Padre) y un caso mas especifico de este elemento (Llamado clase hijo). La generalización es con frecuencia llamada “Herencia”. La generalización significa que los objetos hijos se pueden emplear en cualquier lugar donde se pueda emplear el padre, pero no a la inversa, ya que los objetos hijos ofrecen más información que los padres. Los objetos hijos heredan los atributos y métodos de su clase padre, a la que añade los propios, por eso se puede utilizar en el lugar de su clase padre pero no a la inversa. Una operación de una clase hija con el mismo nombre que en la clase padre redefine la operación del padre, esto se conoce como polimorfismo. Para crear una relación de asociación se deben seguir los siguientes pasos: 1. Se pulsa con el ratón sobre el botón que representa un flecha con la punta con un triángulo cerrado. 2. Se pulsa sobre la clase que es un caso particular de la clase mas general. 3. Se arrastra el ratón y se suelta sobre la clase general. Para hacer que dos clases hereden de una misma clase padre y sólo se muestre una línea de relación hacia la clase padre, (como en el siguiente dibujo) se debe crear primero una

relación y en la segunda relación se debe liberar el ratón dentro del triángulo de la línea que define la generalización.

Figura 3.5.11 Representación de una generalización

4 Diagramas 4.1 Diagramas De Secuencia Un diagrama de secuencia muestra interacciones de objetos dispuestos en secuencia de tiempo. Se representan los objetos y las clases involucradas en el escenario y la secuencia de mensajes intercambiados entre los objetos necesarios para desarrollar la funcionalidad descrita en los caso de uso. Los diagramas de secuencia están típicamente asociados con los casos de uso en el diseño del sistema a desarrollar. En el UML, un objeto en un diagrama de secuencia se dibuja como un rectángulo que contiene el nombre del objeto, subrayado. Un objeto se puede nombrar en uno de estos tres modos: el nombre del objeto, el nombre del objeto y su clase o sólo el nombre de la clase (objeto anónimo). Se pueden especificar los nombres de objetos (por ejemplo, los nombres de las flores, Rosa, Tulipán, etc.) o pueden ser generales (por ejemplo, una flor sin determinar). Lo normal es que los objetos anónimos se usen para representar un objeto de la clase a la que pertenecen.

Cada objeto tiene su línea de tiempo representada por una línea trazada debajo del objeto. Los mensajes entre objetos se representan por flechas desde el objeto cliente (remitente del mensaje) al objetos servidor(destinatario del mensaje). 4.1.1 Creación de un diagrama de secuencia 1. Se pulsa con el botón derecho del ratón sobre el caso de uso al que se quiere añadir el diagrama de secuencia para desplegar el menú contextual. 2. Se selecciona New: Sequence Diagram (diagrama nueva secuencia). Un nuevo diagrama secuencia se añadirá árbol. 3. Con el nuevo diagrama de secuencia seleccionado, se introduce el nombre del diagrama de secuencia.

Figura 4.1.1Creación de un diagrama de Secuencia 4.1.2 Creación de objetos y mensajes en el diagrama de secuencia 1.Se hace doble clic en el icono del diagrama de secuencia del árbol de la ventana izquierda para abrir el diagrama. 2. Se pulsa sobre el icono de un nuevo objeto en la barra de herramientas. 3. Se pulsa sobre en la ventana el diagrama para colocar el nuevo objeto. 4. Mientras el objeto está todavía seleccionado se introduce el nombre del objeto.

5. Se repiten los pasos del 2 al 4 para tantos objetos como tenga el diagrama de secuencia. 6. Se pulsa en la barra de Herramientas para seleccionar el icono de mensaje de objeto (botón marcado como una flecha). 7. Pulsa sobre la línea de vida del objeto que envía el mensaje y arrastra la línea del mensaje al de actor o objeto que reciba el mensaje. 8. Mientras la línea de mensaje está todavía seleccionada, introduce el nombre del mensaje. 9. Repite los pasos 7 al 9 para cada mensaje del diagrama. 4.1.3 Asignación objetos en un diagrama de secuencia a las clases 1. Pulsa para seleccionar la clase a la que pertenece el objeto en el árbol. 2. Se arrastra la clase dentro del objeto en el diagrama de secuencia. Rose añadirá el nombre de la clase precedido por “: “ al nombre del objeto. Si el objeto no tiene nombre, el nombre será es “:nombre_clase”.

Figura 4.1.3 Representación de un Diagrama de Secuencia 4.1.4 Diagramas De Secuencias y Clases Interfaz Las clases de interfaz se añaden a los diagramas de secuencia para mostrar la interacción con el usuario o con otro sistema. En las primeras fases del análisis, el

propósito de mostrar las clases de interfaz en un diagrama de secuencia es para capturar y documentar los requerimientos de las interfaces, no para mostrar como la interface se va a implementar. Los mensajes desde el actor a la clase interfaz junto con su información a intercambiar dependerá de la forma de implementación elegida para el desarrollo. 4.1.5 Complejidad y Diagramas De Secuencia Los diagramas de secuencia deben de ser simples, es más fácil ver los objetos, las interacciones y los mensajes entre objetos y su funcionalidad obtenida de los casos de uso. En los diagrama de secuencia no se suele representar la lógica condicional (toda la lógica if, then, else que existe en el mundo real). Si la lógica es simple, (que represente sólo unos pocos mensajes) , se puede añadir al diagrama mediante notas o aclaraciones para informar de las elecciones hechas, si por el contrario la lógica es muy complicada o involucra a muchos mensajes, se deben dibujar varios diagramas separados para cada una de las condiciones, de forma que los diagramas sigan siendo simples. 4.2 Diagramas De Colaboración Un diagrama de colaboración es un camino alternativo para mostrar un escenario de un caso de uso. Este tipo de diagrama muestra las interacciones de objetos organizadas alrededor de otros objetos y sus enlaces entre sí. Un diagrama de colaboración contiene: * Objetos dibujados como rectángulos. * Enlaces entre objetos mostrados como líneas de conexión de los objetos unidos. * Mensajes mostrados como texto y una flecha que apunta desde el cliente al suministrador. 4.2.1 Creación de diagramas de colaboración desde los diagramas de secuencia 1. Se hace doble clic en el diagrama de secuencia para abrir la ventana. 2. Se elige pulsa la Opción de Menu Browse / Create Collaboration Diagram (crear diagrama de colaboración) o se presiona F5. 3. Esto creará un nuevo diagrama de colaboración con los objetos existentes en el diagrama de secuencia. Se colocan los objetos en el diagrama. 4. Se añaden nuevos objetos y mensajes en el diagrama, tantos como sean necesarios. Los diagramas de colaboración se pueden crear también desde el principio. En este caso, el diagrama de secuencia se ha creado a partir del diagrama de colaboración. Para crear un diagrama de colaboración desde el principio: 1. Se pulsa con el botón derecho del ratón sobre el Caso de uso al que se quiera asociar el diagrama de colaboración para que se abra el menú contextual

2. Se selecciona la opción New / Collaboration Diagram (crear diagrama de colaboración ). 3. Se hace doble clic en el diagrama colaboración para abrir la ventana. 4. Se añaden nuevos objetos y mensajes en el diagrama, tantos como sean necesarios.

Figura 4.2.1 Representación de un Diagrama de Colaboración 4.3 ¿Por qué hay dos tipos de Diagramas Diferentes? Los diagramas de secuencia dan de un vistazo la secuencia de acciones que transcurre en el tiempo, qué pasa primero, que pasa después. Los clientes pueden leer fácilmente y entender este tipo de diagramas. Los diagramas de colaboración tienden a dar una visión mayor de la colaboración entre los objetos, los enlaces y relaciones entre estos. 4.4 Comportamiento Dinámico (Diagramas De Estado) Los diagramas de casos de uso describen el comportamiento de los sistemas; esto es, la interacción entre objetos en el sistema. Algunas veces es necesario representar el comportamiento en el interior del objeto. Un diagrama de estados muestra los estados de

un objeto sencillo, los eventos o mensajes que causan una transición desde un estado a otro, y las acciones que resultan de un cambio de estado. Los diagramas de estados no se deben crear para cada clase del sistema, sólo se deben crear para las clases con un comportamiento dinámico significativo. Los diagramas de interacción o de secuencia muestran el comportamiento dinámico del sistema, los diagramas de estado el comportamiento dinámico de una sola clase. 4.4.1 Creación de diagramas de Estados 1. Se pulsa con el botón derecho sobre la clase a la que se desea agregar el diagrama de estados y despliega el menú contextual. 2. Se selecciona el menú Statechar Diagram (diagrama de estado). Esto creará automáticamente y abrirá el diagrama de estados. 4.4.2 Estados Un estado es una condición durante la vida de un objeto cuando satisface alguna condición, desarrolla alguna acción, o espera para un evento. El estado de un objeto debería estar caracterizado por el valor de uno o más de los atributos de la clase. Adicionalmente, un estado de un objeto puede ser caracterizado por la existencia de un enlace a otro objeto. Así, los estados de un objeto se deben buscar mediante el examen de los atributos y enlaces definidos para el objeto.

Figura 4.2.2 Representación de un Estado Un diagrama de transición de estados abarca todos los mensajes que un objeto puede enviar y recibir. El intervalo entre dos mensajes enviados por un objeto representa un estado. Por esto, los diagramas de secuencia se deben estudiar para descubrir los estados en los que puede estar un objeto. 4.4.2.1 Creación de estados 1. Se pulsa para seleccionar un estado de la barra de herramientas 2. Se pulsa sobre el diagrama de estados donde se desea colocar el estado. 3. Con el estado todavía seleccionado, se introduce el nombre del estado. 4.4.2.2 Transiciones De Estado

Una transición de estado representa un cambio desde un estado original a un estado posterior (este podría ser el mismo que el estado original). Las transiciones de estado suelen ser provocadas por Acciones. Hay dos maneras para que se produzca una transición de estado; automático y no automático. Una transición de estado automática ocurre cuando la actividad de un estado se completa ( El evento no tiene un nombre asociado a la transición de estado). Una transición de estado no automática es causada por la llegada de un evento (desde otro objeto o desde fuera del sistema). Ambos tipos de transiciones de estado se consideran que transcurren en un tiempo cero y no se pueden interrumpir (Operación Atómica). Una transición de estado se representa por una flecha que apunta desde el estado original al estado sucesor. 3.1.2 Creación de transiciones de estado 1. Se pulsa con el ratón sobre la barra de herramientas para seleccionar el icono de transición ( un flecha). 2. Se pulsa con el ratón sobre el estado origen de la transición. 3. Arrastra el ratón hasta el estado final de la transición. 4. Si la transición de estado se produce por la llegada de un evento, se introduce el nombre del evento mientras la flecha de transición de estado está todavía seleccionada. 4.4.2.3 Estados Especiales Hay dos tipos de estados especiales que se pueden añadir a un diagrama de transición de estado. El primero es un estado de Inicio (start state). Cada diagrama debe tener uno y sólo un estado de Inicio que debe ser un estado estable cuando se crea el objeto. La notación UML para un estado de inicio es un circulo pequeño relleno negro. El segundo estado especial es un estado de parada (stop state). La notación UML para un estado de parada es un ojo de buey.

Figura 4.4.2.3 Representación de los Estados de Inicio y Parada 4.4.2.4 Creación estados de inicio (start) y parada (Stop) 1. Se pulsa con el ratón sobre el icono start (inicio) de la barra de herramientas. 2. Se pulsa con el ratón sobre diagrama estados para dibujar el icono start. 3. Se pulsa con el ratón sobre el icono de transición de estados de las herramientas (Una flecha). 4. Pulsa en el icono start (inicio) y arrastra la flecha al estado deseado.

5. Se repite la misma secuencia de pasos con el icono stop. (En este caso el es un estado final, por lo que será un estado destino de una transición)

Figura 4.4.2.4 Representación del Diagrama de Estados de un Pedido 4.4.3 Detalles De La Transición De Estados Una transición de estado podría tener una acción y/o una condición de aviso asociada a ella y sería también un disparador o evento. Una acción es el comportamiento que se produce cuando sucede un cambio de estado. Un evento es un mensaje que se envía a otro objeto en el sistema. Una condición de alerta es una expresión booleana de valores atribuidos que permite la transición de estado sólo si la condición es cierta. Ambas, acciones y alertas son comportamientos del objeto y se suelen convertir en operaciones. A menudo estas operaciones son privadas (sólo se pueden usar por el propio objeto). Para introducir detalles a una transición de estado se deben seguir los siguientes pasos: 1. Se pulsa con el botón derecho sobre la flecha de transición de estado para desplegar el menú flotante.

2. Se selecciona la opción Specification (especificación). 3. Se selecciona la pestaña Detail (detalle). 4. Se introduce la acción, aviso y/o evento a enviar. 5. Se pulsar el botón OK para cerrar la especificación. 4.4.4 Detalles Del Estado Las acciones que acompañan todas las transiciones de un estado a otro se deben colocar como una acción entrante en el estado. Así mismo, las acciones que producen una transición fuera del estado se deberían representar como acciones de salida. El comportamiento que ocurre dentro del estado se llama actividad. La actividad de un estado comienza cuando se produce el evento que da origen a la transición al estado y finaliza al producirse un nuevo evento que produce el cambio de estado. El comportamiento de una actividad debería ser una acción simple o enviar un evento a otro objeto. Igual que las acciones y alertas este es comportamiento es típico de las operaciones de un objeto. 4.4.5 Creación de acciones entrantes, acciones salientes y actividades 1. Se pulsa con el botón derecho en el estado para desplegar el menú contextual. 2. Se selecciona la opción de menú Specification (especificación). 3. Se selecciona la pestaña Detail (detalle). 4. Se pulsa con el botón en el campo (Action) para hacer visible el menú contextual. 5 .Se selecciona el menú Insert (insertar). Este creará una acción llamada entry (entrada). 6. Se hace doble clic en entry para hacer visible la especificación de la acción ( Action Specification ). 7. Se selecciona el tipo de acción (simple o enviar evento). 8. Se introduce la información de la acción o del evento a enviar. 9. Se selecciona cuando la acción debe ocurrir. 10. Se pulsa el botón OK para cerrar la Especificación de acción. 11. Se pulsa el botón OK para cerrar la Especificación de estado. https://www.google.com.pe/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF8#q=diagrama+para+asociaciones