Cтраница 2
Дейкстра указал, что между текстом программы и порядком выполнения ее элементов ( потоком управления) должно быть простое соответствие ( программа должна быть такой, чтобы ее можно было читать сверху вниз) и что неограниченное использование операторов перехода ( GO TO) нарушает такое соответствие. Вследствие этого структурное программирование часто называют программированием без GO TO. Однако всегда были примеры программ, которые не содержат GO TO и аккуратно расположены лесенкой в соответствии с уровнем вложенности операторов, но совершенно непонятны, и были другие программы, содержащие GO ТО и все же совершенно понятные. [16]
Вопрос об использовании ( точнее говоря, неиспользовании) оператора перехода уже многократно обсуждался. Ясно, что бессистемное использование оператора перехода вредно, поскольку программа становится малопонятной и, что еще важнее, статический текст программы не отражает динамики ее выполнения. [17]
Опираясь на идеи структурного программирования, из набора элементарных операций исключается команда перехода, поскольку ее можно считать связанной с операцией сравнения в конструкции ветвления или цикла по условию. Такое исключение оправдано запретом использования оператора перехода на метку в идеологии структурного программирования. [18]
То есть предполагается, что оператор перехода не должен применяться при структурированном программировании. Такое запрещение исходит из того, что использование оператора перехода может в ряде случаев сильно усложнять программу, запутывать ее логику. Здесь необходимо поподробнее разобраться в том, что же следует понимать под простотой программы. [19]
Язык Си содержит достаточно малый, но тем не менее вполне достаточный для соответствия философии структурного программирования набор средств. Хотя при использовании языка Си необходимость в использовании оператора перехода goto возникает чрезвычайно редко, но есть небольшое число ситуаций, когда без оператора перехода goto обойтись просто невозможно. Одной из таких ситуаций является необходимость преждевременного выхода из оператора цикла в том случае, когда имеется вложенный цикл произвольной глубины, а выход необходим на охватывающий этот вложенный цикл оператор из произвольного по глубине вложенности уровня этого вложенного цикла. Использование оператора завершения break в этой ситуации не помогает, поскольку оператор завершения break позволяет выйти лишь на предыдущий по глубине вложенности уровень этого вложенного цикла. В языке Ада первая проблема решается за счет использования меток блоков, а вторая - за счет возможности обработки исключительных ситуаций. [20]
Из этого замечания автора ( и из других, более общих соображений) следует, что рассматриваемые операции являются конструкциями слишком низкого уровня, недостаточно отражающими семантику данных. Их неосторожное применение может привести к труднонаходимым ошибкам точно так же, как использование операторов перехода и указателей в языках программирования. [21]
Часть I) изложены элементарные основы алгебры логики и теории переключательных функций и цифровых автоматов, позволяющие простейшими формальными методами решать разнообразные задачи проектирования цифровых устройств на ИС. Для описания законов функционирования, анализа и синтеза цифровых устройств широко применяется оригинальный математический аппарат, основанный на использовании операторов переходов и решении систем логических уравнений. [22]
Теперь мы знаем структуры условного оператора, оператора цикла и оператора процедуры, которые позволяют организовать алгольными средствами без использования операторов перехода выбор, повторение и обращение к функции. Однако такая стандартизация структур управления последовательностью счета служит в структурном программировании и средством для достижения гораздо более важной цели: писать удобочитаемые программы. [23]
Язык фортран не содержит структурных операторов, и поэтому в фортран-программах часты ошибки в организации логической структуры программы с использованием операторов перехода. [24]
Если по смыслу решаемой задачи необходимо закончить вычисления в цикле оператором перехода, то можно воспользоваться оператором CONTINUE. Этот оператор, кроме функций последнего в цикле, не порождает никаких действий и используется только с целью снять ограничение на использование операторов перехода в качестве последних в цикле. Он может ставиться среди любых исполнимых операторов Фортрана и чаще всего, помимо указанной выше ситуации, используется как способ выделения областей действия операторов цикла. [25]
За последние десять лет появилось большое число публикаций, затрагивающих вопросы, связанные с управляющими структурами, что позволило покончить с неопределенностью в этой области. В частности, был выработан ряд практических методов, таких, например, как обильное использование подпрограмм, использование коротких подпрограмм, ограничение использования оператора перехода goto, запрет нескольких выходов из подпрограммы. [26]
То, что мощность и гибкость тесно связаны с опасностью злоупотребления - факт в программировании хорошо известный. Действительно, если продолжать аналогию между структурой программ и структурой данных, то данные с чисто рекурсивной структурой можно поставить на уровень процедур, а введение ссылок сопоставимо с использованием оператора перехода. В табл. 4.1 мы приводим некоторые параллели конструкций, относящихся к структуре программы и структуре данных. [27]
Выше мы говорили о случаях, в которых применение оператора перехода для реализации разветвлений оправдано. Приведенные ниже примеры не вполне удовлетворяют этим условиям: они слишком элементарны. Однако именно их простота позволяет наглядно проиллюстрировать сам принцип использования оператора перехода. [28]
Вряд ли может вызвать какие-либо сомнения утверждение, что использование оператора перехода goto, разрывающего связь между последовательностью действий и текстуальной структурой программы, часто является источником ошибок и затрудняет отладку программ. Возможно, что одним из решений этой проблемы может быть введение ограничений на использование оператора перехода goto, например, только переходами вперед. [29]
Часть I) изложены элементарные основы алгебры логики и теории переключательных функций и цифровых автоматов, позволяющие простейшими формальными методами решать разнообразные задачи проектирования цифровых устройств на ИС. Для описания законов функционирования, анализа и синтеза цифровых устройств широко применяется оригинальный математический аппарат, основанный на использовании операторов переходов и решении систем логических уравнений. Например, даже функции переходов синхронных триггеров с дополнительными асинхронными потенциальными входами невозможно записать без использования операторов переходов. [30]