Императивные языки программирования



Императивные языки программирования манипулируют данными в пошаго­вом режиме, используя последовательные инструкции и применяя их к раз­нообразным данным. Считается, что первым алгоритмическим языком программирования был язык Plankalkuel (от plan calculus), разработанный в 1945-1946 годах Конрадом Цузе (Konrad Zuse).

Класс задач

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

 

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

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

· последовательная декомпозиция алгоритма решения задачи сверху вниз;

· использование структурного кодирования.

Данная методология является важнейшим развитием импе­ративной методологии.

Происхождение

Создателем структурного подхода считается Эдсгер Дейкстра. Ему также принадлежит попытка (к сожалению, совершенно неприменимая для массо­вого программирования) соединить структурное программирование с мето­дами доказательства программ.

Методы

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

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

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

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

Основное отличие от классической методологии императивного программи­рования заключается в отказе (точнее, той или иной степени отказа) от опе­ратора безусловного перехода.

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

Класс задач

Класс задач для данной методологии соответствует классу задач для импера­тивной методологии. Заметим, что при этом удается разрабатывать более сложные программы, поскольку их легко воспринимать и анализировать.

 

2.1.3. Методология императивного параллельного программирования

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

Происхождение  

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

Методы и концепции

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

Вычислительная модель

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

Синтаксис и семантика

Прямым аналогом оператора в данной методологии является процесс. Основ­ное отличие этой методологии от императивной в том, что процессы могут исполняться параллельно.

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

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

· параллелизм на уровне микрокоманд;

· параллелизм на уровне операторов (кроме циклов);

· параллелизм на уровне циклов и итераций;

· параллелизм на уровне подпрограмм (процедур и функций);

· параллелизм на уровне потоков управления;

· параллелизм на уровне процессов;

· параллелизм на уровне приложений.

Традиционное средство структурирования высокого уровня в данной мето­дологии - процесс. Процессы могут работать параллельно. Они осуществ­ляют синхронизацию между собой с помощью примитивов синхронизации

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

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


Дата добавления: 2018-05-12; просмотров: 830; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!