<HOME

クラス図を描いてみよう30分


クラス図は、プログラムに登場するクラスやクラス間の関係を可視化するUML図です。

主に基本設計・詳細設計において使用されます。

  • 次のようなアプリを作成することを想定します。

    アプリを起動すると、ボタンを含むUIを表示します。

    アプリのUI内のボタンを押すと、ダイアログを表示します。

  • 前回作成したユースケース図をもとに、クラス図を描いた場合の例は次のようになります。

    今回は、使用する言語にJavaを選択し、JavaFXを利用したGUIアプリケーションを作成することを想定しています。

    • : クラス

      クラスを表現します。

      クラス名の下の段には属性(フィールド)を、その下の段には操作(メソッド)を記述します。

    • : パッケージ

      クラスなどのモデル要素をまとめる場合に使用します。

      アプリや、アプリ内の機能単位で要素をパッケージングするのによく使用されます。

    • : 関連

      関連するモデル要素を線でつなぎます。

      実線で表現します。


      場合によって先端に矢印や×をつけることがあります。

      矢印は処理の順序を示すものではありません。誘導可能性を示しています。

      矢印は誘導可能、×は誘導不可能を表現します。

      例えば、(A)→(B)の場合、AからBの誘導が可能であり、BからAへの誘導が可能かどうかは未定となります。


      また、場合によって先端に黒塗りや白塗りの菱形をつけることがあります。

      菱形は「集約」を示し、特に黒塗りの場合は「コンポジション」(構成)を示しています。

      メンバなど、クラスがもう一方のクラスを所有する関係にある場合によく使用されます。

      ただの所有関係なら白塗りの「集約」、構成要素になる関係なら「コンポジション」で表現されます。

      図のケースでは、JavaFXの「Scene」クラスが「メインUI」クラスの構成要素になっています。

    • : 汎化

      モデル要素が別の要素を汎化(一般化)していることを示します。

      片方の先端に白抜きの△矢印をもつ実線で表現します。

      例えば、(A)→(B)の場合、Aの要素はBを汎化したものであることを示しています。


      汎化は、クラス間の継承関係を表現するのによく使われます。

      例えば、(A)→(B)の場合、Aの要素はBを継承(して汎化)したものであることを表現しています。

      図のケースでは、「サンプルアプリ」クラスは、JavaFXの「Application」クラスを継承していることを示しています。

    • : 実現

      モデル要素が別の要素を実現していることを示します。

      片方の先端に白抜きの△矢印をもつ点線で表現します。

      例えば、(A)→(B)の場合、Aの要素はBを実現したものであることを示しています。


      実現は、インタフェースの実装を表現するのによく使われます。

      例えば、(A)→(B)の場合、Aの要素はBを実装(して実現)したものであることを表現しています。

      図のケースでは、「メインUI」クラスは、JavaFXの「EventHandler」インタフェースを実装していることを示しています。