OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 25 Июнь, 2019 20:38

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




Начать новую тему Ответить на тему  [ Сообщений: 72 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 21 Апрель, 2009 10:47 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3055
Откуда: Астрахань
Info21 писал(а):
Валерий Лаптев писал(а):
Очень интересно почитать и посмотреть, как физики подходят к программированию...
Ну вот, совсем страшно стало... Нету там ничего особенного. Никакого доказательного программирования, три упражнения с конъюнкцией на цикл Дейкстры, и всё.

Федор Васильевич. Ничего особенного я и ищу.
А лекция 8 понравилась целевым подходом и абсолютной свободой изложения.
Вот и интересно посмотреть "сверху на всю картину".


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8153
Откуда: Троицк, Москва
Валерий Лаптев писал(а):
... и абсолютной свободой изложения.
Даже перечитал с перепугу...
Но сродство к научному анархизму должен признать.


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9125
Откуда: Россия, Орёл
Выложена статья на эту тему:
viewtopic.php?f=8&t=1494


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 03 Май, 2009 19:12 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9125
Откуда: Россия, Орёл
Из моего ответа Геннадию Тышову
viewtopic.php?p=28961#p28961
- возражение на "сколько можно обсасывать эти циклы..."... :)

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

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

Может, это смотрится просто как слова, но это на самом деле моё убеждение, чему нам надо учиться, начиная с малого и дальше..


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 18 Июль, 2009 14:45 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
К вопросу о грамотном построении циклов:

http://www.intuit.ru/department/se/pbmsu/5/

Автор в доступной форме даёт понятие инварианта цикла, и далее демонстрирует на конкретных примерах как правильно строить цикл.
Всем новичкам читать обязательно!

PS. Кстати, остальные лекции (всего их 12) также интересны и познавательны. Впервые встречаю такое сжатое лаконичное и полное описание основ программирования. Затронуты практически все основные темы. Автора Борисенко В. В. раньше не встречал, но после прочтения его лекций проникся к нему глубоким уважением. Есть в лекциях и упоминания о Модуле-2 и об Обероне, а также об их авторе Никлаусе Вирте.


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

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Раз уж базовые паттерны циклов используются в подавляющем числе случаев использования циклов, то, наверное, имеет смысл ввести в язык программирования новые синтаксические конструкции, делающие программу более читабельной и избавляющей от дублирования некоторой части кода при использовании цикла WHILE. Ниже я попытался изобрести такой синтаксис:

Схема "полный проход"
Код:
STEP
  <взять первые или очередные данные>
UNTIL
  <исчерпание данных>
DO
  <использовать данные>
END;
_____________________________________________
Эквивалентно:

LOOP
  <взять первые или очередные данные>
IF <исчерпание данных> THEN BREAK
ELSE
  <использовать данные>
END;


Схема "линейный поиск"
Код:
STEP
  <взять первые или очередные данные>
UNTIL
  <исчерпание данных>
FIND
  <условие поиска>
MEANTIME
  <использовать данные, пока поиск не завершен>
FOUND
  <использовать данные, когда поиск дал результат, и выйти из цикла>
ABSENT
  <использовать данные, когда исчерпаны данные, и выйти из цикла>
END;
_____________________________________________
Эквивалентно:

LOOP
  <взять первые или очередные данные>
IF <условие поиска> THEN
  <использовать данные, когда поиск дал результат>; BREAK
ELSIF <исчерпание данных> THEN
  <использовать данные, когда исчерпаны данные>; BREAK
ELSE
  <использовать данные, пока поиск не завершен>
END;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 02:58 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8153
Откуда: Троицк, Москва
"Взять первые или очередные" - иногда происходит по-разному.

Не всегда можно разделить "взять" и "использовать".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 07:41 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
to Прохоренко
По моему у Вас получилось хуже, громзче и не понятнее, хотя возможно здесь работают стереотипы.
Вообще говоря, многое (если не все), что вы предлагаете, так или иначе реализовано в Алголе-68, но должен признать циклы у Вирта более "робастые"


Последний раз редактировалось Axcel Суббота, 17 Апрель, 2010 07:45, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 07:45 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9125
Откуда: Россия, Орёл
Это общая беда высокоуровневых конструкций (посмотрите на ФП). Только кажется, что проще спрятать что-то за декларативом. Обычно проще видеть прямую запись, "как устроено".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 10:22 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Axcel писал(а):
to Прохоренко
По моему у Вас получилось хуже, громзче и не понятнее,


Вы, наверное, сравниваете с лаконичными эквивалентными конструкциями, которые я сделал с помощью "запрещенных" в хорошем стиле программирования циклов LOOP и операторов BREAK. А Вы сравните с исходными конструкциями с циклами WHILE. Вот где можно голову сломать, особенно в схеме "линейный поиск" (http://www.oberoncore.ru/wiki/%D0%BF%D0 ... 0%BE%D0%B2):


Код:
взять_первую_ситуацию;
WHILE ~конец_ситуаций & ~( ... условие поиска ..) DO
  ... возможно, но не очень часто встречается  - действие над текущей ситуацией ...
  взять_следующую_ситуацию
END;
IF ~конец_ситуаций THEN
  ... нашли, делаем что надо, с той ситуацией, на которой остановился цикл...
ELSE
  ... не нашли, делаем что-то, если нужно
END


Сделать что-то подобное безошибочно можно только, если иметь шаблон перед глазами.

Axcel писал(а):
хотя возможно здесь работают стереотипы.


Думаю, что как раз они и работают. Длинная форма оператора IF тоже, наверное, поначалу вызвала шок:

Код:
IF
  <первое условие>
THEN
  <первая последовательность операторов>
ELSIF
  <второе условие>
THEN
  <вторая последовательность операторов>
{ELSIF  <очередное условие> THEN <очередная последовательность операторов>}
ELSE
  <последняя последовательность операторов>
END;


А теперь, ничего, все пользуются.

Кстати, мой замысел заключается в том, чтобы вся шаблонная конструкция вставлялась в код одним щелчком мыши, а потом вместо заглушек с подсказками типа "<введите условие поиска>" программист бы вставлял требуемые условия и действия. При такой технологии громоздкость не имеет никакого значения, так как не приходится вбивать с клавиатуры каждый оператор. А главное, что улучшается читабельность кода.


Axcel писал(а):
Вообще говоря, многое (если не все), что вы предлагаете, так или иначе реализовано в Алголе-68, но должен признать циклы у Вирта более "робастые"


А можно конкретный пример из Алгола-68?

Что такое "робастые"?

Насколько мне известно, Алгол-68 - вовсе не детище Вирта, а конкурирующий с ним продукт.


Последний раз редактировалось Сергей Прохоренко Суббота, 17 Апрель, 2010 10:34, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 10:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9125
Откуда: Россия, Орёл
Сергей Прохоренко писал(а):
Сделать что-то подобное безошибочно можно только, если иметь шаблон перед глазами.


Да ну...
небольшой период упражнения - и какие могут быть проблемы?

В том-то и суть, что это умение должно быть сформировано, а не "ограждено".

В предложенных конструкциях человеку не надо понимать, каков инвариант, по каким логическим условиям строится процесс - и это как раз плохо. Бездумно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 10:46 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Илья Ермаков писал(а):
...это как раз плохо. Бездумно.


Наоборот, хорошо. Меньше "человеческий фактор" - меньше ошибок. И не придется полгода упражняться и вдалбливать туманное понятие "инвариант цикла".

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 13:23 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8153
Откуда: Троицк, Москва
Сергей Прохоренко писал(а):
Я же считаю, что виновата техника - система управления самолетом, предоставившая пилоту слишком много свободы рисковать жизнью пассажиров.
Оно, в общем, правильно, и надо пытаться.
Но в данном конкретном случае (про цикл) пока не убедительно.
Конечно, нельзя исключать, что что-то в итоге придумается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 14:01 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 863
Откуда: Киев
Сергей Прохоренко писал(а):
Axcel писал(а):
to Прохоренко
По моему у Вас получилось хуже, громзче и не понятнее, хотя возможно здесь работают стереотипы.


Думаю, что как раз они и работают. Длинная форма оператора IF тоже, наверное, поначалу вызвала шок, а теперь, ничего, все пользуются.

Мои ощущения говорят о другом. Еще до знакомства с Обероном, я зачастую лепил на С конструкцию, похожую на многоветочный IF. И таким образом, этот обероновский оператор стал для меня логичным выражением алгоритмической мысли. А вот предложенный Вами цикл, на мой взгляд, выглядит надуманным.

Сергей Прохоренко писал(а):
Кстати, мой замысел заключается в том, чтобы вся шаблонная конструкция вставлялась в код одним щелчком мыши, а потом вместо заглушек с подсказками типа "<введите условие поиска>" программист бы вставлял требуемые условия и действия. При такой технологии громоздкость не имеет никакого значения, так как не приходится вбивать с клавиатуры каждый оператор. А главное, что улучшается читабельность кода.

Но тогда по одному щелчку мыши может вставляться и шаблонная конструкция с использованием WHILE и IF. Чем такой подход хуже?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 14:54 
Модератор
Аватара пользователя

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

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


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

Что бывает в противном случае? По а) - "жмёт" в работе. По б) - имеет непрозрачное поведение ("умность"). Второе - хуже некуда (как в ФП).

Вывод: если имеются сомнения, то лучше оставлять явным, иначе будут разные хреновые эффекты от непрозрачности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 14:57 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9125
Откуда: Россия, Орёл
Сергей Прохоренко писал(а):
Я же считаю, что виновата техника - система управления самолетом, предоставившая пилоту слишком много свободы рисковать жизнью пассажиров.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 15:02 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Comdiv писал(а):
Сергей Прохоренко писал(а):
Кстати, мой замысел заключается в том, чтобы вся шаблонная конструкция вставлялась в код одним щелчком мыши, а потом вместо заглушек с подсказками типа "<введите условие поиска>" программист бы вставлял требуемые условия и действия. При такой технологии громоздкость не имеет никакого значения, так как не приходится вбивать с клавиатуры каждый оператор. А главное, что улучшается читабельность кода.

Но тогда по одному щелчку мыши может вставляться и шаблонная конструкция с использованием WHILE и IF. Чем такой подход хуже?


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

Ваша идея ценна тем, что ее реализация не требует внесения изменений в язык. Почему бы гуру БлэкБокса и поклонникам базовых паттернов циклов её не реализовать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 19:21 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9125
Откуда: Россия, Орёл
А что реализовывать-то?

Просто вставку WHILE с комментариями? Так комментарии всё равно убирать - они только загромождать код будут.. Потому что шаблоны на то и шаблоны, что должны узнаваться сразу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 20:35 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Сергей Прохоренко писал(а):
Axcel писал(а):
Вообще говоря, многое (если не все), что вы предлагаете, так или иначе реализовано в Алголе-68, но должен признать циклы у Вирта более "робастые"

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Суббота, 17 Апрель, 2010 20:57 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Илья Ермаков писал(а):
А что реализовывать-то?

Просто вставку WHILE с комментариями? Так комментарии всё равно убирать - они только загромождать код будут.. Потому что шаблоны на то и шаблоны, что должны узнаваться сразу.


Тексты вставки:

Код:
(*Начало паттерна «Полный проход»*)
  ВзятьПервыеДанные     (*Взять первые данные*)
WHILE ~УсловиеИсчерпанияДанных DO (*Цикл пока данные не исчерпаны*)
  ИспользоватьДанные     (*Использовать данные*)
  ВзятьОчередныеДанные     (*Взять очередные данные*)
END;     (*Конец паттерна «Полный проход»*)

___________________________________________________________

(*Начало паттерна «Линейный поиск»*)
  ВзятьПервыеДанные     (*Взять первые данные*)
WHILE ~УсловиеИсчерпанияДанных&~УсловиеПоиска DO (*Цикл пока данные не исчерпаны, а искомые данные не найдены*)
  ИспользоватьДанные     (*Использовать взятые данные, пока поиск не завершен*)
  ВзятьОчередныеДанные     (*Взять очередные данные*)
END;
IF ~УсловиеИсчерпанияДанных THEN     (*Если данные не были исчерпаны*)
  ИспользоватьНайденныеДанные     (*Использовать найденные данные*)
ELSE
  ДействияПослеБезуспешногоПоиска     (*Действия после безуспешного поиска*)
END;     (*Конец паттерна «Линейный поиск»*)


Составные обозначения типа "ДействияПослеБезуспешногоПоиска" выделяются щелчком мыши и заменяются требуемым кодом, а комментарии оставляются без изменений. При необходимости можно выделить и удалить и то, и другое.


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

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


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

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


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

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