クラス図(UML)まとめ&Excelでのサンプル図


クラス設計で作成するクラス図について自分なりにまとめてみました。
自分も設計素人の状態から勉強したので、初めて設計に携わる新人・若手の方向けに分かりやすく書いたつもりです。
excelでのサンプルも用意したので是非使ってみてください。

  1. クラス図とは
    1. メンバ・メソッドの見え方(public/private)
    2. 多重度
    3. クラス間の関係性
    4. 集約とコンポジションの違い
  2. excelでの書き方サンプル


1.クラス図とは

クラスとクラス間の関係を表す図です。
クラスはメンバ(属性)とメソッド(操作)を一つの箱で表現し、クラス間の関係を線と矢印で表現します。

属性や操作の前についている-, +, #はそれぞれの見え方(privateかpublicか)を表しており、矢印の下の数字は多重度を表します。また、矢印の種類はクラス間の関係を表します。
それぞれについて細かく紹介していきます。


1-A メンバ・メソッドの見え方(public/private)

メンバ・メソッドの見え方の表し方には以下の3パターンがあります。

  • +:他クラスからも参照可能(public)
  • -:自クラスからのみ参照可能(private)
  • #:自クラスと派生クラスからのみ参照可能(protected)


1-B 多重度

多重度はそのクラスのインスタンスが何個関連を持つかを表します。
表記法としては以下の3パターンを覚えておけば十分でしょう。

  • n..m:n以上m以下
  • n..*:n以上
  • n , m:n個またはm個

例えば、会社クラスと社員クラスであれば以下のような表現になります。

ここで注意しなければいけないのは、多重度はあくまで一つ一つのインスタンスについてであるという点です。世の中には会社がたくさんあるからといって会社クラスの方を1..*とかにすると意味が変わってしまいます。一人の社員が複数の会社に属するという意味になってしまうのです。


1-C クラス間の関係

クラス間の関係は以下の矢印で表すことができます。 汎化・集約・コンポジションを使うことが多い気がします。


1-D 集約とコンポジションの違い

高い頻度で使用する集約とコンポジションですが、上の説明だけだと違いが分かりにくいので補足をしておきます。
※英語だと両方”A has a B”なので適当に使ってる人も割と多いです。

・集約
集約はクラスBがいなくてもクラスAが成り立つ場合に使用します。
例えば、車クラスと乗員クラスがある場合、車クラスは乗員クラスがいなくても成り立つので集約になります。

・コンポジション
コンポジションはクラスA・クラスBがそれぞれ独立で成り立たない場合に使用します。
例えば、車クラスとタイヤクラスがある場合、車クラスはタイヤクラスがいないと成り立たないのでコンポジションになります。
※タイヤが無い車とか、オブジェとしてのタイヤとかは考えないでください。

図で表すと以下の感じだと思います。


2.excelでの書き方サンプル

excelでの書き方サンプルとして簡易版と詳細版を作成しました。
それぞれの書き方とテンプレートをまとめておいたので是非ご活用ください↓
https://www.mathkuro.com/wp-content/uploads/2019/10/クラス図テンプレート.xlsx

・簡易版
簡易版はクラスの関係性の表現をざっくり表すことを目的とした図です。厳密にUMLの記法に則っているわけではないですが、サクッと描けてそこそこ見やすいので内部向けの説明資料等によく使用しています。


・詳細版
詳細版はUMLの記法に沿って属性や型等もしっかり記述した図になります。

※クラス図を詳細に作成するのであれば、本来は専用のツール(Plant UML等)を使用するべきです。
ですが、私のように「会社のPCに新規ソフトの追加は禁止」等の制約がある人もいるかと思います。これはそういう恵まれないプログラマー向けの書き方なのです。。。


参考

https://qiita.com/devopsCoordinator/items/213e45694dfac0edcfbc
https://www.atmarkit.co.jp/ait/articles/0105/02/news002.html
http://www.itsenka.com/contents/development/uml/class.html

Leave a Reply

Your email address will not be published. Required fields are marked *