задачу структурного кодирования входит получение корректной программы (модуля) на основе простых управляющих структур. В качестве таких базовых выбираются управляющие структуры: следования, ветвления, организации циклов и вызова подпрограмм; при этом, все перечисленные структуры допускают только один вход и один выход. Более того, первые из трех указанных управляющих структур (следования, ветвления и организации циклов) составляют тот минимальный базис, на основе которого можно создавать любую корректную программу с одним входом, одним выходом, без зацикливаний и недостижимых команд. Следование отражает сам принцип последовательного выполнения операторов программы (команд ЭВМ) пока не встретится изменяющий эту последовательность оператор. Например: A:=55; G:=50; S:=30; Art:=8; Kr:=0.5 - типичная управляющая структура следования. Ветвление определяет выбор одного из возможных путей дальнейших вычислений; типичными операторами, обеспечивающими данную управляющую структуру, являются: IF A THEN B ELSE C и CASE. Структура цикл реализует повторное выполнение группы операторов пока выполняется некоторое логическое условие; типичными операторами, обеспечивающими данную управляющую структуру, являются: DO, DO_ WHILE и DO_UNTIL. Таким образом, базисные структуры определяют соответственно последовательную (следование), условную (ветвление) и итеративную (цикл) передачи управления в программах. При этом теоретически любая корректная структурированная программа может быть написана с использованием только структур следования, операторов ветвления IF_THEN_ELSE и цикла DO_WHILE. Однако расширение набора операторов указанных типов, включая CALL-оператор вызова подпрограмм, существенно облегчает программирование, не нарушая при этом структурированности программ. При этом, сочетания (итерации, вложения) корректных структурированных программ, полученные на основе указанных управляющих структур, не нарушает их корректности и структурированности.
Любой сложности и размера программы можно получать на основе соответствующего сочетания расширенного базиса управляющих структур. Такой подход позволяет отказаться в программах от использования меток и безусловных переходов. Структура таких программ четко прослеживается от начала (сверху) до конца (вниз) при отсутствии передач управления на верхние уровни. Если в неструктурированной программе допустима передача управления из любой точки программы в любую (реализуя число передач управления до n2, где n - число операторов в программе), то в структурированной количество таких передач строго ограничено и не превышает числа (n) операторов, ибо ее структура является древовидной. Все это делает программы логически менее сложными, более обозримыми (передачи управления в значительной мере текстуально локализованы) и накладывает серьезные ограничения на допустимые структуры управления. Последнее, в свою очередь, требует значительно более осмысленного подхода к проектированию программ, уже этим способствуя повышению качества их разработки.
Вместе с тем, при использовании структурных ЯВУ (Pascal, C, ADA и др.), средства которых ориентированы на структурное программирование, невозможно полностью отказаться от меток и GOTO-операторов безусловного перехода при создании сложных ПС. Поэтому при разработке программ их количество следует, по возможности, ограничивать (чему в значительной мере способствуют и сами структурные языки, ограничивая области действия таких средств). Более того, в целом ряде случаев использование данных управляющих конструкций даже повышает прозрачность программ. Интересный обзор дискуссий по использованию G0T0-конструкций можно найти в [363] и целом ряде других работ. Следует иметь в виду - хорошо спроектированная структурированная программа сама способствует минимизации использования GOTO-конструкций. При этом, следует помнить, что использование целого ряда языков весьма затруднительно без таких управляющих конструкций (Fortran,Basic,Cobol и др.). Поэтому при следовании структурной идеологии нельзя недооценивать влияния на качество конечного программного продукта такой важной компоненты, как творчество самого программиста.
Одно из преимуществ структурного программирования состоит в том, что программа может быть проанализирована проверкой ее структуры, позволяя обнаруживать в ней ошибки уже на стадии проектирования. Следовательно, структурная технология программирования предполагает достаточно высокий уровень абстрагирования с целью выделения составных частей проблемы (модулей) и повышении уверенности в корректности конечного результата. Однако процесс структурного программирования не является просто разбиением ПС на модули и их структурном кодировании. Основным назначением общего метода структурного программирования является обеспечение возможности доказательств корректности программ формальными методами.
Вместе с тем, эффективность структурного кодирования ограничивается только сферой управляющих структур программ, не затрагивая связей по данным и их структурам. Тогда как существенная часть общей сложности современного
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.