【PlantUML】クラス図の書き方をメモしてみる

はじめに

最近、何かとクラス図を書く機会が増えてきました。
そこで、PlantUMLの主にクラス図まわりの記述方法を中心にメモしたいと思います。

ちなみに以下の環境で書いています。

PlantUMLの基本

とりあえず最初に知っておくべきことです。

書き始め

PlantUMLは @startuml@enduml 間に記述していきます。

@startuml

@enduml

コメント

PlantUMLにも コメント が存在します。
これは図の生成時には無視されます。

単行コメント

単行コメントは ' (シングルクォーテーション) で始まります。
その行の終わりまでがコメントとなります。

@startuml

'これは単行コメントです。図の生成時には無視されます。

class MyClass

@enduml

複数行コメント

複数行コメントは /' から '/ までの範囲となります。

@startuml

/'
これは複数行コメントです。
図の生成時には無視されます。
'/

class MyClass

@enduml

クラスの表現

次に、個々のクラスのメンバやそのアクセス修飾などの表現の仕方についてです。

クラスの定義

クラスは class キーワードを用いることで定義することができます。
メンバを記述しない場合は {かっこ} を省略できます。

@startuml

class MyClass1

class MyClass2 {

}

@enduml

クラスの定義

メンバの定義

クラスのメンバは {かっこ} 内に記述します。
フィールドやプロパティ (属性) と メソッド (操作) は自動的に判定して描画してくれるようです。

@startuml

class MyClass {
    + int MyProperty
    + void MyMethod()
}

@enduml

メンバの定義

アクセス修飾の指定

クラスのメンバにはアクセス修飾をつけることができます。
記号と意味はこの表の通りです。

記号 可視性
+ public
~ internal
# protected
- private
@startuml

class MyClass {
    + PublicProperty
    ~ InternalProperty
    # ProtectedProperty
    - PrivateProperty

    + PublicMethod()
    ~ InternalMethod()
    # ProtectedMethod()
    - PrivateMethod()
}

@enduml

アクセス修飾の指定

抽象メソッド・静的メンバの定義

抽象メソッド、静的メンバもクラス図で表現することができます。
それぞれ {abstract}, {static} をつけることによって可能です。

抽象メソッドは イタリック体 のフォントで、静的メンバは下線を用いて表現されます。

@startuml

abstract class MyAbstractClass {
    + {static} string StaticProperty
    + {static} void StaticMethod()
    + {abstract} void AbstractMethod()
}

@enduml

抽象メソッド・静的メンバの定義

特殊なクラスの定義

通常のクラス以外もクラス図で扱うことができます。

キーワード 種類
abstract class 抽象クラス
interface インターフェース
enum 列挙型
@startuml

class MyClass {
    + string MyProperty
    + void MyMethod()
}

abstract class MyAbstractClass {
    + {abstract} string MyAbstractProperty
    + {abstract} void MyAbstractMethod()
}

interface MyInterface {
    string MyProperty
    void MyMethod()
}

enum MyEnum {
    Value1
    Value2
    Value3
}

@enduml

特殊なクラスの定義

ノート

クラスに補足を付けたいことがあると思います。
そんなときは ノート を使います。

ノートを付けたいクラス定義の下に note [位置] : ノートの内容 というように記述します。
[位置]には top, bottom, right, left のいずれかを指定することができます。

また、ノートの内容を複数行にしたい場合は note [位置]end note の間に内容を書きます。

@startuml

class MyClass1
note left: これはノートです。

class MyClass2
note right
これは複数行の
ノートです。
end note

@enduml

ノート

関係線

次はクラス間の関係を示す関係線の引き方についてです。
今回は関係の意味についてまでは説明はしません。

矢印について

以下のことは矢印の種類に関わらず共通です。

矢印の長さと向き

実線矢印の線の部分 --- も、点線矢印の線の部分 ... も、線の部分の数と図中の矢印の長さは対応しています。
(関係の複雑さによっては思い通りにならないこともあります。)

また、線の部分の数が1つの場合は横つなぎになり、それ以上の場合は縦つなぎになります。

@startuml

A <. B
C <.. D
E <... F

@enduml

矢印の長さと向き

ラベル

関係線にはラベルを貼り付けることができます。
クラス名 矢印 クラス名 : ラベルの内容

@startuml

MyBaseClass <|-- MyDerivedClass : これはラベルです。

@enduml

ラベル

汎化

汎化は 基本クラス <|-- 派生クラス のように記述します。

@startuml

class MyClass1
class MyClass2

MyClass1 <|-- MyClass2 : 汎化

@enduml

汎化

実現

実現は インターフェース <|.. 実装クラス のように記述します。

@startuml

interface MyInterface
class MyClass

MyInterface <|.. MyClass : 実現

@enduml

実現

関連

関連は クラス1 <-- クラス2 のように記述します。

@startuml

class MyClass1
class MyClass2

MyClass1 <-- MyClass2 : 関連

@enduml

関連

依存

依存は クラス1 <.. クラス2 のように記述します。

@startuml

class MyClass1
class MyClass2

MyClass1 <.. MyClass2 : 依存

@enduml

依存

集約

集約は クラス1 o-- クラス2 のように記述します。

@startuml

class MyClass1
class MyClass2

MyClass1 o.. MyClass2 : 集約

@enduml

集約

合成 (コンポジション)

合成は クラス1 *-- クラス2 のように記述します。

@startuml

class MyClass1
class MyClass2

MyClass1 *.. MyClass2 : 合成

@enduml

合成

2017/07/31 14:19:08
コメントを投稿する