gifts2017

Граф(ин) 7.7.

Опубликовал Александр Рытов (Арчибальд) в раздел Программирование - Работа с интерфейсом

Что порождает чудовищ? 1С+Дракон или сны разума?

При обсуждении рекурсивного обхода дерева я как-то высказался, что в семерке есть все, и показал модель дерева на базе СпискаЗначений - вполне известная модель. А как насчет модели ориентированного графа?

Будем строить модель на Справочниках. Поскольку граф содержит узлы (вершины) и дуги (ребра), так эти справочники и назовем.

Элемент справочника Дуги, т.е. дуга графа, характеризуется атрибутами (реквизитами):

  • Начало;
  • Конец;
  • Содержание.

Отложив Содержание в сторону (пока), вполне видим, что первым двум реквизитам можно назначить тип Справочник.Узлы.

У дуги два узла. А вот узел сопрягается с произвольным количеством дуг. Поэтому делаем справочник узлов двухуровневым, причем сами узлы будем представлять группами, а в качестве элементов группы будем указывать входящие/исходящие дуги. Итак, реквизит элемента справочника Узлы Дуга получает тип Справочник.Дуги. В качестве второго реквизита будем использовать флажок Входящая - на всякий случай.

Далее, мы же хотим хранить разные графы. Поэтому заведем реквизит группы справочника Узлы ИмяГрафа с типом Строка, хотя, наверное, можно было обойтись Наименованием. Хочется еще как-то типизировать узлы, поэтому заведем реквизит группы ТипУзла.

Все. Структура хранения модели графа готова (в семерке есть все!).

Ну, а при чем здесь Дракон из анонса?

Алгоритмы на языке Дракон (http://infostart.ru/blogs/1017/) представляются ориентированными графами из разнотипных узлов (ТипУзла), один из которых стартовый (специальный тип) и, возможно, несколько финишных (еще один специальный тип). Есть также ветвления, вычисления и т.д. Пожалуй пора к реквизитам группы добавить Алгоритм с типом пока что неопределенным.

Ну и наконец, реквизит Содержание, ранее отложенный в сторону. Переходя от узла к узлу Драконсхемы, мы явно или неявно тащим некий набор данных, который нужен для срабатывания следующего узла (например, чтобы произошло сравнение А>В, А и В должны быть проинициализированы). Вот описание этих данных мы и будем хранить в реквизите Содержание. Суть описания может быть различной, и это тема для Драконопроизводителей, остающаяся за рамками статьи...

 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Рытов (Арчибальд) 01.07.09 15:04
Поскольку это статья, а не готовое решение, в названии стоИт не Граф, а графин (т.е. граф недоделанный :)))
2. Александр Венгер (venger) 01.07.09 15:22
(1) Главное идея и то, что не типовой заученный пример:-) Поэтому и плюс:)
3. Ярослав Волохов (YVolohov) 01.07.09 15:39
Нечто подобное (только попроще) я пытался создать для изучения иностранных языков. Пусть существует справочник, элемент которого содержит иностранное слово и его перевод на русский а табличная часть - список ссылок на близкие (по ассоциации слова). Первое слово выбирается случайно, а дальше происходит переход по одной из ссылок на слово-ассоциацию. Затем процесс повторяется до тех пор пока его не прервут. Если у слова нет ссылок то опять происходит случайный выбор из базы.
Таким образом пользователь как бы ходит по бесконечной сети где каждый узел ассоциируется со следующим.
4. Александр Рытов (Арчибальд) 01.07.09 17:07
(3) Я так и изучал английский, только пользовался не Справочниками, конечно, а картотекой.

Но хотелось бы комментариев от драконистов...
5. Владимир Потапов (keleg) 02.07.09 03:45
Ну, я пришел в 1С сразу на 8ку, потому насчет "есть все" - возможно, но считаю что уже не очень актуально :-)
Принцип понятен. Но опять же в 8ке закрытая архитектура и без левых телодвижений Драконом в ней пользоваться не получится, а лишних сложностей не хочется.
Потому дожидаюсь выхода Управляемого Приложения, и уже в его контексте буду искать применимость Дракона и убеждать разработчиков, благо опыт этого убеждения имеется, хоть и не очень большой :-)

6. Александр Рытов (Арчибальд) 02.07.09 08:24
(5) Насчет восьмерки не согласен, хоть я и не являюсь ее поклонником/знатоком. Как раз там все это можно сделать элегантней, особенно "зашить" алгоритмы отработки узлов.
А вообще-то, чем богаче (многообразнее) платформа, тем легче потерять начальную идею (суть). Пример: мне задают вопрос, как это в семерке можно обходить дерево, если объект "Дерево" в семерке отсутствует.
7. Сергей Рудаков (fishca) 03.07.09 12:31
где методические материалы то?
8. Александр Рытов (Арчибальд) 03.07.09 13:11
(7)Большой энциклопедический словарь:
Метод
Метод - (от греч . methodos - путь исследования, теория, учение), способ достижения какой-либо цели, решения конкретной задачи; совокупность приемов или операций практического или теоретического освоения (познания) действительности. В философии метод - способ построения и обоснования системы философского знания. ;

Приведен способ решения конкретной задачи - моделирования графов в семерочной среде.

Что, обиделся? ;-)
9. Сергей Рудаков (fishca) 03.07.09 13:33
(8) Что, обиделся? ;-) ---- нет :), просто мимо проходил.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа