All streams
Search
Write a publication
Pull to refresh
14
0
Владимир Паронджанов @Parondzhanov

Разработчик Автор книг

Send message
вам больше одного оппонента указало, что ваше употребление термина «подпрограмма» некорректно.

Ой, Боже мой! Опять за рыбу деньги. Да это же явное недоразумение. Я уже давно согласился и два раза написал об этом.
Чтобы полностью снять вопрос, пишу в третий раз: я согласен, что термин подпрограмма не следует употреблять по отношению к ветке. И благодарю уважаемых коллег, которые указали на это.
А в текстовом варианте это видно сразу. Вдобавок, в любом современном IDE при наведении на название подпрограммы будут показаны тип и название параметров, тип возвращаемого результата, а, при наличии, ещё и текстовое описание выполняемых действий

В ДРАКОН-конструкторе для иконы Вставка все это со временем появится.
Здесь нет разницы между текстовым и визуальным программированием.
Rsa97
Ветки — это никоим образом не подпрограммы, хотя бы потому, что их невозможно вызвать из середины другой ветки.

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

Функции, о которых вы говорите присутствуют в силуэте (и в примитиве тоже в виде иконы Вставка (прямоугольник с двойной линией по бокам.
Та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. У Степана Митькина силуэт может работать в процедурном и автоматном режиме.

Степан Митькин опубликовал статью. Автоматное программирование на языке ДРАКОН.
по каким признакам дракон может определить, что здесь задан цикл, а не простое ветвление?
Посмотрите, в вашем примере (спасибо за пример) появились черные треугольники в иконах Адрес и Имя ветки.
Видите?
Они появились автоматически.
Значит, конструктор умеет распознать некоторую новую ситуацию.

Черные треугольники — это признак веточного цикла.
Значит, это не именно цикл, а не ветвление.

Простое ветвление может быть только внутри ветки, и больше нигде.

Веточный цикл должен строиться не от балды, не виде спагетти, а по строгим правилам. В данном случае эти правила нарушены, что недопустимо.
В конструкторе ошибка (спасибо вам); его надо поправить.
Нет, не позволяет.
Но язык поддерживается ДРАКОН-конструктором, который (если он правильно построен) должен знать все правила языка и обеспечивать их выполнение.

В данном случае Конструктор не делает то, что обязан делать.
Значит, его нужно доработать.
Такие стрелочки (точнее, не стрелочки, а пунктирные линии) есть в программе ИС Дракон Геннадия Тышова.
Так нельзя. Запрещено.
Условие запрета вы сами можете сформулировать.
ДРАКОН-конструктор неправильно построен.
Почему неправильно?
Как только он заметит, как вы расставили метки, он должен сразу сбросить (удалить) ошибочную метку и сообщить, об ошибке.
по какой из веток идти при запуске программы нигде не определено.
Это не так. При запуске силуэта всегда работает крайняя левая ветка. Указывать на это нет необходимости.
Дайте используемые вами определения понятий «опасен» и «безопасен».
Опасен — может привести к ошибке.
Безопасен — не может привести к ошибке.
gecube
согласен. Вне зависимости от того — как МЫ описали goto — текстом или графикой — он от этого не меняется.
Я не согласен. Следует прежде всего различать КАК создан goto: вручную (тогда goto опасен) или автоматически (тогда безопасен).

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity