この記事の内容
この記事では、クラス図で関連と継承の書き方を記載します。
インターフェースやクラス間の関係を表すために、クラス図を書く上で必須の内容になります。関連と依存の違いがわかりにくい、理解できないといった方にわかりやすいように、いくつかポイントを解説していきます。
別の記事では、見やすいクラス図を書くためのコツも解説してますので良ければ参考にしてください。

関連と継承の書き方
まずは、例を見てもらった方が早いと思いますので、関連と継承の例を示します。
今回は4つの例を示しました。これらを把握することで関連と継承を抑えることができます。
「関連を表す」線の引き方は「関連」と「依存」の2種類があります。
「継承を表す」線の引き方は「汎化(はんか)」と「実装」の2種類があります。
ここでポイントは、線の種類(実線と破線)と矢印の形(△と>)の組み合わせで表現しているということです。
それぞれ解説していきます。
関連を表す
「関連を表す」方法は大きく「関連」と「依存」の2種類があります。イメージとしては、関連のほうが依存よりも結びつきが強いといったイメージです。実線と破線の違いがありますが、線が途切れていない分、実線のほうが結びつきが強いといったイメージをまずはここでは持ってもらえればとおもいます。
関連
関連をイメージする際に、わかりやすいのは実装の例を示すことだと思います。例を挙げると、メンバ変数にインスタンスを保持しており、それを使う場合があげられます。
例えば、商品リストが商品の配列を保持している場合などです。また、データベースアクセッサ内で実際にデータベースにアクセスするためのデータベースアクセスプロバイダをメンバ変数で保持しており、データベースアクセッサの関数内でそのメンバ変数を使用してデータベースにアクセスする場合なども関連の一例と言えます。
このような場合に関連を使用して表します。
依存
依存をイメージする場合の例は、関数内でインスタンスを生成して、それを関数内で使い切る言う場合があげられます。
例えば、人クラスがスマートフォンを使うといった場合や、レポート保存クラスの保存関数を呼び出した際に、ファイル書き込みクラスをインスタンス化して、実際にファイル書き込みを行い、保存関数が終わる際にファイル書き込みインスタンスを破棄するといった場合です。
このような場合に、依存を使用します。
関連と依存の違い
関連と依存の違いですが、以下のイメージをもっていただければと思います。
- 関連のほうが結び付きが強い
- 実装で表すと、メンバ変数で保持して使うか、使わないか
継承を表す
「継承を表す」方法は大きく「汎化」と「実装」の2種類があります。
簡単にいうと、「汎化」はクラスを継承する場合、「実装」はインターフェースを継承する場合です。
「関連を表す」方法と同じですが、実線と破線の違いで、線が途切れていない分、実線のほうが結びつきが強いといったイメージを持ってもらえればとおもいます。
汎化(はんか)
汎化の実装例としては、クラスを継承して実装する場合があげられます。
例えば、哺乳類クラスを犬クラスや猫クラスが継承する場合です。また、基底のデータベースアクセッサクラスで
基本的なデータベースの処理について記載しておき、使用するデータベースに合わせた変更部分を継承先のSQL ServerアクセッサやOracleアクセッサに記載する場合があげられます。
実装
実装の実装例としては、インターフェースを継承して実装する場合があげられます。
例えば、ログインターフェースをログファイルクラスやコンソールログ表示クラスが継承する場合です。
間違えてはいけないポイント
「関連を表す」場合と「継承を表す」場合を解説しました。間違えてはいけないポイントとしては、矢印の形(△と>)を間違えると意味が大きく変わるということです。線の種類(実線と破線)に関しては間違えてもそこまで意味は変わってきませんが、矢印の形は注意する必要があります。
まとめ
クラス図の関連と継承の書き方について解説しました。ポイントは、以下の通りです。
- 「関連を表す」線の引き方は「関連」と「依存」の2種類があります
- 「継承を表す」線の引き方は「汎化(はんか)」と「実装」の2種類があります
- 実線のほうが結び付きが強い
- 矢印の形(△と>)は間違えないように
今回解説した内容以外に、より線の意味に情報を付けるためのステレオタイプを学ぶと表現性が増すと思いますので気になる方は学習するといいと思います。
参考までに、おすすめの学習書を記載します。
コメント