вам больше одного оппонента указало, что ваше употребление термина «подпрограмма» некорректно.
Ой, Боже мой! Опять за рыбу деньги. Да это же явное недоразумение. Я уже давно согласился и два раза написал об этом.
Чтобы полностью снять вопрос, пишу в третий раз: я согласен, что термин подпрограмма не следует употреблять по отношению к ветке. И благодарю уважаемых коллег, которые указали на это.
А в текстовом варианте это видно сразу. Вдобавок, в любом современном IDE при наведении на название подпрограммы будут показаны тип и название параметров, тип возвращаемого результата, а, при наличии, ещё и текстовое описание выполняемых действий
В ДРАКОН-конструкторе для иконы Вставка все это со временем появится.
Здесь нет разницы между текстовым и визуальным программированием.
Ветки — это никоим образом не подпрограммы, хотя бы потому, что их невозможно вызвать из середины другой ветки.
Во-первых, спасибо за картинку.
Во-вторых, здесь явное недоразумение. Я с вами вовсе не спорю. Я согласен с вами.
Вам не понравилось, что я назвал ветку подпрограммой.
Я тут же соглашаюсь и готов использовать для ветки любое другое слово, которое вы предложите.
Ветка результат декомпозиции программы силуэт. Как назвать этот результат декомпозиции? Или вы считаете, что здесь нет декомпозиции?
Функции, о которых вы говорите присутствуют в силуэте (и в примитиве тоже в виде иконы Вставка (прямоугольник с двойной линией по бокам.
Таrим образом, в данном случае нет никаких причин для спора. Надо лишь договориться о термине для ветки.
И это тоже недостаток Дракона. Существует множество задач, в которых именно эта информация является самой важной.
Это не так. Тут нет никакого недостатка ДРАКОНа даже близко.
именно эта информация является самой важной
Вы говорите о функциях и ошибочно предполагаете, что в ДРАКОНе их нет.
Но они есть и реализуются иконой Вставка (прямоугольник с двойной линией по бокам).
Функции (Вставки) используются как элемент декомпозиции в обеих макроконструкциях (и в силуэте, и в примитиве).
В данном случае слово «подпрограмма» обозначает макроконструкцию Ветка. Макроконструкция силуэт демонстрирует декомпозицию программы (разбиение силуэта на ветки) по принципу разделяй и властвуй.
Если в данном случае вам не нравится слово подпрограмма, его можно заменить на другое слово.
Какое другое слово вам больше нравится?
Икона Адрес и оператор goto. В чем принципиальная разница. В защиту силуэта
Для борьбы со сложностью в программировании применяют декомпозицию.
Если функция становится слишком длинной, её режут на куски и эти куски помещают в отдельные функции — подпрограммы.
При этом возникает проблема: для того, чтобы понять алгоритм, приходится переключаться между несколькими функциями.
Это сбивает внимание читателя алгоритма.
В языке ДРАКОН декомпозиция применяется точно так же, как и в текстовых языках программирования.
Большую дракон-схему превращают в несколько маленьких, доступных для восприятия.
При этом читателю тоже приходится переключаться между несколькими диаграммами, и при этом возникает та же проблема с вниманием.
Но. Чтобы уменьшить необходимость искусственного разделения алгоритмов на подпрограммы, в языке ДРАКОН имеется конструкция силуэт.
Силуэт разбивает сложный алгоритм на подпрограммы, при этом достигаются следующие преимущества:
1. Все подпрограммы присутствуют на одной визуальной сцене. Не нужно открывать другие диаграммы, чтобы понять алгоритм.
Силуэт не всегда полностью помещается на экране, но к этому и не надо стремиться. Для удобства восприятия достаточно, чтобы силуэт вмещался в экран по высоте (Правило Сергея Ефанова).
2. Отсутствуют затраты на связывание (binding). Не требуется определять аргументы подпрограмм, передавать значения в аргументы и принимать возвращаемые значения.
3. В отличие от оператора goto, переходы в силуэте упорядочены.
Во-первых, чётко оговорены места, откуда происходит переход к подпрограммам (низ диаграммы, выровненные по нижней горизонтали иконы Адрес),
Во-вторых, сами подпрограммы тоже находятся в ожидаемых местах (верх диаграммы, иконы Имя ветки).
4. Оператор goto может содержать в себе скрытые циклы. Силуэт тоже может реализовать циклы посредством перехода между ветками. Важное отличие силуэта — автоматическое выделение циклов при помощи так называемых меток цикла (темные треугольники). В отличие от скрытых циклов goto, веточные циклы в силуэте хорошо видны.
Если подпрограмма вызывается из нескольких алгоритмов, то она не может быть веткой силуэта.
В этом случае подпрограмму (функцию) помещают на отдельную диаграмму, которая вызывается с помощью иконы Вставка. Но если подпрограмма нужна только в одном месте, есть возможность применить силуэт.
Силуэт представляет из себя удачный компромисс.
С одной стороны, силуэт разделяет большую задачу на малые части.
С другой — силуэт не заставляет читателя переключать внимание между несколькими диаграммами.
Дополнительный плюс силуэта — чёткая визуализация циклов.
Вот пример оттуда, из которого прекрасно видно, что «адрес» — это обычное goto, которое кидает в произвольным образом отделенный кусок кода
Это не так. Между оператором Адрес и goto есть принципиальное отличие. goto — опасный оператор, а Адрес — безопасный.
Поясню.
1. goto позволяет перейти в любую точку, а Адрес не позволяет.
2. Адрес позволяет перейти только и исключительно в одну из икон «Имя ветки» и больше никуда. В примере «Покраска забора — это всего 4 точки (четыре иконы „Имя ветки“).
3. Макроконструкция Ветка вовсе не является произвольным образом отделенным куском кода. Ветка подчиняется строго определенным синтасическим правилам ДРАКОНа.
4. Ветки можно делить на части и объединять согласно синтаксическим правилам, которые строго описаны.
5. Во избежание ошибок надпись в иконе Адрес запрещено писать руками. Алгоритм такой. Надо щелкнуть по выбранной иконе „Имя ветки“, а затем по выбранной пустой иконе Адрес. Имя ветки будет скопировано в икону Адрес.
6. Если икона Адрес содержит адрес своей или более левой ветки, образуется веточный цикл. Именно цикл, а не ветвление. Ветвление всегда идет только вправо (и никогда влево).
7. Согласно картографическому принципу силуэта пространственное расположение веток по горизонтали следующее: ветки распоагаются в том порядке, в каком они включаются в работу по правилу чем правее, тем позже (за исключением веточного цикла).
Почему внешних? Это не так.
Циклы — это неотъемлемая составная часть языка, его суть.
ДРАКОН — визуальный язык, и в нем строжайшим образом определены все визуальные циклы (полный набор циклов).
Участник Rsa97 сделал важную и полезную вещь: продемонстрировал парадоксальную дракон-схему.
Схема вызвала острую дискуссию и помогла понять некоторые особенности ДРАКОНа, которые оставались за кадром.
Был даже сделан вывод, что ДРАКОН не защищает от ошибок.
Все это очень хорошо и замечательно, и я благодарен коллеге Rsa97.
Но. Так делать в ДРАКОНе запрещено. Строго запрещено. И так никто не делает.
Подробно показано, какие в ДРАКОНе есть ГРАФИЧЕСКИЕ циклы, и как они работают. Ссылка на мою книгу все та же.
В начале книги работающее краткое содержание
Часть 2. Циклические алгоритмы
Глава 7. Простые циклические алгоритмы
Глава 8. Досрочный выход из цикла
Глава 9. Преобразование цикла со стрелкой в веточный цикл
Глава 10. Цикл со счетчиком
Глава 11. Цикл внутри другого цикла
Видите треугольник на «продолжение программы»? Там нет никакого цикла, «продолжение программы — завершение програмы — конец», это полностью линейное выполнение.
Да, вы правы. Здесь нарушено правило пространственного расположения веток: Ветки должны располагаться слева направо не хаотично, а в том порядке, в каком они включаются в работу (кроме веточных циклов).
Ветку «продолжение программы» надо перенести вправо и сделать предпоследней.
Может ли конструктор автоматически распознать эту ситуацию и устранить погрешность?
Я думаю, может и должен.
Но, конечно, надо переговорить с разработчиком ДРАКОН-конструктора и узнать его мнение.
Нет, это всего лишь признак, что икона адреса находится левее иконы имени ветки.
1. Не совсем так. Веточный цикл — если икона Адрес указывает на свою, или более левую ветку.
2. Вложенные друг в друга веточные циклы возможны, но они громоздки.
Разрешать ли вложенные веточные циклы или запретить? Вопрос дикуссионный.
В рамках данной дискуссии лучше их запретить, чтобы не запутаться.
3. Процедурный и автоматный режим силуэта имеют РАЗНЫЕ правила.
Кто придумал эти правила для ДРАКОНа?
3.1. В программе Тышова ИС Дракон поначалу был только процедурный режим.
Сергей Ефанов для своих целей (он программирует микроконтроллеры) придумал два автоматных режима и уговорил Тышова реализовать их.
Сегодня в программе ИС Дракон три режима:
— процедурный;
— Автомат 1;
— Автомат 2.
3.2. У Степана Митькина силуэт может работать в процедурном и автоматном режиме.
по каким признакам дракон может определить, что здесь задан цикл, а не простое ветвление?
Посмотрите, в вашем примере (спасибо за пример) появились черные треугольники в иконах Адрес и Имя ветки.
Видите?
Они появились автоматически.
Значит, конструктор умеет распознать некоторую новую ситуацию.
Черные треугольники — это признак веточного цикла.
Значит, это не именно цикл, а не ветвление.
Простое ветвление может быть только внутри ветки, и больше нигде.
Веточный цикл должен строиться не от балды, не виде спагетти, а по строгим правилам. В данном случае эти правила нарушены, что недопустимо.
В конструкторе ошибка (спасибо вам); его надо поправить.
Нет, не позволяет. Но язык поддерживается ДРАКОН-конструктором, который (если он правильно построен) должен знать все правила языка и обеспечивать их выполнение.
В данном случае Конструктор не делает то, что обязан делать.
Значит, его нужно доработать.
Так нельзя. Запрещено.
Условие запрета вы сами можете сформулировать.
ДРАКОН-конструктор неправильно построен. Почему неправильно?
Как только он заметит, как вы расставили метки, он должен сразу сбросить (удалить) ошибочную метку и сообщить, об ошибке.
Ой, Боже мой! Опять за рыбу деньги. Да это же явное недоразумение. Я уже давно согласился и два раза написал об этом.
Чтобы полностью снять вопрос, пишу в третий раз: я согласен, что термин подпрограмма не следует употреблять по отношению к ветке. И благодарю уважаемых коллег, которые указали на это.
В ДРАКОН-конструкторе для иконы Вставка все это со временем появится.
Здесь нет разницы между текстовым и визуальным программированием.
Во-первых, спасибо за картинку.
Во-вторых, здесь явное недоразумение. Я с вами вовсе не спорю. Я согласен с вами.
Вам не понравилось, что я назвал ветку подпрограммой.
Я тут же соглашаюсь и готов использовать для ветки любое другое слово, которое вы предложите.
Ветка результат декомпозиции программы силуэт. Как назвать этот результат декомпозиции? Или вы считаете, что здесь нет декомпозиции?
Функции, о которых вы говорите присутствуют в силуэте (и в примитиве тоже в виде иконы Вставка (прямоугольник с двойной линией по бокам.
Таrим образом, в данном случае нет никаких причин для спора. Надо лишь договориться о термине для ветки.
Вы говорите о функциях и ошибочно предполагаете, что в ДРАКОНе их нет.
Но они есть и реализуются иконой Вставка (прямоугольник с двойной линией по бокам).
Функции (Вставки) используются как элемент декомпозиции в обеих макроконструкциях (и в силуэте, и в примитиве).
Если в данном случае вам не нравится слово подпрограмма, его можно заменить на другое слово.
Какое другое слово вам больше нравится?
Для борьбы со сложностью в программировании применяют декомпозицию.
Если функция становится слишком длинной, её режут на куски и эти куски помещают в отдельные функции — подпрограммы.
При этом возникает проблема: для того, чтобы понять алгоритм, приходится переключаться между несколькими функциями.
Это сбивает внимание читателя алгоритма.
В языке ДРАКОН декомпозиция применяется точно так же, как и в текстовых языках программирования.
Большую дракон-схему превращают в несколько маленьких, доступных для восприятия.
При этом читателю тоже приходится переключаться между несколькими диаграммами, и при этом возникает та же проблема с вниманием.
Но. Чтобы уменьшить необходимость искусственного разделения алгоритмов на подпрограммы, в языке ДРАКОН имеется конструкция силуэт.
Силуэт разбивает сложный алгоритм на подпрограммы, при этом достигаются следующие преимущества:
1. Все подпрограммы присутствуют на одной визуальной сцене. Не нужно открывать другие диаграммы, чтобы понять алгоритм.
Силуэт не всегда полностью помещается на экране, но к этому и не надо стремиться. Для удобства восприятия достаточно, чтобы силуэт вмещался в экран по высоте (Правило Сергея Ефанова).
2. Отсутствуют затраты на связывание (binding). Не требуется определять аргументы подпрограмм, передавать значения в аргументы и принимать возвращаемые значения.
3. В отличие от оператора goto, переходы в силуэте упорядочены.
Во-первых, чётко оговорены места, откуда происходит переход к подпрограммам (низ диаграммы, выровненные по нижней горизонтали иконы Адрес),
Во-вторых, сами подпрограммы тоже находятся в ожидаемых местах (верх диаграммы, иконы Имя ветки).
4. Оператор goto может содержать в себе скрытые циклы. Силуэт тоже может реализовать циклы посредством перехода между ветками. Важное отличие силуэта — автоматическое выделение циклов при помощи так называемых меток цикла (темные треугольники). В отличие от скрытых циклов goto, веточные циклы в силуэте хорошо видны.
Если подпрограмма вызывается из нескольких алгоритмов, то она не может быть веткой силуэта.
В этом случае подпрограмму (функцию) помещают на отдельную диаграмму, которая вызывается с помощью иконы Вставка.
Но если подпрограмма нужна только в одном месте, есть возможность применить силуэт.
Силуэт представляет из себя удачный компромисс.
С одной стороны, силуэт разделяет большую задачу на малые части.
С другой — силуэт не заставляет читателя переключать внимание между несколькими диаграммами.
Дополнительный плюс силуэта — чёткая визуализация циклов.
Что касается Вельбицкого, то я полностью согласен с его тезисом. Но решение предлагаю существенно иное (по сравнению с Р-технологией Вельбицкого).
goto — опасный оператор, а Адрес — безопасный.
Поясню.
1. goto позволяет перейти в любую точку, а Адрес не позволяет.
2. Адрес позволяет перейти только и исключительно в одну из икон «Имя ветки» и больше никуда. В примере «Покраска забора — это всего 4 точки (четыре иконы „Имя ветки“).
3. Макроконструкция Ветка вовсе не является произвольным образом отделенным куском кода. Ветка подчиняется строго определенным синтасическим правилам ДРАКОНа.
4. Ветки можно делить на части и объединять согласно синтаксическим правилам, которые строго описаны.
5. Во избежание ошибок надпись в иконе Адрес запрещено писать руками. Алгоритм такой. Надо щелкнуть по выбранной иконе „Имя ветки“, а затем по выбранной пустой иконе Адрес. Имя ветки будет скопировано в икону Адрес.
6. Если икона Адрес содержит адрес своей или более левой ветки, образуется веточный цикл. Именно цикл, а не ветвление. Ветвление всегда идет только вправо (и никогда влево).
7. Согласно картографическому принципу силуэта пространственное расположение веток по горизонтали следующее: ветки распоагаются в том порядке, в каком они включаются в работу по правилу чем правее, тем позже (за исключением веточного цикла).
Циклы — это неотъемлемая составная часть языка, его суть.
ДРАКОН — визуальный язык, и в нем строжайшим образом определены все визуальные циклы (полный набор циклов).
Участник Rsa97 сделал важную и полезную вещь: продемонстрировал парадоксальную дракон-схему.
Схема вызвала острую дискуссию и помогла понять некоторые особенности ДРАКОНа, которые оставались за кадром.
Был даже сделан вывод, что ДРАКОН не защищает от ошибок.
Все это очень хорошо и замечательно, и я благодарен коллеге Rsa97.
Но. Так делать в ДРАКОНе запрещено. Строго запрещено. И так никто не делает.
Подробно показано, какие в ДРАКОНе есть ГРАФИЧЕСКИЕ циклы, и как они работают. Ссылка на мою книгу все та же.
В начале книги работающее краткое содержание
Ветку «продолжение программы» надо перенести вправо и сделать предпоследней.
Может ли конструктор автоматически распознать эту ситуацию и устранить погрешность?
Я думаю, может и должен.
Но, конечно, надо переговорить с разработчиком ДРАКОН-конструктора и узнать его мнение.
1. Не совсем так. Веточный цикл — если икона Адрес указывает на свою, или более левую ветку.
2. Вложенные друг в друга веточные циклы возможны, но они громоздки.
Разрешать ли вложенные веточные циклы или запретить? Вопрос дикуссионный.
В рамках данной дискуссии лучше их запретить, чтобы не запутаться.
3. Процедурный и автоматный режим силуэта имеют РАЗНЫЕ правила.
Кто придумал эти правила для ДРАКОНа?
3.1. В программе Тышова ИС Дракон поначалу был только процедурный режим.
Сергей Ефанов для своих целей (он программирует микроконтроллеры) придумал два автоматных режима и уговорил Тышова реализовать их.
Сегодня в программе ИС Дракон три режима:
— процедурный;
— Автомат 1;
— Автомат 2.
3.2. У Степана Митькина силуэт может работать в процедурном и автоматном режиме.
Степан Митькин опубликовал статью. Автоматное программирование на языке ДРАКОН.
Видите?
Они появились автоматически.
Значит, конструктор умеет распознать некоторую новую ситуацию.
Черные треугольники — это признак веточного цикла.
Значит, это не именно цикл, а не ветвление.
Простое ветвление может быть только внутри ветки, и больше нигде.
Веточный цикл должен строиться не от балды, не виде спагетти, а по строгим правилам. В данном случае эти правила нарушены, что недопустимо.
В конструкторе ошибка (спасибо вам); его надо поправить.
Но язык поддерживается ДРАКОН-конструктором, который (если он правильно построен) должен знать все правила языка и обеспечивать их выполнение.
В данном случае Конструктор не делает то, что обязан делать.
Значит, его нужно доработать.
Условие запрета вы сами можете сформулировать.
ДРАКОН-конструктор неправильно построен.
Почему неправильно?
Как только он заметит, как вы расставили метки, он должен сразу сбросить (удалить) ошибочную метку и сообщить, об ошибке.
Безопасен — не может привести к ошибке.