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.