Автор Тема: Оберон в образовании.  (Прочитано 44673 раз)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Оберон в образовании.
« Ответ #30 : Февраль 23, 2011, 04:53:29 pm »
foo (a,b,c) (* по умолчанию всё VAR *)
foo(VAR: a,b,c OUT: d, e, f); (* явно задаем вход и выход *)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re:Оберон в образовании.
« Ответ #31 : Февраль 23, 2011, 04:56:49 pm »
1) Что мешает использовать OUT-параметры? Желание записать композицию нескольких функций и не вводить промежуточных переменных? Это идёт от желания (предрассудка?) быть ближе к обычной математической записи? Не буду возражать на все 100% против возврата структур... но проблемы там возникают. А бонусы - ну давайте подумаем. Если возвращается структура, то она обычно неинкапсулирована (код работает с её составляющими). Те же комплексные числа или векторы. В таком случае я сразу предпочту записать в несколько отдельных строк и с отдельными пром. переменными, а не воротить одно выражение, иллюзорно простое (как тензорная форма, в которой в индексах ногу свернёшь, сложность только маскируется во многих случаях, лучше уж видеть всю пачку обычных уравнений).
Если же объекты действительно инкапсулированные, т.е. атомарны с точки зрения алгоритма, то они обычно являются указательными (длинные числа и т.п.)

2) Умение работать с нумерованными массивами с 0 - фундаментально, потому что любые операции со смещениями (хоть в той же обработке растровых изображений), представления многомерных структур в виде одномерных развёрток требуют думать именно вот от этого нуля. Лучше один раз объяснить, почему ноль, нарисовать массив снутри, добиться, чтоб при написании индекса эта картинка в голове всплывала, отбить житейское понимание индекса "как номера".

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

Пожелание - не использовать безграмотный термин "цикл с постусловием", иначе сразу ощущение, что человек не знает, что такое постусловие.

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Оберон в образовании.
« Ответ #32 : Февраль 23, 2011, 04:58:37 pm »
На самом деле, возврат к оперерованию со ссылками-указателями имеет конечно очень плохой побочный эффект -- ссылка на переменную на стеке может быть сохранена где-нибудь вне него, например в глобальной переменной, и после разружения фрейма на стеке стать не валидной. Что очень не здорово.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re:Оберон в образовании.
« Ответ #33 : Февраль 23, 2011, 06:07:00 pm »
Согласен с Ильёй. OUT-параметры вполне органично могут применяться и безболезненно применяются. Неприязнь к ним - просто особенность восприятия или привычка конкретных людей. Кроме того, сама природа функций подразумевает в большинстве случаев возможность не возвратить корректный результат, так что математическая нотация в случае корректной работы с подпрограммами не может использоваться часто.

DIzer

  • Гость
Re:Оберон в образовании.
« Ответ #34 : Февраль 23, 2011, 06:20:43 pm »
Согласен с Ильёй. OUT-параметры вполне органично могут применяться и безболезненно применяются. Неприязнь к ним - просто особенность восприятия или привычка конкретных людей. Кроме того, сама природа функций подразумевает в большинстве случаев возможность не возвратить корректный результат, так что математическая нотация в случае корректной работы с подпрограммами не может использоваться часто.
Да ради бога, я говорю про то, что понижение уровня языка в данном случае это плохо..принципиально плохо (вне зависимости от того применяете вы их в решение конкретных задач, даже на протяжении ВСЕЙ вашей практике программирования).

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Оберон в образовании.
« Ответ #35 : Февраль 23, 2011, 06:46:49 pm »
Согласен с Ильёй. OUT-параметры вполне органично могут применяться и безболезненно применяются. Неприязнь к ним - просто особенность восприятия или привычка конкретных людей. Кроме того, сама природа функций подразумевает в большинстве случаев возможность не возвратить корректный результат, так что математическая нотация в случае корректной работы с подпрограммами не может использоваться часто.

С функциями, которые возвращают некорректный результат жить очень трудно. Тратить учебное время непрофильных специальностей на объяснение несовершенства компьютерного мира и методы борьбы с ними (коды ошибок, механизм исключений) - ИМХО не очень эффективно. Проще сказать, что результат всегда корректен, а если он никак не может быть получен - лепить ASSERT/HALT. Для учебных целей - вполне хватит.

DIzer

  • Гость
Re:Оберон в образовании.
« Ответ #36 : Февраль 23, 2011, 06:50:03 pm »

С функциями, которые возвращают некорректный результат жить очень трудно. Тратить учебное время непрофильных специальностей на объяснение несовершенства компьютерного мира и методы борьбы с ними (коды ошибок, механизм исключений) - ИМХО не очень эффективно. Проще сказать, что результат всегда корректен, а если он никак не может быть получен - лепить ASSERT/HALT. Для учебных целей - вполне хватит.
Тысячу раз правы, но... и это вторично...

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Оберон в образовании.
« Ответ #37 : Февраль 23, 2011, 09:18:50 pm »
Гм. Про OUT-параметры... А привидите ка пример, что неиспользование OUT-параметров приводит к существенной деградации производительности. Т.е. где без него ну никак совершенно. Потому как сходу я такого разумного примера придумать не могу.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re:Оберон в образовании.
« Ответ #38 : Февраль 24, 2011, 02:21:48 am »
Гм. Про OUT-параметры... А привидите ка пример, что неиспользование OUT-параметров приводит к существенной деградации производительности. Т.е. где без него ну никак совершенно. Потому как сходу я такого разумного примера придумать не могу.
Для меня они, всего лишь уточнение контракта, при проектировании субалгоритма , и ВАЖНОСТЬ их использования (спецификаторов вообще) связана  в первую очередь с этим обстоятельством. Все остальное артефакты... да их рассмотрение может играть критическую роль в определенных задачах (даже при подготовке специалистов системщиков)- но применительно к нашим баранам (точенее, в том круге задач который очертил я). этим явлением (деградацией) можно пренебречь.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Оберон в образовании.
« Ответ #39 : Февраль 24, 2011, 06:30:53 am »
Согласен с Ильёй. OUT-параметры вполне органично могут применяться и безболезненно применяются. Неприязнь к ним - просто особенность восприятия или привычка конкретных людей.
OUT-параметры -- лишняя и бессмысленная сущность. Если процедура возвращает какие-то результаты в OUT-параметрах, то пусть она будет оформлена как функция, возвращающая кортеж из нескольких значений.
Ведь всё равно же есть функции, которые возвращают результат. Так почему бы эти функции не могли бы вернуть кортеж из нескольких значений?

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

То, что OUT-параметры считаются органичными и всё такое -- просто следствие привычки к языкам со слабой системой типов или с неудобной работой с типами чуть сложнее целого числа...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Re:Оберон в образовании.
« Ответ #40 : Февраль 24, 2011, 06:45:48 am »
OUT-параметры -- лишняя и бессмысленная сущность.
Согласен с этим, но только для функций. Если у процедуры есть побочный эффект, то оформлять ее как функцию -  очень плохо. В этом случае OUT-параметры вполне уместны.

P.S. Я не про Haskell  :)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Оберон в образовании.
« Ответ #41 : Февраль 24, 2011, 08:16:12 am »
А есть ли смысл у разделения на процедуры и функции?
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Re:Оберон в образовании.
« Ответ #42 : Февраль 24, 2011, 08:26:03 am »
Не люблю функций с побочным эффектом.

DIzer

  • Гость
Re:Оберон в образовании.
« Ответ #43 : Февраль 24, 2011, 08:34:52 am »
А есть ли смысл у разделения на процедуры и функции?
C точки зрения наших баранов  - нет, и  то и другое субалгоритмы которые возникают естественным образом при алгоритмизации задачи (я сюда отношу также , искусственное выделение их программистом с целью уменьшения сложности восприятия алгоритма (зависящее от индивидуальных особенносте программиста) ), либо в качестве особенностей языка, железяки, окружения, системы.
Так что разделение их в паскале - считаю артефактом языка

DIzer

  • Гость
Re:Оберон в образовании.
« Ответ #44 : Февраль 24, 2011, 08:43:53 am »
Не люблю функций с побочным эффектом.
Их никто не любит, лично я просто запрещаю их использование без веских на то оснований (а поскольку оных у первокурсника нет - нет и проблем)