Graphvizでオブジェクト図

Graphvizでオブジェクト図を書く。図案は ダイアグラム別 UML徹底活用 (翔泳社) より一部引用

Graphvizでオブジェクト図

// -*- coding: utf-8-unix -*-
digraph sample {
  graph [fontname = "monospace", fontsize = 10, ranksep = 1, nodesep = 1];
  node  [fontname = "monospace", fontsize = 10];
  edge  [fontname = "monospace", fontsize = 10];

  // node
  node              [shape = record];
  membership        [label = "{\<\<Object\>\>\n豆本蔵夫:会員| \
                               名前=豆本 蔵夫\l生年月日=1990/01/01\l入会日=2000/12/31\l会員番号=A123\l住所=東京都●●\l}"];
  rental            [label = "{\<\<Object\>\>\n作成した貸出:貸出| \
                               貸出日=2001/01/01\l貸出期間=1週間\l金額=500円\l}"];
  rental_substance1 [label = "{\<\<Object\>\>\nT1234-001:貸出実体| \
                               貸出番号=T1234-001\l媒体=DVD\l}"];
  rental_substance2 [label = "{\<\<Object\>\>\nT1235-001:貸出実体| \
                               貸出番号=T1235-001\l媒体=DVD\l}"];
  goods1            [label = "{\<\<Object\>\>\n死霊の盆踊り:作品| \
                               作品名=死霊の盆踊り\l時間=2:00\l監督=A・C・スティーブン\l}"];
  goods2            [label = "{\<\<Object\>\>\n毒々モンスター:作品| \
                               作品名=毒々モンスター\l時間=1:30\l監督=マイケル・ハーツ\l}"];

  // edge
  edge                                   [arrowhead = none];
  membership        -> rental            [headlabel = "貸出先",   taillabel = "現在の貸出",       labeldistance = 3];
  rental            -> rental_substance1 [headlabel = "貸出対象", taillabel = "貸出先",           labeldistance = 2];
  rental            -> rental_substance2 [headlabel = "貸出対象", taillabel = "貸出先",           labeldistance = 2];
  rental_substance1 -> goods1            [headlabel = "仕様",     taillabel = "棚に置かれた実体", labeldistance = 2];
  rental_substance2 -> goods2            [headlabel = "仕様",     taillabel = "棚に置かれた実体", labeldistance = 2];

  // alignment
  {rank = same; membership; rental}
  {rank = same; rental_substance1; rental_substance2}
  {rank = same; goods1; goods2}
}

ダイアグラム別 UML徹底活用 (DB Magazine SELECTION)

ダイアグラム別 UML徹底活用 (DB Magazine SELECTION)