まくろぐ

PlantUML でオブジェクト図を作成する

更新:
作成:

オブジェクト図はクラス図と同様の文法で記述することができます。 下記のページも参考にしてください。

オブジェクト図の基本

オブジェクト図 (object diagram) は、システム内のオブジェクト群のある時点のスナップショットを表現します。 具体的なオブジェクト同士の関係を表現することができるため、複雑な依存関係を持つオブジェクト

インスタンス名は下線付きで「インスタンス名:クラス名」という形式で記述します。 インスタンス名とクラス名はどちらか一方を省略して記述することもできますが、クラス名だけを記述する場合は、「:クラス名」のようにコロン部分だけは残して記述します。

オブジェクト図は、メッセージなしのコミュニケーション図と考えることもできます。 ─『UMLモデリングのエッセンス第3版』マーチン・ファウラー

PlantUML で登場させるオブジェクト群は、object キーワードを使って定義します。 as を使って別名を付けておくことができます。

@startuml
object object1
object "My second object" as o2
@enduml

関連の線を引く

オブジェクト同士の依存関係を示すには、-- でオブジェクト名(あるいは別名)を繋ぎます。 代わりに .. を使用すると、破線 (dashed line) で繋ぐことができます。

@startuml
object object1
object "Second object" as o2
object "Third object" as o3
object "Fourth object" as o4

object1 -- o2
object1 -- o3
object1 -- o4
o2 .. o3
o3 .. o4
@enduml

ハイフンやドットの数を 1 つに減らすことで、オブジェクトを横方向に配置することができます。

@startuml object-lines2
object object1
object "Second object" as o2
object "Third object" as o3
object "Fourth object" as o4

object1 -- o2
object1 -- o3
object1 -- o4
o2 . o3
o3 . o4
@enduml

オブジェクト名に下線を引く

オブジェクト図らしく、オブジェクト名に下線を引くには下記のようなマークアップを使用します。

@startuml
rectangle "<u>tools: Organization</u>" as tools
rectangle "<u>John : Person</u>" as john
rectangle "<u>Don : Person</u>" as don
tools -- john
tools -- don
@enduml

上記では、object キーワードの代わりに rectangle キーワードを使ってオブジェクトを定義しているため、属性部分が表示されず、単純な矩形としてオブジェクトが表示されています。

関連を示すテキストを追加する

関連の線に沿う形でテキストを表示するには下記のようにします。 それぞれのオブジェクトに近い位置、あるいは中央に配置できます。

@startuml
object Parent
object Child1
object Child2
object Child3

Parent "parent" -- Child1
Parent -- "child" Child2
Parent -- Child3 : family
@enduml

属性を表示する

オブジェクトの属性(フィールド)を表示するには、下記のように、オブジェクトを定義した後で、オブジェクト名 : フィールド というフォーマットで記述していきます。

@startuml
object "<u>tools: Organization</u>" as tools
object "<u>apps: Organization</u>" as apps
tools : location = "Chicago"
apps : location = "Saba"
@enduml

複数の属性を表示したいときは、次のように属性定義の行を追加していくか、

@startuml
object "<u>tools: Organization</u>" as tools
object "<u>apps: Organization</u>" as apps
tools : location = "Chicago"
tools : id = 100
apps : location = "Saba"
apps : id = 200
@enduml

あるいは、object 定義時にブロックを付加して属性を列挙します。 属性が 1 つだけの場合も、このようにブロックを使って記述しちゃった方がまとまりがあって分かりやすいかもしません。

@startuml
object "<u>tools: Organization</u>" as tools {
  location = "Chicago"
  id = 100
}
object "<u>apps: Organization</u>" as apps {
  location = "Saba"
  id = 200
}
@enduml

オブジェクト図のサンプル

最後に複雑なオブジェクト図のサンプルを載せておきます。

/p/t7cfj92/object-example.svg
@startuml
object "<u>engineering : Organization</u>" as engineering {
  location = "Boston"
}
object "<u>tools : Organization</u>" as tools {
  location = "Chicago"
}
object "<u>apps : Organization</u>" as apps {
  location = "Saba"
}
object "<u>Don : Person</u>" as don {
  location = "Champaign"
}
object "<u>John : Person</u>" as john {
  location = "Champaign
}

engineering "parent" -- tools
engineering -- apps
tools "parent" -- don
tools "parent" -- john
@enduml

出典:『UMLモデリングのエッセンス第3版』マーチン・ファウラー著

関連記事

まくろぐ
サイトマップまくへのメッセージ