UMLにおける線・矢印の種類と使い分け
了解しました!以下は「UMLにおける線・矢印の先端の使い分け」に焦点を当てた記事です。シーケンス図だけでなく、クラス図・コンポーネント図・ユースケース図などの代表的な図における線の意味も交え、視覚記号が示す意味の違いをしっかり押さえられるようにしています。
🧭 はじめに
UML(統一モデリング言語)では、図の種類ごとに矢印の形状や線のスタイルに明確な意味があり、単なるデザインではなく「意味」を持っています。
本記事では、特に混乱しやすい矢印の先端(→、▷、◁など)と線の種類(実線、破線)の使い分けについて、図の種類別に体系的に解説します。
🔀 線の種類と意味の基本
UMLでは、以下の2軸で表現を使い分けます:
観点 | 例 |
---|---|
線の種類 | 実線(───)、破線(- - -) |
矢印の先端 | 閉じた実線三角(▶)、開いた三角(▷)、矢印(→)、棒( |
この組み合わせにより、関係性の**種類(継承・依存・呼び出し・メッセージ送信など)**を区別します。
🎬 シーケンス図における使い分け
矢印の種類 | 意味 |
---|---|
→ 実線矢印 |
同期メッセージ(呼び出し) |
--> 破線矢印 |
戻り値や非同期応答 |
->> |
非同期メッセージ(※PlantUML独自) |
📝 例
Client -> Server: Request
Server --> Client: Response
PlantUMLでは->
と-->
を使い分けることで、制御の移動と戻りを明示できます。
🏛️ クラス図における使い分け
📘 基本関係
関係 | 線の種類 | 矢印の先端 | 意味 |
---|---|---|---|
継承 | 実線 | 白抜き三角(▷) | 「is-a」関係 |
実装 | 破線 | 白抜き三角(▷) | インタフェースの実装 |
依存 | 破線 | 普通の矢印(→) | 使っているが所有していない |
関連 | 実線 | なし or 矢印(→) | 「has-a」関係 |
集約 | 実線 | 白菱(◇) | 弱い所有関係 |
コンポジション | 実線 | 黒菱(◆) | 強い所有関係(寿命も同一) |
📝 クラス図例(PlantUML)
class Car
class Engine
Car o-- Engine : has-a
🧱 コンポーネント図・ユースケース図の記法
⚙️ コンポーネント図(Component Diagram)
矢印 | 意味 |
---|---|
---> (破線) |
インターフェースへの依存 |
<-- (逆向き) |
提供されるインターフェース |
部品同士の「つながり」「依存」を破線で表現します。
👥 ユースケース図(Use Case Diagram)
矢印 | 意味 |
---|---|
実線 | アクターとユースケース |
破線+三角矢印 | include / extend関係 |
actor User
usecase "Login" as UC1
usecase "Authenticate" as UC2
User --> UC1
UC1 .> UC2 : <<include>>
📌 線と矢印の使い分け早見表
図の種類 | 関係 | 線の種類 | 矢印先端 | 意味 |
---|---|---|---|---|
クラス図 | 継承 | 実線 | 白抜き三角▷ | 「is-a」 |
クラス図 | 実装 | 破線 | 白抜き三角▷ | インタフェース実装 |
クラス図 | 依存 | 破線 | 普通の矢印→ | 一時的な利用(引数など) |
クラス図 | 関連 | 実線 | 矢印 or 無し | 所有・参照 |
クラス図 | 集約 | 実線 | 白菱◇ | 弱い所有 |
クラス図 | コンポジション | 実線 | 黒菱◆ | 強い所有 |
シーケンス図 | 呼び出し | 実線 | 矢印→ | 処理要求 |
シーケンス図 | 応答 | 破線 | 矢印→ | 処理結果や戻り値 |
ユースケース図 | include | 破線 | 三角矢印▷ | ユースケースの共通処理 |
🎁 おわりに
UMLの矢印や線のスタイルは、単なる図の飾りではなく、設計意図を明確に伝える大切な手段です。
特にチーム開発では、図の記法の使い分けを共通認識にしておくと、設計の曖昧さや認識のズレを減らすことができます。