OberonCore
https://forum.oberoncore.ru/

Почему программа должна быть структурной
https://forum.oberoncore.ru/viewtopic.php?f=82&t=2348
Страница 8 из 8

Автор:  nail_kh [ Вторник, 23 Апрель, 2013 04:14 ]
Заголовок сообщения:  Re: Почему программа должна быть структурной

Александр Шостак писал(а):
Считаю необходимым применение исключений только там, где это действительно нужно - в математических операциях (TRY a+b EXCEPT MathError END).

Пожалуй не соглашусь по следующей причине:
Допустим вы делаете диалог в котором пользователь вводит данные для сложных математических расчетов. После ввода данных и нажатия пользователем кнопки "Пуск" ваш код берет эти данные и передает их некоторой, не Вами написанной процедуре которая анализирует данные и выполняет расчет. Если данные некорректны, то процедура просто выдает исключение и прекращает свою работу, а заодно работу всей программы. Разумеется, можно перед вызовом процедуры тщательно проанализировать данные на корректность, т.е. продублировать работу расчетной процедуры. Но стоит ли?
По мне, так тут логично заключить процедуру в TRY ... EXCEPT... END примерно так:
TRY
Передать данные процедуре расчета
EXCEPT
Сообщить пользователю, что его данные некорректны
END
Вернуться к диалогу с пользователем

Разумеется, использовать TRY EXCEPT для перехвата логических ошибок программы нежелательно - это прямой путь скрыть от программиста его ошибки.

Автор:  Валерий Лаптев [ Четверг, 07 Ноябрь, 2013 21:01 ]
Заголовок сообщения:  Re: Почему программа должна быть структурной

Есть один "железный" довод в пользу структурирования программ.
Вот в этой книжке: https://www.ozon.ru/context/detail/id/8382755/
Есть глава 2 Основы метрической теории программ.
И в этой главе вычисляется цикломатическое число - которое представляет собой метрику МакКейба
Z(G)=e-v+2p. Для одномодульной программы = Z(G)=e-v+2.
Здесь е - ребра графа потока управления программы, v - вершины этого графа (операторы).
То есть надо реально построить граф в каком-нить виде.

Так вот, для структурированной программы Z(G) = n + 1,
где n - количество вершин ветвления.
Чтобы это посчитать - даже не требуется граф потока управления строить - просто операторы ветвления и цикла посчитать - и все.

Далее в той же главе написано, что Липаев показал: при Z < 10 все можно корректно проверить и число ошибок будет минимальным.
При Z > 30 устранить ошибки практически невозможно.
Ну и для промежуточных значений - значительные сложности с доведением "до ума".

Значение Z < 10, как мне кажется, связано с числом Миллера 7+-2.

Автор:  Alexey_Donskoy [ Пятница, 08 Ноябрь, 2013 11:56 ]
Заголовок сообщения:  Re: Почему программа должна быть структурной

Валерий Лаптев писал(а):
Значение Z < 10, как мне кажется, связано с числом Миллера 7+-2.
Число Миллера, по категорическому утверждению Паронджанова (подкреплённому пруфами), относится исключительно к восприятию рекламы.
Распространение оного числа на все виды интеллектуальной деятельности - один из примеров современной мифологии. :wink:

Автор:  Валерий Лаптев [ Пятница, 08 Ноябрь, 2013 15:24 ]
Заголовок сообщения:  Re: Почему программа должна быть структурной

Не так все просто.
Цитата:
Джордж Миллер во время своей работы в Bell Laboratories провел ряд экспериментов, целью которых был анализ памяти операторов. В результате опытов он обнаружил, что кратковременная память человека способна запоминать в среднем девять двоичных чисел, восемь десятичных чисел, семь букв алфавита и пять односложных слов — то есть человек способен одновременно помнить 7 ± 2 элементов.

Таким образом, кратковременная память — «кошелёк», в который можно «положить» одновременно семь «монет». Причём память не пытается анализировать смысл информации, важны лишь внешние, физические характеристики, то есть не важно, какие «монеты» находятся в «кошельке» — доллар или цент, главное чтобы их было семь. Если количество элементов больше семи (в крайнем случае, девяти), то мозг разбивает элементы на группы таким образом, чтобы количество запоминаемых элементов было от 5 до 9.

Неожиданно, аналогичное правило было обнаружено для муравьёв: они способны запоминать и передавать сообщения длиной до 7 бит


К Z < 10 это может относиться так, что программер способен одновременно держать в памяти 7+-2 ближайших к анализируемому оператору ветвлений.
И это означает, что иметь ветвление больше, чем 7+-2 -себе дороже (с точки зрения отладки и поиска ошибок).
А если еще и условия ветвлений сложные - то вообще труба.

Автор:  Евгений Темиргалеев [ Пятница, 17 Октябрь, 2014 20:04 ]
Заголовок сообщения:  Re: Почему программа должна быть структурной

Халиуллин Н. И. перевёл статью: Ермаков И. Е. Структурирование "промышленного" цикла. -> Ermakov I. E. “Industrial” loop structuring
http://oberoncore.org/library/ermakov_s ... nogo_cikla

Страница 8 из 8 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/