【一通り理解しよう】UMLのクラス図の描き方を解説

今回の記事では、UMLにおけるクラス図の描き方をまとめました。

UMLでクラス図はどう書けばいいの?
クラス図の見方を知りたい!
細かい表現はどうすればいいんだろう…

という方へ向けて、

  • クラス図とは
  • クラス図の描き方
  • 細かな表現方法

について解説致します! この記事を読んでいただければ、クラス図の基本的をおさえる事ができ、描くことが可能になると思います。ぜひ、最後までお付き合いください!

クラス図とは

まずはじめに、クラス図の概要を説明致します。クラス図は一言で表すと、システムの静的な構造・関係性を表現する為の図です。クラスはオブジェクトの型を表現したものです。

それぞれのクラスではデータや処理の情報などが表現されており、さらにそのクラス同士の関係性がクラス図では表現されています。実際の図を見てみましょう。

figure class_1

こちらがクラス図の一例です。以降では、クラス図を描くうえで必要な要素をそれぞれ説明していきます。

クラス図の描き方(基本)

それでは早速、クラス図の基本に入りましょう。クラス図において基本になるのはクラスです。ここでは、クラスの描き方を説明致します。例として以下の図を用意しました。

figure class_2

社員というクラスですね。それぞれの要素を確認しましょう。

1.可視性

1の箇所、この例では「-」となっている箇所にあたりますが、こちらは可視性を表しています。可視性とは、この後に出てくる「属性」や「操作」に対してアクセスが可能となる範囲を表現するものです。可視性には以下の4種類があります。

記号意味
すべてのクラスからアクセスが可能
自クラスからのみアクセスが可能
自クラスおよび継承されているクラスからのみアクセスが可能
同一パッケージ内のクラスからのみアクセスが可能

1.属性名

1の箇所は「属性名」です。属性は、そのクラスが持つ要素を意味しています。今回の「社員」というクラスには、「社員名(名前)」だったり、「社員番号」、「入社日」といった社員に関する属性が入ります。

2.型

2の箇所には、「型」が入ります。型といってもクラスで言う型ではなく、その属性が文字列で表されるか、数値で表すかといった、属性を表現する型が入ります。プログラミングにおいては、intかstringかといった具合ですね。

2の属性は社員番号となるので、文字列型ではなく数値型などにしても問題はありません。

3.初期値

3の箇所には、「初期値」が入っています。こちらは読んで字の通り、最初にあらかじめ入れておく値(デフォルト値)になります。以上の1~3を1行で、

「属性名:型=初期値」というように記述します。

4.操作名

続いて、クラスの下半分の領域に入ります。4では、そのクラスで行う事のできる「操作」を表現します。プログラミングで言う、関数ですね。

「操作名(引数:引数の型)」と表します。

5.戻り値

最後に5は操作の「戻り値」です。戻り値を返さない場合はvoidとします。操作名と合わせて、

「操作名():戻り値」と表します。

クラス図の細かな表現について

関連

クラスが複数あり、それらに何かしらの関係があるときは、「関連」として表現します。

例えば、

  • AのクラスがBのクラスの操作を呼び出す関連
  • AのクラスがBのクラスのデータを属性として保持している関連

などがあります。関連を表現するには、AとBのクラスを線で結び、そこに関連名を付与します。

uml class relation

上記の例では、「所属」が関連名となります。

多重度

関連のあるクラス間において、クラスAから見たクラスBの存在しうる数を表したものが「多重度」です。

例としては、以下のようになります。

uml class multiplicity

この図から分かるのは、

  • 1つの部署から見て、社員は1人以上いること
  • 1人の社員から見て、所属する部署は1つである事

が分かります。多重度の数字の意味は以下のようになります。

表記意味
n値の通り
"0..n" または "*"0以上
"1..*"1以上
"m..n"mからnまで

誘導可能性

関連のあるクラス同士のやりとりが、単方向からのみである場合、その方向性を明確に表す事ができ、「誘導可能性」として表現する事ができます。実際の例で見てみましょう。

uml class navigability

このように、矢印とバツで表現する事が可能です。

汎化(継承)

「汎化」はいわゆる継承です。クラスAの型を継承し、具体化したクラスBがあるとき、AとBの関係性は「汎化」と言えます。このとき、クラスAを「スーパークラス」と言い、クラスBを「サブクラス」と言います。UMLで描画すると、以下のようになります。

uml class generalization

集約

関連のあるクラス同士が、「全体」と「部分」の関係にあるとき、「集約」として表現します。具体的な例を挙げると、「部署」と「社員」といった関係が「全体」と「部分」にあたります。実際に集約を図で表すと、以下のようになります。

uml calss consolidation

コンポジット

コンポジットは、集約の一種になります。コンポジットは「全体」インスタンスが「部分」インスタンスの生成や削除を担っている場合に使用されます。

また、全体インスタンスが削除されると、基本的には、連鎖して部分インスタンスも削除される関係になります。UMLでコンポジットは菱形部分が黒くなります。

uml class composition

依存

「依存」は、クラス間で関係性はあるが、あまり強くない関係性の場合に使います。実際の例で見てみると分かりやすいかと思います。

uml class dependence

ここで依存関係となっているのは、「会社」と「社員」クラスです。会社は「雇用する」操作によって社員クラスを生成しますが、その後操作を行わない一時的な関係性です。このような強くない関係性の場合、依存を活用します。

インタフェース

「インタフェース」は、クラスが実現するうえで必要な共通操作のみを定義したクラスを言います。ルールとしてインタフェースには操作の具体的な処理は記載せず、具体的な処理は「サブクラス」で定義します。

このインタフェースとサブクラスの関係を「実現」と言います。なお、実現は汎化の一種です。例として、車をインタフェースとしてみると、「乗用車」、「バス」、「トラック」などがサブクラスになります。UMLでこれを表現すると、以下のようになります。

uml class interface

矢印まとめ表

ここまで、沢山の矢印が出ましたね! ややこしくなってしまっていると思いますので、表にまとめました。それぞれの意味さえ分かっていれば、この表だけで十分になることかと思います。是非活用してください!

矢印の種類意味
association関連
navigability誘導可能性
generalization汎化
aggregation集約
compositionコンポジット
dependency依存
realization実現

まとめ

いかがでしたでしょうか? 今回の記事では、

  • クラス図とは
  • クラス図の描き方
  • 細かな表現方法

について解説致しました。今回解説した内容が分かれば、基本的なクラス図は問題無く描くことが出来ます!是非ここで覚えて、活用してください。

 

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

遠藤貴大

遠藤貴大

1991年生まれ。双子座。
理系大学で認証システムを学んだ後、アプリ開発者となる。
新しく学ぶ人に寄り添った記事を心がけて執筆します。
芸術が好き。いつか猫と暮らすのが夢。

おすすめコンテンツ

いまならレッスン期間が2週間延長!この秋、プログラミングを学ぼう

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー