Registrati
Diagrammi di flusso
Espressione grafica
Mappe mentali
Espressione strutturata
Note
Espressione efficiente

Diagramma delle classiSintassi

Diagramma delle classi

Il diagramma delle classi è il principale blocco costitutivo della modellazione orientata agli oggetti. È usato per la modellazione concettuale generale della struttura di un'applicazione, nonché per la modellazione dettagliata della conversione di un modello in codice di programmazione. Il diagramma delle classi può essere usato anche per la modellazione dei dati. Le classi in un diagramma delle classi rappresentano sia gli elementi e le interazioni principali di un'applicazione sia le classi che devono essere programmate.

Codice
                            
Copia
Incorpora
--- title: Animal example --- classDiagram note "From Duck till Zebra" Animal <|-- Duck note for Duck "can fly can swim can dive can help in debugging" Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() }

Sintassi

Classe

UML fornisce meccanismi per rappresentare i membri di una classe, come proprietà e metodi, e le relative informazioni aggiuntive. Una singola istanza di una classe comprende tre parti:

  • La parte superiore contiene il nome della classe. È stampato in grassetto e centrato, con l'iniziale maiuscola. Può anche contenere un testo di commento opzionale che descrive la natura della classe.
  • La parte centrale contiene le proprietà della classe. Sono allineate a sinistra e con l'iniziale minuscola.
  • La parte inferiore contiene le operazioni che la classe può eseguire. Anch'esse sono allineate a sinistra e con l'iniziale minuscola.
Codice
                            
Copia
Incorpora
--- title: Bank example --- classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

Definire una classe

Esistono due modi per definire una classe

  • Usare esplicitamente la sintassi class (come class Animal), che definirà la classe Animal.
  • Tramite una relazione, che definisce contemporaneamente due classi e la relazione tra esse (come Vehicle <|-- Car).
Codice
                            
Copia
Incorpora
classDiagram class Animal Vehicle <|-- Car

Convenzione di denominazione: i nomi delle classi possono essere composti solo da caratteri alfanumerici (inclusi i caratteri unicode), underscore (_) e trattino (-).

Etichetta della classe

Se hai bisogno di fornire un'etichetta per una classe, puoi usare la seguente sintassi:

Codice
                            
Copia
Incorpora
classDiagram class Animal["Animal with a label"] class Car["Car with *! symbols"] Animal --> Car

Puoi anche usare i backtick (``) per eseguire l'escape dei caratteri speciali in un'etichetta:

Codice
                            
Copia
Incorpora
classDiagram class `Animal Class!` class `Car Class` `Animal Class!` --> `Car Class`

Definire i membri di una classe

UML fornisce meccanismi per rappresentare i membri di una classe (come proprietà e metodi) e le informazioni aggiuntive su di essi.

Mermaid distingue le proprietà dalle funzioni o dai metodi in base alla presenza o meno delle parentesi tonde (). Quelli con () sono considerati funzioni o metodi, tutti gli altri sono considerati proprietà.

Esistono due modi per definire i membri di una classe; indipendentemente dalla sintassi usata per definirli, il risultato è lo stesso. I due modi diversi sono:

1. Associare i membri a una classe usando i due punti (:) seguiti dal nome del membro; questo è utile per definire un singolo membro alla volta. Ad esempio:

Codice
                            
Copia
Incorpora
classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

2. Associare i membri a una classe usando le parentesi graffe {}, raggruppando i membri al loro interno. Adatto per definire più membri contemporaneamente. Ad esempio:

Codice
                            
Copia
Incorpora
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) }

Tipo restituito

Puoi specificare il tipo di dato che verrà restituito alla fine della definizione di un metodo o di una funzione. Nota: tra l'ultima ')' e il tipo restituito deve esserci uno spazio. Un esempio:

Codice
                            
Copia
Incorpora
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int }

Tipo generico

I tipi generici possono essere rappresentati come parte della definizione di una classe oppure usati nei membri di una classe o come tipo restituito. Per rappresentare un elemento come tipo generico, racchiudi il tipo tra tilde (~). Sono supportate le dichiarazioni di tipi annidati, ad esempio List<List<int>>, ma attualmente non sono supportati i tipi generici contenenti virgole, come List<List<K, V>>.

Codice
                            
Copia
Incorpora
classDiagram class Square~Shape~{ int id List~int~ position setPoints(List~int~ points) getPoints() List~int~ } Square : -List~string~ messages Square : +setMessages(List~string~ messages) Square : +getMessages() List~string~ Square : +getDistanceMatrix() List~List~int~~

Visibilità

Per descrivere la visibilità di una proprietà o di un metodo/funzione, puoi usare un simbolo opzionale davanti al nome del membro:

  • + Pubblico
  • - Privato
  • # Protetto
  • ~ Interno

Definire le relazioni

Relazione è un termine generico che comprende i tipi specifici di connessione logica che si trovano nei diagrammi delle classi e degli oggetti.

                            
Copia
Incorpora
[classA][Arrow][ClassB]

UML为类定义了八种不同类型的关系:

Tipo Descrizione
<|-- Ereditarietà
*-- Composizione
o-- Aggregazione
--> Associazione
-- Collegamento (pieno)
..> Dipendenza
..|> Realizzazione
.. Collegamento (tratteggiato)
Codice
                            
Copia
Incorpora
classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP

Possiamo usare un'etichetta per descrivere la natura della relazione tra due classi. Inoltre, la freccia può anche essere usata in direzione inversa:

Codice
                            
Copia
Incorpora
classDiagram classA --|> classB : Inheritance classC --* classD : Composition classE --o classF : Aggregation classG --> classH : Association classI -- classJ : Link(Solid) classK ..> classL : Dependency classM ..|> classN : Realization classO .. classP : Link(Dashed)

Etichetta della relazione

Puoi aggiungere un testo di etichetta a una relazione:

                            
Copia
Incorpora
[classA][Arrow][ClassB]:LabelText
Codice
                            
Copia
Incorpora
classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation

Relazione bidirezionale

Una relazione bidirezionale può logicamente rappresentare un'associazione N:M:

Codice
                            
Copia
Incorpora
classDiagram Animal <|--|> Zebra

语法如下:

                            
Copia
Incorpora
[Relation Type][Link][Relation Type]

其中 Relation Type 是以下之一:

Tipo Descrizione
<| Ereditarietà
* Composizione
o Aggregazione
> Associazione
< Associazione
|> Realizzazione

Link è uno dei seguenti:

Tipo Descrizione
-- Linea continua
.. Linea tratteggiata

Interfaccia a lecca-lecca

Alle classi si può anche assegnare un tipo di relazione speciale, che definisce per la classe un'interfaccia a lecca-lecca. L'interfaccia a lecca-lecca è definita con la seguente sintassi:

  • bar ()-- foo
  • foo --() bar

Un'interfaccia con lecca-lecca (bar) è collegata a una classe (foo).

Nota: ogni interfaccia definita è unica, allo scopo di non essere condivisa tra le classi e di non consentire a più collegamenti di puntare ad essa.

Codice
                            
Copia
Incorpora
classDiagram bar ()-- foo
Codice
                            
Copia
Incorpora
classDiagram class Class01 { int amount draw() } Class01 --() bar Class02 --() bar foo ()-- Class01

Definire un namespace

I namespace raggruppano le classi.

Codice
                            
Copia
Incorpora
classDiagram namespace BaseShapes { class Triangle class Rectangle { double width double height } }

Cardinalità/molteplicità di una relazione

La molteplicità o cardinalità in un diagramma delle classi indica il numero di istanze di una classe che possono essere associate alle istanze di un'altra classe. Ad esempio, ogni azienda ha uno o più dipendenti, mai zero, mentre ogni dipendente lavora attualmente per zero o una azienda.

Il simbolo di molteplicità è posizionato vicino all'estremità dell'associazione.

Le diverse opzioni di cardinalità sono:

  • 1 esattamente 1
  • 0..1 0 o 1
  • 1..* 1 o più
  • * 0, 1 o più
  • n n (dove n>1)
  • 0..n da 0 a n (dove n>1)
  • 1..n da 1 a n (dove n>1)

La cardinalità può essere definita facilmente racchiudendo l'opzione di testo tra virgolette doppie "" prima o dopo una determinata freccia. Ad esempio:

                            
Copia
Incorpora
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
Codice
                            
Copia
Incorpora
classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains

Annotazione della classe

Puoi annotare una classe usando uno stereotipo, per fornire metadati aggiuntivi sulla classe. Questo può indicare più chiaramente la natura della classe. Alcune annotazioni comuni includono:

  • <<Interface>> rappresenta una classe di tipo interfaccia
  • <<Abstract>> rappresenta una classe astratta
  • <<Service>> rappresenta una classe di servizio
  • <<Enumeration>> rappresenta un'enumerazione

Un commento è definito tra << all'inizio e >> alla fine. Esistono tre modi per aggiungere un commento a una classe, e tutti e tre producono lo stesso risultato:

  • In linea con la definizione della classe
                            
Copia
Incorpora
classDiagram class Shape <<interface>>

Su una riga separata dopo la definizione della classe:

Codice
                            
Copia
Incorpora
classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw()
  • Nella struttura annidata della definizione della classe:
Codice
                            
Copia
Incorpora
classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK }

Commento

Puoi inserire commenti in un diagramma delle classi; l'editor li ignorerà. I commenti devono occupare una riga propria e devono iniziare con il doppio segno di percentuale (%%). Tutto il testo fino alla riga successiva sarà considerato un commento, inclusa qualsiasi sintassi del diagramma delle classi.

Codice
                            
Copia
Incorpora
classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() }

Impostare la direzione del diagramma

Puoi usare l'istruzione di direzione per impostare la direzione di rendering del diagramma delle classi:

Codice
                            
Copia
Incorpora
classDiagram direction RL class Student { -idCard : IdCard } class IdCard{ -id : int -name : string } class Bike{ -id : int -name : string } Student "1" --o "1" IdCard : carries Student "1" --o "1" Bike : rides

Interazione

Puoi associare eventi di clic ai nodi. Un evento di clic può attivare una funzione di callback JavaScript oppure aprire un link che verrà caricato in una nuova scheda del browser. Nota: questa funzionalità è disabilitata con securityLevel='strict' e abilitata con securityLevel='loose'.

Puoi definire queste operazioni su una riga separata dopo tutte le dichiarazioni delle classi.

                            
Copia
Incorpora
action className "reference" "tooltip" click className call callback() "tooltip" click className href "url" "tooltip"
  • action è link oppure callback, a seconda del tipo di interazione che vuoi richiamare.
  • className è l'id del nodo associato all'operazione.
  • reference può essere un link URL oppure il nome di una funzione di callback.
  • (Opzionale) Il tooltip è la stringa mostrata quando il mouse passa sopra l'elemento.
  • La funzione di callback verrà chiamata con nodeId come parametro.

Nota

Puoi aggiungere una nota al diagramma usando note "line1 line2". Puoi aggiungere una nota a una classe specifica usando note for <CLASS NAME> "line1 line2".

Esempio

Codice
                            
Copia
Incorpora
classDiagram note "This is a general note" note for MyClass "This is a note for a class" class MyClass{ }

Link URL:

Codice
                            
Copia
Incorpora
classDiagram class Shape link Shape "https://www.github.com" "This is a tooltip for a link" class Shape2 click Shape2 href "https://www.github.com" "This is a tooltip for a link"

Configurazione

Riquadro dei membri

Puoi nascondere il riquadro vuoto dei membri di un nodo classe; questo si fa modificando il valore hideEmptyMembersBox nella configurazione del diagramma delle classi.

Codice
                            
Copia
Incorpora
--- config: class: hideEmptyMembersBox: true --- classDiagram class Duck