Diagrama de clases
Un diagrama de clases describe la estructura estática de un sistema: sus clases, sus atributos y métodos, y las relaciones entre ellas. Es el diagrama UML más utilizado para documentar la organización y el diseño del código. En PlantUML, la sintaxis se parece a la de un lenguaje de programación, por lo que los atributos, los métodos y los marcadores de visibilidad resultan familiares. Las relaciones usan el mismo estilo de flechas que los diagramas de secuencia.- Texto entra, diagrama sale. Declare clases, campos y relaciones en pocas líneas.
- Se lee como código.
+,-,#para la visibilidad,:para los tipos,()para los métodos. - Anote con libertad. Añada notas, colores y estereotipos sin salir del texto.
Elemento declarante
protocol y struct: GH-1028, para exception: QA-16258, para record y dataclass: GH-2232]
[Ref. for protocol and struct: GH-1028, for exception: QA-16258, for record and dataclass: GH-2232]
[Ref. for protocol and struct: GH-1028; for exception: GH-1056, QA-16258; for metaclass and stereotype: GH-1159, QA-16784; for record and dataclass: GH-2232]
WARNING
This translation need to be updated. WARNING
Relación entre clases
Las relaciones entre clases se definen usando los siguientes símbolos:
| Tipo | Símbolo | Finalidad |
| Extensión |
<|--
|
Especialización de una clase en una jerarquía |
| Implementación |
<|..
|
Realización de una interfaz mediante una clase |
| Composición |
*--
|
La parte no puede existir sin el todo |
| Agregación |
o--
|
La parte puede existir independientemente del todo |
| Dependencia |
-->
|
El objeto utiliza otro objeto |
| Dependencia |
..>
|
Una forma más débil de dependencia |
-- por .. para tener lineas punteadas.
Sabiendo esas reglas, es posible sacar los siguientes dibujos:
WARNING
This translation need to be updated. WARNING
Etiqueta en las relaciones
Es posible añadir una etiqueta en la relación, utilizando :, seguido
por el texto de la etiqueta.
Para la cardinalidad, puede utilizar comillas dobles "" a cada lado
de la relación.
< o >
al principio o al final de la etiqueta.
Sin usar letras
Si no desea usar letras en la visualización de la clase (o enum...), puede:
- Utilizar la palabra reservada
asen la definición de la clase - Colocar comillas
""alrededor del nombre de la clase
WARNING
This translation need to be updated. WARNING
Añadir métodos
Para declarar campos y métodos, se puede utilizar el símbolo
: seguido del nombre del campo o del método.
El sistema busca paréntesis para elegir entre métodos y campos
{} todos los campos y métodos.
Tenga en cuenta que la sintaxis es muy flexible en cuanto al orden tipo/nombre.
{field} y {method} para
anular el comportamiento por defecto del analizador sintáctico sobre los campos y métodos
Definiendo la visibilidad
Cuando defines propiedades o métodos, puedes usar caracteres para establecer la visibilidad que les correspondan:
| Character | Icon for field | Icon for method | Visibility |
-
|
|
|
private |
#
|
|
|
protected |
~
|
|
|
package private |
+
|
|
|
public |
skinparam classAttributeIconSize 0 :
WARNING
This translation need to be updated. WARNING
Visibility on compositions and aggregations
Abstracto y Estático
Puedes definir métodos o propiedades abstractas y estáticas usando los modificadores {static}
o {abstract} .
Esos modificadores pueden ser usado al comienzo o al final de un línea.
También puedes usar {classifier} en lugar de {static}.
Cuerpo avanzado de las clases
Por defecto, las propiedades y los métodos son agrupados automáticamente por PlantUML.
Puedes usar separadores para definir tu propia manera de ordenar las propiedades y los métodos.
Son posibles los siguientes separadores: -- .. == __.
También puedes definir títulos dentro de los separadores:
Notas y estereotipos
Los estereotipos son definidos con la palabra clave class, << and >>.
También puedes definir notas usando las palabras claves note left of , note right of , note top of , note bottom of .
Además puedes definir una nota en la última clase definida usando note left, note right,
note top, note bottom .
Una nota también puede definirse solitariamente con la palabra clave note, y a continuación relacionarla con otro objeto usando el símbolo ...
WARNING
This translation need to be updated. WARNING
Más acerca de notas
También es posible usar algunas etiquetas HTML como (See Creole expression):
<b><u><i><s>,<del>,<strike><font color="#AAAAAA">or<font color="colorName"><color:#AAAAAA>or<color:colorName><size:nn>to change font size<img src="file">or<img:file>: the file must be accessible by the filesystem
note left, note right,
note top, note bottom.
WARNING
This translation need to be updated. WARNING
Note on field (field, attribute, member) or method
It is possible to add a note on field (field, attribute, member) or on method.
⚠ Constraint
- This cannot be used with
toporbottom(onlyleftandrightare implemented) - This cannot be used with namespaceSeparator
::
Note on field or method
Note on method with the same name
Notas en enlaces
Es posible añadir una nota en un enlace, justo después de la definición de dicho enlace, usando note on link .
También puedes usar note left on link, note right on link, note top on link,
note bottom on link si quieres cambiar la posición de la nota, en relación a una etiqueta.
Clases abstractas e interfaces
Puedes declarar una clase como abstracta usando las palabras claves abstract
or abstract class .
La clase será impresa en italic .
Puedes usar también las palabras claves interface, annotation and enum .
WARNING
This translation need to be updated. WARNING
Atributos, métodos... ocultos
Puede parametrizar la visualización de las clases usando el comando hide/show .
El comando básico es: hide empty members. Este comando ocultará atributos y métodos si están vacíos.
En lugar de empty members , puedes usar:
empty fieldsoempty attributespara atributos vacíos.empty methodspara métodos vacíos,fieldsoattributesque ocultará atributos, incluso si son descritos,methodsque ocultará métodos, incluso si son descritos,membersque ocultará atributos y métodos, incluso si son descritos.circlepara el carácter encerrado en un círculo, en frente del nombre de clase.stereotypepara el estereotipo.
hide o show:
classpara todas las clases,interfacepara todas las interfaces,enumpara todos los enums,<<foo1>>para clases que son estereotipadas con foo1,- un nombre de clase existente.
show/hide para definir reglas y excepciones.
WARNING
This translation need to be updated. WARNING
Clases ocultas
También puedes usar el comando show/hide para ocultar clases.
Esto puede llegar a ser útil si defines una archivo !included muy grande y si deseas ocultar algunas clases después de la inclusión de dicho archivo.
WARNING
This translation need to be updated. WARNING
Remove classes
You can also use the remove commands to remove classes.
This may be useful if you define a large !included file,
and if you want to remove some classes after file inclusion.
Hide, Remove or Restore tagged element or wildcard
You can put $tags (using $) on elements, then remove, hide or restore components either individually or by tags.
By default, all components are displayed:
hide $tag13components:
- or
remove $tag13components:
- or
remove $tag13 and restore $tag1components:
- or
remove * and restore $tag1components:
Hide or Remove unlinked class
By default, all classes are displayed:
hide @unlinkedclasses:
- or
remove @unlinkedclasses:
Uso de clases genéricas
También puedes usar los signos menor < y mayor > para definir el uso de clases genéricas.
skinparam genericDisplay old.
Círculo enmarcador específico
Usualmente, un carácter enmarcado en un círculo (C,I,E o A) es usado por clases, interfaces, enum y clases abstractas.
Pero puedes definir tu propio enmarcado para una clase cuando defines un estereotipo, añadiendo un carácter y un color, así como en el ejemplo:
Paquetes
Puedes definir un paquete usando la palabra reservada package, y opcionalmente declarar un color de fondo para tu paquete (Usando el nombre o el código HTML del color).
Tenga en cuenta que las definiciones de paquetes pueden ser anidadas.
WARNING
This translation need to be updated. WARNING
Estilos de paquetes
Hay diferentes estilos disponibles para paquetes.
Puedes especificarlos, ya sea configurando un estilo por defecto con el comando : skinparam packageStyle , o usando un estereotipo en el paquete.
Espacios de nombre
En los paquetes, el nombre de una clase es el único identificador de esta clase.
Quiere decir que no puedes tener dos clases con el mismo nombre en diferentes paquetes.
En este caso, deberías usar espacios de nombres en lugar de paquetes.
Puedes referir a clases de otros espacios de nombre describiendo su ruta completamente. A clases del espacio de nombre por defecto son descritas colocando un punto al inicio.
Tenga en cuenta que no tiene que especificar explícitamente un espacio de nombre : una clase altamente clasificada es automáticamente colocada en el espacio de nombre correcto.
WARNING
This translation need to be updated. WARNING
Creación automática del espacio de nombre
Puedes definir otro separador (otro además del punto) usando el comando : set namespaceSeparator ???.
set namespaceSeparator none.
WARNING
This translation need to be updated. WARNING
Interface Lollipop
También puedes definir interfaces lollipops en clases, usando la siguiente sintaxsis:
bar ()- foobar ()-- foofoo -() bar
Cambiando la dirección de las flechas
Por defecto, enlaces entre clases tienen dos guiones -- y son verticalemnte orientados.
Es posible usar un enlace horizontal colocando un solo guión (o punto), así:
left, right, up
or down dentro de la flecha:
-d- en lugar de
-down-) o los primeros dos caracteres.
Por favor tenga en cuenta que no debería abusar de esta funcionalidad : Graphviz usualmente otorga buenos resultados sin necesidad de ajustar.
WARNING
This translation need to be updated. WARNING
Asociación de clases
Puedes definir association class después de que una relación haya sido establecida entre dos clases, como en este ejemplo:
Association on same class
Personalización (Skinparam)
Puedes usar el comando skinparam para cambiar los colores y fuentes en el diagrama.
Puedes usar este comando:
- En la definición del diagrama, como cualquier otro comando,
- En un archivo incluido,
- En un archivo de configuración, proporcionado en la consola de comandos o en el ANT task.
Estereotipos personalizados
Puedes definir colores y fuentes específicas para clases esterotipadas.
- `BackgroundColor_<<Foo>> Wheat`
- `skinparam stereotypeCBackgroundColor_<<Foo>> DimGray`
WARNING
This translation need to be updated. WARNING
Degrado de colores
Es posible declarar colores individuales para clases o notas usando la notación #.
Puedes usar el nombre estándar del color o el código RGB.
También puedes usar degradación de color en el fondo, con la siguiente sintaxis:
dos nombres de colores separados por cualquier de los siguientes:
|,/,\,- o
-
WARNING
This translation need to be updated. WARNING
Ayudar en el diseño
Sometimes, the default layout is not perfect...
You can use together keyword to group some classes together :
the layout engine will try to group them (as if they were in the same package).
You can also use hidden links to force the layout.
Dividiendo archivos grandes
A veces, puedes obtener imágenes bastante grandes.
Puedes usar el comando page (hpages)x(vpages) para dividir la imágen generada, en varias imágenes:
hpages es el número que indica la cantidad de páginas horizontales,
y vpages es el número que indica la cantidad de páginas verticales.
También puede utilizar algunos ajustes específicos skinparam poner fronteras en las páginas splitted (ver ejemplo).
Extends and implements
It is also possible to use extends and implements keywords.
Bracketed relations (linking or arrow) style
Line style
It's also possible to have explicitlybold, dashed, dotted, hidden or plain relation, links or arrows:- without label
- with label
Line color
Line thickness
Mix
Change relation (linking or arrow) color and style (inline style)
You can change the color or style of individual relation or arrows using the inline following notation:
#color;line.[bold|dashed|dotted];text:color
Change class color and style (inline style)
You can change the color or style of individual class using the two following notations:
#color ##[style]color
#color), then line style and line color (##[style]color )
#[color|back:color];header:color;line:color;line.[bold|dashed|dotted];text:color
Arrows from/to class members
Grouping inheritance arrow heads
You can merge all arrow heads using the skinparam groupInheritance, with a threshold as parameter.
GroupInheritance 1 (no grouping)
GroupInheritance 2 (grouping from 2)
GroupInheritance 3 (grouping only from 3)
GroupInheritance 4 (grouping only from 4)
Display JSON Data on Class or Object diagram
Simple example
Packages and Namespaces Enhancement
[From V1.2023.2+, and V1.2023.5]
Qualified associations
Minimal example
Another example
Cambiar la orientación del diagrama
Puede cambiar la orientación (completa) del diagrama con:
top to bottom direction(por defecto)left to right direction
De arriba a abajo (por defecto)
Con Graphviz (motor de diseño por defecto)
La regla principal es: Elemento anidado primero, luego elemento simple.
Con Smetana ( motor de diseño interno)
La regla principal es la contraria: Elemento simple primero, luego elemento anidado.
De izquierda a derecha
Con Graphviz (motor de diseño por defecto)
Con Smetana (motor de diseño interno)
Role label to associations