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