フローチャート
グラフィック表現
マインドマップ
構造化された表現
ノート
効率的な表現

クラス図構文

クラス図

クラス図はオブジェクト指向モデリングの主要な構成要素です。アプリケーション構造の一般的な概念モデリング、およびモデルをプログラミングコードに変換する詳細なモデリングに使用されます。 クラス図はデータモデリングにも使用できます。クラス図のクラスは、アプリケーション内の主要な要素と相互作用を表すとともに、プログラミングが必要なクラスも表します。

コード
                            
コピー
埋め込み
--- 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() }

構文

クラス

UML はクラスメンバー(プロパティやメソッドなど)とその付加情報を表現するメカニズムを提供します。クラスの単一のインスタンスは 3 つの部分で構成されます:

  • 上部にはクラスの名前が含まれます。太字で中央揃えで印刷され、最初の文字は大文字です。クラスの性質を説明する任意のコメントテキストを含めることもできます。
  • 中央にはクラスのプロパティが含まれます。これらは左揃えで、最初の文字は小文字です。
  • 下部にはクラスが実行できる操作が含まれます。これらも左揃えで、最初の文字は小文字です。
コード
                            
コピー
埋め込み
--- title: Bank example --- classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

クラスを定義する

クラスを定義するには 2 つの方法があります

  • class 構文を明示的に使用します(class Animal など)。これにより Animal クラスが定義されます。
  • 関係を通じて、2 つのクラスとそれらの関係を同時に定義します(Vehicle <|-- Car など)。
コード
                            
コピー
埋め込み
classDiagram class Animal Vehicle <|-- Car

命名規則:クラス名は英数字文字(Unicode を含む)、アンダースコア(_)、ハイフン (-) のみで構成できます。

クラスラベル

クラスにラベルを付ける必要がある場合は、以下の構文を使用できます:

コード
                            
コピー
埋め込み
classDiagram class Animal["Animal with a label"] class Car["Car with *! symbols"] Animal --> Car

バッククォート(``)を使用してラベル内の特殊文字をエスケープすることもできます:

コード
                            
コピー
埋め込み
classDiagram class `Animal Class!` class `Car Class` `Animal Class!` --> `Car Class`

クラスのメンバーを定義する

UML はクラスメンバー(プロパティやメソッドなど)およびそれらに関する付加情報を表現するメカニズムを提供します。

Mermaid は小括弧 () の有無によってプロパティと関数またはメソッドを区別します。() が付いているものは関数またはメソッドと見なされ、それ以外はすべてプロパティと見なされます。

クラスのメンバーを定義する方法は 2 つあり、どちらの構文を使用してメンバーを定義しても出力結果は同じです。2 つの異なる方法は次のとおりです:

1、コロン(:)に続けてメンバー名を使用してクラスのメンバーを関連付けます。これは一度に 1 つのメンバーを定義するのに役立ちます。例:

コード
                            
コピー
埋め込み
classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

2、波括弧 {} を使用してクラスのメンバーを関連付けます。メンバーは波括弧内にグループ化されます。一度に複数のメンバーを定義するのに適しています。例:

コード
                            
コピー
埋め込み
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) }

戻り値の型

メソッドまたは関数の定義の末尾に、返されるデータ型を指定できます。注意:最後の ')' と戻り値の型の間にはスペースが必要です。例:

コード
                            
コピー
埋め込み
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int }

ジェネリック型

ジェネリック型はクラス定義の一部として表現でき、クラスメンバーや戻り値の型にも使用できます。項目をジェネリック型として表現するには、その型をチルダ(~)で囲みます。List<List<int>> のようなネストされた型宣言をサポートしますが、List<List<K, V>> のようにカンマを含むジェネリック型は現在サポートされていません。

コード
                            
コピー
埋め込み
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~~

可視性

プロパティまたはメソッド/関数の可視性を記述するには、そのメンバー名の前に任意の記号を使用して表現できます:

  • + パブリック
  • - プライベート
  • # プロテクテッド
  • ~ 内部

関係を定義する

関係は、クラス図やオブジェクト図で見られる特定のタイプの論理的な接続を包含する一般的な用語です。

                            
コピー
埋め込み
[classA][Arrow][ClassB]

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

タイプ 説明
<|-- 継承
*-- コンポジション
o-- 集約
--> 関連
-- リンク(実心)
..> 依存
..|> 実現
.. リンク(破線)
コード
                            
コピー
埋め込み
classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP

ラベルを使用して 2 つのクラス間の関係の性質を記述できます。さらに、矢印を逆方向に使用することもできます:

コード
                            
コピー
埋め込み
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)

関係ラベル

関係にラベルテキストを追加できます:

                            
コピー
埋め込み
[classA][Arrow][ClassB]:LabelText
コード
                            
コピー
埋め込み
classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation

双方向の関係

双方向の関係は論理的に N:M 関連を表すことができます:

コード
                            
コピー
埋め込み
classDiagram Animal <|--|> Zebra

语法如下:

                            
コピー
埋め込み
[Relation Type][Link][Relation Type]

其中 Relation Type 是以下之一:

タイプ 説明
<| 継承
* コンポジション
o 集約
> 関連
< 関連
|> 実現

Link は以下のいずれかです:

タイプ 説明
-- 実線
.. 破線

ロリポップインターフェース

クラスには、そのクラスのロリポップインターフェースを定義する特殊な関係タイプを割り当てることもできます。ロリポップインターフェースは以下の構文で定義します:

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

ロリポップ付きのインターフェース(bar)がクラス(foo)に接続されます。

注意:定義された各インターフェースは一意であり、クラス間で共有せず、複数の接続がそれを指すことも許可しないことが目的です。

コード
                            
コピー
埋め込み
classDiagram bar ()-- foo
コード
                            
コピー
埋め込み
classDiagram class Class01 { int amount draw() } Class01 --() bar Class02 --() bar foo ()-- Class01

名前空間を定義する

名前空間はクラスをグループ化します。

コード
                            
コピー
埋め込み
classDiagram namespace BaseShapes { class Triangle class Rectangle { double width double height } }

関係の基数/多重度

クラス図の多重度または基数は、あるクラスのインスタンスが別のクラスのインスタンスと関連付けられる数を表します。例えば、各会社には 1 人以上の従業員がいて 0 にはできませんが、各従業員は現在 0 個または 1 個の会社に所属しています。

多重度記号は関連の末尾付近に配置されます。

異なる基数のオプションは次のとおりです:

  • 1 1 つのみ
  • 0..1 0 個または 1 個
  • 1..* 1 個以上
  • * 0 個または 1 個以上
  • n n(ただし n>1)
  • 0..n 0 から n(ただし n>1)
  • 1..n 1 から n(ただし n>1)

基数は、指定された矢印の前または後にテキストオプションを二重引用符 ”“ で囲むことで簡単に定義できます。例:

                            
コピー
埋め込み
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
コード
                            
コピー
埋め込み
classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains

クラスの注釈

マークアップを使用してクラスに注釈を付け、そのクラスに関する付加的なメタデータを提供できます。これにより、クラスの性質をより明確に示すことができます。一般的な注釈には次のものがあります:

  • <<Interface>> インターフェースクラスを表します
  • <<Abstract>> 抽象クラスを表します
  • <<Service>> サービスクラスを表します
  • <<Enumeration>> 列挙を表します

注釈は先頭の << と末尾の >> で定義されます。クラスに注釈を追加する方法は 3 つあり、3 つの方法の出力はすべて同じです:

  • クラス定義とのインライン
                            
コピー
埋め込み
classDiagram class Shape <<interface>>

クラスを定義した後の単独の行で:

コード
                            
コピー
埋め込み
classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw()
  • クラス定義のネスト構造内で:
コード
                            
コピー
埋め込み
classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK }

コメント

クラス図にコメントを入力でき、エディタはそのコメントを無視します。コメントは単独の行にする必要があり、二重パーセント記号 (%%) で始まる必要があります。次の行までのすべてのテキストは、あらゆるクラス図構文を含めてコメントと見なされます。

コード
                            
コピー
埋め込み
classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() }

図の方向を設定する

方向文を使用してクラス図のレンダリング方向を設定できます:

コード
                            
コピー
埋め込み
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

相互作用

ノードにクリックイベントをバインドできます。クリックイベントは JavaScript コールバック関数をトリガーするか、新しいブラウザタブで読み込まれるリンクを開くことができます。注意:securityLevel='strict' の場合はこの機能が無効になり、securityLevel='loose' の場合は有効になります。

これらの操作は、すべてのクラス宣言の後の単独の行で定義できます。

                            
コピー
埋め込み
action className "reference" "tooltip" click className call callback() "tooltip" click className href "url" "tooltip"
  • action は link または callback で、呼び出したい相互作用のタイプによって異なります。
  • className は操作に関連付けられたノード id です。
  • reference は URL リンク、またはコールバック関数の名前にできます。
  • (任意) ツールチップは、マウスを要素の上にホバーしたときに表示される文字列です。
  • コールバック関数は nodeId を引数として呼び出されます。

注意

note "line1 line2" を使用して図に注記を追加できます。note for <CLASS NAME> "line1 line2" を使用して特定のクラスに注記を追加できます。

例

コード
                            
コピー
埋め込み
classDiagram note "This is a general note" note for MyClass "This is a note for a class" class MyClass{ }

URL リンク:

コード
                            
コピー
埋め込み
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"

構成

メンバーボックス

クラスノードの空のメンバーボックスを非表示にできます。これはクラス図構成の hideEmptyMembersBox 値を変更することで行います。

コード
                            
コピー
埋め込み
--- config: class: hideEmptyMembersBox: true --- classDiagram class Duck