DRAKON.SU

Текущее время: Вторник, 23 Апрель, 2024 23:04

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




Начать новую тему Ответить на тему  [ Сообщений: 196 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 10  След.
Автор Сообщение
СообщениеДобавлено: Среда, 10 Декабрь, 2008 08:58 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 143
Откуда: Россия, Орёл
dvuugl писал(а):
А почему бы и нет? В электронике оно решено и оно было бы понятно человеку не знакомому с ДРАКОНом, без пояснений. Имеем поток действия, аналог тока, ставим вентиль: сюда можно а туда нет..
Только такая схема нифига не понятна не знакомому с электронными схемами. В качестве примера беру себя.


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

Зарегистрирован: Вторник, 27 Май, 2008 13:24
Сообщения: 155
Евгений Темиргалеев писал(а):
не понятна не знакомому с электронными схемами. В качестве примера беру себя.

? Насколько помню, основы электроники в школе проходят. И по жизни где-то с 60-х годов трудно найти человека не слышавшего слова "диод".
А здесь "ДА" (положительная "логическая полуволна") пропускается в одну сторону, "НЕТ" (отрицательная) - в другую. Почему не использовать уже доказавший свою эффективность эргономический опыт из другой (такой ли уж другой?) области?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Декабрь, 2008 13:37 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5850
Откуда: Москва
Уважаемый Алексей Донской!

К сожалению, Вы уклоняетесь от ответа.
Я представил на Ваше рассмотрение две конкретные дракон-схемы (мою про Карлсона) и Ермакова (про седну и хмл), в которых используются не один, а оба обсуждаемых варианта:
1. да внизу, нет слева;
2. нет внизу, да слева.

Если использовать защищаемый Вами запрет и оставить только один вариант, то обе представленные мной схемы надо изменить.

Вопрос. Как это сделать? Как ВЫ ПРЕДЛАГАЕТЕ изменить эти две кокретные дракон-схемы? Жду конкретного ответа, а не теоретических рассуждений.

Эти две схемы находятся здесь:
download/file.php?id=367&mode=view

download/file.php?id=270&mode=view


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Декабрь, 2008 14:38 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Владимир Паронджанов писал(а):
К сожалению, Вы уклоняетесь от ответа.
Извините, не видел конкретного вопроса ;)

Договоримся, что ответ "да" приоритетнее и пойдёт вниз. Ответ "нет" будет отклонением от главного пути (вправо).

Про Карлсона. Надо изменить первую развилку. Вопрос будет "Кошелёк пуст?". Вопрос будет значительно лучше и правильнее, поскольку соответствует основному, главному пути. А сейчас имеет место инверсия! И алгоритм сейчас похож на лабиринт - занимательно, так как запутано...

Про Седну. Рассмотрим развилки, которые надо менять, исходя из принципа "да"=основной путь.
Первая развилка: вопрос "есть ещё попытка?" мне и так непонятен, поэтому переформулировать затрудняюсь. Ну, например, "таймаут по бездействию в ходе аутентификации истёк?" или что-то в этом роде, если правильно понимаю. Тоже будет выглядеть более логично, чем сейчас.

Вторая развилка: вместо "Сервер закрыл сессию" - "Надо продолжать работу?". Возможно, здесь такая замена по смыслу будет понятнее с инверсией...

Третья развилка: вместо "Произошла ошибка или остановка базы?" - "Состояние сервера штатное?". Опять соответствует основному пути.

Четвёртая развилка: вместо "Клиент выполнял транзакцию?" - "Все транзакции клиента завершены?". Опять соответствует логике основного пути.

Итого: 4 против 1.

Таким образом, правильно сформулированный вопрос одновременно является описанием ветки основного пути!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Декабрь, 2008 14:47 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 189
Откуда: Россия, Санкт-Петербург
Alexey_Donskoy писал(а):
"Сервер закрыл сессию" - "Надо продолжать работу?".
"Произошла ошибка или остановка базы?" - "Состояние сервера штатное?".
"Клиент выполнял транзакцию?" - "Все транзакции клиента завершены?".
Предлагаю довести начатое до абсурда и все конкретные вопросы о возможной нештатной ситуации заменить на простое "Всё в порядке?"
Alexey_Donskoy писал(а):
Таким образом, правильно сформулированный вопрос одновременно является описанием ветки основного пути!
Верно! "Если всё в порядке, то можно продолжать". Информативность таких развилок равна нулю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Декабрь, 2008 14:54 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 189
Откуда: Россия, Санкт-Петербург
Вместо того, чтобы переформулировать вопросы (да ещё и с потерей смысла), было предложено их инвертировать:
"Сервер закрыл сессию?" - "Сервер не закрыл сессию?"
"Произошла ошибка или остановка базы?" - "Не произошла ли ошибка или остановка базы?"
"Клиент выполнял транзакцию?" - "Клиент не выполнял транзакцию?"

Сразу становится видна проблема, свойственная двойному отрицанию в русском языке:
"Сервер не закрыл сессию?" - ДА, не закрыл.
"Сервер не закрыл сессию?" - НЕТ, не закрыл.
Обе ветки развилки можно прочитать как утверждение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Декабрь, 2008 15:45 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Начнём с двойного отрицания. Разумеется, делать так не следует!

Александр Ильин писал(а):
Предлагаю довести начатое до абсурда и все конкретные вопросы о возможной нештатной ситуации заменить на простое "Всё в порядке?"
Alexey_Donskoy писал(а):
Таким образом, правильно сформулированный вопрос одновременно является описанием ветки основного пути!
Верно! "Если всё в порядке, то можно продолжать". Информативность таких развилок равна нулю.
Ваша ремарка навела меня на интересную мысль о том, что развилка вообще далеко не всегда информативна!

На самом деле тут, по всей видимости, нужен переключатель. И неважно, что всего два варианта. Если взять для примера что-нибудь реальное (более сложное, чем приведённое описание Седны), то вариантов будет и больше.

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

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

Вам это ничего не напоминает?

Когнитивно-эргономический вопрос на засыпку: почему я должен описывать конкретную сущность (сиуацию с её обработчиком) при помощи не предназначенной для этого развилки?

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

Возвращаясь к моим конкретным ответам,
Цитата:
"Произошла ошибка или остановка базы?" - "Состояние сервера штатное?".
"Клиент выполнял транзакцию?" - "Все транзакции клиента завершены?".
вынужден не согласиться с Вашей критикой.

Состояние сервера может быть штатное либо аварийное. Только в штатном мы продолжаем обработку клиентских запросов. Второй вопрос более адекватен по смыслу проверки.

Вопрос о состоянии клиентских транзакций, вообще говоря, симметричен. Можно рассматривать его как с той, так и с другой стороны. Но принцип остаётся тем же. Критерий ситуации - наличие незавершённых транзакций. Обработчик ситуации - откат незавершённых транзакций.


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

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 112
Откуда: Беларусь, Минск
Осталось только определиться по поводу того, являются ли ошибки или останов аварийными ситуациями с точки зрения конкретных разработчиков.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Декабрь, 2008 19:04 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Почему обязательно аварийных?

Развилка - это универсальный базовый кирпичик, самый низкий уровень абстракции.
Решая конкретную задачу, программист имеет дело с более высокоуровневыми абстракциями.
В частности, с ситуациями. Напомню, что в самом простом случае в ситуации есть основной путь, критерий наличия ситуации и обработчик ситуации.

Ситуацию не обязательно моделировать развилкой. Зачастую лучше переключатель.

Развилка не обязательно используется для моделирования ситуации. Может быть просто алгоритм такой ;), без выделения ситуации. Как в примере Паронджанова с Карлсоном про кошелёк - это не ситуация, а условие окончания цикла.

В спорных примерах развилок из описания Седны больше подходили ситуации.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Декабрь, 2008 23:58 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Всё-таки поддержу Ваш взгляд на развилку с фиксированными выходами и оставленными на них подписями для "непосвящённых".
Аргументов всего два:
1. логично, что главный путь должен соответствовать положительному ответу на вопрос,
2. не нарушает принципа Дракона "правее=хуже". Отрицательный ответ на формулировку, соответствующую главному пути - это и будет то самое "хуже".
Но всё это справедливо, пока вопрос задан по-русски.

В минусах, как мне кажется, останется общепринятая практика алгоритмирования с проверкой взведённых битовых флагов, масок; поскольку такой подход пошёл от аппаратных средств(регистры управления, состояния). Т.е. напрямую работать с такими регистрами в Драконе(прим.: с фиксированной развилкой) будет затруднительно. Не всегда значение флага "истина"("1") будет логично соответствовать главному пути и ответу "Да". А напрямую работать с маской(hex/dec) в поле "Развилка" будет и вовсе проблематично.

Как бы то ни было, просится ещё один кирпичик в систему проектирования - конструктор логический выражений для Дракона. Штука, которая позволяет определить внутренности вопросов вида "Прерывания запрещены?", "Частота максимальная?". Приводящая в соответствие семантику вопроса и аппаратные/программные переменные(флаги, маски и т.д..).


Последний раз редактировалось Рэйлвэй Каген Четверг, 11 Декабрь, 2008 09:52, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 11 Декабрь, 2008 00:06 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Как выход на следующий слой детализации - да.
Оставляя наверху высокоуровневую формулировку - вопрос должен соответствовать решаемой задаче, а не внутренней её реализации (битовые маски etc.).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 11 Декабрь, 2008 23:07 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 33
dvuugl писал(а):
Alexey_Donskoy писал(а):
Так ведь никто не предлагает убрать надписи "да/нет"!

А почему бы и нет? В электронике оно решено и оно было бы понятно человеку не знакомому с ДРАКОНом, без пояснений. Имеем поток действия, аналог тока, ставим вентиль: сюда можно а туда нет..

Пояснения всё равно требуются, ведь данные схемы будут для новичков с "сурпризами"...
Главное - научить их не забывать, что абсолютные знаки и величины потенциалов на выводах схемы роли не играют (в смысле "куды чаво текёть")!
Только - их соотношений.......


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 10:32 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
По поводу "двойного отрицания":
Посмотрел материал, выложенный Владимиром Даниеловичем здесь. Самое интересное, что господа бухгалтерА как-то обходятся без "двойного отрицания" и все развилки у них вида "Да"-вниз; "Нет"-вправо... Не хотят люди свободы?


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

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5850
Откуда: Москва
Alexey_Donskoy писал(а):
...абсолютно во всех языках программирования (кроме обычных блок-схем) порядок жёсткий... И подсознательно ожидаешь того же и от Дракона... ан нет...

viewtopic.php?p=22120#p22120

Уважаемый Alexey_Donskoy!

Вы пишете:"...абсолютно во всех языках программирования... порядок жёсткий" (имеется в виду порядок расположения да (true) и нет(false)).

Верна ли эта фраза? Нет, не верна!
Напимер, в языке Паскаль в цикле while-do выход из цикла соответствует значению false, а в цикле repeat-until применяется диаметрально противоположный принцип: выход из цикла производится, когда логическое выражение принимает значение true.

Таким образом, оба расположения да и нет применяются не только в блок-схемах, но и в "настоящих" языках пораммирования.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 13:12 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Владимир Даниелович!

При всём уважении... однако, не надо передёргивать! У меня перед процитированными словами было написано "практически"... специально для такого случая ;) Согласен, конечно, что выражение в целом приобрело математически некорректное звучание ;) буду подбирать слова тщательнее!

Что до while и until, так на их представлении на блок-схеме в обоих случаях из развилки ответ "да" идёт вниз, "нет" - влево (возврат или обход). Что, в общем-то, ещё раз иллюстрирует моё предложение!

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Декабрь, 2008 13:30 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5850
Откуда: Москва
Рэйлвэй Каген писал(а):
По поводу "двойного отрицания":
Посмотрел материал, выложенный Владимиром Даниеловичем здесь. Самое интересное, что господа бухгалтерА как-то обходятся без "двойного отрицания" и все развилки у них вида "Да"-вниз; "Нет"-вправо... Не хотят люди свободы?


Уважаемый Рэйлвэй Каген!
К сожалению, Ваша аргументация неубедительна. Свобода - это не обязанность шагать в одном предписанном направлении.
Свобода - это возможность свободно выбрать один из двух возможных способов расположения да и нет.
Вы правы: бухгалтеры предпочли использовать только один способ. Но о чем это говорит?. Только о том, что в данном конкретном случае второй способ им не нужен. Но это вовсе не значит, что он (второй способ) не нужен никогда и никому.

Пример 1.
viewtopic.php?f=62&t=957

Пример 2 (я его уже приводил)
download/file.php?id=270&mode=view

Думаю, что Вы поверите мне на слово, что таких (опровергающих) примеров я могу привести намного больше.


viewtopic.php?f=62&t=957


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

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Владимир Паронджанов писал(а):
К сожалению, Ваша аргументация неубедительна.
Это лишь предложение рассмотреть проблему под другим углом зрения. Весомая часть ошибок в программах допускается как раз в записи сложных логических выражений при ветвлении по IF. Просто чтение чужой многоэтажной формулы в IF'е тоже может вызвать затруднения. Поэтому принуждение в развилке формулировать на родном языке, да ещё и в терминах главного пути считаю разумным направлением свободы. В случае, когда возможностей родного языка не хватает для полного и точного выражения условия ветвления, можно воспользоваться графическим элементом "переключатель". Вот там уж точно - полная свобода.
Предвижу возражения, что для облегчения восприятия сложной логики ветвления могут использоваться комментарии. Но эта штука не компилируется, не интерпретируется, никак не участвует в формировании рабочего кода программы, хотя по смыслу дублирует уже записанный текст. Более того, при внесении изменений в текст программы, приходится ещё следить за комментариями. Снять существенную часть такого дублирования поможет выделенное выше правило в комплексе с "предложенным ранее конструктором логических выражений".
Владимир Паронджанов писал(а):
Думаю, что Вы поверите мне на слово, что таких (опровергающих) примеров я могу привести намного больше.
Разумеется поверю! К счастью у программистов есть совершенно бескровный инструмент(да ещё и без компромиссов) - галка в настройках. Поставили - играем "так", не поставили - играем "эдак".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Декабрь, 2008 16:44 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Рэйлвэй Каген писал(а):
Просто чтение чужой многоэтажной формулы в IF'е тоже может вызвать затруднения.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Декабрь, 2008 17:47 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Если я Вас правильно понял, то так:
Вложение:
Комментарий к файлу: слева - дизъюнкция, справа - коньюнкция
cd.png
cd.png [ 38.99 КБ | Просмотров: 13235 ]
Теперь представим, что есть возможность пошалить выходами:
Вложение:
Комментарий к файлу: слева - коньюнкция, справа - дизъюнкция
cd1.png
cd1.png [ 14.45 КБ | Просмотров: 13233 ]
Вам нравится визуальная эквивалентность совершенно разных определений матлогики?.. Это ежели рассмотреть попарно левые схемы на обоих рисунках или правые.
Мне что-то не очень.

p.s.: справедливо для терминов прямой логики.
p.s.2:и ещё раз замечу, ежели сразу формулировать условие на родном языке, а не в терминах логических переменных, то двойное отрицание просто не понадобится.
p.s.3:единственное, на что всё-таки влияют наши телодвижения вокруг "Да"/"Нет" - это досрочный выход из проверки условия. Но по большому счёту - это задача оптимизации, и она должна решаться на соответствующем этапе. Лучше, если автоматически.


Последний раз редактировалось Рэйлвэй Каген Суббота, 13 Декабрь, 2008 19:50, всего редактировалось 2 раз(а).

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

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Рэйлвэй Каген писал(а):
Теперь представим, что есть возможность пошалить выходами:
Полагаю, что в cd1.png иконы "Действие ..." правильнее перенести в правые шампуры схем.


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

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


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

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


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

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