Graphviz – это мощный инструмент для создания диаграмм, использующий язык DOT. С помощью него можно строить схемы для классов, баз данных, сетей, алгоритмов и многого другого.
Онлайн-редактор позволяет быстро писать код, визуализировать графы и экспортировать схемы.
🔹 Основные элементы Graphviz
1️⃣ Типы графов
Ориентированный граф (digraph) – со стрелками между узлами.
Неориентированный граф (graph) – без стрелок, просто связи.
Пример разницы:
// Ориентированный граф (направленные связи)
digraph directed_example {
A -> B;
B -> C;
}
// Неориентированный граф (обычные связи)
graph undirected_example {
A -- B;
B -- C;
}
2️⃣ Создание узлов
Каждый узел можно оформить по-разному:
digraph nodes_example {
A [shape=circle, color=red, style=filled];
B [shape=box, color=blue, fontcolor=white, style=filled];
C [shape=diamond, color=green, style=filled];
}
🔹 Возможные формы узлов (shape):
ellipse (по умолчанию)
box (прямоугольник)
diamond (ромб)
circle
record (используется для классов, таблиц)
3️⃣ Связывание узлов (стрелки и линии)
🔸 Простые связи
digraph simple_arrows {
A -> B;
B -> C;
}
🔸 Разные стили стрелок
digraph arrow_styles {
A -> B [arrowhead=normal]; // Обычная стрелка
B -> C [arrowhead=vee]; // Двойная V-образная стрелка
C -> D [arrowhead=diamond]; // Ромбовидная стрелка
D -> E [arrowhead=dot]; // Точечная стрелка
}
🔹 Возможные виды стрелок (arrowhead):
normal (обычная)
vee (V-образная)
diamond (ромб)
dot (точка)
odiamond (пустой ромб)
obox (пустой прямоугольник)
4️⃣ Типы линий (связей)
digraph line_styles {
A -> B [style=solid]; // Обычная линия
B -> C [style=dashed]; // Пунктирная
C -> D [style=dotted]; // Точечная
D -> E [style=bold]; // Жирная
}
🔹 Варианты style для линий:
solid (сплошная)
dashed (пунктирная)
dotted (точечная)
bold (жирная)
🔹 Как создавать классы (группировка объектов)
В Graphviz можно отображать структуру классов с их атрибутами и методами. Это делается с помощью shape=record.
📌 Пример класса
digraph class_example {
node [shape=record];
"Класс" [label="{ Класс | атрибут1: тип \l атрибут2: тип \l метод1(): тип \l }"];
}
🔹 Как связать классы (наследование, композиция, агрегация)
В программировании связи между классами бывают разными: