Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
102
Добавлен:
27.04.2015
Размер:
71.14 Кб
Скачать

3.2.2. Императивное программирование

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

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

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

Первыми императивными языками были машинные коды – «родной язык» программирования для компьютера. В этих языках инструкции были крайне просты, что снижало нагрузку на компьютеры, однако затрудняло написание крупных программ. В 1954появился первый язык программирования -FORTRAN, а затемALGOL,PascalиC.

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

3.2.3. Процедурное программирование

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

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

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

Процедурными языками программирования являются следующие: Basic(начиная с Quick Basic до появления Visual Basic), Си, КОБОЛ, Фортран, Pascal и т.д.

3.2.4. Структурное программирование Структурное программирование – методология разработки ПО, в основе которой лежит представление программы в виде иерархической структуры блоков. Она предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.

В соответствии с этой методологией

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

  • последовательность – однократное выполнение операций в том порядке, в котором они записаны в тексте программы;

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

  • цикл – многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла); в программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.

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

  2. Разработка программы ведётся пошагово, методом «сверху вниз».

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

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

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

Таким образом, пошаговая реализация это тактика разработки программы, а нисходящее проектирование это стратегия программирования.

Методология структурного программирования появилась как следствие возрастания сложности решаемых на компьютерах задач, и соответственного усложнения программного обеспечения. В 70-е годы XX века объёмы и сложность программ достигли такого уровня, что «интуитивная» (неструктурированная, или «рефлекторная») разработка программ, которая была нормой в более раннее время, перестала удовлетворять потребностям практики. Программы становились слишком сложными, чтобы их можно было нормально сопровождать, поэтому потребовалась какая-то систематизация процесса разработки и структуры программ.

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

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

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

Перечислим некоторые достоинства структурного программирования:

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

  2. В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные – дальше, что позволяет обходиться без схем-алгоритмов и других графических форм изображения.

  3. Сильно упрощается процесс тестирования и отладки структурированных программ.

Соседние файлы в папке 3 Разработка ПО