- •НИУ ВШЭ – Пермь
- •Принцип пошаговой детализации и нисходящее программирование
- •Понятие программного модуля и модульное программирование
- •Понятие программного модуля
- •Цели модульного программирования
- •Принципы выделения модулей
- •Модульное программирование и иерархическая структура программы
- •Пример распределения функций по уровням
- •Модульное программирование и процедуры
- •Параметры процедур
- •Процедуры и функции
- •Блочная структура программы и области видимости
- •Алгоритм идентификации
- •Определяющие
- •Точка входа в процедуру – первый оператор процедуры
- •Локальные определяющие вхождения идентификаторов
- •Изменение значения формального параметра C, передаваемого по ссылке, – изменение значения соответствующего фактического
- •Возврат значения функции в выражение, стоящее в правой части оператора присваивания, где был
- •Значение переменной A в процедуре P1 изменилось в результате присваивания значения – результата
- •Возврат из процедуры P1 в точку возврата – на следующий за вызовом P1
- •При выходе из процедуры – возврате в «объемлющий» блок, расположенный на предыдущем уровне,
- •При вызове процедуры P2 снова изменилась область действия определяющих вхождений имен – область
- •Возврат из процедуры в точку возврата – в основную программу
- •При возврате изменилась область действия имен – видимы только имена, определенные в основной
- •Реализация процедур и функций: использование стека
- •Реализация процедур и функций: использование стека
- •Пример использования стека
- •Вызов
- •Выполнен
- •Точка возврата из P1
- •Пример использования стека: состояние стека после возврата из процедуры P1
- •Пример использования стека: состояние стека после вызова процедуры P2
- •Пример использования стека: состояние стека после выполнения кода процедуры P2
- •Пример использования стека: состояние стека после возврата из процедуры P2
НИУ ВШЭ – Пермь
Факультет бизнес-информатики
Кафедра информационных технологий в бизнесе
Модульное программирование и процедуры и функции
(на примере Pascal)
Материалы курса «Теоретические основы информатики»
Лекция 11
Лядова Л.Н.
Пермь 2012
Принцип пошаговой детализации и нисходящее программирование
При разработке алгоритмов, программ используется принципы пошаговой детализации, структурного программирования. Модульное программирование – его развитие.
Структурное программирование – методология, направленная на создание логически простых и понятных программ, основанная на предположении, что логичность и понятность программы облегчает разработку, доказательство правильности и последующее сопровождение программы, а также обеспечивает ее надежность.
При разработке модульных программ применяются два метода проектирования: нисходящее и восходящее.
Нисходящее программирование – способ разработки программ, при котором программирование ведется методом «сверху вниз», т.е. от общего к деталям. Алгоритм решения задачи разбивается на несколько более простых частей или подзадач. Их выделяют таким образом, чтобы, программирование подзадач было относительно независимым. При этом составляют «план» решения всей задачи, пунктами которого
2и являются выделенные части.
Понятие программного модуля и модульное программирование
Модульное программирование – способ разработки программ, при котором программа разбивается на относительно независимые составные части – программные модули.
Модули – это относительно независимые программные единицы, выделяемые по функциональному принципу; модули имеют четко определенные интерфейсы для организации их взаимодействия друг с другом.
При этом каждый модуль может разрабатываться, программироваться, транслироваться и тестироваться независимо от других. Внутреннее строение модуля для функционирования всей программы, как правило, значения не имеет, поэтому при изменении алгоритма, реализуемого модулем, нет необходимости менять структуру программы, использующей модуль.
3
Понятие программного модуля
Программный модуль (согласно ГОСТ 19781-90) – программа или функционально завершенный фрагмент программы, предназначенный для хранения, трансляции, объединения с другими программными модулями, загрузки в оперативную память.
Реализации в различных системах программирования могут быть разными. Основное – библиотеки (исходных программ, статической (.LIB) и динамической (.DLL) компоновки).
Основа модульного программирования – процедуры и функции, подпрограммы в языках программирования.
4
Цели модульного программирования
Цели модульного программирования:
– |
Улучшить читабельность программ. |
– |
Повысить надежность программ (упрощается тестирование – |
|
тестируются отдельные достаточно простые функции, а затем |
|
выполняется комплексное тестирование функций в их |
|
взаимодействии). |
– |
Повысить эффективность программ (с одной стороны, |
|
выделение процедур и функций, обращения к ним требуют |
|
накладных расходов, увеличивают время выполнения, а с |
|
другой, выделение повторяющихся фрагментов в отдельные |
|
подпрограммы, процедуры и функции, позволяет «сэкономить» |
|
на размещении программного кода и т.п.). |
– |
Уменьшить время и стоимость программной разработки |
|
(уменьшается время на программирование (используются |
5 |
ранее разработанные модули) и отладку). |
|
Принципы выделения модулей
Разбиение программного комплекса на модули выполняется в соответствии со следующими принципами:
–Модуль – это независимый функциональный блок, код которого логически и физически отделен от кода других модулей.
–Размер модуля обеспечивает читабельность программы (весь текст должен разместиться на экране или странице).
–Каждый модуль имеет одну входную и одну выходную точку.
–Модули связаны иерархически.
–Для написания и использования модуля должно быть достаточно минимальных знаний о выполняемой им функции и способе передачи ему входных данных и получения результатов (т.е. знания интерфейса).
–Каждый модуль должен начинаться с комментария (его назначение, входные и выходные данные).
–Не рекомендуется использовать при разработке метки и оператор безусловной передачи управления (безусловного перехода).
6 |
– Рекомендуется использовать только стандартные управляющие |
конструкции структурного программирования (условие (выбор), циклы). |
Модульное программирование и иерархическая структура программы
Структура модульной программы может быть различной, но предпочтительнее реализация, при которой есть четкое разделение
модулей (подпрограмм, процедур и функций) на уровни, – иерархическая структура: функции, выполняемые программой,
группируются, распределяются по уровням; при этом модули, расположенные на каком-либо уровне могут обращаться к функциям моделей, расположенных на нижележащих уровнях. Горизонтальные связи и обращения «вверх» запрещены.
|
|
|
Корневой модуль программы |
|
|
|
Функция 11 |
Функция 12 |
… |
Функция 1N |
|
7 |
Функция |
21 |
Функция 22 … |
… |
Функция 2M |
Функция K1 |
|
Функция K2 |
Функция KL |
|
|
Пример распределения функций по уровням
Может быть «естественным» следующее распределение функций по уровням иерархии:
–Главная программа, выполняющая инициализацию глобальных переменных и т.п. и вызов процедур, реализующих интерфейс пользователя (вывод главного меню, диалоговых окон и т.п., в которых пользователь выбирает операцию, которую он собирается выполнить и пр.).
–Функции, соответствующие операциям меню, вызываемые при выборе пользователем соответствующего пункта.
–Вспомогательные функции, которые вызываются при выполнении операций и пр.
–На самом низком уровне располагаются функции и процедуры, выполняющие простейшие операции, не требующие детализации.
8
Модульное программирование и процедуры
Модульное программирование невозможно без использования процедур и функций – подпрограмм.
Различают два вида подпрограмм - процедуры и функции.
Процедура – это независимая именованная часть программы, которую можно вызвать по имени для выполнения определенных
действий.
Упоминание в тексте имени процедуры приводит к её активизации и называется вызовом.
Вызов может осуществляться при различных условиях.
Конкретные условия выполнения алгоритма, реализуемого процедурой, задаются с помощью параметров.
Для вызова процедуры необходимо знать не только ее имя, но и список передаваемых параметров, их типы и способ передачи.
9
Параметры процедур
Параметры, это значения, которыми «обмениваются» основные программы и процедуры при обращениях к ним: с их помощью в процедуры передаются входные данные для вычислений и могут возвращаться результаты.
Формальные параметры – переменные, которые используются в процедуре для «обозначения» значений, которые являются входными данными для вычислений, – аргументов. С их помощью вычисленные значения могут быть также возвращены в основную программу или другую процедуру, вызвавшую данную.
Фактические параметры задаются при вызове процедуры:
– если параметр используется только как входные данные для
|
вычислений, как аргумент, то в качестве фактического параметра |
|
задается выражение, значение которого вычисляется и передается |
|
процедуре, в процедуре это значение подставляется вместо |
|
формального параметра и используется для вычислений; |
10 |
– если с помощью параметра из процедуры возвращаются |
результаты вычислений, то в качестве фактического параметра |
|
|
может использоваться только переменная. |
