YAMADA TAISHI’s diary

ゲームについてとか私の日記とか。このブログのあらゆるコードは好きにどうぞ。利用規約があるものは記事内のGitHubのRepositoryのリンクで貼られていると思うので、そちらを参照ください。

【自分用】(plantuml)クラス図(UML,ダイアグラム)の書き方

こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / Twitter )です。
クラス図の書き方を忘れるのでその時のメモです。

目次


クラス図にはいろいろ種類がある

クラス図には色々種類があり、UMLのバージョンも2.0とかなんかある。
よく使われるものはどれだったか忘れてしまったが、自分用にカスタマイズした書き方があるのでココに書いておく。

参考リンク


qiita.com plantuml.com

クラス図


@startuml @enduml 記述は省略

実現(interface)


インターフェースの書き方は特には無かったはずだが、UMLでIってつけられるのでコレで対応。

interface interface_操縦
飛行機 ..|> interface_操縦:実現
class 飛行機 : interface_操縦
{
}

汎化(継承)


図はabstractからの継承。
interfaceの継承も継承と言えるし、普通の継承も継承と言えるが、
まぁ基本普通の継承はc++でも無い限り使わないやろってことでabstractのみ。

abstract 継承元_車
継承先_バス --|>  継承元_車:汎化
class 継承元_車 : 継承元_車
{
}

Model(Entity)


まぁデータモデル。
明らかなモデルとかEntityの場合のみこれで書きたい。
ソレ以外は普通のクラスで良さそう。

entity データ
class データ
{
}

依存と関連とコンポジション


この辺は曖昧なので3つ一緒にドーン
書き方は色々あるよね。

依存は完全に依存。
コンポジションはパーツ的な?
関連はただ参照してるだけ。

ぶっちゃけ全部関連と書き方同じでも良い。

運転手 ..>  車:依存
車 "1" -- "1" 車検:関連
車 "1" *-- "4"タイヤ:コンポジション
class 運転手
{
    車 車 = new();   // 運転手が無いと成立しないこと
}

class {
    車検 車検;  // 関連のこの書き方は、こうかも知れないし、もしくは片方だけかも
    タイヤ[] タイヤs = new タイヤ[4];  // 部品であること
}

class 車検{
   車 車;  // 関連のこの書き方は、こうかも知れないし、もしくは片方だけかも
}

関連2


関連の図をドッチがドッチに依存してるかわかりやすくした図。

車2 "1" --> "1" 車検2:関連2
class 車2
{
    車検2 車検2;  // 関連してる
}

集約


複数の関係性をまとめたもの。

船 "1" o-- "1..5" 乗組員:集約
class 
{
    乗組員 乗組員 = new 乗組員[5];  // 要素を持ってるがそれぞれの要素は依存してない
}

まとめ


気分によってかき分けるぞ。
通常なクラスの関連関係なら別に適当に関連での書き方でいいが、
継承関係だけはわかりやすく書きたい。