Способы программирования

Алгоритмическое программирование

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

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

базируется на подпрограммах [7]. Подпрограмма представляет собой часть программы в виде совокупности операторов, выполняющих нужное действие и не зависящих от других частей исходного кода. При этом структура программы отражает структуру решаемой задачи. Алгоритм ее решения виден из исходного текста, который состоит из последовательности законченных блоков кода, имеющих определенную смысловую нагрузку. Подпрограммы – это, по сути дела, новые операторы или операции языка, определяемые программистом. К ним можно обращаться по названиям и вызывать их в любой последовательности. Язык программирования с использованием подпрограмм относят к классу процедурных языков.

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

Событийно-ориентированное программирование основано на использовании:

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

С помощью событийного программирования создается программа со следующей структурой:

  • • главная часть программы, которая представляет собой один бесконечный цикл, следящий за появлением нового сообщения из заданного списка путем опроса (например, операционной системой Windows);
  • • при обнаружении сообщения вызывается подпрограмма, сообщение обрабатывается и цикл опроса продолжается до получения сообщения "Завершить работу".

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

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

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

Один из способов формирования независимых частей программы состоит в создании библиотек объектных модулей с помощью программы LIB. Эта программа позволяет также пополнить старую библиотеку процедурами, которые извлекаются из оттранслированных заранее объектных модулей или из другой библиотеки. Каждая система программирования обычно имеет собственную библиотеку стандартных процедур/функций. На стадии сборки объектные модули включают в формируемую задачу (программу). Файлы с библиотеками указываются при обращении к компоновщику программ LINK.

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

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

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

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

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

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

 
< Пред   СОДЕРЖАНИЕ     След >