オブジェクト指向プログラミングを学ぶときに欠かせないのがクラス図です。
クラス図は、クラスの構造やクラス同士の関係を視覚的に表現できる一方で、GUIツールで作成しようと思うと手間や技能が必要になります。
そこで便利なのがMermaid記法です。
Mermaidを使用すれば、Markdown上でテキストのみでクラス図を表現でき、ドキュメントや技術記事にそのまま埋め込むことが可能です。
本記事ではMermaid記法でクラス図を図示するための基礎を紹介します。
クラス図とは
クラス図とは、オブジェクト指向プログラミングにおける設計図のひとつで、クラスの属性やメソッド、そしてクラス同士の関係を視覚的に表現するために使用されます。
クラス図の構成要素
-
クラス (Class)
-
名前属性メソッドを持つ
-
-
属性 (Attribute)
- クラスが持つデータ
-
メソッド (Operation)
- クラスが持つ処理や振る舞い
Mermaid記法でクラス図を描くサンプル
このセクションでは記法のサンプルとその図を紹介します。
使用する際には本記事でMarkdownのブロックにあるテキストを、mermaidのブロックで囲ってください。
プレイヤーと敵とアイテムの関係を表した図の記法
classDiagram
class Player {
+int id
+string name
+int hp
+int mp
+attack()
+useItem()
}
class Enemy {
+int id
+string type
+int hp
+attack()
}
class Item {
+int id
+string name
+string effect
+applyEffect()
}
Player "1" --> "many" Item : owns
Player "1" --> "many" Enemy : battles
Enemy "1" --> "many" Item : drops
プレイヤーと敵とアイテムの関係を表した図
クラス図宣言
classDiagramを先頭に入れることで、Mermaidにクラス図を書くことを宣言しています。
これを記述することで、他の図との区別を行っているため、クラス図の記述において必須のキーワードとなります。
classDiagram
クラス定義
class クラス名 { ... }でクラスの定義を行います。
{}の中にはアクセス指定子 型 変数名で変数(属性)を追加したり、アクセス指定子 関数名()でメソッドを追加することが可能です。
アクセス指定子は以下のように表します。
| 記号 | 意味 | 説明 | 例 |
|---|---|---|---|
+ |
public |
どこからでもアクセス可能 | +string name |
- |
private |
クラス内部からのみアクセス可能 | -int hp |
# |
protected |
クラス自身とサブクラスからアクセス可能 | #int mp |
class Player {
-int id
-string name
-int hp
-int mp
+attack()
+useItem()
}
クラス間の関係
クラス名 "多重度" --> "多重度" クラス名 : ラベルでクラス間の関係を図示することが出来ます。
多重度(Multiplicity)とは、クラス間の数的な関係を表したものです。
| 記法 | 意味 | 例 |
|---|---|---|
1 |
1つだけ存在する | プレイヤーは必ず1つのIDを持つ |
0..1 |
0または1つ存在する | プレイヤーはペットを持たない場合もある |
many/*
|
複数存在する | プレイヤーは複数のアイテムを持つ |
1..* |
1つ以上必ず存在する | 敵は必ず1つ以上の攻撃手段を持つ |
ラベルは、関係の意味を書いたものです。
例えばPlayer "1" --> "many" Item : ownsで、1人のプレイヤーは複数のアイテムを所有する という関係を表現しています。
Player "1" --> "many" Item : owns
Player "1" --> "many" Enemy : battles
Enemy "1" --> "many" Item : drops
ActorクラスからEnemyとPlayerを派生させた図の記法
classDiagram
class Actor {
#int hp
+attack()
}
class Player {
+useItem()
}
class Enemy {
+specialMove()
}
Actor <|-- Player
Actor <|-- Enemy
ActorクラスからEnemyとPlayerを派生させた図
継承
継承 (Inheritance)とは、あるクラス(基底クラス)の属性やメソッドを、別のクラス(派生クラス)が引き継ぐ仕組みです。
Mermaidでは基底クラス名 <|-- 派生クラス名とすることで、継承関係を図示することが出来ます。
Actor <|-- Player
Actor <|-- Enemy
総括
-
クラス図は、オブジェクト指向プログラミングにおける設計図のひとつで、クラスの構造や関係を視覚的に表現できる -
Mermaid記法を使えば、GUIツールを使わずにMarkdown上で簡単にクラス図を描ける -
classDiagramのキーワードを先頭につけることで、Mermaidに対して、これからクラス図を書くことを伝える -
多重度を用いることで、クラス間の数的な関係を表現できる -
基底クラス名 <|-- 派生クラス名とすることで、継承関係を図示することができる