2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mermaid記法で描くクラス図入門

2
Posted at

オブジェクト指向プログラミングを学ぶときに欠かせないのがクラス図です。
クラス図は、クラスの構造やクラス同士の関係を視覚的に表現できる一方で、GUIツールで作成しようと思うと手間や技能が必要になります。
そこで便利なのがMermaid記法です。
Mermaidを使用すれば、Markdown上でテキストのみでクラス図を表現でき、ドキュメントや技術記事にそのまま埋め込むことが可能です。
本記事ではMermaid記法クラス図を図示するための基礎を紹介します。

クラス図とは

クラス図とは、オブジェクト指向プログラミングにおける設計図のひとつで、クラスの属性メソッド、そしてクラス同士の関係を視覚的に表現するために使用されます。

クラス図の構成要素

  • クラス (Class)
    • 名前 属性 メソッドを持つ
  • 属性 (Attribute)
    • クラスが持つデータ
  • メソッド (Operation)
    • クラスが持つ処理や振る舞い

Mermaid記法でクラス図を描くサンプル

このセクションでは記法のサンプルとその図を紹介します。
使用する際には本記事でMarkdownのブロックにあるテキストを、mermaidのブロックで囲ってください。

プレイヤーと敵とアイテムの関係を表した図の記法

markdown
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クラス図を書くことを宣言しています。
これを記述することで、他の図との区別を行っているため、クラス図の記述において必須のキーワードとなります。

markdown
classDiagram

クラス定義

class クラス名 { ... }でクラスの定義を行います。
{}の中にはアクセス指定子 型 変数名で変数(属性)を追加したり、アクセス指定子 関数名()でメソッドを追加することが可能です。
アクセス指定子は以下のように表します。

記号 意味 説明
+ public どこからでもアクセス可能 +string name
- private クラス内部からのみアクセス可能 -int hp
# protected クラス自身とサブクラスからアクセス可能 #int mp
markdown
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人のプレイヤーは複数のアイテムを所有する という関係を表現しています。

markdown
    Player "1" --> "many" Item : owns
    Player "1" --> "many" Enemy : battles
    Enemy "1" --> "many" Item : drops

ActorクラスからEnemyとPlayerを派生させた図の記法

markdown
classDiagram
    class Actor {
        #int hp
        +attack()
    }

    class Player {
        +useItem()
    }

    class Enemy {
        +specialMove()
    }

    Actor <|-- Player
    Actor <|-- Enemy

ActorクラスからEnemyとPlayerを派生させた図

継承

継承 (Inheritance)とは、あるクラス(基底クラス)の属性メソッドを、別のクラス(派生クラス)が引き継ぐ仕組みです。
Mermaidでは基底クラス名 <|-- 派生クラス名とすることで、継承関係を図示することが出来ます。

markdown
    Actor <|-- Player
    Actor <|-- Enemy

総括

  • クラス図は、オブジェクト指向プログラミングにおける設計図のひとつで、クラスの構造や関係を視覚的に表現できる
  • Mermaid記法を使えば、GUIツールを使わずにMarkdown上で簡単にクラス図を描ける
  • classDiagramのキーワードを先頭につけることで、Mermaidに対して、これからクラス図を書くことを伝える
  • 多重度を用いることで、クラス間の数的な関係を表現できる
  • 基底クラス名 <|-- 派生クラス名とすることで、継承関係を図示することができる
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?