OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 06:07

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: Суббота, 14 Сентябрь, 2013 20:08 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 164
КАК СОЗДАЕТСЯ АЛГОРИТМ

Вот появились небольшие размышления на эту тему.
Для примера я решил разобрать общую логику создания и развития
алгоритма подсчета координат по оси Х для элементов визуальной схемы,
реализуемого процедурой Tform_dalvjaz.podschet_max_koord (если в привязке
к модулю, то u_dalvj.23).


Шаг 1.

Первый вариант этой процедуры возник еще тогда, когда в программе
dalvjaz2 планировалось выводить на экран только минимизированную форму
визуальной схемы.

Сначала появились общие соображения о логике подсчета координат по Х
для минимизированной визуальной схемы:

- для минимизированной схемы размеры всех элементов по Х одинаковы;
принимаем размер всех элементов равным ширине 6 символов фонта Courier
New, 9 dalvjaz_chw, а расстояние между вертикалями равным 2*dalvjaz_chw;

- при создании новых вертикалей используется логика "открытых" (т.е.
находящихся в процессе создания) вертикалей, чьи координаты по Х могут
меняться в процессе их создания, если у их родительской вертикали
появляется еще одна дочерняя вертикаль, вставляемая между родительской и
уже открытой для создания вертикалями;

- массив открытых вертикалей схемы нужен для получения условных
координат по Х для создаваемых вертикалей схемы. Условные координаты
по Х хранятся в структуре данных вертикали в поле n_sprawa (номер справа
от главной вертикали или 0 для главной вертикали). В дальнейшем из
условных координат вертикалей по Х будут получены текущие координаты
вертикалей.

- нужно учитываеть логику создания дочерних вертикалей для элементов схемы
разных типов (она достаточно подробно описана в файле dal2_083.txt,
выложенном в посте от 29.06.2013 в теме "Программы AB_VJAZ и DAL_VJAZ").

В результате сложилось описание логики процедуры u_dalvj.23, состоящей
из следующей последовательности действий:

1) отступ по Х для главной (самой левой) вертикали схемы равен
OTSTUP_WERT+(dalvjaz_chw*5)

2) для дочерних вертикалей отступ равен
отступ главной вертикали + tek_alg.m_wert[i].n_sprawa * dalvjaz_chw*8

3) находим для схемы максимальный размер по Х dalvjaz_xmax как сдвиг по Х
для самой правой вертикали + (dalvjaz_chw*3)

Пока все очень просто.

Есть еще 3 пункта, напрямую к подсчету координат вертикалей по Х не
относящиеся, они попали в процедуру потому, что надо же их было где-то
вычислять (их логика в дальнейшем изменений не претерпит, поэтому
подробно здесь они рассматриваться не будут, а желающие могут их
разобрать в файле dal2_083.txt):

4) подсчет dalvjaz_ymax - максимального размера схемы по У;

5) если действие-переход к ветке цикла-силуэта последнее, то опускаем его
к низу вертикали;

6) если действие-переход к ветке цикла-силуэта находится перед t_E, то
опускаем его к t_E.

Тут даже и графический алгоритм как-то строить неудобно - вроде и при
текстовом описании все вполне понятно.


Шаг 2.

Появилась полная форма визуальной схемы.
Ширина элементов теперь заранее неизвестна и вычисляется в процедуре
el_shirina(i), где i - индекс элемента схемы. Соответственно теперь
нужно вычислять и ширину вертикалей по Х. Полный разбор логики для
этого случая приведен в файле dal2_083.txt, здесь дается более
поверхностное описание.
Используемый для получения координат X вертикалей алгоритм не является
математически оптимальным (он был выбран в силу своей простоты), но
построить схему с достаточно приемлемым взаимным расположением вертикалей
по горизонтали этот алгоритм позволяет при условии, что ширина элементов
схемы будет колебаться в не слишком больших пределах относительно
некоторого среднего значения.
(если отличия ширин вертикалей с одинаковым n_sprawa значительные, то
надо было бы проводить дополнительную оптимизацию с попыткой сдвига
вертикалей влево начиная с левого края схемы там, где это возможно,
что и будет сделано в алгоритме, реализуемом в шаге 3)


1) находим mn_sprawa - максимальное n_sprawa вертикалей схемы;

2) для всех вертикалей считаем dx - ширину вертикалей:

tek_alg.m_wert[j].dx := 0;

а дальше цикл для всех элементов вертикали:

tdx := el_shirina(k);
if (tdx > tek_alg.m_wert[j].dx) then tek_alg.m_wert[j].dx := tdx;

3) цикл для всех возможных n_sprawa относительно главной вертикали:

левая граница группы вертикалей со следующим по порядку возрастания
значением n_sprawa будет вычисляться как
max_dx_n_sprawa + (dalvjaz_chw*3), где max_dx_n_sprawa - это ширина
самой широкой из вертикалей с одинаковым текущим n_sprawa;

4) находим dalvjaz_xmax, dalvjaz_ymax.

5) сдвигаем вниз действия-переходы.


Шаг 3.

Строгий алгоритм для получения координат X вертикалей схемы.
Реализован в программе dal2html, выложенной в теме "Визуализация процедур
и html".

Учтены замечания Алексея Донского по выравниванию левых границ блоков
действий вертикали. В конфигурации введен параметр "__коэф_выравн_блоков" -
коэффициент выравнивания блоков вертикали по по левой границе, допустимые
значения: 0 и от 65 до 100.
Если __коэф_выравн_блоков = 0, то блоки не выравниваются, у каждого из
них свой размер и все они центрированы по отношению к своей вертикали.
Если __коэф_выравн_блоков >= 65, то блоки выравнимаются по левому краю,
при этом если размер блока < "__коэф_выравн_блоков" процентов от ширины
максимального блока вертикали, то размер блока по ширине задается
равным значению "0.__коэф_выравн_блоков" от размера самого широкого
блока вертикали.
Когда __коэф_выравн_блоков = 100, то все блоки вертикали, кроме блоков
условий и переходов к другим веткам, становятся одинаковыми по ширине
и центрированными по отношению к вертикали.

1) находим mn_sprawa - максимальное n_sprawa вертикалей схемы;

2) цикл: для всех вертикалей считаем dx

3) если нужно выравнивание эл-тов, то
цикл: для всех вертикалей выравниваем все действия по левой границе

4) цикл для всех возможных n_sprawa относительно главной вертикали:

левая граница группы вертикалей со следующим по порядку возрастания
значением n_sprawa будет вычисляться как
max_dx_n_sprawa + (dalvjaz_chw*3), где max_dx_n_sprawa - это ширина
самой широкой из вертикалей с одинаковым текущим n_sprawa;

5) выполняем сдвиг вертикалей влево, где это возможно:
* цикл: перебор с ростом n_sprawa для всех дочерних вертикалей:

* цикл для всех вертикалей с меньшим n_sprawa:

- на схеме ищем объекты, ограничивающие движение вертикали с
n_sprawa влево - это правые границы вертикалей с меньшим
n_sprawa, имеющих с этой вертикалью общие координаты по У (пересечение
по у);
- при переборе находим максимальное х для правых границ вертикалей
с меньшим n_sprawa (для тех их эл-тов, координаты у которых пересекаются
с координатами вертикали)

* конец цикла

* по полученным в результате выполнения цикла максимальным х для правых
границ вертикалей с меньшим n_sprawa решаем, на сколько можно
сдвинуть влево по х проверяемую вертикаль

* конец цикла

6) находим dalvjaz_xmax, dalvjaz_ymax.

7) сдвигаем вниз действия-переходы.

Если разбить приведенный алгоритм на ветки и записать его строгим
псевдокодом, то программа dal2html сгенерирует для него следующий
цикл-силуэт:
Вложение:
1_23.jpg
1_23.jpg [ 347.2 КБ | Просмотров: 10171 ]



Т.е. процесс "текст -> схема" выглядит при таком подходе достаточно
естественным:

1) сначала описываем в свободном текстовом формате общую логику алгоритма;

2) набрасываем пока не связанный между собой список выполняемых в
алгоритме действий;

3) устанавливаем последовательность выполнения действий в алгоритме
и логические взаимосвязи между действиями (условия, циклы); если нужно,
формируем схему алгоритма:
- либо в графическом редакторе;
- либо по строгому псевдокоду, находящемуся или в комментариях к тексту
процедуры, или в отдельном текстовом файле;

Понятно, что пока нет ясного понимания по пунктам 1 и 2, то и к пункту 3
приступать еще рано.
Обычно я записываю мысли по пунктам 1 и 2 карандашом в виде отдельных
абзацев с отступами между ними, при помощи ластика удаляю лишнее, а на
чистых местах дописываю то, что упустил раньше.
Этап 3 - перенос мыслей в текстовый файл с исходным кодом и нужными
комментариями.
Теперь вот можно и схемку сгенерировать, если потребуется показать
другим логику работы.


Но по жизни у нас ТЗ и описания алгоритмов в большинстве случаев пишутся
в текстовом формате, с приложениями в виде структурных схем системы в
целом и ПО в частности, графические схемы алгоритмов если и приводятся, то
это достаточно компактные обобщенные алгоритмы функционирования системы и
ПО без особых подробностей, иногда эти же обобщенные алгоритмы записываются
псевдокодом.
Слишком велик объем создаваемого ПО, слишком трудоемок процесс рисования
алгоритмов, слишком часто вносятся изменения в программы, чтобы опять
многие моменты перерисовывать заново с такими трудозатратами на рисование,
как сейчас.

Так что по моему мнению визуализация алгоритмов в программировании в его
нынешем состоянии может получить сколько-нибудь заметное распространение
при выполнении двух условий:
1) в случае автоматического или почти автоматического, с минимальными
затратами труда программистов, создания визуальных схем алгоритмов из
исходного кода программ;
2) в случае, если работа с этими визуальными схемами заметно (я думаю, что
это значит процентов на 30 как минимум) облегчит программистам процесс
разработки и сопровождения ПО.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 24 Ноябрь, 2013 19:29 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 164
Ответ Владиславу Жаринову
----------------------------------------------------------------
Здравствуйте, Владислав.
Выкладываю ответ по поводу описания ДАЛВЯЗ 2

Замечания по описанию ДАЛВЯЗ 2 (dalvjaz2_description.pdf в теме «Программы AB_VJAZ и DAL_VJAZ»):

1) Я этой весной поменял место работы — теперь я работаю в конторе, занимающейся тестированием ЭВА, поэтому старое место работы нужно исключить, а оставить только должность: инженер-программист.

2) Во фразе «вместо того, чтобы гнаться за полнотой реализации описания языка ДРАКОН, как оно была изложено В.Д. Паронджановым» нужно исправить: «как ОНО (описание) БЫЛО ИЗЛОЖЕНО».

3) Надо бы упомянуть изменение формата служебных комментариев для версии 0.83; в связи с этим нужно было бы поправить и описание ДАЛВЯЗ 2, но сейчас я этого делать не буду, ниже объясню почему.

4) Для версий 0.84, 0.85 (это уже dal2html) — возможность подключения изображений и задания индивидуальных стилей для каждого блока.

Что касается ЛВУ — вопрос заключается в том, что это понятие придумали задолго до меня, а я предложил всего лишь один из возможных вариантов стандартизации этого понятия для императивных языков программирования высокого уровня — этот момент надо подчеркнуть; вообще этот материал был выложен в надежде получить на него какие-то осмысленные отзывы, но их не последовало; не знаю, имеет ли смысл обсуждать не слишком очевидное предложение, повисшее в воздухе.

По поводу дальнейшего развития ДАЛВЯЗ 2.
Была задумка сделать программу dalvjaz2 этаким простеньким макетом-прототипом визуальной среды программирования, и мои размышления по ЛВУ вроде бы являются движением в этом направлении. Но провести полный рефакторинг программы на основе изложенных в материале по ЛВУ соображений, к тому же с объединением в одно целое функционала программ dalvjaz2 и dal2html, да плюс добавить новые мысли по развитию программы, пока достаточно противоречивые и не оформленные логически — это дело не простое и пока у меня совсем нет свободного времени, чтобы всем этим заниматься (до Нового Года уж во всяком случае, да и дальше свободного времени в больших количествах пока не предвидится) Поэтому решил выложить наиболее оформленную часть новых мыслей прямо сейчас, в виде рисунка с пояснениями.

Вложение:
naklon3.JPG
naklon3.JPG [ 72.5 КБ | Просмотров: 10093 ]


Это возвращение на новом этапе к мыслям о 3D-представлении структуры программы.
Вертикали могут рисоваться как обычно, или под углом 45 градусов, в зависимости от состояния соответствующего флажка.
Один мой знакомый посмотрел и предложил менять цвета блоков, чтобы у более дальних цвет был более темным, я исправил рисунок в соответствии с этим предложением.
Верхний слой соответсвует самому верхнему уровню.
Кстати, если последовательно следовать правилам оформления исходного кода программы в стиле ЛВУ,
то нужно собрать вызовы всех обработчиков событий в одну процедуру, а уже из нее и вызывать эти обработчики конкретных событий.
При щелчке на блоке процедуры верхнего уровня открывается соответствующая этому блоку процедура нижнего уровня.
Оформление процедур в силуэтном стиле плюс уменьшение расстояния между блоками по вертикали до минимума дает возможность изобразить на экране 2 соседних логических уровня.
Щелчок мышью на другом блоке верхнего уровня — и будет отображаться уже другая процедура нижнего уровня.
При щелчке на блоке процедуры нижнего уровня он плавно переезжает наверх, а под ним появляется указанная схема процедуры еще на 1 уровень ниже.
Ну и так далее.
Естественно, возможно изображение в более мелких масштабах всей раскрытой логической вертикали или ее части.
Тут как раз подходят мысли Владимира Даниеловича о мониторе формата А1 с книжной ориентацией. Когда будет выброшена в массовую продажу электронная бумага (для чтения электронных газет), эти мысли уже будут реализованы на практике: вешаешь ее на стенку и подключаешь кабель к системному блоку вместо монитора (наверное, лет через 5 все это уже станет доступным в смысле цены для широкого круга пользователей).

Удачи!
Дмитрий


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 25 Ноябрь, 2013 08:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Хм, Дмитрий, очень любопытная идейка у Вас с изометрическими схемами... Выглядит занятно )
Для орграфов связей модулей или вызовов, или ER-диаграмм такое просится.

Не смотрели - кто-нибудь где-нибудь чего-нибудь такое делал ещё?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 25 Ноябрь, 2013 10:07 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Мысль та же, что была высказана у меня относительно именно сетей как вьюшек "логики верхнего уровня" в этом посте: http://forum.oberoncore.ru/viewtopic.php?p=74875#p74875 (имелось в виду, что координируемые техпроцессы могут располагаться и на плоскости - тогда её действительно можно давать в проекции, но в посте этого нет в тексте, а рисовать было некогда :)). А если обратиться к началу этой ветки, то можно видеть, что Дмитрий исторически всё равно раньше опубликовал идею о "каркасе для процедур"... :) В принципе исходил из идеи "каркаса вариантов" Овчинникова (только он её по-другому использует). Также ignat99 предлагал 3D-моделлинг структур:
ignat99 в viewtopic.php?p=80254#p80254 писал(а):
...
Есть возможность смотреть на 1 слой вглубь. То есть при нажатии на 1 кнопку, каждый модуль с вложенной диаграммой раскрывается и показывает внутренне содержание на заднем плане.
...
- и не только от себя:
ignat99 в viewtopic.php?p=79604#p79604 писал(а):
...
Ещё один участник предлагает использовать 3D для визуализации "data-control flow":

"Visually speaking, I think of a data-control flow diagram as a two-dimensional graph that sinks into a third dimension with a many-worlds interpretation."

Собственно дискуссия вот об этом
...
(Илья Евгеньевич может вспомнить, где ещё он видел это... в связи с Объектными Системами :) - в общем, идея носится в воздухе).

Ну и предшественник общий - это, конечно, Рейсс с его FIELD/PECAN: http://forum.oberoncore.ru/viewtopic.php?p=83916#p83916.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 25 Ноябрь, 2013 10:42 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Дмитрий_ВБ в viewtopic.php?p=83913#p83913 писал(а):
...
Замечания по описанию ДАЛВЯЗ 2 (dalvjaz2_description.pdf в теме «Программы AB_VJAZ и DAL_VJAZ»):
1) ...
2) ...
Учтём...
Дмитрий_ВБ в viewtopic.php?p=83913#p83913 писал(а):
...
3) ...
4) ...
- ну стало быть, трогать не будем...

Дмитрий_ВБ в viewtopic.php?p=83913#p83913 писал(а):
... Что касается ЛВУ — вопрос заключается в том, что это понятие придумали задолго до меня, а я предложил всего лишь один из возможных вариантов стандартизации этого понятия для императивных языков программирования высокого уровня — этот момент надо подчеркнуть; ...
- наверное, ещё одним вариантом можно считать автоматное программирование?..

Дмитрий_ВБ в viewtopic.php?p=83913#p83913 писал(а):
...
По поводу дальнейшего развития ДАЛВЯЗ 2.
... Поэтому решил выложить наиболее оформленную часть новых мыслей прямо сейчас, в виде рисунка с пояснениями.
Вложение:
naklon3.JPG

Это возвращение на новом этапе к мыслям о 3D-представлении структуры программы.
Вертикали могут рисоваться как обычно, или под углом 45 градусов, в зависимости от состояния соответствующего флажка.
Один мой знакомый посмотрел и предложил менять цвета блоков, чтобы у более дальних цвет был более темным, я исправил рисунок в соответствии с этим предложением.
Верхний слой соответсвует самому верхнему уровню.
...
- интересно, вариант применения указал в посте выше.

Дмитрий_ВБ в viewtopic.php?p=83913#p83913 писал(а):
...
Кстати, если последовательно следовать правилам оформления исходного кода программы в стиле ЛВУ,
то нужно собрать вызовы всех обработчиков событий в одну процедуру, а уже из нее и вызывать эти обработчики конкретных событий.
- т.е. получится вроде как монитор ОС (процедура-"координатор")?

Дмитрий_ВБ в viewtopic.php?p=83913#p83913 писал(а):
...
При щелчке на блоке процедуры верхнего уровня открывается соответствующая этому блоку процедура нижнего уровня.
Оформление процедур в силуэтном стиле плюс уменьшение расстояния между блоками по вертикали до минимума дает возможность изобразить на экране 2 соседних логических уровня.
Щелчок мышью на другом блоке верхнего уровня — и будет отображаться уже другая процедура нижнего уровня.
При щелчке на блоке процедуры нижнего уровня он плавно переезжает наверх, а под ним появляется указанная схема процедуры еще на 1 уровень ниже.
Ну и так далее.
Естественно, возможно изображение в более мелких масштабах всей раскрытой логической вертикали или ее части.
- это как-то так:
...
Основной способ произвольного перемещения для Semantic IDE - по АСД документа т.е. дереву узлов, реализуется подобно вспомогательной странице навигации редактора DesignIDEF. Другой способ - по схеме программы некоторого специально определяемого вида. Например, по графит-конструктиву. Тут единица - имя величины/типа/процедуры/модуля.
(в смысле конструктива программы, как здесь)?..


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Ноябрь, 2013 02:11 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Ну и вернусь теперь к объёмному представлению именно систем процедур (как реализаций "нижнего уровня" для сетей техопераций как "логики верхнего уровня").
Принцип иерархии процедур был показан на этой схеме: http://grafit-basis.narod.ru/images/grafit-rules_html_342d32ac.gif (к Правилу 239 здесь). Поскольку обобщённо и укрупнённо, то организация маршрутов не конкретизировалась. Это сделано в другой схеме: http://grafit-basis.narod.ru/images/grafit-rules_html_m2b2de65a.gif (к Правилу 241 здесь). В данном случае на примере синт-силуэта, поэтому маршруты направлены горизонтально. И здесь, поскольку схема уже частная, то не конкретизирован способ организации совместного представления многих схем.
Предложение Дмитрия_ВБ предлагает такой способ. Именно в части построения вьюшки. Сформулирую его как правило:

    При совместном представлении потока управления многих процедур в форме граф-схем процедуры одного уровня иерархии по вызовам располагаются в одной горизонтальной плоскости графит-модели, которая изображается на плоскости представления (листе, экране) по правилам перспективного проецирования (изометрии, аксонометрии), процедуры разных уровней - на разных плоскостях модели, расположенных (в т.ч. и в представлении) по вертикали в порядке иерархии; вызовы показываются связями между соответствующими графоэлементами схем процедур.

Считаю это важным решением. Можно называть вполне официально как в заголовке поста. Главное - что снова возвращаемся к принципам ЕСКД, что предлагал (с конкретизацией для другого аспекта) Блинов: http://forum.oberoncore.ru/viewtopic.php?p=78294#p78294.
Вот же ж человек вроде отделил свои разработки от техноязыковых, а предлагает вещи, актуальные и там... поистине, "чтобы объединиться, надо размежеваться" ((С) классика)... :wink:
Ну и к этому относится общий вывод из полного варианта этого материала (обсуждался с Лаптевым):
Цитата:
... Оправданно говорить о форме записи алгоритмов, текстовой или иной, отдельно от мерности. И также — о структуризации потока управления. Результаты которой можно записать в любой форме (лишь бы базисы допускали указанные в [Ермаков, Судак, 2010, с. 5] эквивалентные преобразования). И организовать как линейно (условно, практическим приближением будет текст или код по типу Морзе), так и планарно (и в большей мерности — например, объёмно как некий 3D-«макет» потока, моделируемый в САПР или даже вручную, если это имеет смысл).
Представление можно оптимизировать по тем или иным критериям. Изменяя критерии, можно просто переключать отображения структуры текущего описания подобно тому, как в Semantic IDE переключаются режимы возвращения объекта или ссылки на него.
Предлагаемая иерархия, по сути, задаёт «новое измерение структурности» в сравнении с [[url=http://2010.it-edu.ru/docs/C4/a4a%20Ермаков%20И.Е1287620722076198.doc]Ермаков, Жигуненко, 2010[/url]] - к осям «последовательность состояний (в порядке чтения/исполнения)» и «переключение состояний» добавляется третья - это гранулярность состояний, масштаб их рассмотрения.
- в данном случае масштаб понимается в системе процедур как уровень иерархии вызовов (в материале - также и более детально, внутри процедуры).

Что здесь всё-таки надо уточнить?
    А. Прежде всего, показывается полностью связка "вызов-возврат". Как это и было на графит-схеме ранжирования. Для этого нужны соответствующие определения в языке схем процедур. В принципе на той же схемы (и соседних) они использованы. Развёрнутые определения в этом пункте (зависят от языка исходных текстов).
    Б. На плоскости можно организовывать маршруты в граф-схеме потока управления отдельно взятой процедуры как "двумерно" (по определению Ермакова-Жигуненко), так и "линейно" (как в ЛСП-таблицах или в тексте с интендациями). Ну и, говоря словами Дмитрия, "так или так в зависимости от состояния соответствующего флажка." Ну, об этом давно говорил... хотя бы тут... и тут подробнее...
    В. Насчёт того, чтобы "предельно уменьшить расстояние между блоками" - в этом случае считаю более оптимальным переход от графовой записи структуры управления к структурно-скобочной, о чём было здесь, например.

Ну и также надо обобщить. Нужны схемы взаимодействия не только по вызовам, но и в других аспектах:
Владислав Жаринов в viewtopic.php?p=74873#p74873 писал(а):
...
    Потому и каждый пользователь (предметник, аналитик, программист) должен иметь возможность оперативно получать и основные схемы моделей. И вспомогательные схемы, производные от содержания модельных единиц в их взаимосвязи. Скомандовал - появилась схема вызовов процедурами друг друга. Ещё - и схема обмена рандеву-сообщениями. Ещё - и схема порождения/снятия процессов (м.б. как частный случай конструкции/деструкции экземпляров представляющих классов). Ещё - и схема вводов/выводов. Ещё - и сохранений/извлечений.
    ...
И здесь поле применения исчисления графов. Не сводимого к маршрутным схемам само собой... ...
- ну, это подразумевается и графит-метод как вариант (определённый на качественном уровне формализации).
А также нужно ограничивать множество одновременно представляемых процедур. Например, делая выборку для проекции по каким-то критериям, кроме аспекта взаимодействия. Это также и с учётом внутренней сложности схем самих процедур (тут учитывается и сказанное здесь, начиная с маркера).

Ну и понятно, что важности предложенного это не умаляет. Ибо суть в том, что такое проецирование иерархии (и именно конкретно предложенным способом) должно повышать наглядность вьюшки (представления) при учёте обсуждавшегося выше (ну и особенностей мышления). Спасибо за подсказку, Дмитрий!
Т.к. сам графит-метод по определению абстрагируется от конкретных вьюшек, то это в его правила не добавляется. А вот сюда: http://grafit-basis.narod.ru/L3/gen_requirs_RDP.html#Doc-n525 есть смысл добавить... И между прочим, в описание ДАЛВЯЗ тоже... с возможностью распространить на представление "логики верхнего уровня" и в этом смысле, и в процедурной реализации (как подмножества процедур программы/инструкции)...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 14:26 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
По мотивам основных реализуемых возможностей и представляемых усовершенствований составил такой обзор:
Вложение:
- в том же формате, что здесь: http://forum.oberoncore.ru/viewtopic.php?p=78188#p78188.
Основная идея та же - организовать графическую вьюшку документа представляющей обычную структуру элементов (разделов/подразделов и т.д.) с укладкой в "силуэт для читателя".

В связи с этим:
Дмитрий_ВБ в viewtopic.php?p=73601#p73601 писал(а):
...
"3) Предполагается приблизить формат псевдокода к формату текстовой инструкции." - это я процитировал свой же текст.
Вот на этом форуме народ постоянно думает - как же облегчить жизнь людям далеким от программирования, но
вынужденным постоянно составлять всяческие описания тех или иных действий - предлагается перевести все это на
графическую основу, а всякие там редакторы выбросить.
Но нынешний формат текстовой документации - последовательность пронумерованных параграфов и пунктов с
перекрестными ссылками и переходами между ними - по всей видимости утвердился надолго.
Поэтому и способ визуализировать все это напрашивается: входным должен быть текстовый формат, как можно более
близкий к современному формату текстовой документации, и если визуализация ощутимо поможет пользователю разобраться
в логических связях внутри этого документа - то это уже будет хорошо. Ну и генерация из визуальной схемы текстового
варианта документа, как стандарта де-факто.
- можно ещё ряд вещей сказать, но пока вот что.

А. Ощутимую помощь в понимании логических связей окажут ссылки по "карте концепций" документа - т.е. связывающие его элементы пользовательскими отношениями.

Б. Применительно к процедурным моделям для этого же нужно показывать "логику нижнего уровня" не только по вызовам. При этом:
    * удобно разным цветом связей выделять разные виды взаимодействий процедур (в смысле перемещений здесь: http://forum.oberoncore.ru/viewtopic.php?p=77108#p77108);
    * перемещения не через основную память показывать со включением внешних сущностей (файлов, систем, подключаемых к исполнителю модели через порты).
Причём надо различать случаи взаимодействия "читатели-писатели" (что положили - то и взяли) и "производители-потребители" (источник отдал одно - а адресат ответил чем-то другим, но как реакцией на это). Представить это, полагаю, можно так:
    * для первого случая проще - по совпадению имён хранилищ в "пишущих" и "читающих" операторах (процедурах); ессно, "явитель" должен использовать данные о назначении операторов/процедур в этом аспекте;
    * для второго посложнее - в том самом "контексте задачи" нужно прописать логику функционирования внешних сущностей, отразив, что: если на их вход поступает что-то из такого-то порта вывода исполнителя нашей модели, то это приведёт к изменениям на таких-то их выходах (которые д.б. наблюдаемы через такие-то порты ввода нашего исполнителя).
При определении свойств сущностей неважны точные процессы, важны границы срабатывания по времени записи/чтения/изменений и соотношения (причинно-следственные связи).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 18 Декабрь, 2013 18:12 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Илья Ермаков в viewtopic.php?p=83915#p83915 писал(а):
...
Не смотрели - кто-нибудь где-нибудь чего-нибудь такое делал ещё?
В дополнение к уже приведённым примерам: Вельбицкий: viewtopic.php?p=74955#p74955 (где пирамида); Житников (andr здесь): http://paralg.ucoz.com/v5-2311-M107-str ... otokov.mht (трёхмерная форма модели).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Декабрь, 2013 19:09 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 164
Как с помощью программы dal2851 по-быстрому изготовить
поздравительную открытку
(программа dal2 v.0.85.1 выложена 22.12.2013 в теме
"Визуализация процедур и html")

Вложение:
ng1.jpg
ng1.jpg [ 126.33 КБ | Просмотров: 9745 ]

Вложение:
ng2.jpg
ng2.jpg [ 136.72 КБ | Просмотров: 9745 ]

Вложение:
ng3.jpg
ng3.jpg [ 136.2 КБ | Просмотров: 9745 ]



1. Генерация поздравительной открытки из структурного псевдокода
в режиме dal2html
Код:
Чтобы перейти в режим dal2html, нужно перед запуском программы
в файле dal2htm.cfg задать следующее значение параметра
__создание_htm_и_jpg_файлов  "1"    ;  0/1
;                                   ;  0 - режим  dal_vjaz_2
;                                   ;  1 - режим  dal_2_html


                 Ваша открытка, несколько строчек ...


Вот текст псевдокода, генерирующий новогоднее поздравление:

СХЕМА.1.                     [-]
М.Ю. Лермонтов
Когда волнуется желтеющая нива
   * если  [-]
   Иллюстрация
      * [-]  РИС .002
   * иначе если  [-]
   Стихотворение
      * [-]
      Когда волнуется желтеющая нива
      И свежий лес шумит при звуке ветерка
      И прячется в саду малиновая слива
      Под тенью сладостной зеленого листка,
      * [-]
      Когда студеный ключ, играя по оврагу
      И погружая мысль в какой-то смутный сон,
      Лепечет мне таинственную сагу
      Про мирный край, откуда мчится он,
      * [-]
      Тогда смиряется души моей тревога,
      Тогда расходятся морщины на челе,
      И счастье я могу постигнуть на земле,
      И в небесах я вижу Бога.
   * конец
   * выход [-]
   С Новым Годом !
* КОНЕЦ СХЕМЫ



1.1. Задаем имя файла псевдокода

Имя текстового файла с псевдокодом для схемы задается в файле
dal2htm.cfg при помощи следующих параметров:


__каталог02              " "   ; это значит, что каталог не задан,
                               ; поэтому файл нужно поместить в тот же
                               ; каталог, что и exe-файл программы

;                                                        в htm-файл:
; N модуля     N    ссылочный  имя                       1: схемы
;            ката-  N модуля   файла                     2: схемы и
;            лога   м.б.>100                ПРОСМ/---       текстовые записи       
;                                                        3: схемы и все записи
__модуль01   "02>      3       kogda.txt       ПРОСМ           3"

в результате задано имя файла kogda.txt, находящегося в том же каталоге, что
и exe-файл программы.



1.2. Вводим текст поздравления

В качестве шаблона берем приведенный выше псевдокод, генерирующий
новогоднее поздравление.

Сначала в заголовке схемы вводим нужный текст, например:
Поздравление для нашей Маши

Затем в действиях (они начинаются после строки "Стихотворение") пишем
несколько поздравительных четверостиший.

Затем во 2-й строке действия * выход пишем заключительное поздравление,
например:
Поздравляю с Днем Рождения,
Желаю счастья в личной жизни !
                 [Винни-]Пух



1.3. Вводим стили для блоков схемы

Определитель рисунка и стиля имеет вид  РИС .N1 .N2 и помещается в первой
строке элемента схемы.
N1 - это номер пиктограммы (двузначное число) или jpg-файла (трехзначное
число;
N2 - это номер стиля.
Если задается только рисунок, то определитель имеет вид  РИС .N1
Если задается толькл стиль, то определитель имеет вид  РИС . .N2

Т.к. стиль в строке заголовка схемы задается для всей схемы в целом
(если стиль для схемы явно не задан, по умолчанию задается стиль 1),
то стиль для заголовка схемы задается в файле styles.cfg, в последнем
параметре стиля с названием  НСЗС - номер стиля для заголовка схемы.

Для других элементов схемы стиль элемента задается в определителе
рисунка и стиля для этого элемента или, если он явно не задан, то по
умолчанию принимается равным стилю схемы.

Для выравнивания блоков действий по левому краю нужно в файле dal2htm.cfg
задать:
__коэф_выравн_блоков   "85"   ; коэффициент выравнивания блоков вертикали
;                               по левой границе (0, от 65 до 100)



1.4. Задаем рисунок для иллюстрации и рисунок-подложку

jpg-файлы рисунков помещаем в каталог \images и даем им имена начиная с
001.jpg и далее по порядку.
масштаб отображения рисунков на схеме задается в файле dal2htm.cfg
параметром
__масштаб_рисунков       "1/2"  ; масштаб вставляемых в схему рисунков:
;                                 1/1, 1/2, 1/4, 1/8

для рисунка-подложки масштаб всегда равен 1/1, а номер рисунка-подложки
задается в файле styles.cfg в строке стиля параметром
НРП    - трехзначный номер рисунка-подложки,
         000 - рисунок-подложка для схемы отсутствует

Для изменения положения схемы на подложке нужно поменять следующие
параметры в файле dal2htm.cfg:
__отступ_схемы_слева     "100"
__отступ_схемы_справа    "100"
__отступ_схемы_сверху    "100"
__отступ_схемы_снизу     "90"



1.5. Куда попадает и как называется файл сгенерированной открытки

Куда попадает:
это определяется следующими параметрами файла dal2htm.cfg:

__рабочий_каталог        ".\rk"
;
__каталог__схем          ".\rk\gfiles"  ; каталог схем должен быть
;                                       ; подкаталогом рабочего каталога
__каталог_схем_htm       "./gfiles"

Как называется:
т.к. в приведенном в начале примере номер схемы равен 1, а номер модуля
тоже равен 3 (см. п.1), то для схемы в подкаталоге \gfiles будет
сформирован файл  3_1.jpg

Если качество получившегося jpg-изображения Вас не устраивает, то тогда
нужно в файле dal2htm.cfg установить

__генерация_bmp          "1"    ; 0/1 - установить в 1, если возникают
;                                 проблемы с генерацией jpg

тогда в подкаталоге \gfiles будет сформирован файл  3_1.bmp

Для приведенного примера bmp-файл открытки получился чуть больше 3-х Мб,
сущая мелочь по нынешним временам.


2. Создание поздравительной открытки в графическом редакторе в режиме
dalvjaz2
Код:
Чтобы перейти в режим dalvjaz2, нужно перед запуском программы
в файле dal2htm.cfg задать следующее значение параметра
__создание_htm_и_jpg_файлов  "0"    ;  0/1
;                                   ;  0 - режим  dal_vjaz_2
;                                   ;  1 - режим  dal_2_html

2.1. Общие замечания

Все-таки я решил выложить обновление к Новому Году.

Программа dal2851 - это результат сгребания за 2 дня в одно целое
моих наработок за последние 3 месяца с удалением из текста программы
явно не отлаженных частей программы.
Ни о каком рефакторинге в стиле ЛВУ (логики высокого уровня) при таком
подходе говорить не приходится.

Программа dal2851 в режиме dalvjaz2 может работать одновременно как
с файлами исходного кода, так и с файлами псевдокода, которые могут
ссылаться друг на друга (подробнее см. файл dal2htm.cfg).
Возможен просмотр и редактирование (пока не отлажено на 100%) достаточно
больших схем типа "Дачные прогулки" (см. тему "Визуализация процедур и
html").
Код:
Задаются следующие ключевые слова для псевдокода (могут быть изменены
пользователем):
__строка_док_IF          "* если"         
__строка_док_EI          "* иначе если"   
__строка_док_EB          "* иначе"       
__строка_док_END         "* конец"     
__строка_док_CB          "* цикл"       
__строка_док_CE          "* конец цикла"
__строка_док_A           "*"           
__строка_док_RET         "* выход"
__строка_док_STOP        "* КОНЕЦ СХЕМЫ"         
__проверка_ветки         "ветка = "
__переход_к_ветке        "ветка :="

Ключевые слова и символы для программы:
<открывающий комментарий> + <ключевые слова для псевдокода>
простейшее задание действия без текста для программы:  (**)

Вывод комментариев и исходного кода для процедуры:
при создании схемы процедуры в блоках как правило будет выводиться
только текст комментариев; полный текст действия можно просмотреть
во всплывающем окне блока для минимизированной формы схемы или после
перехода к тексту действия по щелчку левой кнопкой мыши на блоке
действия; в приводимом ниже примере в блоке действия появятся только
первые 2 строки (при этом символы комментария видны не будут):

(** это действие содержит
    операторы "+" и "*" *)
a := b + c;
d := e * f;

Служебные комментарии по умолчанию:
(** если *)         
(** иначе если *)
(** цикл *)       
(** конец цикла *)
(**)           
(** выход *)

Если первая строка действия состоит из одного из
вышеуказанных служебных комментариев, а за ней следуют
несколько строк исходного кода, то при формировании
текста блока такие служебные комментарии отображаться
не будут, а сразу будут выводиться следующие за ними строки
исходного кода; чтобы сделать эти служебные комментарии
отображаемыми, нужно либо добавить любой символ (например, пробел)
внутри комментария, например,
(** если  *)
либо добавить пробел после комментария, чтобы строка не
кончалась с последним символом комментария.
Пример процедуры со служебными комментариями по умолчанию:

(* i.2. П2__СЧИТАТЬ_СХЕМУ *)

ПРОЦЕДУРА  П2__СЧИТАТЬ_СХЕМУ;
НАЧАЛО
   (**)
   команда(К2__НАЧАЛО_ЧТЕНИЯ_СХЕМЫ);
   (** цикл *)
   ЦИКЛ_ПОКА ((запрос(З2__КОНЕЦ_ЧТЕНИЯ_СХЕМЫ) = ОТВЕТ_НЕТ) &
              (запрос(З2__НЕТ_ВЫХОДА_ИЗ_ЦИКЛА) = ОТВЕТ_ДА))
   ДЕЛАТЬ
      (**)
      команда(К2__ЧТЕНИЕ_СТРОКИ);
      (**)
      команда(К2__ПРОВЕРИТЬ_НАЧАЛО_ЭЛЕМЕНТА);
      (** если *)
      ЕСЛИ (запрос(З2__ЗАГОЛОВОК_СЧИТАН) = ОТВЕТ_ДА) ТО
         (** если *)
         ЕСЛИ (запрос(З2__НАЧАЛО_ЭЛЕМЕНТА) = ОТВЕТ_ДА) ТО
            (**)
            команда(К2__НАЧАТЬ_ЧТЕНИЕ_ЕЛЕМЕНТА);
         (** иначе *) ИНАЧЕ
            (**)
            команда(К2__ПРОДОЛЖИТЬ_ЧТЕНИЕ_ЭЛЕМЕНТА);
         (** конец *) КОНЕЦ;
      (** иначе *) ИНАЧЕ
         (**)
         команда(К2__ЧИТАТЬ_ЗАГОЛОВОК);
      (** конец *) КОНЕЦ;
   (** конец цикла *)
   КОНЕЦ_ЦИКЛА_ПОКА;
   (**)
   команда(К2__ОКОНЧАНИЕ_ЧТЕНИЯ_СХЕМЫ);
   (** выход *)
   ВЫХОД;
   КОНЕЦ_ПРОЦЕДУРЫ  П2__СЧИТАТЬ_СХЕМУ;
(** КОНЕЦ СХЕМЫ *)

Вложение:
chs.jpg
chs.jpg [ 76.03 КБ | Просмотров: 9745 ]

Код:
Упрощенный  вариант ЛВУ
Т.к. изложенный мной в теме "Программная логика верхнего уровня"
вариант ЛВУ, не смотря на некоторые достоинства, главным из которых
является полная логическая изоляция ЛВУ от логики нижнего уровня,
является слишком громоздким, то можно легко использовать при написании
программ упрощенный вариант ЛВУ, например:

(* i.5. читать схему *)

procedure  chitatx_shemu;
begin
   (** начало чтения схемы *)
   form1.nachalo_chteniq_shemy;
   (** цикл пока не конец чтения схемы и
       нет выхода из цикла*)
   while ((form1.konec_chteniq_shemy = NO) and
              (form1.net_wyh_iz_cikla = YES)) do begin
      (** чтение строки *)
      form1.chtenie_stroki;
      (** проверить начало элемента *)
      form1.proweritx_nachalo_el;
      (** если заголовок считан *)
      if (form1.zagol_schitan = YES) then begin
         (** если начало элемента *)
         if (form1.nachalo_el = YES) then begin
            (** начать чтение элемента *)
            form1.nachatx_chtenie_el;
         (** иначе *) end else begin
            (** продолжить чтение элемента *)
            form1.prodolvitx_chtenie_el;
         (** конец *) end;
      (** иначе *) end else begin
         (** читать заголовок *)
         form1.chitatx_zagol;
      (** конец *) end;
   (** конец цикла  *)
   end;
   (** окончание чтения схемы *)
   form1.okonchanie_chteniq_shemy;
   (** выход  *)
   end;
(** КОНЕЦ СХЕМЫ *)


2.2. Общие правила работы с редактором
Вложение:
red.JPG
red.JPG [ 99.18 КБ | Просмотров: 9745 ]

Интерфейс редактора dalvjaz2 я постарался по возможности приблизить к
интерфейсу ДРАКОН-редактора Степана Митькина.

Для вызова окна редактирования элемента нужно кликнуть по элементу
левой кнопкой мыши.

Для добавления нового элемента в схему нужно кликнуть левой кнопкой мыши
по одной из четырех быстрых кнопок задания элементов: "действие",
"условие", "ветка условия" (дополнительное условие сложного условия),
"цикл", после чего подвести указатель мыши к нужному элементу схемы и
щелкнуть по нему левой кнопкой мыши.
Элемент "ветка условия" можно вставлять только по щелчку на элементе
"условие" или на другом элементе "ветка условия".

Элементы "иначе" и "конец" блока условия на схеме обозначены кружочками
и вставлять новые элементы в схему можно по щелчку внутри кружочков
"иначе" и "конец". Флажок "Кружочки" позволяет включать или отключать
отображение на схеме элементов "иначе" и "конец".

Для удаления элемента или группы элементов сначала нужно выделить эти
элементы, а затем отправить их в буфер вырезанных элементов, нажав на
кнопку "ножницы".
Для начала выделения элементов нужно или нажать клавишу Ctrl, когда
указатель мыши находится на пустом пространстве схемы, либо навести
указатель мыши на элемент, щелкнуть правой кнопкой мыши и выбрать пункт
контекстного меню "начать выделение".
Для выделения элемента нужно провести указатель маши над этим элементом.
Для окончания выделения нужно либо отпустить клавишу Ctrl, либо щелкнуть
правой кнопкой мыши по пустому пространству схемы.
Если при выделении был выделен старший элемент блока, то после окончания
выделения автоматически будут выделены и все подчиненные элементы блока,
например:
- для начала условия: все элементы условия;
- для дополнительного условия: все элементы ветки дополнительного условия;
- для начала цикла: все элементы цикла.

Выделение можно отменить, щелкнув левой кнопкой мыши по пустому
пространству схемы.

Восстановить элементы из блока вырезанных элементов можно, выбрав кнопку
"восстановить для ножниц" (загнутая стрелка и ножницы), а затем щелкнув
по нужному элементу схемы.

Аналогично выполняется копирование и вставка элементов для буфера
"копирование" (листочки).

Кнопка "откат" сейчас работает только для последнего действия.

Кнопка "Созд.зап" (создать новую запись после текущей) - пытается создать
запись с индексом и названием, указанными в строке комбобокса. При этом
выполняется проверка на уникальность индекса создаваемой записи для
текущего файла.

Флажок "N стр" - разрешает или запрещает отображение для блоков их
начальных номеров строк в текстовом файле.

Флажок "F2" - переход к минимизированной форме схемы.
При работе с минимизированной схемой для перехода к нужному элементу
полной формы схемы следует навести указатель мыши на нужный элемент
минимизированной схемы, после чего нажать клавишу "F2".

Кнопки "Конф" и "Стили" вызывают для редактирования текстовые файлы
dal2htm.cfg и styles.cfg как они есть. Ответственность за аккуратное
редактирование лежит на пользователе. При необходимости испорченные
файлы конфигурации можно восстановить из архива программы.

Кнопки навигации между схемами файла: "|<","<",">",">|". Нужную схему
можно выбрать и в комбобоксе.

Флажок "схема" позволяет просмотреть (но не редактировать) схему в
текстовом формате. Редактируйте текст схемы в текстовом редакторе,
а после сохранения изменений программа автоматически считает новую
версию текстового файла.

Кнопка "Сохр." - сохранение измененного файла в рабочем каталоге.

Кнопка "<" в левом верхнем углу окна программы - возврат после перехода
по ссылке (подробнее см. файл dal2htm.cfg).

При редактировании схемы, если для нее задан рисунок-подложка, то при
сдвиге схемы подложка сдвигается или остается на месте в зависимости
от параметра
__двигать_подложку "ДА" ; (ДА/НЕТ) - при сдвиге схемы подложка
; ; сдвигается вместе со схемой или
; ; остается на месте


Т.к. у меня не было времени для тщательной отладки редактора, то
сохранение отредактированного файла выполняется в рабочий каталог
(см. п.1.5), откуда потом этот файл можно скопировать в каталог файлов
исходного кода.
Впрочем, если совместить рабочий каталог с каталогом файлов исходного
кода, то редактирование станет боевым. Но это уже на усмотрение
пользователя, мое дело - предупредить.

Программа dal2851 является бесплатным концептуальным макетом, поставляется
"как есть" и предназначена для развития и совершенствования другими
программистами, если у них возникнет такое желание. Поэтому все замечания
об отсутствии нормального интерфейса я не принимаю - бесплатный макет
и должен выглядеть как макет, а не как вылизанное проприетарное ПО.



2.3. Новые стили

В версии 0.85.1 были добавлены новые стили для фона блока схемы, что
видно по 3-м приведенным и отличающимся друг от друга вариантам
поздравительной открытки.
Эти новые стили так описаны в файле styles.cfg:
ЦФБ - цвет фона блока, служебные значения:
300 300 300 - выводятся только контур и текст блока, а фон прозрачный;
400 400 400 - выводится только текст блока на фоне схемы или на фоне
рисунка-подложки, если он задан для схемы.



2.4. Создание поздравительной открытки

Для создания поздравительной открытки в редакторе dalvjaz2 нужно:
- cкачать и распаковать архив с программой dal2851, проверить
exe-файл на вирусы или собрать проект заново в Delphi 4.0 или выше;

- запустить dal2851 в режиме dalvjaz2 и перейти к файлу kogda.txt;

- создать запись "СХЕМА.2.";

- создать элемент "условие";

- для условия создать элемент "ветка условия";

- для условия добавить действие;

- для ветки условия добавить 3 действия;

- перейти к схеме 1, открыть окно редактирования заголовка,

- скопировать оттуда все содержимое кроме 1-й строки, вернуться к
схеме 2, открыть окно для заголовка и вставить туда скопированный текст
из заголовка схемы 1; чтобы запомнить исправление, нужно щелкнуть
левой кнопкой мыши по пустому пространству схемы; выход без сохранения
по клавише Esc;

- скопировать из схемы 1 и перенести в схему 2 текст и для остальных
элементов, тут уже нужно копировать и переносить весь текст для блока;

- когда вы попытаетесь скопировать поздравление "С Новым Годом!", то
в строке состояния программы может появиться сообщение "Не хватает места
слева или снизу для окна редактирования"; в этом случае нужно сдвинуть
схему вверх при помощи полосы прокрутки или нажать правую кнопку мыши на
свободном пространстве схемы и протащить схему в нужном направлении,
после чего отпустить правую кнопку мыши;

- чтобы вернуть схему в начальное положение, нажмите кнопку "ХУ0" в левом
нижнем углу окна программы;

- отключите флажок "Кружочки";

- перехватите экран, загрузите его в редактор Paint, вырежте открытку и
сохраните ее в нужном вам формате;

- сохрание текстовый файл kogda.txt в рабочем каталоге;

- в случае, если созданная схема не умещается в экран целиком, нужно
после ее сохранения в рабочем каталоге выйти из программы, установить
в файле dal2htm.cfg режим dal2html и сгенерировать схему, для чего
запустить программу, выбрать строку с именем файла для схемы и нажать
кнопку "Создать html-файл". Где после этого искать сгенерированную схему,
подробно описано в п.1.5.


Замечание: программа создавалась и отлаживалась при разрешении экрана
1280 * 1024; если у вас разрешение экрана меньше, то перед запуском
программы в режиме dalvjaz2 исправьте файл formsize.dat, задающий
координаты левого верхнего и правого нижнего углов окна программы
на эране при запуске программы


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 17 Июнь, 2015 22:45 

Зарегистрирован: Вторник, 15 Декабрь, 2009 11:43
Сообщения: 164
Программа dal_vjaz_2, v.0.87.1

Выкладываю очередную версию программы dal_vjaz_2, v.0.87.1, чуть более
продвинутую, чем v.0.85.1, но ситуации это не меняет - dal_vjaz_2
по-прежнему остается всего-лишь демонстрационным макетом.

файл конфигурации: dal2htm.cfg
пробные файлы: u_lvu.txt, u_obr.txt, uk1.txt

Описание подключения dll, сгенерированной в среде КП, приведено
в теме "КП + Delphi".

Описание концепции логики верхнего уровня, использованной для
разработки dll в среде КП, приведено в теме "программная логика
верхнего уровня".

Описание языка ДАЛВЯЗ 2 приведено в темах "Программы AB_VJAZ и DALVJAZ",
"Визуализация процедур и html", "КУБ-СИЛУЭТ ...".

Внешние отличия от предыдущей версии:
- кнопка "добавить ИНАЧЕ" (кружок на уголке) - для добавления ИНАЧЕ в
сложное условие, если его там нет; нужно сначала щелкнуть по этой
кнопке, а потом по самому правому если/иначе если" сложного условия
- кнопки "Константы" и "Обработчик", используются при просмотре и
редактировании процедуры ЛВУ, а ссылки на соответствующие кнопкам
записи задаются во 2-й строке записи процедуры ЛВУ:

(* i.1. вывод_схемы *)
// константы_>5.01.1. обработчик_>5.1.


В связи с появлением моих постов в теме "идеи видеоэкологии в жизнь" (от
5.06.2015 и двух последующих) моя точка зрения на использование блок-схем
изменилась в сторону использования минимизированного формата отображения
блок-схем, во многом вернувшись к моим взглядам на этот вопрос времен
ранних версий программы dal_vjaz_2.

Итак, тема: "Применение минимизированных блок-схем для документирования
разрабатываемой программы с использованием редактора Word"

Рассмотрим показанный на приведенном ниже рисунке пример, левая часть
которого содержит текст процедуры "нажатие_кнопки_мыши_на_схеме" с
использованием видеоэкологичных фенечек, а правая содержит
минимизированную блок-схему этой процедуры.
Вложение:
kn_myshi.jpg
kn_myshi.jpg [ 279.09 КБ | Просмотров: 8710 ]

Текст процедуры скопирован из окна редактора Word из файла u_lvu.doc.
Выражения вида "z_2_XXX" - это Word-овские закладки (см. пункт "Вставить>
Гиперссылка, Закладка" диалога редактора Word). Кстати, подобный текст
с картинками можно получить и в КП, если скопировать находящийся в
каталоге \bb\Dal2\Mod файл v0871.txt размером 20331 байт в формат .odc
и добавить туда соответствующие рисунки (размер файла v0871.odc у меня
получился после этого равным 496579 байт).

Блок схема была скопирована с экрана программы dal_vjaz_2 и помещена как
рисунок, перекрываемый текстом на страницу файла Doc1.doc (по размеру
блок-схема как раз помещается с небольшим запасом на одну страницу А4).
Дальше нужно, нажимая пробелы, Enter и используя диалог "Абзац",
подводить курсор к нужным местам блок-схемы и вставлять гиперссылки на
соответствующие закладки.
Переход по гиперссылке: Ctrl + щелчок левой кнопкой мыши по гиперссылке
Возврат обратно: Alt + "стрелка влево".

Конечно, делать все это нужно уже после первичной стабилизации текста
разрабатываемой процедуры.

После окончания редактирования u_lvu.doc сохраняем его как u_lvu.txt, а
затем в текстовом редакторе "Блокнот" переименовываем его в u_lvu.pas,
после чего выполняется его автоматическая загрузка в Delphi.
После отладки (или даже в процессе отладки) внесенные в u_lvu.pas
исправления переносятся и в u_lvu.doc.

Вот такая видеоэкологичная технология программирования.

Конечно, предлагаемый способ создания блок-схем на первый взгляд кажется
неряшливым, но зато он практичен и требует явно меньше усилий по
сравнению с вводом в графическом редакторе.

Новую версию dal_vjaz_2 выкладываю в теме "Визуализация процедур и html".


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB