Diagrama de Clase UML 2


Diagrama de Clase
El diagrama de Clase muestra los bloques de construcción de cualquier sistema orientado a objetos. Los diagramas de clases describen la vista estática del modelo o parte del modelo, describiendo que atributos y comportamientos tienen en lugar de detallar los métodos para realizar operaciones. Los diagramas de Clase son más útiles para ilustrar relaciones entre clases e interfaces. Las generalizaciones, agregaciones, y asociaciones son todas valiosas al reflejar herencias, composición o uso, y conexiones respectivamente.

El siguiente diagrama ilustra relaciones de agregación entre clases. La agregación que tiene la punta de flecha en color más claro, indica que la clase Account usa AddressBook, pero no necesariamente contiene una instancia de este. La agregaciones compuestas con una punta de flecha más oscura de los otros conectores, indican pertenencia o contención de las clases de orígen por las clases destino, por ejemplo los valores Contact y ContactGroup estarán contenidos en AddressBook.

Clases
Una clase es un elemento que define los atributos y comportamientos que un objeto podrá generar.  El comportamiento es el que se describe por posibles mensajes que la clase pueda comprender conjuntamente con las operaciones que son apropiadas para cada mensaje. Las clases pueden también contener definiciones de valores etiquetados de restricciones y estereotipos.

Notación de Clase
Las clases se representan por rectángulos que muestran el nombre de la clase y opcionalmente el nombre de las operaciones y atributos. Los compartimientos se usan para dividir el nombre de la clase, atributos y operaciones. Adicionalmente las restricciones, valores iniciales y parámetros se pueden asignar a clases.

En el siguiente diagrama la clase contiene el nombre de la clase en el compartimiento más alto, el compartimiento siguiente detalla los atributos, con el atributo del “centro” mostrando los valores iniciales. El último compartimiento muestra las operaciones, las operaciones setWidth, setLength y setPosition mostrando sus parámetros. La notación que precede el nombre del atributo u operación indica la visibilidad del elemento, si se usa el símbolo + el atributo y la operación tienen un nivel público de visibilidad, si se usa un símbolo – el atributo u operación es privado. Además, el símbolo # permite definir una operación o atributo como protegido y el símbolo ~ indica la visibilidad del paquete.

Interfaces
Una interfaz es una especificación que los implementadores han acordado realizar. Es un contrato. Si se realiza una interfaz, se garantiza que las clases soporten un comportamiento requerido, que permite que el sistema trate los elementos no relacionados en la misma manera – es decir a través de la interfaz común.

Las interfaces se pueden dibujar en un estilo similar al de una clase, con operaciones especificadas como se muestra a continuación. También se pueden dibujar como un círculo con ninguna operación explicita detallada. Cuando se dibujan como un círculo, se dibujan vínculos de realización a la forma de círculo de la notación sin flechas de destino.

Tablas
Una tabla es una clase estereotipada. Esto se dibuja con un pequeño icono de la tabla en la esquina superior derecha. Los atributos de la tabla son «columnas» estereotipadas. La mayoría de las tablas tendrán una clave primaria, siendo uno o más campos los que forman una combinación única usada para acceder la tabla, más una operación de clave primaria que es «PK» estereotipada. Algunas tablas tendrán una o más claves foráneas, siendo uno o más campos que juntos trazan a una clave foránea en una tabla relacionada, más una operación de clave foránea que es «FK» estereotipada.

Asociaciones
Una asociación implica que dos elementos del modelo tienen una relación – usualmente implementada como una variable de instancia de una clase. Este conector puede incluir roles nombrados en cada extremo, cardinalidad, dirección y restricciones. Una asociación es el tipo de relación general entre elementos. Para más de dos elementos, un elemento de la caja de herramientas de representación diagonal también se puede usar. Cuando se genera código para diagramas de clase, las asociaciones se convierten en variables de instancia en la clase de destino.

Generalizaciones
Una generalización se usa para indicar herencia. Dibujada desde un clasificador especifico a un clasificador general, la implicación general es que el origen hereda las características del destino. El siguiente diagrama muestra una clase padre generalizando una clase hijo. Implícitamente, un objeto instanciado de la clase Circulo tendrá atributos x_position, y_position y radius y un método display(). Tener en cuenta que la Forma de clase es abstracta, mostrada por el nombre en itálica.

El siguiente diagrama muestra una vista equivalente de la misma información.

Agregaciones
Las agregaciones se usan para describir elementos que están compuestos de componentes más pequeños. Las relaciones de agregación se muestran por una punta de flecha con forma de diamante apuntando hacia el destino o clase padre.

Una forma más fuerte de agregación – una agregación compuesta – se muestra por una flecha con forma de diamante negro y se usa donde los componentes se pueden incluir en un máximo de una composición a la vez. Si el padre de una agregación compuesta se elimina, usualmente todas sus partes se eliminan con el mismo; sin embargo una parte puede ser individualmente eliminada desde una composición sin tener que eliminar toda la composición. Las composiciones son relaciones transitivas, asimétricas y pueden ser recursivas.

El siguiente diagrama ilustra la diferencia entre agregaciones fuertes y débiles. Un libro de direcciones esta conformado de múltiples contactos y grupos de contacto; un contacto se puede incluir en más de un grupo de contacto. Si elimina un libro de direcciones, todos los contactos y grupos de contactos se eliminarán también; si elimina un grupo de contacto, ningún contacto se eliminará.

Clase Asociación
Una clase asociación es una estructura que permite una conexión de asociación para tener conexiones y atributos. El siguiente ejemplo muestra que hay más al ubicar un empleado a un proyecto que al hacer un vínculo  asociación simple entre dos clases: el rol que el empleado toma en un proyecto es una entidad compleja y contiene detalles que no pertenecen al empleado o clase del proyecto. Por ejemplo, un empleado puede estar trabajando en muchos proyectos al mismo tiempo y tienen diferentes títulos de trabajo y niveles de seguridad.

Dependencias
Una dependencia se usa para modelar un alto rango de relaciones dependientes entre elementos del modelo. Esto se usaría normalmente tempranamente en el proceso de diseño donde se conoce que hay algún tipo de vínculo entre dos elementos pero es muy temprano para saber exactamente cual es la relación. Luego en el proceso de diseño, las dependencias serán estereotipadas (los estereotipos disponibles incluyen <<instanciar>>, <<trazar>>, <<importar>> y otros) o reemplazar con un tipo de conector más especifico.

Trazado
La relación de trazado es una especialización de una dependencia, vinculando elementos del modelo o conjuntos de elementos que representan la misma idea a través de los modelos. Los trazados se usan a menudo para rastrear cambios de requisitos y del modelo. Como los cambios pueden ocurrir en dos direcciones, la orden de esta dependencia usualmente se ignora. Las propiedades de relación pueden especificar la asignación de trazado, pero el trazado es usualmente bi-direccional, informal y raramente computable.

Realizaciones
El objeto fuente implementa o realiza el destino. Realizar se usa para expresar trazabilidad e integridad en el modelo – un proceso de negocio o requisitos se realiza por uno o más casos de uso que a su vez  se realizan por un componente, etc. Asignando requisitos, clases, etc. a través del diseño de su sistema, hacia arriba a través de los niveles de abstracciones del modelo, asegura las imágenes grandes de su sistema, recuerda y refleja todas las imagines pequeñas y detalla esa restricción y la define. Una relación se muestra como una línea de trazos con una punta de flecha sólida y el estereotipo <<realizar>>.

Anidamientos
Un anidamiento es un conector que muestra que el elemento fuente se anida dentro del elemento destino. El siguiente diagrama muestra la definición de una clase interna a pesar de que en EA es más usual mostrarlos por su posición en la jerarquía de la Vista del Proyecto.