Методологии программирования.
Методологии программирования- совокупность методов, применяемых при разработке программ и объединенным единым философским подходом.
Основные ядра методологий:
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 Метод структурного кодирования – заключается в использовании при кодировании трех основных управляющих конструкций
Основное отличие от классической методологии императивного программирования заключается в отказе от оператора безусловного перехода и глобальных переменных
В теории программирования доказано, что программу для решения задачи любой сложности можно составить только из управляющих структур следование, ветвление и повторение