Visual Paradigmで統合モデル化言語を学ぶ
「一言のコードより千行のコードに匹敵する」— UMLクラス図は、1行のコードも書く前から、オブジェクト指向システムを可視化・設計・コミュニケーションするのに役立ちます。

🔹 UMLとは何か?
統合モデル化言語(UML)は、オブジェクト指向ソフトウェアシステムを可視化・仕様化・構築・文書化するために使用される標準化されたグラフィカル記法です。
A クラス図は一種の 静的構造図であり、システムを以下のように示すことで記述する:
-
✅ クラス – オブジェクトの設計図
-
✅ 属性 – クラスのデータ/プロパティ
-
✅ 操作(メソッド) – 挙動/関数
-
✅ 関係 – オブジェクトがどのように相互作用するか
💡 なぜUMLを学ぶのか?要件とコードのギャップを埋め、チーム間のコミュニケーションを向上させ、設計上の欠陥を早期に発見するのに役立ちます。
🔹 クラスとオブジェクトの理解
クラスとは何か?
A クラスはオブジェクトを作成するための設計図です。以下の内容を定義します:
-
状態(属性/プロパティ)
-
振る舞い(操作/メソッド)
オブジェクトとは何ですか?
あるオブジェクトはインスタンスクラスのインスタンス——クラスの設計図に基づいて構築された具体的な実体です。

🐕 実世界の例:Dogクラス
クラス:Dog
├─ 属性:color, name, breed
└─ 振る舞い:wagging(), barking(), eating()
それぞれのDogオブジェクト(例:myPet, neighborDog)は同じ構造を持ちますが、独自のデータを保持しています。
🔹 UMLクラス記法の説明
UMLのクラスは三段階の長方形:

1️⃣ クラス名(上段)
-
必須——唯一必須の要素
-
は通常のテキスト、中央揃え、太字
-
抽象クラスは で表示されます斜体
2️⃣ 属性(中央パーティション)
-
書式:
可視性 名前 : 型 = デフォルト値 -
にマッピングされる: メンバ変数 コード内
-
例:
- 年齢 : 整数型 = 0
3️⃣ 操作/メソッド(下部パーティション)
-
書式:
可視性 メソッド名(パラメータ : 型) : 戻り値型 -
にマッピングされる: クラスメソッド コード内
-
例:
+ calculateTotal() : 倍精度浮動小数点型

🔹 クラスの可視性とパラメータ
🔐 可視性修飾子
接頭記号はアクセスレベルを示す:
| 記号 | 可視性 | アクセス可能な場所 |
|---|---|---|
+ |
パブリック | どこからでも |
- |
プライベート | クラス内のみ |
# |
保護済み | クラスおよびサブクラス内 |

➡️ パラメータの方向性
メソッドのパラメータにおけるデータの流れを指定してください:
| 方向 | 意味 |
|---|---|
in |
入力のみ(デフォルト) |
out |
出力のみ |
inout |
入力および出力 |

💡 ヒント:ほとんどのプログラミング言語はデフォルトで
inパラメータを使用します。APIや複雑なデータフローをモデル化する際は方向性を使用してください。
🔹 クラス図の3つの視点
開発フェーズに応じて、図の詳細度を選択してください:

| 視点 | 使用するタイミング | 焦点 |
|---|---|---|
| 概念的 | 初期分析、ドメインモデリング | ビジネスコンセプト、現実世界のエンティティ |
| 仕様 | 設計フェーズ、インターフェース定義 | 抽象データ型(ADTs)、メソッドシグネチャ |
| 実装 | コーディングフェーズ、技術設計 | 具象クラス、言語固有の詳細 |
🎯 ベストプラクティス: 概念的設計から始めて、実装へと進化させる。初期の図に技術的詳細を過剰に詰め込まない。
🔹 クラス間の関係
UMLはクラス間の相互作用を正確に定義する。これらの6つの基本的な関係を習得しよう:

1️⃣ 継承(一般化)→ 「IS-A」
-
特殊化を表す:
サブクラスはスーパークラス -
表記法:実線に空洞の三角形矢印先端親を指す
-
抽象クラスは斜体

📐 例:形状の階層構造

// コードの同等表現
abstract class Shape { ... }
class Circle extends Shape { ... }
class Rectangle extends Shape { ... }
2️⃣ 関連 → 「USES-A」(構造的リンク)
-
同格のクラス間の恒久的な関係を表す
-
表記法:実線クラスの間に
-
しばしば動詞句でラベル付けされる:
配置する,管理する,含む
単純な関連の例:

🔢 基数(複数性)
参加するインスタンスの数を定義する:
| 表記法 | 意味 | 例 |
|---|---|---|
1 |
ちょうど1つ | 1人の顧客が1つの注文を行う |
0..1 |
0個または1個 | ユーザーは1つのプロフィールを持つ可能性がある |
*または0..* |
0個または複数個 | 部署には多くの従業員がいる |
1..* |
1個または複数個 | 注文には少なくとも1つの項目がある |

3️⃣ 集約 → 「所有する(弱い所有)」
-
特別な関連:「部分である」関係
-
部品は存在することができる独立して全体とは別に
-
表記法:実線と 空のダイアモンド「全体」側に

// 例:DepartmentはProfessorを集約する
class Department {
private List<Professor> professors; // 部署が解体されてもProfessorは存在する
}
4️⃣ 組成 → 「強い所有(強固な所有)」
-
集約のより強い形
-
部品存在できない全体がなければ存在できない;ライフサイクルが結びついている
-
表記法:実線と塗りつぶされたダイアモンド「全体」側に

// 例:家は部屋を構成する
class House {
private List<Room> rooms; // 家が取り壊されると部屋も破棄される
}
⚠️ 主な違い:
集約:
車は車輪→ 車輪は再利用可能合成:
家は部屋→ 部屋は家がなければ存在しない
5️⃣ 依存関係 → 「一時的に使用」
-
1つのクラスは…に依存する実装のために別のものに依存する(例:メソッドのパラメータ)
-
構造的関係ではない;供給元の変更がクライアントに影響を与える可能性がある
-
表記法:破線と開放矢印

実際の例:人物が本を読む

class Person {
boolean hasRead(Book book) { ... } // 本はパラメータ → 依存関係
}
6️⃣ 実現 → 「実装」
-
~との関係インターフェースおよびその実装クラス
-
表記法:破線で、空洞の三角形矢印頭

// Javaの例
interface Owner {
void acquireProperty();
void disposeProperty();
}
class Person implements Owner { ... }
class Corporation implements Owner { ... }
🔹 実世界の例
🛒 例1:注文管理システム

主なポイント:
-
顧客注文する注文(関連、1..*) -
注文構成される注文項目(合成) -
注文項目参照する商品(関連) -
支払い実現するIPaymentインターフェース(実現)
💻 例2:メモ付きGUIアプリケーション

主なポイント:
-
メモ(黄色のボックス)はクラスを煩雑にすることなく説明を追加する
-
JFrame含まれるJPanel(コンポジション) -
イベントリスナは依存関係を使用する
🔹 推奨されるUMLツール
| ツール | 最適な用途 | 価格 | プラットフォーム |
|---|---|---|---|
| 🥇 Visual Paradigm Community Edition | 初心者、学生、フルUMLサポート | ✅ 無料 | Win/macOS/Linux |
| Lucidchart | 共同作業、ウェブベース | フリープリミアム | Web |
| draw.io (diagrams.net) | 素早い図作成、シンプルさ | ✅ 無料 | Web/デスクトップ |
| StarUML | 軽量、拡張可能 | 有料(無料トライアルあり) | Win/macOS/Linux |
| Enterprise Architect | 大規模チーム、複雑なシステム | 有料 | 勝利 |
🏆 なぜVisual Paradigm Community Editionですか?
✅ 100%無料学習および非営利目的の使用のため
✅ すべてのUML 2.x図の種類対応済み(クラス、ユースケース、シーケンスなど)
✅ 直感的なドラッグアンドドロップインターフェース-コーディング不要
✅ コード工学:図からコードを生成し、リバースエンジニアリングを行う
✅ クロスプラットフォーム:Windows、macOS、Linux
✅ 受賞歴あり:世界中の大学および専門家から信頼されている
🔗 Visual Paradigm Community Editionを無料でダウンロード
🔹 Visual Paradigmの使い始め:5分間のセットアップ
-
ダウンロード&インストール
→ こちらを訪問してくださいvisual-paradigm.com/download/community.jsp
→ OSを選択 → インストール(2分未満) -
新しいプロジェクトを作成
→ VPを起動 →プロジェクト→新規作成→ 「クラス図」を選択 -
最初のクラスを追加
→ ツールボックスから「クラス」をドラッグ → 名前を編集するにはダブルクリック
→ クラスを右クリック →追加→属性/操作 -
関係を描画
→ ツールバーから関係ツール(継承、関連など)を使用
→ ソースクラスをクリック → ターゲットクラスまでドラッグ -
エクスポートと共有
→図→エクスポート→ PNG/PDF/SVG
→ またはJava/C#コードを生成:ツール→コード工学
🎬 プロのヒント: 使用するには モデル → モデルレポート図からドキュメントを自動生成する!
🎯 クイックリファレンスチートシート
クラス図の構文要約
+---------------------+
| クラス名 | ← 上部:名前(必須)
+---------------------+
| - 属性 : 型 | ← 中部:属性
| + 名前 : 文字列 |
+---------------------+
| + 操作() : 型 | ← 下部:操作
| - 計算(x: 整数):整数 |
+---------------------+
関係の表記法クイックガイド
| 関係 | 表記法 | キーワード |
|---|---|---|
| 継承 | ───▷ | 「は-a」 |
| 関連 | ─── | 「持つ-a」/「使用する」 |
| 集約 | ───◇ | 「部分-である」(弱い) |
| 合成 | ───◆ | 「部分-である」(強い) |
| 依存 | – – -> | 「一時的に使用する」 |
| 実現 | – – ▷ | 「実装する」 |
🚀 UML初心者の次のステップ
-
✅ 練習: 簡単なシステム(図書館、銀行口座、ショッピングカート)をモデル化する
-
✅ リバースエンジニアリング: 既存のJava/C#コードをVisual Paradigmにインポートして、自動生成された図を確認する
-
✅ 共同作業: チームメイトと図を共有して、設計レビューを行う
-
✅ 反復: 概念的設計から始めて、コードを書く過程で実装へと洗練する
-
✅ 探求: 次に、ユースケース図、シーケンス図、アクティビティ図を学ぶ
💬 思い出してください: UMLはコミュニケーションツール、官僚主義ではない。図は必要なだけシンプルに保つこと——それ以上シンプルにしないこと。
✨ あなたはプロのように設計する準備ができています!
今日から、最初のクラス図のモデリングを始めましょう。Visual Paradigm Community Edition——無料で、強力で、初心者向けです。
モデリングを楽しんでください! 🎨🔧🚀










