Здравствуйте, народ.
Не писал с прошлого года, поэтому поздравляю всех с наступившей весной.
8 марта у меня нарисовался вот такой рисунок
Вложение:
romashki.jpg [ 72.72 КБ | Просмотров: 17397 ]
который повиг меня быстренько внести в мою программку большую часть
заявленных в ноябре прошлого года планируемых изменений (см. файл
dalvjaz2.txt). Добавлено почти все по файлу конфигурации (только
по-прежнему осталась работа только с одним файлом сокращений) плюс еще
кое-что.
d4dal207.rar - скачиваний 55, новую версию см. ниже в этой теме в сообщении от 4.12.2012
Рабочая панель программы при этом почти не изменилась.
Вложение:
r_panel.JPG [ 11.48 КБ | Просмотров: 17397 ]
Элементы рабочей панели слева направо:
1) кнопка возврата после перехода по ссылке на другую запись
2) "ЧФ" - чтение файла
3) "ЗФ" - запись файла
4) "Н" - нормализация индексов элементов схемы
5) "Р" - редактирование текстовой записи
6) группа кнопок навигации по записям модуля
7) список - выбор записи модуля из списка
8 ) "схема" - флажок просмотра программных записей как визуальных схем
(сейчас при запуске программы флажок сброшен, так что первая запись
первого модуля появляется в окне в текстовом режиме)
9) толщина линий - 1 или 2
10) цвет линий - черный или зеленый
11) "BMP" кнопка создания bmp-файла shema.bmp и файла текстового
описания схемы shema.txt
12) закладки выбора модуля - щелчком по закладке модуля (можно
загрузить в программу до 10 модулей, а всего в программе задать до 99
модулей и загружать любые из них, меняя для модуля режим загрузки:
"КОД" - кодогенерация (тут все как было: для сохранения новой версии
файла нужно нажать кнопку "ЗФ" или подтвердить сохранение при выходе из
программы);
"---" - модуль не загружается;
"ДОК" - документирование: т.к. я не могу поручиться, что моя программа
полностью отлажена, то я и ввел этот режим с целью заботы о сохранности
файлов исходного кода.
Окна редактирования текстовой записи и элемента схемы открываются как
"ДОК" только для чтения, можно менять лишь значок пиктограммы и
сокращение для элемента схемы. После их изменения и нажатия "F2"
программа:
1) сохраняет файл исходного кода с расширением ".__b" и открывает для
записи новую версию файла исходного кода.
2) переписывает все строки ".__b" в новую версию файла, а когда доходит
до строки, с которой начинается отредактированный элемент записи
(кстати, при наведении мыши на элемент схемы в режиме "ДОК" во
всплывающем окне в скобках отображается номер строки файла исходного
кода, с которой начинается этот элемент), дописывает в конец этой
строки новый определитель рисунка и сокращения, после чего все
остальные строки переписываются из ".__b" в новую версию файла без
изменений.
3) закрывает новую версию файла.
Тупо, зато надежно.
После этого при переходе к окну среды программирования там появится
вопрос: "Файл ХХХ изменился. Загрузить новую версию?".
Программа по таймеру постоянно проверяет времена создания файлов
исходного кода и файла сокращений и при их изменении автоматически
считывает новые версии этих файлов, получаемые при нажатии на кнопку
"сохранить файл" в среде программирования или в текстовом редакторе.
При считывании новой версии файла исходного кода он сохраняется с
расширением ".__r". Перед считыванием новых версий для модулей в режиме
"КОД" их текущие версии сохраняются в "__каталог_чт" (см. dalvjaz.cfg).
Кроме того, при каждом запуске программы все считываемые программой
модули сохраняются с расширением ".__o".
Модуль делится на записи, а схема на элементы при помощи служебных
комментариев программы dalvjaz2, которые легко могут быть введены прямо
в среде программирования (подробнее см. dalvjaz.cfg). А если все модули
были загружены как "ДОК" и не планируется вводить для элементов схемы
пиктограммы и сокращения, то dalvjaz2 будет работать в режиме вьюера.
СИЛУЭТНОЕ ПРОГРАММИРОВАНИЕ В ДАЛВЯЗ 2
Следствием вышеуказанных изменений явилось то, что теперь можно
использовать программу dalvjaz2 как программу для разработки и
документирования ее же самой.
Каталог для работы с dalvjaz2: ...\dalvjaz2\work - нужно только
скопировать туда dalvjaz2.exe и исправить пути для каталогов в
...\dalvjaz2\work\dalvjaz.cfg.
Загружаются 5 модулей:
u_dalvj.pas ДОК
u_files.pas ДОК
u_ls.pas ДОК
u_red.pas ДОК
u_test.txt КОД
Я решил превратить процедуру создания визуальной схемы
procedure Tform_ls.b_sozdatx_shemuClick(Sender: TObject) (я раньше уже
разбирал логику работы этой процедуры и приводил скриншоты ее
визуальной схемы в старом варианте) в цикл-силуэт и воссоздал ее заново
в модуле u_test.txt, вводя элементы схемы с клавиатуры из окна ЛСП,
фрагменты исходного кода вставлял из старой версии процедуры, а также
присваивал элементам схемы сокращения и пиктограммы (если требуется
текст комментария, состоящий больше, чем из одной строки, можно
вставить ссылку на запись модуля, содержащую текстовый комментарий,
или на htm-файл, в котором можно и рисунком непонятные моменты
пояснить). После запоминания созданной процедуры по "ЗФ" я скопировал
сгенерированный текст процедуры в файл u_ls.pas, а старый вариант
процедуры сохранил для сравнения в файле u_test.txt.
Вложение:
u_test.txt [15.72 КБ]
Скачиваний: 788
В новой версии я изменил стиль вывода схемы.
Линии теперь по умолчанию двойной толщины и зеленого цвета.
Значки теперь выглядят вот так:
Вложение:
picts.JPG [ 90.29 КБ | Просмотров: 17397 ]
После вставки нового варианта процедуры в программу (вроде работает) я
вывел схему этой процедуры на экран и нажал кнопку "BMP", после чего
программа сгенерировала bmp-файл визуальной схемы процедуры и txt-файл
описания элементов процедуры по их пиктограммам и сокращениям.
Вложение:
shema.JPG [ 98.86 КБ | Просмотров: 17397 ]
2: начало цикла-силуэта
3: ветка начальной инициализации
4: загрузить ЛСП для возможного сообщения об ошибке
5: запоминаем 1-ю выделенную строку списка ЛСП
6: устанавливаем параметры главной вертикали схемы
7: инициализация массива открытых вертикалей схемы
8: начальная инициализация переменных
9: удаляем вертикали для схемы
10: переход к обработке ошибки при ошибке
12: сброс стека ЛСП
13: инициализация цикла сканирования ЛСП
15: начало цикла сканирования ЛСП
16: задание текущей строки ЛСП
17: запомнить блочный элемент схемы
18: получить текущий элемент схемы из ЛСП
19: получить вершину стека ЛСП
20: проверка ошибок ЛСП
21: переход к обработке ошибки при ошибке
24: окончание цикла сканирования ЛСП
25: начало IF/EI/цикла
26: оператор IF, обработка для IF
27: оператор EI, обработка для EI
28: начало цикла, обработка для начала цикла
29: переход к обработке ошибки при ошибке
30: заносим текущий элемент в стек ЛСП
31: оператор EB, начало альтернативного блока условия
32: оператор EB, начало альтернативного блока условия
33: переход к обработке ошибки при ошибке
34: оператор E, конец блока условия, обработка для E
35: оператор E, конец блока условия, обработка для E
36: переход к обработке ошибки при ошибке
37: цикл ПОВТОРЯТЬ ДО ...
38: переход к обработке ошибки при ошибке
39: конец цикла
40: переход к обработке ошибки при ошибке
41: конец цикла, обработка для конца цикла
42: конец цикла, обработка для конца цикла
43: переход к обработке ошибки при ошибке
44: переход к обработке ошибки при ошибке
45: извлечь элемент из стека ЛСП
46: обработка для действия
47: переход к обработке ошибки при ошибке
48: переход к следующему шагу цикла сканирования ЛСП
51: заключительные действия
52: получить вершину стека ЛСП
53: переход к обработке ошибки при ошибке
54: обработка после сканирования ЛСП
55: ошибок при создании схемы не было
56: схема считана
57: пересчет координат схемы
58: вывод на экран
59: загрузка ЛСП
60: восстановить выделенную линию списка ЛСП
61: сохранить схему в массиве памяти модуля схемы
63: обработка ошибок и выход
64: обработка ошибки
66: конец цикла-силуэта
Вот такой опыт силуэтного программирования.
Недавно прочитал заметку Геннадия Николаевича, что профессор Шалыто не
понимает, зачем нужно было придумывать силуэтное программирование, т.к.
все это слишком сложно и громоздко.
За Владимира Даниеловича я отвечать не буду, а от себя, для случая
ДАЛВЯЗ 2, могу ответить:
1) цикл-силуэт компактифицирует визуальную схему алгоритма, позволяя
размещать достаточно сложный алгоритм на одном экране (можно сравнить
нынешний и предыдущий варианты визуализации b_sozdatx_shemuClick);
2) в ДАЛВЯЗ 2 для создания на основе процедуры визуальной схемы даже
в текстовом редакторе требуются не такие уж и большие усилия - нужно
только скопировать требуемое число раз основной служебный комментарий
задания элемента визуальной схемы (*i*) (или /*i*/ для семейства
C/C++), а затем в некоторых местах его подкорректировать - для циклов,
выхода и окончания процедуры;
3) сложное условие в ДАЛВЯЗ 2 выполняет те же функции, что и switch-
переключатель, но при этом предоставляет более богатые возможности
выбора, так что в этом смысле силуэтное программирование в ДАЛВЯЗ 2
можно рассматривать как расширенный вариант switch-программирования.
И еще по поводу внешнего вида блок- и прочих визуальных схем для
описания производственных процессов.
Как правило, блок-схемы алгоритмов реальных производственных и
технологических процессов почти всегда нуждаются в пояснительном тексте
с расшифровкой используемых в этих схемах сокращений.
В качестве примера - алгоритм из учебника по железнодорожной автоматике
(Сапожников В.В., Кононов В.А. Электрическая централизация стрелок и
светофоров, М.: Маршрут, 2002)
Вложение:
2_6_uvs.JPG [ 196.58 КБ | Просмотров: 17397 ]