В настоящее время у меня проблемы с проектированием UML-подобных диаграмм на графике.Причина проблемы заключается в том, что они не являются точными диаграммами UML.Основное отличие состоит в том, что я использую отступы, чтобы добавить иерархию к свойствам объекта.Реализация этих особенностей немного сложна для меня.Я пытаюсь добиться этого:
Я обычно использую форму узла под названием record
для разработки этих диаграмм.Проблема возникает, когда мне нужно связать две из этих UML-подобных диаграмм точно так же, как отношения в UML, т.е. агрегацию, ассоциацию, композицию и т. Д.
Когда у меня есть диаграммы, я не могу установить связь сстрелки, потому что стрелки идут только от случайной части одного узла к другой случайной части другого узла.То, как у меня есть UML-подобные диаграммы, хорошо, но стрелка отношения заставляет ее не быть тем, что я хочу, потому что я хочу, чтобы стрелки переходили из определенной точки одного узла в другую конкретную точку другогоузел.
Код DOT, который я использовал для создания этого графика, выглядит следующим образом:
digraph G {
fontname = "Bitstream Vera Sans"
fontsize = 8
node [
fontname = "Bitstream Vera Sans"
fontsize = 8
shape = "record"
]
edge [
fontname = "Bitstream Vera Sans"
fontsize = 8
]
Person [
label = "{Person \l\l \ age : int\l \ livesIn : City \l \ \ \ sinceYear : int}"
] // \l -new line, \ -indentation
City [
label = "{City \l \ \ name : string}"
]
Person -> City
}
Я пытался обойти эту проблему, используя горизонтальные линейные деления внутриузлы, хотя я не хотел линий.Горизонтальные деления линий позволяют мне сделать возможным это специфическое отношение, используя ports , но они создают новую проблему самостоятельно.Проблема, которую они создают, состоит в том, что они избавляются от отступов, которые я хочу и имел в предыдущем графике.Способ, которым я пытался обойти проблемы со стрелками, работает, но создаются новые проблемы - отступы исчезают, а деления горизонтальных линий нельзя сделать невидимыми
.
Код, который я использовал для создания этого графика:
digraph G {
fontname = "Bitstream Vera Sans"
fontsize = 8
node [
fontname = "Bitstream Vera Sans"
fontsize = 8
shape = "record"
penwidth = 0.5
]
edge [
fontname = "Bitstream Vera Sans"
fontsize = 8
]
Person [
label = "{<g0> Person | <g1> age : int | <g2> livesIn : City | <g3> sinceYear : int}"
] // \l -new line, \ -indentation
City [
label = "{<f0> City | <f1> name : string}"
]
Person:<g2> -> City:<f1> [arrowhead = "empty", headlabel = "*"]
}
Эти отступы являются важной частью отношений, поэтому мне интересно, знает ли кто-нибудь, что я могу сделать, чтобы получить этиотступы на диаграммах, а также то, что я могу сделать, чтобы деления горизонтальных линий были невидимыми?
Я буду признателен, если у кого-то есть лучший способ / идея, которая также полностью отличается от того, что я делал на диаграммах 2 и3, это поможет мне достичь диаграммы 1.