# Introducción a &UML;

## Acerca de &UML;

&UML; está diseñado para su uso con software orientado a objetos, y tiene un uso limitado en otro tipo de cuestiones de programación.

&UML; se compone de muchos elementos de maquetación que representan las diferentes partes de un sistema de software. Los elementos UML se utilizan para crear diagramas, que representa una cierta parte o un punto de vista del sistema. &umbrello; soporta los siguientes tipos de diagramas:

- Diagrama de clases que muestra las clases y la relaciones entre ellas

- Diagrama de casos de uso que muestra a los actores (otros usuarios del sistema), los casos de uso (las situaciones que se producen cuando utilizan el sistema) y sus relaciones

- Diagrama de secuencias que muestra objetos y sus relaciones, destacando el intercambio cronológico de mensajes entre los objetos.

- Diagrama de colaboración que muestra objetos y sus relaciones, destacando los objetos que participan en el intercambio de mensajes

- Diagrama de estado que muestra estados, cambios de estado y eventos en un objeto o en parte del sistema

- Diagrama de actividad que muestra actividades, estados y cambios de estados en los objetos y los eventos que suceden en alguna parte del sistema

## Elementos de &UML;

### Diagrama de casos de uso

Los diagramas de casos de uso describen las relaciones y las dependencias entre un grupo de casos de uso y el actor participante en el proceso

Es importante resaltar que los diagramas de casos de uso no están preparados para representar el diseño y no puede describir los elementos internos de un sistema. Los diagramas de casos de uso tienen sirven para facilitar la comunicación con los futuros usuarios del sistema, y con el cliente, y resultan especialmente útiles para determinar las características necesarias que tendrá el sistema. En otras palabras, los diagramas de casos de uso dicen qué es lo que debe hacer el sistema, pero no cómo hacerlo.

Ejemplo de un diagrama de casos de uso.

#### Caso de uso

Un caso de uso describe, desde el punto de vista de los actores, un grupo de actividades de un sistema que produce un resultado concreto y tangible.

Los casos de uso son descriptores de las interacciones típicas entre los usuarios de un sistema y ese mismo sistema. Representan el interfaz externo del sistema y especifican qué requisitos de funcionamiento debe tener este (recuerde, únicamente el qué, nunca el cómo).

Cuando se trabaja con casos de uso, es importante tener presentes algunas secillas reglas:

- Cada caso de uso se refiere a un mínimo de un actor

- Cada caso de uso es un iniciador (&ie;, un actor)

- Cada caso de uso llevo a un resultado relevante (un resultado con valor intrínseco)

Los casos de uso pueden tener relaciones con otros casos de uso. Los tres tipos de relaciones más comunes entre casos de uso son:

- <<include>> que especifica una situación en la que un caso de uso tiene lugar dentro de otro caso de uso

- <<extends>> que especifica que en ciertas situaciones, o en algún punto (llamado punto de extensión) un caso de uso será extendido por otro.

- Generalización que especifica que un caso de uso hereda las características del super caso de uso, y puede volver a especificar algunas o todas ellas de una forma muy similar a las herencias entre clases.

#### Actor

Un actor es una entidad externa (de fuera del sistema) que interacciona con el sistema participando (y normalmente iniciando) en un caso de uso. Los actores pueden ser gente real (por ejemplo, usuarios del sistema), otros ordenadores o eventos externos.

Los actores no representan a personas físicas o a sistemas, sino su papel. Esto significa que cuando una persona interacciones con el sistema de diferentes maneras (asumiendo diferentes papeles), estará representado por varios actores. Por ejemplo, una persona que proporciona servicios de atención al cliente telefónicamente y realiza pedidos para los clientes estaría representada por un actor equipo de soporte y por otro actor representante de ventas.

#### Descripción de casos de uso

Las descripciones de casos de uso son reseñas textuales del caso de uso. Normalmente tienen el formato de una nota o un documento relacionado de alguna manera con el caso de uso, y explica los procesos o actividades que tienen lugar en el caso de uso.

### Diagrama de clases

Los diagramas de clases muestran las diferentes clases que componen un sistema y cómo se relacionan unas con otras. Se dice que los diagramas de clases son diagramas estáticos porque muestran las clases, junto con sus métodos y atributos, así como las relaciones estáticas entre ellas: qué clases conocen qué otras clases o qué clases son parte de otras clases, pero no muestran el intercambio de mensajes entre ellas (llamadas a métodos).

Ejemplo de un diagrama de clases

#### Clase

En ¨, las clases están representadas por rectángulos, con el nombre de la clase, y también pueden mostrar atributos y operaciones de la clase en otros dos compartimentos dentro del rectángulo.

Un clase en ¨

##### Atributos

En &UML;, los atributos se muestran al menos con su nombre, y tambuén pueden mostrar su tipo, valor inicial y otras propiedades. Los atributos también pueden ser mostrados visualmente:

- `+` Indica atributos públicos

- `#` Indica atributos protegidos

- `-` Indica atributos privados

##### Operaciones

La operaciones (métodos) también se muestan al menos con su nombre, y pueden mostrar sus parámetros y valores de retorno. Las operaciones, al igual que los atributos, se pueden mostrar visualmente:

- `+` Indica operaciones públicas

- `#` Indica operaciones protegidas

- `-` Indica operaciones privadas

#### Asociaciones de clases

Las clases se puede relaciones (estar asocionadas) con otras de diferentes maneras:

#####

La herencia es uno de los conceptos fundamentales de la programación orientada a objetos, en la que una clase coge todos los atributos y operaciones de la clase de la que es heredera, y puede alterar/modificar algunos de ellos, así como añadir más atributos y operaciones propias.

En &UML;, una asociación de generalización entre dos clases, coloca a estas en una jerarquía que representa el concepto de herencia de una clase derivada de la clase base. En &UML;, las generalizaciones se representan por medio de una línea que conecta las dos clases, con una flecha en el lado de la clase base.

##### Asociaciones

Una asociación representa una relación entre clases, y aporta la semántica común y la estructura de muchos tipos de conexiones entre objetos.

Las asociaciones son los mecanismos que permite a los objetos comunicarse entre sí. Describe la conexión entre diferentes clases (la conexión entre los objetos reales se denomina conexión de objetos o enlace).

Las asociaciones pueden tener una papel que especifica el propósito de la asociación y pueden ser unidireccionales o bidireccionales (indicando si los dos objetos participantes en la relación pueden intercambiar mensajes entre sí, o es únicamente uno de ellos el que recibe información del otro). Cada extremo de la asociación también tiene un valor de multiplicidad, que indica cuántos objetos de ese lado de la asociación están relacionados con un objeto del extremo contrario.

En &UML;, las asociaciones se representan por medio de líneas que conectan las clases participantes en la relación, y también pueden mostrar el papel y la multiplicidad de cada uno de los participantes. La multiplicidad se muestra como un rango [mín...máx] de valores no negativos, con un asterisco (`*`) representando el infinito en el lado máximo. Asociación en &UML;

#####

Las acumulaciones son tipos especiales de asociaciones en las que las dos clases participantes no tienen un estado igual, pero constituyen una relación completa. Una acumulación describe cómo se compone la clase que asume el rol completo de otras clases que se encargan de las partes. En las acumulaciones, la clase que actúa como completa, tiene una multiplicidad de uno.

En &UML;, las acumulaciones están representadas por una asociación que muestra un rombo en uno de los lados de la clase completa.

#####

Las composiciones son asociaciones que representan acumulaciones muy fuertes. Esto significa que las composiciones también forman relaciones completas, pero dichas relaciones son tan fuertes que las partes no pueden existir por sí mismas. Únicamente existen como parte del conjunto, y si este es destruido las partes también lo son.

En &UML;, las composiciones están representadas por un rombo sólido al lado del conjunto.

Representación visual de una relación de composición en &UML;

### Diagrama de actividad

Los diagramas de actividad describen la secuencia de las actividades en un sistema. Los diagramas de actividad son una forma especial de los diagramas de estado, que únicamente (o mayormente) contienen actividades.

Ejemplo de un diagrama de actividad.

Los diagramas de actividad son similares a los diagramas de flujo procesales, con la diferencia de que todas las actividades están claramente unidas a objetos.

Los diagramas de actividad siempre están asociados a una clase, a una operación o a un caso de uso.

Los diagramas de actividad soportan actividades tanto secuenciales como paralelas. La ejecución paralela se representa por medio de iconos de fork/espera, y en el caso de las actividades paralelas, no importa en qué orden sean invocadas (pueden ser ejecutadas simultáneamente o una detrás de otra).

#### Actividad

Una actividad es un único paso de un proceso. Una activa es un estado del sistema que actividad interna y, al menos, una transición saliente. Las actividades también pueden tener más de una transición saliente, si tienen diferentes condiciones.

Las actividades pueden formar jerarquías, lo que significa que una actividad puede estar formada de varias actividades de detalle, en cuyo caso las transiciones entrantes y salientes deberían coincidir con las del diagrama de detalle.

### Diagramas de secuencia

Los diagramas de secuencia muestran el intercambio de mensajes (&ie;, llamadas a los métodos) entre diversos objetos, de una forma específica y delimitada por el tiempo. Los diagramas de secuencia destacan el orden y los momentos en los que se envían los mensajes a los objetos.

En los diagramas de secuencia, los objetos están representados por líneas intermitentes verticales, con el nombre del objeto en la parte más alta. El eje de tiempo también es vertical, incrementándose hacia abajo, de forma que los mensajes son enviados de un objeto a otro en forma de flechas con los nombres de la operación y los parámetros.

Diagrama de secuencia

### Diagramas de colaboración

Los diagramas de colaboración muestran las interacciones que ocurren entre los objetos que participan en una situación específica. Esta es más o menos la misma información que la mostrada por los diagramas de secuencia, pero destacando la forma en que las operaciones se producen en el tiempo, mientras que los diagramas de colaboración fijan el interés en las relaciones entre los objetos y su topología.

En los diagramas de colaboración los mensajes enviados de un objeto a otro se representan mediante flechas, mostrando el nombre del mensaje, los parámetros y la secuencia del mensaje. Los diagramas de colaboración están indicados para mostrar una situación o flujo programa específicos y son unos de los mejores tipos de diagramas para demostrar o explicar rápidamente un proceso dentro de la lógica del programa.

Colaboración

###

Los diagramas de estado muestran los diferentes estados de un objeto durante su vida, y los estímulos que provocan los cambios de estado en un objeto.

Los diagramas de estado ven a los objetos como máquinas de estado o autómatas finitos que pueden estar en un conjunto de estados finitos y que pueden cambiar su estado a través de un estímulo perteneciente a un conjunto finito. Por ejemplo, un objeto de tipo NetServer puede tener durante su vida uno de los siguientes estados:

- Listo

- Escuchando

- Trabajando

- Detenido

y los eventos que pueden producir que el objeto cambie de estado son

- Se crea el objeto

- El objeto recibe un mensaje de escucha

- Un cliente solicita una conexión a través de la red

- Un cliente finaliza una solicitud

- La solicitud se ejecuta y ser termina

- El objeto recibe un mensaje de detención

- etc

#### Estado

Los estados son los ladrillos de los diagramas de estado. Un estado pertenece a exactamente una clase y representa un resumen de los valores y atributos que puede tener la clase. Un estado &UML; describe el estado interno de un objeto de una clase particular

Tenga en cuenta que no todos los cambios en los atributos de un objeto deben estar representados por estados, sino únicamente aquellos cambios que pueden afectar significativamente a la forma de funcionamiento del objeto

Hay dos tipos especiales de estados: inicio y fin. Son especiales en el sentido de que no hay ningún evento que pueda devolver a un objeto a su estado de inicio, y de la misma forma no hay ningún evento que pueda sacar a un objeto de su estado de fin.

### Elementos de ayuda

Existen dos elementos en &UML; que no tiene un valor semántico real en la maqueta, pero que ayudan a clarificar partes del programa. Estos elementos son

- Línea de texto

- Notas de texto

- Anclas

Las líneas de texto son útiles para añadir información textual a un diagrama. Es texto es libre y no tiene ningún significado para la maqueta.

Las notas son útiles para añadir información más detallada de un objeto o una situación específica. Tienen la gran ventaja de que se pueden anclar a los elementos &UML; para mostrar que una nota pertenece a un objeto o situación específicos

Los anclas tampoco tienen valor semántico, pero son útiles para enlazar dos elementos juntos. Los anclas se utilizan especialmente para asociar una nota a un objeto particular del diagrama.