Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 99
Текст из файла (страница 99)
д. В структуре программы такой вид ее иерархической организации очень существенен, так как позволяет программисту понять, как все части программы согласованы друге другом. Порядок операторов в тексте программы не будет соответствовагпь реальной последовательности их выполнения. С помощью операторов оого легко писать программы, в которых управление перескакивает между различными последовательностями операторов беспорядочным образом. Поэтому та последовательность, в которой операторы появляются в программе, не отражает последовательность их выполнения, а значит, такие программы трудны для понимания. Программы с большим количеством нерациональных передач управления назад и вперед часто называются кодом «спагетти» (см, рис.
1.2). Группы операторов могут служить различным целям. Программа более проста для понимания, если каждая группа операторов в пределах всей структуры программы служит единственной цели (то есть вычисляет ясно определенную отдельную часть всего целого вычисления). Часто бывает, что разные группы операторов могут содержать несколько одинаковых операторов. Если использовать оператор доге, можно объединить эти группы таким образом, чтобы писать одинаковые операторы только один раз и передавать управление этому общему набору операто- 354 Глава 8.
Управление последовательностью действий ров во время выполнения каждой группы операторов. Такой подход затрудняет понимание программы. Структурное программирование. Этот термин используется для обозначения методологии разработки программ, в которой особое внимание уделяется: 1) иерархической разработке программных структур, использующей только простые формы управления: композицию, ветвление и повторение, — описанные ранее в этой же главе; 2) представлению иерархической структуры программы непосредственно в ее тексте, использующему «структурированные» операторы управления, описываемые далее в этой же главе; 3) тексту программы, в котором последовательность появления операторов должна соответствовать последовательности их выполнения; 4) использованию групп операторов, предназначенных для вычисления одной цели, даже если при этом операторы придется просто копировать.
Обычно, если программа написана в соответствии с правилалги структурного программирования, то ее легче понять, отладить, проверить на корректность, а позже модифицировать и снова проверить на корректность. В разделе 8.3.3 приведена модель структур управления, называемых базовыми струкиурами управления, которая помогает формально определить то, что мы понимаем под структурированной программой. 8.3.2. Структурированное управление последовательностью действий Лля отображения основных форм управления, таких как композиция, ветвление и повторение, в болыпинстве языков существует специальньш набор управляющих операторов. Одним из основных аспектов каждого описываемого ниже оператора является то, что они представляют собой операторы с одной точкой входа и одной точкой выхода.
Если один из таких операторов помещается в некоторую последовательность других операторов, тогда последовательность выполнения обязательно пройде~ от предыдущего оператора через наш оператор с одной точкой входа и одной точкой выхода к следующему за ним оператору (при условии, что наш оператор не сможет включить в себя внутренний оператор йо1с, передающий управление в какое-либо иное место программы, отличное от единственной точки выхода из него). При чтении программы, составленной только из управляющих операторов с одной точкой входа и одной точкой выхода, порядок выполнения операторов программы должен соответствовать порядку операторов в тексте программы. Каждый оператор с одной точкой входа и одной точкой выхода может содержать внутреннее ветвление и внутреннис циклы, но управление от одного такого оператора может переходить к другому только через его единственную точку выхода.
Старые языки, такие как СОВОЕ и ЕОйТЛтсХ, хотя и содержат несколько операторов с одной точкой входа и одной точкой выхода, но они все же сильно зависят от оператора доге и меток операторов. Оба эти языка было трудно адаптировать к современным языковым концепциям. Общее представление о языке СОВОГО можно получить из листинга 8.1 и обзора языка 8.3. 8.3.
Управление последовательностью выполнения операторов 3бб Обзор языка В.З. СОВО(. Возможности. В начале 60-хгг, языкСОВОь(СОттоп Вць(пеььОпеп1еб(зпдцаде) широко использовался для обработки деловой информации на компьютерах (теперь это называют бизнес-приложениями). История. Архитектура языка СОВОь неоднократно пересматривалась — его первая версия вышла в 1960 г., а более поздние версии — в 1974 и 1984 гг. Разработка языка СОВОЕ под руководством Грейса Хопера (Огасе Норрег) была организована Министерством обороны СШЯ. Разработчики языка СОВОь позаимствовали некоторые идеи из языка ЕЬОУУМАТ1С, созданного в компании Оп(час, включая использование существительных и глаголов для описания действий и отделение описаний данных от команд.
При разработке языка СОВОь была поставлена уникальная цель— создать язык программирования, использующий «естественный английский» для описания алгоритмов. Хотя получившийся язык достаточно удобен для чтения, но у него все же есть формальный синтаксис и программирование на нем требует определенных практических навыков. Из-за большого количества предо гавлений разнообразных данных и огромного числа вариантов для большинства операторов языка трансляция СОВОь-программы в эффективный выполняемый коддостаточно сложна. Большинство ранних компиляторов СОВОЕ были крайне медленными, но более поздние усовершенствования методов компиляции привели к появлению относительно быстрых компиляторов языка СОВОь, создающих довольно эффективный исполняемый код, Пример.
Программы СОВОЕ организованы в виде четырех разделов. Такая организация отвечает двум основным целям разрабо~ки языка: отделение машинно-зависимых элементов программы от машинно-независимых, а также отделение описан ия данных от описания алгоритма. В результате появились три раздела программы: процедурный раздел (РВОСЕООВЕ г((ч(ь(оп) содержит алгоритмы, раздел данных (ВАТА Юу(ь(оп) содержит описания данных, раздел окружения (ЕМУ(РОММЕ(чТ г(1- н(уяоп) содержит машинно-зависимые программные спецификации, такие как связи между программой и внешними файлами данных. Четвертый раздел идентификации ((ОЕГЧТ(Р(САТ1ОЫ гйч(гйоп) содержит название программы и имя ее автора, а также дополнительную информацию и документацию. Строение языка СОВОЕ основано на статической структуре времени выполнения.
Не требуется организации управления ресурсами памяти во время выполнения программы, и многие аспекты языка были разработаны для того, чтобы позволить использовать относительно эффективные структуры времени выполнения (хотя эти цели не так важны, как аппаратная независимость и возможность переносимости программ). Большинство программ читается легко, поскольку в этом языке используется синтаксис, подобный синтаксису английского языка. Для улучшения читаемости программы можно использовать многочисленные необязательные, так называемые шумовые, слова. Синтаксис языка СОВОЕ обеспечивает легкую читаемость программы, однако затрудняет написание, потому что даже самая простая программа получается довольно длинной.
В листинге 8. 1 представлен краткий обзор синтаксиса языка СОВО(.. Ссылка. ). Е. батте( "ТПе еаг(у Ейь1огу о! СОВОь", АСМ Н(ьгогу оГРгодгатт!пд Еапдиадеь Сопгеге псе ьоь А яде)еь, СА () ог|е 1978) [5[БР(А(у [чехоев[13)8 [аидиь! 1 978 Ц, 121-161. 356 Глава 8. Управление последовательностью действий Листинг 8.1. Пример на языке СОВОЕ 1 !ОЕИТ1Р!САТ10И О!Ч!510И. 2 РЙООЙАМ- 10. 50М-ОР-РЙ[СЕ5. 3 АОТНОй. Т-РЙАТТ. 4 ЕИЧ!ЙОИМЕИТ 01Ч[5!ОМ, 5 СОИЕ160йАТ!ОИ 5ЕСТ!ОИ. б 500ЙСЕ-СОМРОТЕй.
50И. 7 08,)ЕСТ-СОМРЛЕй. 50И. В [ИРОТ-СОТРЛ 5ЕСТ[ОИ. 9 Е1ЕЕ-СОМТЙОЛ 10 5ЕЕЕСТ !ИР-ОАТА А55!6И ТО !ИРНТ. П 5ЕЕЕСТ КЕ50ЕТ-Е!ЕЕ А55!6И ТО 00ТРОТ. 12 ОАТА 01Н1510И. 13 К[ЕЕ 5ЕСТ10И. 14 РО !ИР-ОАТА САВЕ[. ЙЕСОЙО 15 СМ1ТТЕО. 15 01 1ТЕМ- Рй1СЕ. 15 02 !ТЕМ Р!СТОйЕ Х[30) 17 02 Рй[СЕ Р[СТОйЕ 9999Ч99 18 ИОКИ[ИВ-5ТОКАОЕ 5ЕСТ10И. 19 77 ТОТ Р1СТОКЕ 9999Ч99. НА[ОЕ О. ОВЯВЕ !5 20 01 50М-ЛИЕ. 21 02 Р[ЕЕЕЙ НАЕОЕ ' 50М 'Р1СТОЙЕ ХО2). 22 02 50М-ООТ Р1СТОйЕ 11,111,159 99. 23 02 СООИТ-00Т Р1СТОйЕ 2229. 24 ,.
Другие данные. 25 РйОСЕООЙЕ О!Н!5!ОИ. 26 5ТАй[. 27 ОРЕМ 1ИРОТ !МР-ОАТА АИО ОЛРОТ ЙЕ50[Т- 28 ЙЕАО-ОАТА. 29 КЕАО [ИР-ОАТА АТ ЕИО 60 ТО Рй[ИТ-ЛИЕ. 30 АОО Рй[СЕ ТО ТОТ. 31 АОО 1 ТО СООИТ. 32 МОЧЕ Рй!СЕ ТО Рй!СЕ-00Т 33 МОЧЕ [ТЕМ ТО НЕМ-ООТ 34 ИЙ1ТЕ ЙЕ50ЕТ-Е!ИЕ РВОМ !ТЕМ-Е!ИЕ. 35 60 ТО йЕАО-ОАТА.
Вб Рй[ИТ-Е[ИЕ. 37 МОЧЕ ТОТ ТО 50М-ОЛ. 38 „ Другие операторы. 39 СЕ05Е !ИР-ОАТА АИО йЕ50Л-РП Е. 40 5ТОР ЙОИ. С)МРОТАТ[ОМАЕ. РГ.Е. — последовательность операторов [один ипи более) ел[ В языках С, С++, Рег) избача составные операторы просто заключаются в фигурные скобки: [...). Операторы, входящие в составной оператор, записываются в той последовательности, в которой они должны выполняться. Таким образом, составной оператор является основной структурой для представления хомлозит[ии операторов. Составные операторы Сослгавной оператор гтредставляет собой последовательность операторов, которую при конструировании более сложных операат)ров можно рассматривать как единый оператор. Обычно составные операторы записывают в виде бе9пп 8.3.