クラス図

クラス図は最も一般的なUMLダイアグラムの種類で、クラス、その属性、操作、リレーションシップを示すことで、システムの静的構造をモデル化するために使われます。

クラスの作成

クラスツールの使用

UMLクラス図 ページで、U を押すか、ツールバーの UML メニューから クラス を選びます。キャンバスをクリックしてクラスボックスを配置するか、ドラッグしてサイズを指定します。クラスを選択した状態で Return を押すと名前を変更できます。

クラスボックスの構造

UMLクラスボックスは3つのコンパートメントで構成されます:

  1. 名前コンパートメント - クラス名とオプションのステレオタイプを含む
  2. 属性コンパートメント - クラスのプロパティ/フィールドを列挙
  3. 操作コンパートメント - クラスのメソッド/関数を列挙

クラスのプロパティ

クラスを選択し、インスペクタの 配置 タブ → UML セクションでプロパティを設定します:

名前

クラス名は上部のコンパートメントに太字で表示されます。慣例としてPascalCaseを使います(例:CustomerOrder)。

ステレオタイプ

クラス名の上にギュメで表示されるオプションの分類子:

  • <<interface>> - インターフェース定義用
  • <<abstract>> - 抽象クラス用
  • <<enumeration>> - 列挙型用
  • <<entity>> - ドメインエンティティ用
  • カスタムステレオタイプもサポート

抽象

オンにするとクラス名がイタリック体で表示され、抽象クラスであることを示します。

制約付きリサイズ

オンの場合(デフォルト)、リサイズ時にクラスボックスの比率が維持されます。

属性

属性はクラスのデータ/プロパティを表します。

属性の追加

  1. クラスを選択
  2. UML セクションで 属性 — 1行につき1つの属性を持つ複数行エディタ — を見つける
  3. +(または Cmd+L)をクリックして新しい属性を追加し、詳細を入力

属性の構文

属性は 可視性 名前 : 型 という形式に従います

可視性修飾子:

シンボル意味説明
+Publicどこからでもアクセス可能
-Privateクラス内からのみアクセス可能
#Protectedクラスとサブクラス内でアクセス可能
~Package同じパッケージ内でアクセス可能

例:

  • -id: Int - プライベートな整数ID
  • +name: String - パブリックな文字列名
  • #createdAt: Date - プロテクテッドな日付フィールド
  • ~cache: Map<String, Any> - パッケージプライベートなキャッシュ

操作

操作はクラスの振る舞い/メソッドを表します。

操作の追加

  1. クラスを選択
  2. UML セクションで 操作 — 1行につき1つの操作を持つ複数行エディタ — を見つける
  3. +(または Shift+Cmd+L)をクリックして新しい操作を追加し、詳細を入力

操作の構文

操作は 可視性 名前(パラメータ) : 戻り値の型 という形式に従います

例:

  • +getName(): String - Stringを返すパブリックなゲッター
  • -validate(input: String): Boolean - プライベートなバリデーションメソッド
  • +process(data: Data, options: Options): Result - 複数のパラメータを持つメソッド
  • +save(): void - 戻り値のないメソッド

リレーションシップ

R を押してリレーションシップツールを有効にし、一方のクラスから別のクラスへドラッグして接続を作成します。

リレーションシップの種類

種類線のスタイル矢印用途
関連実線開いた矢印一般的なリレーションシップ
依存破線開いた矢印「使用する」リレーションシップ
継承実線中空の三角形「is-a」リレーションシップ(extends)
実現破線中空の三角形インターフェースの実装
集約実線中空のひし形「has-a」(弱い所有)
コンポジション実線塗りつぶしたひし形「has-a」(強い所有)

リレーションシップの作成

  1. R を押してリレーションシップツールを有効にする
  2. ソースのクラスをクリック
  3. ターゲットのクラスまでドラッグ
  4. 離して接続を作成
  5. インスペクタの UML セクションで リレーションシップの種類 を設定 — 線のスタイルと矢印は種類に従います

リレーションシップのラベル

リレーションシップを選択し、インスペクタの UML セクションでラベルを設定します:

  • ラベル - リレーションシップを説明(例:「manages」「contains」)
  • 多重度 - インスタンス数を示す ソース と ターゲット の値(例:「1」「0..」「1..」)

ベストプラクティス

  1. シンプルに保つ - すべてをモデル化しようとせず、重要なクラスに焦点を当てる
  2. ステレオタイプを使う - インターフェースと抽象クラスを明確にマークする
  3. 重要なリレーションシップを表示する - すべての関連を表示する必要はない
  4. 一貫した命名 - クラスにはPascalCase、メンバーにはcamelCaseを使う
  5. 関連するクラスをグループ化する - 論理的なグループを示すために視覚的な近さを使う