При обсуждении рекурсивного обхода дерева я как-то высказался, что в семерке есть все, и показал модель дерева на базе СпискаЗначений - вполне известная модель. А как насчет модели ориентированного графа?
Будем строить модель на Справочниках. Поскольку граф содержит узлы (вершины) и дуги (ребра), так эти справочники и назовем.
Элемент справочника Дуги, т.е. дуга графа, характеризуется атрибутами (реквизитами):
- Начало;
- Конец;
- Содержание.
Отложив Содержание в сторону (пока), вполне видим, что первым двум реквизитам можно назначить тип Справочник.Узлы.
У дуги два узла. А вот узел сопрягается с произвольным количеством дуг. Поэтому делаем справочник узлов двухуровневым, причем сами узлы будем представлять группами, а в качестве элементов группы будем указывать входящие/исходящие дуги. Итак, реквизит элемента справочника Узлы Дуга получает тип Справочник.Дуги. В качестве второго реквизита будем использовать флажок Входящая - на всякий случай.
Далее, мы же хотим хранить разные графы. Поэтому заведем реквизит группы справочника Узлы ИмяГрафа с типом Строка, хотя, наверное, можно было обойтись Наименованием. Хочется еще как-то типизировать узлы, поэтому заведем реквизит группы ТипУзла.
Все. Структура хранения модели графа готова (в семерке есть все!).
Ну, а при чем здесь Дракон из анонса?
Алгоритмы на языке Дракон (//infostart.ru/blogs/1017/) представляются ориентированными графами из разнотипных узлов (ТипУзла), один из которых стартовый (специальный тип) и, возможно, несколько финишных (еще один специальный тип). Есть также ветвления, вычисления и т.д. Пожалуй пора к реквизитам группы добавить Алгоритм с типом пока что неопределенным.
Ну и наконец, реквизит Содержание, ранее отложенный в сторону. Переходя от узла к узлу Драконсхемы, мы явно или неявно тащим некий набор данных, который нужен для срабатывания следующего узла (например, чтобы произошло сравнение А>В, А и В должны быть проинициализированы). Вот описание этих данных мы и будем хранить в реквизите Содержание. Суть описания может быть различной, и это тема для Драконопроизводителей, остающаяся за рамками статьи...