Notación UML Accesible: Diagrama de Clases

Este diagrama se utiliza para representar la estructura estática de las clases de un sistema. En él, se muestran atributos, operaciones (métodos) y relaciones entre las diferentes clases.

Representación general de una clase

Para representar una clase, se utilizan 3 compartimientos (un rectángulo vertical dividido en 3 partes) que, de arriba hacia abajo muestran:

Nombre: nombre de la clase; el cual incluye también el tipo (interfaz, abstracta o controlador).

Atributos: lista de atributos de la clase, con el siguiente formato: nombre:tipo; o indicando un valor inicial: nombre:tipo=valor.

Operaciones: lista de métodos de la clase, con el siguiente formato: (Parámetros):devuelve tipo.

Los atributos y operaciones pueden mostrar adicionalmente su visibilidad, con el siguiente formato: + public, # protected, – private, ~ package.

Nota: los nombres y métodos de las clases tipo interfaz y abstracta, se suelen representar en cursiva.

Relaciones:

Dependencia, se representa con una elipsis.

Asociación: Se representa con una línea sólida.

Agregación: se representa con un rombo (diamante) vacío.

Composición: se representa con un rombo (diamante) relleno.

Generalización: se representa con un triángulo vacío colocado del lado general de la relación.

En todas las relaciones anteriores se puede expresar la dirección y la multiplicidad (cardinalidad). La dirección se representa mediante flechas. La multiplicidad es un único número o un rango de números. Las más comunes[2] son las siguientes:

0..1        0 o 1 instancia . la notación n . . m indica n a m instancias.

0..* o * sin límites en el número de instancias(incluyendo ninguna).

1             exacctamente 1 instancia.

1..*        al menos 1 instancia.

 

Alternativa de representación lineal

Paso 1: definir las clases:

Las clases se definen entre corchetes (paréntesis cuadrados), cada clase contendrá sus 3 compartimientos delimitados por barras verticales (|). Siguiendo el formato indicado más arriba, la visibilidad de atributos y métodos se indicará al principio de cada uno con el símbolo que corresponda y cada atributo o método se separará utilizando punto y coma (;), de la siguiente manera:

[classname:type |~atributeName1:type=value;+atributeName2:type=value;-atributeName3:type=value |+method1(param1,param2,param3):type;#method2(param1,param2,param3):type;-method3(param1,param2,param3):type ]

Paso 2, indicar relación, herencia, direccionalidad y multiplicidad:

Para indicar la relación entre las clases, se ofrecen dos alternativas; luego de la clase, la cual estará representada por su nombre entre corchetes, se indica la relación entre paréntesis (“d” para dependencia, “as”, para asociación, “ag”, para agregación, “c” para composición y “g” para generalización; la herencia se indicaría con una letra “H” mayúscula, entre la relación y la direccionalidad, o se pueden utilizar los siguientes símbolos para representar cada relación (omitiendo los paréntesis): elipsis (…) para la dependencia, menor que y mayor que (<>) para la asociación, doble signo de suma (++) para la agregación, asterisco (*) para la composición y circunflejo (^) para la generalización; la direccionalidad se representa seguido de la relación con un guión largo y un signo mayor que o menor que (—>) o (<—) y entre la relación y la direccionalidad se indica si existe herencia con circunflejo guión (^-); y por último, la multiplicidad (Cardinalidad) se define luego de la direccionalidad entre barrass cortadas, de la siguiente manera:

 

[]Classname1](as)H—>¦n..m¦[classname2]

 

Utilizando solo símbolos sería:

 

[]Classname1]<>^-—>¦n..m¦[classname2]

 

Si se diese el caso que una clase posea el mismo tipo de relación, direccionalidad, herencia y cardinalidad con otras clases, podría representarse agrupando las clases de la derecha entre corchetes, separadas con comas, así:

 

[]Classname1]<>^-—>¦n..m¦[classname2,classname3]

 

En el caso de relaciones complejas entre varias clases (asociación entre clases) dicha asociación puede representarse de la siguiente manera:

[]Classname1]<>^-—>¦n..m¦[classname2]<>—>¦1¦[]Classname3]<>—>¦m..n¦[classname1]
En la próxima entrada se presentará la nnotación UML para los diagramas de objetos.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.