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

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

Основные ядра методологий:

n Методология императивного программирования

n Методология объектно-ориентированного программирования

n Методология логического программирования

n Методология функционального программирования

n Методология программирования в ограничениях

 

Методология императивного программирования:

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

n Управление изменениями полностью определено и полностью контролируемо

n Ориентирована на фон Неймановскую архитектуру

Методы:

n Метод изменения состояний
(поддерживается концепцией алгоритма)

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

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

Для ПК

Состояние – значение всех ячеек памяти, состояние процессора и всех сопряженных устройств

Единственная структура данных последовательность ячеек (пар «адрес-> значение») с линейно упорядоченными адресами

Математическая модель – машина Тьюринга-Поста (абстрактное вычислительное устройство для описания алгоритмов)

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

n Оператор- основное синтаксическое понятие

n Атомарный оператор – оператор, у которых никакая его часть не является самостоятельным оператором

n Структурные операторы – операторы, объединяющие другие операторы в новый, более крупный оператор

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

Языки программирования;

n Plankalkuel (Конрад Цузе, 1945-46)

n Fortran (1954)

n Algol (1960)

n Pascal (1970)

n C (1972)

n ICON (1974)

Класс задач:

n Императивное программирование наиболее пригодно для решения задач, в которых последовательное выполнение команд является естественным.
Например, управление современными аппаратными средствами

n Поскольку практически все современные компьютеры императивны, эта методология позволяет создавать достаточно эффективный порождаемый код

10. Модульное программирование: основные понятия.

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

Альтернатива модульности – монолитная программа

Основные концепции:

В основе модульного программирования лежат три основные концепции:

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

n Сборочное программирование Цейтина.
Модули – это программные «кирпичи», из которых строится программа.

n Аксиома модульности Коуэна
Модуль – независимая программная единица, служащая для выполнения некоторой определенной функции программы и для связи с остальной частью программы. Программная единица должна удовлетворять следующим условиям:

n Блочность организации

n Синтаксическая обособленность

n Семантическая независимость

n Общность данных

n Полнота определения

Характеристики модуля :

n Размер модуля

n Связность (прочность) модуля

n Сцепление модуля с другими модулями

n Рутинность (независимость от предыдущих обращений) модуля

Размер модуля Модуль не должен превышать 60 строк
В результате его можно поместить на одну страницу распечатки или легко просмотреть на экране монитора

 

Связность модуля:

n Связность модуля – мера независимости его частей.
Чем выше связность, тем больше связей он «упрятывает» в себе

n Типы связности:

n Функциональная
Модуль с функциональной связностью реализует одну какую-нибудь функцию и не может быть разбит на два модуля с теми же типами связности

n Последовательная

 

n Типы связности:

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

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

Связность модуля:
Следует избегать

n Временной связности
- когда объединяются действия, связанные со временем (например, действия, которые должны быть выполнены в один и тот же момент времени)

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

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

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

Сцепление модулей:

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

Типы сцепления:

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

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

n Разновидности этого сцепления:

n Сцепление по простым элементам данных

n Сцепление по структуре данных (оба модуля при этом должны знать о внутренней структуре данных)

Типы сцепления
Не рекомендуется использовать:

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

n Сцепление по внешним ссылкам – возникает, когда у одного модуля есть доступ к данным другого

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

Рутинность модуля:

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

 

Преимущества модульного программирования:

n Функциональные компоненты модульной программы могут быть написаны и отлажены порознь

n Модульную программу проще проектировать, легче сопровождать и модифицировать

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

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

n Может увеличиться время компиляции и загрузки.

n Может увеличиться время исполнения программы.

n Может возрасти объем требуемой памяти.

n Организация межмодульного взаимодействия может оказаться довольно сложной.

Для современных компьютеров первые три недостатка несущественны.

Стандартные модули:

n Разработка и использование стандартных библиотечных программ является одним из путей построения модульного программирования

n Преимущества стандартных модулей:
1) стандартные модули экономят время программирования;

n 2) они также могут экономить память компьютера и выполняться максимально быстро;

3) использование стандартных модулей защищает от ошибок программирования.

Стандартные модули:

n Недостатки:

n Нужный стандартный модуль иногда бывает трудно найти. Еще труднее – подробную документацию к нему

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

n Стандартный модуль может быть написан на другом языке

Каждый программист решает самостоятельно использовать ему стандартные модули или разрабатывать свой собственный.

 

Подпрограммы (функции):

n Подпрограммы также являются средством для построения модульных программ

n Не всякая подпрограмма является модулем. Модуль должен удовлетворять перечисленным выше характеристикам и свойствам.

11. Структурное программирование: основные понятия.

 

n Создателем структурного подхода считается Эдсгер Дейкстра (1975г.)

n Понятие структурного программирования представляет собой некоторые принципы написания программ в соответствии с набором жестких правил

n Структурный подход базируется на двух основных принципах построения:

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

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

 

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

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

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

n Метод структурного кодирования – заключается в использовании при кодировании трех основных управляющих конструкций

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

 

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