クラス図
クラス図は最も一般的なUMLダイアグラムの種類で、クラス、その属性、操作、リレーションシップを示すことで、システムの静的構造をモデル化するために使われます。
クラスの作成
クラスツールの使用
UMLクラス図 ページで、U を押すか、ツールバーの UML メニューから クラス を選びます。キャンバスをクリックしてクラスボックスを配置するか、ドラッグしてサイズを指定します。クラスを選択した状態で Return を押すと名前を変更できます。
クラスボックスの構造
UMLクラスボックスは3つのコンパートメントで構成されます:
- 名前コンパートメント - クラス名とオプションのステレオタイプを含む
- 属性コンパートメント - クラスのプロパティ/フィールドを列挙
- 操作コンパートメント - クラスのメソッド/関数を列挙
クラスのプロパティ
クラスを選択し、インスペクタの 配置 タブ → UML セクションでプロパティを設定します:
名前
クラス名は上部のコンパートメントに太字で表示されます。慣例としてPascalCaseを使います(例:CustomerOrder)。
ステレオタイプ
クラス名の上にギュメで表示されるオプションの分類子:
<<interface>>- インターフェース定義用<<abstract>>- 抽象クラス用<<enumeration>>- 列挙型用<<entity>>- ドメインエンティティ用- カスタムステレオタイプもサポート
抽象
オンにするとクラス名がイタリック体で表示され、抽象クラスであることを示します。
制約付きリサイズ
オンの場合(デフォルト)、リサイズ時にクラスボックスの比率が維持されます。
属性
属性はクラスのデータ/プロパティを表します。
属性の追加
- クラスを選択
- UML セクションで 属性 — 1行につき1つの属性を持つ複数行エディタ — を見つける
- +(または
Cmd+L)をクリックして新しい属性を追加し、詳細を入力
属性の構文
属性は 可視性 名前 : 型 という形式に従います
可視性修飾子:
| シンボル | 意味 | 説明 |
|---|---|---|
+ | Public | どこからでもアクセス可能 |
- | Private | クラス内からのみアクセス可能 |
# | Protected | クラスとサブクラス内でアクセス可能 |
~ | Package | 同じパッケージ内でアクセス可能 |
例:
-id: Int- プライベートな整数ID+name: String- パブリックな文字列名#createdAt: Date- プロテクテッドな日付フィールド~cache: Map<String, Any>- パッケージプライベートなキャッシュ
操作
操作はクラスの振る舞い/メソッドを表します。
操作の追加
- クラスを選択
- UML セクションで 操作 — 1行につき1つの操作を持つ複数行エディタ — を見つける
- +(または
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」(強い所有) |
リレーションシップの作成
Rを押してリレーションシップツールを有効にする- ソースのクラスをクリック
- ターゲットのクラスまでドラッグ
- 離して接続を作成
- インスペクタの UML セクションで リレーションシップの種類 を設定 — 線のスタイルと矢印は種類に従います
リレーションシップのラベル
リレーションシップを選択し、インスペクタの UML セクションでラベルを設定します:
- ラベル - リレーションシップを説明(例:「manages」「contains」)
- 多重度 - インスタンス数を示す ソース と ターゲット の値(例:「1」「0..」「1..」)
ベストプラクティス
- シンプルに保つ - すべてをモデル化しようとせず、重要なクラスに焦点を当てる
- ステレオタイプを使う - インターフェースと抽象クラスを明確にマークする
- 重要なリレーションシップを表示する - すべての関連を表示する必要はない
- 一貫した命名 - クラスにはPascalCase、メンバーにはcamelCaseを使う
- 関連するクラスをグループ化する - 論理的なグループを示すために視覚的な近さを使う