Структурный метод программирования - Как обезопасить себя в кризис?
Invest-currency.ru

Как обезопасить себя в кризис?
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Структурный метод программирования

Методы структурного программирования

1. Проектирование и кодирование сверху вниз. Если проект боль­шой, то он разби­вается на части, которые представляют собой древовид­ную структуру. Сначала задача описывается на естественном языке, в даль­нейшем проект постепенно уточняется, и на каждом таком шаге выявляются детальные функции. Таким образом, задача разбивается на под­задачи до тех пор, пока они не станут настолько простыми, что каждой из них будет соответствовать один программный модуль.

Достоинства: хорошая комплексная отладка, заказчик участвует в проектировании, промежуточные результаты можно показать заказчику.

Недостатки: слабая автономная отладка модулей, наличие программ‑заглушек.

Обычно для простых проектов применяется метод «сэндвича». Для одних частей используется метод нисходящего, а для других — метод восходящего проектирования.

2. Модульное программирование ‑ процесс разбиения программы на отдельные модули. Модуль ‑ это последовательность логически связан­ных фрагментов, оформленных как отдельная часть программы.

Свойства модуля: возникает в результате отдельной компиляции; вызывается по его имени; возвращает управление тому, кто его вызывал; может обращаться к другим модулям, непосредственно нижестоящим в схеме иерархии; должен быть небольшого размера; должен иметь один вход и один выход; не должен сохранять историю своих вызовов для управ­ления своим функционированием; обладает единственной функцией; дол­жен быть независимым от других модулей; должен содержать тесно свя­зан­ные элементы; должен проверять аргументы; при возникновении в модуле ошибок управление должно возвращаться обратно; должен быть замкнутым.

3. Защитное программирование. Это такой стиль написания прог­рамм, при котором появляющиеся ошибки легко обнаруживаются и идентифицируются программистом. Средства защитного программиро­ва­ния: все входные данные или действия пользователя подлежат обяза­тель­ной проверке; принцип немедленного обнаружения ошибок; изолирование последствий ошибок. Для предотвращения ошибок в программе рекомен­ду­ется не применять непроверенные способы программирования. Не исполь­зуйте принцип умолчания (когда при отсутствии некоторого параметра программа принимает некоторое определенное значение этого параметра). Не допускайте зависимости программ от недостоверности данных. Стремитесь минимизировать число обращений к пользователю.

Тестирование ‑ процесс обнаружения ошибок программы. Тестовые при­меры разрабатываются постановщиком на этапе разработки алгоритма. Обычно вместо одного теста готовится целая серия тестов. С целью выяв­ле­ния ошибок организуется сквозной структурный контроль (прос­мотр). В этом случае собираются 4‑6 специалистов, которые получают не­об­хо­ди­мые материалы за 5-7 дней до начала совещания. Время совещания огра­ни­чи­вает­ся двумя часами. Ведущий совещание обеспечивает сос­тавление пол­ного списка обнаруженных ошибок. В начале совещания экс­пер­ты ха­рактеризуют степень завершенности и качества проекта. Разра­ботчик дела­ет обзор проделанной работы, результаты подвергаются груп­повому ана­ли­зу. По окончании совещания председатель вручает каждому члену совещания список ошибок и проблем, требующих решения. Раз­работчик обя­зан устранить ошибки, донести до сведения эксперта. Реко­мен­дуется тестирование сверху вниз. Первый тест должен быть простым, так как он должен показывать работу этой программы вообще. Следующие тесты, пред­назначенные для проверки общей организации программы, обес­печивают обнаружение грубых ошибок. Повторно тестируйте исправ­лен­ный код. Ведите журнал обнаруженных ошибок и изменений программы.

Этапы тестирования

· Проверка в нормальных условиях, т.е. программа выдает нор­­маль­­­­ные результаты для характерной совокупности данных.

· Проверка в экстремальных условиях, т.е. проверка в пригра­ничных областях допустимых изменений (минимальные, максимальные допус­тимые значения, нулевые данные, пустые циклы, массивы, файлы).

· Проверка в исключительных ситуациях.

4. Наглядность исходных текстов программ. Стиль программиро­ва­ния ‑ это набор приемов программирования, которые позволяют полу­чать правильные, эффективные, удобные для применения и легко чи­тае­мые программы. Стиль связан с удобочитаемостью программы.

Необходимо стандартизировать свой стиль программирования. Если существует более одного способа сделать что‑либо, то вы должны остано­ви­ться на одном из них и придерживаться его всегда.

Рекомендации. Вводный комментарий объясняет назна­чение и условие применения. Пояснительные комментарии сопровож­дают те части программы, которые трудно понять. Пробелы вставляют повсюду, где это приводит к улучшению читабельности прог­рам­мы. Имя переменной формируют на основе хранящейся информации. Пе­ре­менные следует явно объявлять. Имена должны отображать смысл со­дер­жания. Допускается пре­фик­сная или венгерская нотация (предложенная венгром Шарле Симони в начале 80­‑х годов), которая отражает тип пе­ре­мен­ной или объекта (п. 5.1). Составные имена следует писать через знак под­черкива­ния или на­чи­нать с прописных букв. Используйте общепри­ня­тые име­на (Get, Put, Calc и др.), которые описывают действия.

Правила сокращения имен: в сокращение всегда должны входить начальные буквы; согласные важнее гласных; начало слова важнее его кон­ца; длина сокращения ограничивается числом 15; списки имен в коман­дах объявления упорядочиваются по алфавиту. Используйте общеприня­тые сокращения.

Отступы от начала строки: при записи операторов и для указания связи между ними делаются одинаковые отступы от начала строки в размере трех позиций, т.е. отступами выделяются структуры вложенности отдельных фрагментов программы.

5. Гибкость и эффективность программ. Выносите часто изме­ня­емые константы, адреса и имена файлов, баз в отдельные файлы настрой­ки, ресурсов или регистрации. Оптимизируйте програм­му пос­ле ее отлад­ки. Используйте именованные константы вместо обыч­ных. Ми­ни­ми­зи­руй­те применение глобальных переменных, вложенных структур и команд перехода Goto. Ограничивайте дей­ствия над параметрами подпрограмм (ByVal, ByRef, Optional) (п. 2.10.2).

Общие рекомендации программисту. Помните: программы чи­тают­ся людьми! Не нужно делать комментариев больше, чем это не­обходимо. Используйте вводные комментарии. Располагайте ком­­мен­тарии в программе таким образом, чтобы это не делало ее менее наглядной. Одного оператора в строке достаточно. Для выделения струк­ту­ры используйте отступы. Фиксируйте соответствие букв кирил­лицы и букв ла­тин­ского алфавита. Стремитесь к простоте и к уни­вер­сальности. Исполь­зуй­те постоян­ные приемы программирования. Унифи­цируй­те форматы ввода и вывода информации. Обеспечивайте макси­маль­но удобный интер­фейс пользователю. Интересуйтесь, как эксплуатируется программа. Уста­нав­ливайте более скромные цели (рабо­тающие программы гораздо полез­нее и важнее незаконченных громадных проектов). Умень­шай­те сложность пу­тем разбиения программы на отдель­ные части (моду­ли, подпрограммы). Слож­ность возрастает квадратично размеру прог­рам­мы. Упрощение дос­ти­га­ется методом структурного прог­раммиро­ва­ния. За­ме­на циклов или вло­жен­ных конструкций на функции упрощает модуль. Общая схема упроще­ния — разбиение прог­рам­мы на модули и оформление каждого модуля в ви­де процедуры, функции, класса., компонента или ActiveX‑элемента.

Структурное программирование

Структурное программирование — это определенные общие принципы и правила проектирования, разработки и оформления программ с целью облегчения процессов их создания и тестирования, повышения производительности труда программистов и улучшения читабельности результирующей программы. Структура программы и алгоритм решения задачи должны быть легкими для понимания, простыми для доказательства правильности и удобными для модификации. По своей сути структурный подход есть отказ от беспорядочного стиля в алгоритмизации и программировании (в частности, отказ от оператора goto) и определение ограниченного числа стандартных приемов построения легко читаемых алгоритмов и программ с ясно выраженной структурой, что особенно важно при разработке больших программных систем.

Опыт применения методов структурного программирования при разработке, например, ряда сложных операционных систем показывает, что правильность логической структуры системы в этом случае легко поддается доказательству, а сама система допускает достаточно полное тестирование. Уменьшение трудностей отладки и тестирования программ приводит к увеличению производительности труда программистов, поскольку на тестирование программы тратится от трети до половины времени ее разработки. Производительность труда программиста обычно измеряется числом отлаженных операторов, которые он может написать за день. Приближенные оценки показывают, что применение методов структурного программирования позволяет увеличить это число в 5—6 раз. Также нужно сказать, что структурное программирование предполагает определенную организацию самого процесса программирования и определенную технологию проектирования программ, что также положительно влияет на производительность труда программистов.

Основы структурного программирования. Теоретическим фундаментом структурного программирования является теорема о структурировании, из которой следует, что алгоритм (программа) решения любой практически вычислимой задачи может быть представлен с использованием трех элементарных базисных управляющих структур: структуры следования (последовательности); структуры ветвления, структуры цикла, изображенных на рис. 6.5—6.7 соответственно, где Р — условие, S — оператор.

Структура следования представляет собой естественный ход выполнения алгоритма — любую последовательность операторов, выполняющихся друг за другом (см. рис. 6.5). В языке программирования это соответствует последовательности операторов ввода, вывода и операторов присваивания.

Структура ветвления представляет фактор принятия решения, включает проверку некоторого логического условия Р и, в зависимости от результатов этой проверки, выполнение оператора S1 либо оператора S2. В языках программирования (например, Pascal) реализуется оператором if Р then SI else S2 (см. рис. 6.6).

Структура цикла (цикла с предусловием) представляет фактор повторяемости вычислений, обеспечивает многократное повторение выполнения оператора S, пока выполняется (истинно) логическое

Рис. 6.5. Структура следования

Читать еще:  Crt паскаль что это

Рис. 6.6. Структура ветвления

условие Р. В языках программирования (например, Pascal) реализуется оператором while Р do S (см. рис. 6.7).

Базисный набор управляющих структур является функционально полным, т.е. с его помощью можно создать любой сколь угодно сложный алгоритм, однако с целью создания более компактных и наглядных алгоритмов и программ используются дополнительные управляющие структуры: структура сокращенного ветвления; структура варианта или многоальтернативного выбора; структура цикла с параметром; структура цикла с постусловием. В разных языках программирования реализация базовых управляющих структур может быть различной, например в языке Pascal реализованы все предлагаемые структуры.

Любая программа может быть построена посредством композиции базисных структур: либо путем их последовательного соединения — образования последовательных конструкций, либо путем их вложения друг в друга — образования вложенных конструкций.

Каждая из структур может рассматриваться как один функциональный блок с одним входом и одним выходом. Блоки S, SI, S2, входящие в состав базисных управляющих структур, сами могут быть одной из них, поэтому возможны вложенные конструкции. Однако, какова бы ни была степень и глубина «вложенности», важно, что любая конструкция в конечном итоге имеет один вход и один выход. Следовательно, любую сложную структуру можно рассматривать как «черный ящик» с одним входом и одним выходом. Таким образом, можно ввести преобразование любой структуры в функциональный блок. Тогда всякий алгоритм, составленный из стандартных структур, поддается последовательному преобразованию к единственному функциональному блоку, и эта последовательность преобразований может быть использована как средство понимания алгоритма и доказательства его правильности. Обратная последовательность преобразований может быть использована в процессе проектирования алгоритма с постепенным раскрытием единственного функционального блока в сложную структуру основных элементов.

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

Методика разработки программ. Распространены две методики (стратегии) разработки программ, относящиеся к структурному программированию: программирование «сверху вниз»; программирование «снизу вверх».

Программирование «сверху вниз», или нисходящее проектирование программ, — это методика разработки программ, при которой разработка начинается с определения целей решения проблемы, после чего идет последовательная детализация, заканчивающаяся детальной программой. Сначала выделяется несколько самых глобальных задач, решение которых может быть представлено в общей структуре функционально независимыми блоками. Разработку логической структуры каждого такого блока и ее модификацию можно осуществлять независимо от остальных блоков. На этом первом этапе проекта раскрываются наиболее важные и существенные связи, определяется функциональное назначение каждого блока, его входные и выходные данные. На последующих этапах проектирования уточняется (детализируется) логическая структура отдельных функциональных блоков общей схемы, что также может осуществляться в несколько этапов детализации вплоть до простейших инструкций. На каждом этапе проекта выполняются многократные проверки и исправления.

Подобный подход является достаточно рациональным, позволяет значительно ускорить процесс разработки сложных программных проектов и в значительной мере избежать ошибочных решений. Кроме того, появляется возможность некоторые подпрограммы (модули) не реализовывать сразу, а временно отложить их разработку, пока не будут закончены другие части. Например, если имеется необходимость вычисления сложной математической функции, то выделяется отдельная подпрограмма такого вычисления, реализуется временно одним оператором, который просто присваивает нужное значение. Когда все приложение будет написано и отлажено, можно приступить к реализации этой сложной функции.

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

Общие принципы разработки программных проектов. Использование технологии структурного программирования при разработке серьезных программных проектов основано на следующих принципах:

  • • программирование должно осуществляться «сверху вниз»;
  • • весь проект должен быть разбит на модули/подпрограммы с одним входом и одним выходом;
  • • любая подпрограмма должна допускать только три основные структуры: последовательное выполнение операторов, ветвление и цикл;
  • • недопустим оператор безусловной передачи управления goto;
  • • документация должна создаваться одновременно с программированием, частично в виде комментариев к программе. Применение принципов и методов структурного программирования позволяет повысить надежность программ (благодаря хорошему структурированию при проектировании программа легко поддается тестированию и отладке) и их эффективность (структурирование программы позволяет легко находить и корректировать ошибки, а отдельные подпрограммы можно переделывать/модифицировать независимо от других), уменьшить время и стоимость программной разработки, улучшить читабельность программ.

Структурное программирование

— Учитель,- проговорил Сунь У-кун.- Я человек простой и вашего городского языка не понимаю. Что значат подпорки к стене?

— Когда люди начинают строить дом и хотят сделать его прочным и крепким, то между стенами они ставят подпорки. Но проходит время, и здание рушится, а это значит, что подпорки сгнили.

У Чэн-энь. «Путешествие на Запад», глава 2

Общая характеристика структурного программирования

На самом деле изложение структурного стиля не может уместиться в рамки одной лекции. Но данный стиль программирования (вернее, его вариант, основанный на циклах и массивах, слегка пополненный рекурсивными процедурами) описывается и навязывается как единственно возможный во всех ныне предлагаемых учебных пособиях по программированию на традиционных языках. В связи с этим мы имеем право предположить, что обучающийся знаком с ним (более того, знаком только с ним, и мы надеемся, что он еще не потерял способность воспринимать другие стили). И хотя Вы считаете, что с этим вариантом структурного стиля уже освоились, особенности, опускаемые в традиционных изложениях, могут полностью изменить Ваш взгляд на данный стиль.

Мы рассматриваем структурное программирование как равноправный член сообщества альтернативных ему друзей-соперников 1 Если нечто в данный момент используется практически монопольно, то из этого не следует, что оно будет занимать столь же исключительное положение и в будущем и что оно окажется лучшим средством для решения Ваших конкретных задач. .

Начнем с того, что обратимся к истории.

В теории схем программ было замечено, что некоторые случаи блок-схем легче поддаются анализу [ 16 ] . Поэтому естественно было выделить такой класс блок-схем, что и сделали итальянские ученые С. Бем и К. Джакопини в 1966 г. Они доказали, что любую блок-схему можно привести к структурированному виду, использовав несколько дополнительных булевых переменных. Э. Дейкстра подчеркнул, что программы в таком виде, как правило, являются легче понимаемыми и модифицируемыми, так как каждый блок имеет один вход и один выход .

В качестве методики структурного программирования Э. Дейкстра предложил пользоваться лишь конструкциями цикла и условного оператора, изгоняя go to как концептуально противоречащее этому стилю

Пожалуй, это первое концептуальное противоречие , явно отмеченное и учтенное в теории и практике программирования (и даже во всей современной науке). Но, поскольку не было даже наметок теории неформализуемых понятий, и на работу с ними переносили опыт работы с малыми формализациями, структурное противоречие было воспринято следующим образом.

К несчастью, оператор go to формально совместим с другими конструкциями традиционных (тогда говорили — универсальных) алгоритмических языков. Но реально он плохо взаимодействует с ними. Значит, он плох сам по себе.

Структурное программирование основано главным образом на теоретическом аппарате теории рекурсивных функций. Программа рассматривается как частично-рекурсивный оператор [ 21 ] над библиотечными подпрограммами и исходными операциями. Структурное программирование базируется также на теории доказательств, прежде всего на естественном выводе. Структура программы соответствует структуре простейшего математического рассуждения, не использующего сложных лемм и абстрактных понятий 2 На самом деле традиционным вычислительным программам соответствует не классическая, а интуиционистская логика, но структура доказательств и большинство правил вывода в них совпадают. .

Средства структурного программирования в первую очередь включаются во все языки программирования традиционного типа и во многие нетрадиционные языки. Они занимают основное место в учебных курсах программирования и в теоретических работах (например, [ 1 ] , [ 4 ] , [ 9 ] ).

Читать еще:  Как запрограммировать кнопки на клавиатуре

При структурном программировании присваивания и локальные действия становятся органичной частью программы. Достаточно лишь внимательно следить, чтобы каждая переменная в модуле использовалась для одной конкретной цели, и не допускать «экономии», при которой ненужная в данном месте переменная временно используется под совсем другое значение . Такая «экономия» запутывает структуру информационных зависимостей, которая при данном стиле должна быть хорошо согласована со структурой программы.

Структурное программирование естественно возникает во многих классах задач, прежде всего в таких, где задача естественно расщепляется на подзадачи, а информация — на достаточно независимые структуры данных. Основной его инвариант :

действия и условия локальны.

Необходимой чертой хорошей реализации структурного стиля программирования является соблюдение согласованности, а в идеале и единства, следующих компонентов программы:

Структура информационного пространства. Содержательно любую задачу можно описать как переработку объектов, полный набор которых называется информационным пространством задачи.

Для структурного стиля программирования требуется следующее. Задача разбивается на подзадачи, и таким образом выстраивается дерево вложенности подзадач. Информационное пространство структурируется в точном соответствии с деревом вложенности: для каждой подзадачи оно состоит из ее локальных объектов, определяемых вместе с подзадачей и для нее, и так называемых глобальных объектов, определяемых как информационное пространство непосредственно объемлющей подзадачи. Таким образом, информационное пространство всей задачи (подзадачи самого верхнего уровня) расширяется по мере перехода к подзадачам за счет их локальных объектов. Для различных дочерних подзадач одной подзадачи оно имеет общую часть — информационное пространство родительской подзадачи 3 В этой системе требований без труда распознается так называемая блочная структура языков программирования, появившаяся еще в Algol 60 и ставшая в настоящее время фактическим стандартом. .

К структурным операторам добавляются либо циклы , либо рекурсии .

Этой альтернативы Вы не встретите в традиционных изложениях структурного программирования. Концептуальное противоречие между циклами и рекурсиями намного мягче, чем между операторами структурного программирования и структурными переходами , и оно отмечается лишь в виде изредка встречающихся прагматических указаний (благих пожеланий) не смешивать их произвольно.

Призраки. Часто даже сама программа не может быть объяснена через понятия, которые используются внутри нее. Еще чаще это происходит для ее связей с внешним миром. Понимание программы возможно лишь после сопоставления реальных внутрипрограммных объектов с идеальными внепрограммными. Эти идеальные внепрограммные объекты ( призраки ) часто не просто не нужны, но даже вредны для исполнения программы 4 Кстати, программистам стоит почаще вспоминать, что, с точки зрения пользователя или заказчика, их внутрипрограммные объекты как раз являются такими же призраками , которые не имеют никакого отношения к реальной действительности. Так что при переходе от уровня рассмотрения программы самой по себе к уровню программы как части архитектуры реальной человеко-машинной системы идеальные и реальные объекты порою меняются местами. .

Первым обратил внимание на необходимость введения призраков для логического и концептуального анализа программ Г. С. Цейтин в 1971 г. В Америке это «независимо» открыли заново в 1979 г., хотя упомянутая статья Цейтина была опубликована на английском языке в общедоступном издании. Даже название сущностям было дано то же самое. Этому важнейшему и традиционно игнорируемому понятию посвящена отдельная лекция в курсе «Основания программирования» [ 21 ] .

Подпорки противоположны призракам . На самом деле они являются той формой, в которой материя проникает в программу, и в этом качестве противостоят всей совокупности идеальных сущностей, порождающих структуру программы: как реальных, так и призрачных, — и порою грубо ее искажают. Но без подпорок программа просто не будет работать или будет работать неэффективно.

Для структурного программирования весьма важно требование:

Все структуры подчиняются структуре информационного пространства.

Это общее требование конкретизируется в следующие.

  1. Необходимо, чтобы структура управления программы была согласована со структурой ее информационного пространства. Каждой структуре управления соответствуют согласующиеся с ней структуры данных и часть информационного пространства. Это условие позволяет человеку легко отслеживать порядок выполнения конструкций в программе.
  2. Подзадачи могут обмениваться данными только посредством обращения к объектам из общей части их информационных пространств (в современных языках чаще всего к глобальным).
  3. Информационные потоки должны протекать согласно иерархии структур управления; мы должны четко видеть для каждого блока программы, что он имеет на входе и что дает на выходе. Таким образом, свойства каждого логически завершенного фрагмента программы должны ясно осознаваться и в идеале четко описываться в самом тексте программы и в сопровождающей ее документации 5 Как видим, программа должна составляться после того, как программист хорошенько подумал, а не до того. .
  4. Описание переменных, представляющих перерабатываемые объекты, а также других, вспомогательных переменных при структурном программировании строго подчиняется разбиению задачи на подзадачи.
  5. Все призраки действуют на своем структурном месте и соответствуют идеальным сущностям, которые, согласно парадоксу изобретателя, должны вводиться для эффективного решения задачи.
  6. Все подпорки строго локализованы в том месте, где их вынуждены ввести. Желательно даже обозначать их по-другому, чем идеальные сущности, например, оставляя мнемонические имена лишь для идеальных сущностей, а подпорки именовать джокерами типа x или i . Необходимо строго следить за тем, чтобы подпорки не искажали идеальную структуру программы.

Структурное программирование лучше всего описано теоретически, но частные описания не сведены в единую систему. Одни книги трактуют его с точки зрения программиста, другие — с точки зрения теоретика. Так что даже здесь единой системы взглядов еще нет, хотя, видимо, все основания для ее формирования уже имеются.

Структурный метод программирования

«ГЛАВА I. СУТЬ ДЕДУКТИВНОГО МЕТОДА ХОЛМСА.

Шерлок Холмс взял с камина пузырек и вынул

из аккуратного сафьянового несессера…».

От общего к частному

· формулировка целей (результатов) работы программы;

· образное представление процессы ее работы (образная модель);

· выделение из образной модели фрагментов: определение переменных и их смыслового наполнения, стандартных программных контекстов.

Попробуем теперь встроить в общую схему процесса проектирования самое трудное направление «движения» при построении программы – от общего к частному. И тогда получим примерно такую картину.

1. Исходным состоянием процесса проектирования является более или менее точная формулировка цели алгоритма, или результата, который должен быть получен при его выполнении. Формулировка, само собой, производится на естественном языке.

2. Создается образная модель происходящего процесса, используются графические и какие угодно способы представления, образные «картинки», позволяющие лучше понять выполнение алгоритма в динамике;

3. Выполняется сбор фактов, касающихся любых характеристик алгоритма, и попытка их представления средствами языка. Такими фактами является наличие определенных переменных и их «смысл», а также соответствующих им программных контекстов. Понятно, что не все факты удастся сразу выразить в виде фрагментов программы, но они должны быть сформулированы хотя бы на естественном языке;

4. В образной модели выделяется наиболее существенная часть – «главное звено», для которой подбирается наиболее точная словесная формулировка;

5. Производится определение переменных, необходимых для формального представления данного шага алгоритма и формулируется их «смысл»;

6. Выбирается одна из конструкций — простая последовательность действий, условная конструкция или цикл. Составные части выбранной формальной конструкции (например, условие, заголовок цикла) должны быть переписаны в словесной формулировке в виде цели или результата, которые должны давать эти части алгоритма.

7. Для оставшихся неформализованных частей алгоритма (в словесной формулировке) — перечисленная последовательность действий повторяется. Обычно разработка образного представления программы опережает ее «выстраивание», поэтому следующим этапом для неформализованной части алгоритма может быть п.4 (в лучшем случае, при его проработке в образной модели) или п.1-3. В любом случае для вложенных конструкций мы возвращаемся на предыдущие этапы проектирования.

Здесь мы видим много непривычного:

· на любом промежуточном шаге программа состоит из смеси конструкций языка, соответствующих пройденным шагам проектирования, и словесных формулировок, соответствующих еще не раскрытым вложенным конструкциям нижнего уровня;

· процесс заключается в последовательной замене словесных формулировок конструкциями языка. На каждом шаге в программу добавляется всего одна конструкция, а содержимое ее составных частей снова формулируется в терминах «цель» или «результат»;

· «свобода выбора» ограничена тремя управляющими конструкциями языка: последовательностью действий, ветвление или цикл. При этом даже не принципиален конкретный синтаксис оператора, важен лишь вид конструкции, например, что это цикл, а не последовательность действий.

Читать еще:  Онлайн программирование на паскале

Как и любая технология, структурное проектирование задает лишь «правила игры», но не гарантирует получение результата. Основная проблема – выбор синтаксической конструкции и замена формулировок — все равно технологией формально не решается. И здесь находится камень преткновения начинающих программистов. «Главное звено» — это не столько особенности реализации алгоритма, которые всегда на виду и составляют его специфику, а действие, которое включает в себя все остальные. То есть все равно программист должен «видеть» в образной модели все элементы, отвечающие за поведение программы, и выделять из них главный, в смысле – самый внешний или объемлющий. Единственный совет: постараться извлечь из образной модели как можно больше фактического материала.

И, наконец, на практике

Заповеди структурного программирования

Обычно технология структурного программирования формулируется в виде «заповедей», о содержательной интерпретации которых мы уже догадываемся.

1. нисходящее проектирование ;

2. пошаговое проектирование ;

3. структурное проектирование (программирование без goto );

4. одновременное проектирование алгоритма и данных;

5. модульное проектирование ;

6. модульное, нисходящее, пошаговое тестирование.

Одним словом, структурное программирование — модульное нисходящее пошаговое проектирование и отладка алгоритма и структур данных .

· нисходящее проектирование программы состоит в процессе формализации от самой внешней синтаксической конструкции алгоритма к самой внутренней, в движении от общей формулировки алгоритма к частной формулировке составляющего его действия ;

· структурное проектирование заключается в замене словесной формулировки алгоритма на одну из синтаксических конструкций — последовательность, условие или цикл. При этом синтаксическая вложенность конструкций соответствует последовательности их проектирования и выполнения. Использование оператора перехода goto запрещается из принципиальных соображений ;

· пошаговое проектирование состоит в том, что на каждом этапе проектирования в текст программы вносится только одна конструкция языка, а составляющие ее компоненты остаются в неформальном, словесном описании, что предполагает аналогичные шаги в их проектировании.

Нисходящее пошаговое структурное проектирование алгоритма состоит в движении «от общего к частному» в процессе формулировки действий, выполняемых программой. В записи алгоритма это соответствует движению от внешней (объемлющей) конструкции к внутренней (вложенной). Конкретно в структурном программировании это выражается в том, что любая словесная формулировка действий (алгоритма) может быть заменена на одну из трех формальных конструкций языка программирования:

· простая последовательности действий (блок);

· конструкция выбора (выбора) (условный оператор);

· конструкция повторения (оператор цикла).

Выбранная формальная конструкция представляет собой часть процесса перевода словесного описания алгоритма на формальный язык. Естественно, что эта конструкция не определяет полностью всего содержания алгоритма. Поэтому составными ее частями остаются словесные формулировки более конкретных (вложенных) действий. В результате проектирования получается программа, в которой принципиально отсутствует оператор перехода goto, поэтому структурное программирование иначе называется как программирование без goto .

Другое достоинство нисходящего проектирования: при обнаружении «тупика», то есть ошибки в логических рассуждениях можно вернуться на несколько уровней вверх и продолжить процесс проектирования в другом направлении.

Одно из трех

Обратим внимание на некоторые особенности процесса, которые остались за пределами «заповедей» и которые касаются содержательной стороны проектирования.

Последовательность действий, связанных результатом является предпочтительной конструкцией еще и потому, что она обеспечивает синтаксическую независимость (отсутствие вложенности) выполняемых действий. Если в алгоритме выполняется проверка условий (в виде нетривиального действия), а также действия, являющиеся следствием этой проверки, то лучше использовать связующую переменную (например, признак). Например, при проверке и сохранении простого числа лучше использовать признак, а сохранение вынести за пределы цикла проверки.

// Запоминание простого числа в виде

// последовательности действий, связанных признаком

if ( pr ==0) A [ i ++]= v ; // Признак не установлен — запоминание

// Неструктурированный вариант – запись внутри цикла

О том, какая конструкция должна быть выбрана на следующем шаге детализации, можно судить и по внешнему виду формулировки. Другое дело, что эта формулировка должна как можно точнее отражать сущность алгоритма и, что самое главное, «покрывать» его целиком, не оставляя не оговоренных действий:

· когда в формулировке присутствует слово ЕСЛИ, речь идет о условной конструкции (конструкции выбора);

· если в формулировке присутствуют обороты типа «для каждого… выполнить» или «повторять…пока», речь идет о циклической конструкции.

И последнее достоинство: шаги последовательности действий, после того как они определены, могут конкретизироваться в любом порядке, например «по линии наименьшего сопротивления» от простых к более сложным.

Программирование без goto .

if () goto retry;. // Попытаться сделать все сначала

if () goto fatal; > // Выйти сразу же к концу

Все равно при использовании оператора перехода нужно изменить условия текущего выполнения программы применительно к точке перехода, например, переоткрыть файлы, установить начальное (заключительное) значение переменных.

if (A[i]==0) continue; //goto m1;

if (A[i]==-1) return; //goto m2;

m 2: . продолжение тела функции

Хотя такие конструкции нарушают чистоту подхода, все они имеют простые структурированные эквиваленты c с использованием дополнительных переменных – признаков.

int found; // Эквивалент с признаком обнаружения элемента

for (found=0, i=0; i

if (!found) A else B

При отсутствии в массиве элемента с заданным свойством выполняется A, в противном случае — B. Во втором фрагменте используется специальный признак для имитации оператора break.

лабы по информатике, егэ

лабораторные работы и задачи по программированию и информатике, егэ по информатике

Python Урок 9. Работа с файлами

Python Урок 8. Матрицы (двумерный массив)

Python Урок 7. Массивы в Питоне: продолжение (алгоритмы)

Python Урок 3. Функции и процедуры

Занятие №15. Часть 2: Динамические структуры данных: стеки и очереди

Занятие №15. Часть 1: Динамические структуры данных: указатели и списки

Pascal: Занятие № 4 часть II. Графика в Паскале

Урок 4. Язык Си матрицы

Pascal: Занятие №1. Часть 1: Структура программы на языке Паскаль, компиляторы

Pascal: Занятие №1. Часть 2: Операторы WriteLn и Readln в Pascal

Уроки и лабы

группа вк

Что такое структурное программирование, и какие основные принципы присущи технологии структурного программирования? На эти вопросы ответит небольшая лекция, предвосхищающая практические уроки.

Принципы структурного программирования – это принципы системного подхода в процессе создания и эксплуатации программного обеспечения компьютера. В основе данной парадигмы лежат следующие достаточно простые положения:

  • Алгоритм и программа должны составляться пошагово.
  • Сложную задачу необходимо разбивать на простые блоки, каждый из которых имеет один вход и один выход.
  • Логика алгоритма и всей программы должна опираться на минимальное количество базовых простых управляющих структур.

Базовые элементы структурного программирования или элементарные структуры — это следование, ветвление и цикл; композиция этих трех базовых конструкций реализовывает любой алгоритм.

Структурное программирование по-другому называют программированием без GO TO, то есть считается, что лучше избегать данного оператора перехода.

Кроме того, в структурном программировании повторяющиеся фрагменты программы могут быть воплощены в так называемых подпрограммах – процедуры и функции.

Известны следующие методы структурного программирования (или методики, стратегии):

– программирование сверху вниз;

– программирование снизу вверх.

Структурное программирование сверху и вниз, или нисходящее программирование – это методика составления программ, при которой сначала определяются цели решения проблемы, после чего идет последовательная детализация, завершающаяся детальной программой (метод пошаговой детализации, примеры которого приведены в работах сайта).

Данный подход позволяет человеку постоянно мыслить на предметном уровне, не вникая в уровень конкретных операторов и переменных.

Структурное программирование снизу вверх, или восходящее программирование – это методика разработки программ, которая подразумевает сначала разработку подпрограмм (процедур, функций), в то время когда работа над общей схемой не закончилась.

Данная методика зачастую приводит к нежелательным результатам, необходимостью переписывать код и увеличению времени разработки; по этой причине она является менее предпочтительной.

Достоинства структурного программирования и его недостатки:

– хорошее структурирование при проектировании программы позволяет легко производить тестирование и избегать проблем при отладке; таким образом, повышая надежность программ;

– структурирование программы позволяет с легкостью находить ошибки в коде, и легко модифицировать отдельные подпрограммы независимо от других, таким образом, повышая эффективность программ;

снижается время и стоимость программной разработки;

– улучшается читабельность кода программ.

Недостатки структурного программирования проявляются при усложнении программ. Так, структурное программирование не позволяет в доста­точной степени упростить большие сложные программы. Это связано с неограниченностью доступа функций к глобальным данным и принципом разделения данных и функций.

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector