1
Часть 8.
Разработка структуры программы
и модульное программирование
Методы и средства проектирования
информационных систем и технологий
(©) Владислав Лавров, vlavrov.com
2
8.1. Цель модульного программирования
Цель - упростить программную систему. Средство
борьбы со сложностью программ
Программный модуль  это любой фрагмент
описания процесса, оформляемый как
самостоятельный программный продукт,
пригодный для использования в описаниях
процесса.
(©) Владислав Лавров, vlavrov.com
3
8.2. Основные характеристики программного модуля
• размер модуля,
• прочность модуля,
• сцепление с другими модулями,
• рутинность модуля (независимость от предыстории
обращений к нему).
Характеристики программного модуля [Г.Майерс]:
(©) Владислав Лавров, vlavrov.com
4
• Измеряется числом содержащихся в нем операторов или строк.
• Модуль не должен быть слишком маленьким или слишком
большим.
• Маленькие модули приводят к громоздкой модульной структуре
программы и могут не окупать накладных расходов, связанных с
их оформлением.
• Большие модули неудобны для изучения и изменений, они могут
существенно увеличить суммарное время повторных трансляций
программы при отладке программы.
• Обычно рекомендуются программные модули размером от
нескольких десятков до нескольких сотен операторов.
Размер модуля
(©) Владислав Лавров, vlavrov.com
5
Это мера его внутренних связей.
Чем выше прочность модуля, тем больше связей он может спрятать
от внешней по отношению к нему части программы и,
следовательно, тем больший вклад в упрощение программы он
может внести.
Прочность модуля
(©) Владислав Лавров, vlavrov.com
6
• Это такой модуль, между элементами которого нет осмысленных
связей.
• Такой модуль может быть выделен, например, при обнаружении в
разных местах программы повторения одной и той же
последовательности операторов, которая и оформляется в отдельный
модуль.
• Необходимость изменения этой последовательности в одном из
контекстов может привести к изменению этого модуля, что может
сделать его использование в других контекстах ошибочным.
Прочность модуля по совпадению
(©) Владислав Лавров, vlavrov.com
7
• Это модуль, выполняющий (реализующий)
одну какую-либо определенную функцию.
• При реализации этой функции такой модуль
может использовать и другие модули.
Функционально прочный модуль
(©) Владислав Лавров, vlavrov.com
8
• Это модуль, выполняющий (реализующий) несколько операций
(функций) над одной и той же структурой данных (информационным
объектом), которая считается неизвестной вне этого модуля.
• Для каждой из этих операций в таком модуле имеется свой вход со
своей формой обращения к нему.
• Такой класс следует рассматривать как класс программных модулей
с высшей степенью прочности.
Информационно прочный модуль
(©) Владислав Лавров, vlavrov.com
9
• Это мера его зависимости по данным от других модулей.
• Независимые модули могут быть модифицированы без
переделки других модулей
• Характеризуется способом передачи данных. Чем слабее
сцепление модуля с другими модулями, тем сильнее его
независимость от других модулей (тем лучше).
Сцепление модуля
(©) Владислав Лавров, vlavrov.com
10
Сцепление по содержимому. Таким является сцепление двух модулей,
когда один из них имеет прямые ссылки на содержимое другого модуля
(например, на константу, содержащуюся в другом модуле).
Сцепление по общей области  это такое сцепление модулей, когда
несколько модулей используют одну и ту же область памяти.
Параметрическое сцепление  это случай, когда данные передаются
модулю либо при обращении к нему как значения его параметров, либо
как результат его обращения к другому модулю для вычисления
некоторой функции.
Оценки степени сцепления модулей
(©) Владислав Лавров, vlavrov.com
11
• Это его независимость от предыстории обращений к нему.
• Модуль называется рутинным, если результат (эффект)
обращения к нему зависит только от значений его параметров (и
не зависит от предыстории обращений к нему).
• Модуль называется зависящим от предыстории, если результат
(эффект) обращения к нему зависит от внутреннего состояния
этого модуля, изменяемого в результате предыдущих обращений
к нему.
Рутинность модуля
(©) Владислав Лавров, vlavrov.com
12
• В большинстве случаев надо делать модуль рутинным, т.е.
независимым от предыдущих обращений.
• Зависящие от предыстории модули следует использовать
только в тех случаях, когда это необходимо для сцепления
по данным
• В спецификации зависящего от предыстории модуля
должна быть чётко сформулирована эта зависимость,
чтобы пользователи имели возможность прогнозировать
поведение такого модуля
Рутинность модуля (рекомендации)
(©) Владислав Лавров, vlavrov.com
13
8.3. Методы разработки структуры программы
В основу положен модульный подход
В качестве модульной структуры программы принято
использовать древовидную структуру.
В узлах такого дерева размещаются программные модули,
а направленные дуги (стрелки) показывают статическую
подчиненность модулей, т.е. каждая дуга показывает,
что в тексте модуля, из которого она исходит, имеется
ссылка на модуль, в который она входит.
Модуль 1
Модуль 2
Модуль 4
Модуль 3
(©) Владислав Лавров, vlavrov.com
14
Спецификация программного модуля
1. Синтаксическую спецификацию его входов,
позволяющую построить на используемом языке
программирования синтаксически правильное
обращение к нему (к любому его входу)
2. Функциональную спецификацию модуля
(описание семантики функций, выполняемых этим
модулем по каждому из его входов).
Содержит:
(©) Владислав Лавров, vlavrov.com
15
1. Метод восходящей разработки
2. Метод нисходящей разработки
Методы разработки структуры программы
Классический (водопадный) подход
Модульная структура программы была разработана до
начала программирования (кодирования) модулей.
(©) Владислав Лавров, vlavrov.com
16
Модуль 1
Модуль 3
Модуль 4
Модуль 2
Модуль 5
1
2
3
4
5
Последовательность
разработки
и тестирования
Методы восходящей разработки
(©) Владислав Лавров, vlavrov.com
17
Методы нисходящей разработки
Модуль 1
Модуль 3
Модуль 4
Модуль 2
Модуль 5
5
4
3
2
1
Последовательность
разработки и
тестирования
(©) Владислав Лавров, vlavrov.com
18
Модификация нисходящей разработки, при которой
модульная древовидная структура программы
формируется в процессе программирования модулей.
Методы разработки структуры программы
Конструктивный подход
(©) Владислав Лавров, vlavrov.com
19
1-й шаг разработки структуры программы
Конструктивный подход
Текст головного модуля
Спецификация программы
(головного модуля)
Спецификация
1-й подзадачи
Спецификация
2-й подзадачи
Спецификация
3-й подзадачи
(©) Владислав Лавров, vlavrov.com
20
Конструктивный подход
Текст головного модуля
Спецификация программы
(головного модуля)
Спецификация
1-й подзадачи
Спецификация
2-й подзадачи
Спецификация
3-й подзадачи
Текст головного
модуля 1-й
подзадачи
Текст головного
модуля 3-й
подзадачи
Текст головного
модуля 2-й
подзадачи
Спецификация
2.1-й подзадачи
Спецификация
2.1-й подзадачи
2-й шаг разработки структуры программы
(©) Владислав Лавров, vlavrov.com
21
Модификация восходящей разработки, при которой при
которой модульная структура программы
формируется в процессе программирования модуля.
Для заданной предметной области выделяются типичные
функции, каждая из которых может использоваться
при решении разных задач в этой области, и
специфицируются, а затем и программируются
отдельные программные модули, выполняющие эти
функции.
Методы разработки структуры программы
Архитектурный подход
(©) Владислав Лавров, vlavrov.com
22
Классификация методов разработки структуры программ
Методы разработки структуры программы
Нисходящие Восходящие
Классический
подход
Конструктивный
подход
Классический
подход
Архитектурный
подход
(©) Владислав Лавров, vlavrov.com
23
8.4. Контроль структуры программы
1. Статический контроль.
2. Смежный контроль.
3. Сквозной контроль.
(©) Владислав Лавров, vlavrov.com

МиСПИСиТ (структура)

  • 1.
    1 Часть 8. Разработка структурыпрограммы и модульное программирование Методы и средства проектирования информационных систем и технологий (©) Владислав Лавров, vlavrov.com
  • 2.
    2 8.1. Цель модульногопрограммирования Цель - упростить программную систему. Средство борьбы со сложностью программ Программный модуль  это любой фрагмент описания процесса, оформляемый как самостоятельный программный продукт, пригодный для использования в описаниях процесса. (©) Владислав Лавров, vlavrov.com
  • 3.
    3 8.2. Основные характеристикипрограммного модуля • размер модуля, • прочность модуля, • сцепление с другими модулями, • рутинность модуля (независимость от предыстории обращений к нему). Характеристики программного модуля [Г.Майерс]: (©) Владислав Лавров, vlavrov.com
  • 4.
    4 • Измеряется числомсодержащихся в нем операторов или строк. • Модуль не должен быть слишком маленьким или слишком большим. • Маленькие модули приводят к громоздкой модульной структуре программы и могут не окупать накладных расходов, связанных с их оформлением. • Большие модули неудобны для изучения и изменений, они могут существенно увеличить суммарное время повторных трансляций программы при отладке программы. • Обычно рекомендуются программные модули размером от нескольких десятков до нескольких сотен операторов. Размер модуля (©) Владислав Лавров, vlavrov.com
  • 5.
    5 Это мера еговнутренних связей. Чем выше прочность модуля, тем больше связей он может спрятать от внешней по отношению к нему части программы и, следовательно, тем больший вклад в упрощение программы он может внести. Прочность модуля (©) Владислав Лавров, vlavrov.com
  • 6.
    6 • Это такоймодуль, между элементами которого нет осмысленных связей. • Такой модуль может быть выделен, например, при обнаружении в разных местах программы повторения одной и той же последовательности операторов, которая и оформляется в отдельный модуль. • Необходимость изменения этой последовательности в одном из контекстов может привести к изменению этого модуля, что может сделать его использование в других контекстах ошибочным. Прочность модуля по совпадению (©) Владислав Лавров, vlavrov.com
  • 7.
    7 • Это модуль,выполняющий (реализующий) одну какую-либо определенную функцию. • При реализации этой функции такой модуль может использовать и другие модули. Функционально прочный модуль (©) Владислав Лавров, vlavrov.com
  • 8.
    8 • Это модуль,выполняющий (реализующий) несколько операций (функций) над одной и той же структурой данных (информационным объектом), которая считается неизвестной вне этого модуля. • Для каждой из этих операций в таком модуле имеется свой вход со своей формой обращения к нему. • Такой класс следует рассматривать как класс программных модулей с высшей степенью прочности. Информационно прочный модуль (©) Владислав Лавров, vlavrov.com
  • 9.
    9 • Это мераего зависимости по данным от других модулей. • Независимые модули могут быть модифицированы без переделки других модулей • Характеризуется способом передачи данных. Чем слабее сцепление модуля с другими модулями, тем сильнее его независимость от других модулей (тем лучше). Сцепление модуля (©) Владислав Лавров, vlavrov.com
  • 10.
    10 Сцепление по содержимому.Таким является сцепление двух модулей, когда один из них имеет прямые ссылки на содержимое другого модуля (например, на константу, содержащуюся в другом модуле). Сцепление по общей области  это такое сцепление модулей, когда несколько модулей используют одну и ту же область памяти. Параметрическое сцепление  это случай, когда данные передаются модулю либо при обращении к нему как значения его параметров, либо как результат его обращения к другому модулю для вычисления некоторой функции. Оценки степени сцепления модулей (©) Владислав Лавров, vlavrov.com
  • 11.
    11 • Это егонезависимость от предыстории обращений к нему. • Модуль называется рутинным, если результат (эффект) обращения к нему зависит только от значений его параметров (и не зависит от предыстории обращений к нему). • Модуль называется зависящим от предыстории, если результат (эффект) обращения к нему зависит от внутреннего состояния этого модуля, изменяемого в результате предыдущих обращений к нему. Рутинность модуля (©) Владислав Лавров, vlavrov.com
  • 12.
    12 • В большинствеслучаев надо делать модуль рутинным, т.е. независимым от предыдущих обращений. • Зависящие от предыстории модули следует использовать только в тех случаях, когда это необходимо для сцепления по данным • В спецификации зависящего от предыстории модуля должна быть чётко сформулирована эта зависимость, чтобы пользователи имели возможность прогнозировать поведение такого модуля Рутинность модуля (рекомендации) (©) Владислав Лавров, vlavrov.com
  • 13.
    13 8.3. Методы разработкиструктуры программы В основу положен модульный подход В качестве модульной структуры программы принято использовать древовидную структуру. В узлах такого дерева размещаются программные модули, а направленные дуги (стрелки) показывают статическую подчиненность модулей, т.е. каждая дуга показывает, что в тексте модуля, из которого она исходит, имеется ссылка на модуль, в который она входит. Модуль 1 Модуль 2 Модуль 4 Модуль 3 (©) Владислав Лавров, vlavrov.com
  • 14.
    14 Спецификация программного модуля 1.Синтаксическую спецификацию его входов, позволяющую построить на используемом языке программирования синтаксически правильное обращение к нему (к любому его входу) 2. Функциональную спецификацию модуля (описание семантики функций, выполняемых этим модулем по каждому из его входов). Содержит: (©) Владислав Лавров, vlavrov.com
  • 15.
    15 1. Метод восходящейразработки 2. Метод нисходящей разработки Методы разработки структуры программы Классический (водопадный) подход Модульная структура программы была разработана до начала программирования (кодирования) модулей. (©) Владислав Лавров, vlavrov.com
  • 16.
    16 Модуль 1 Модуль 3 Модуль4 Модуль 2 Модуль 5 1 2 3 4 5 Последовательность разработки и тестирования Методы восходящей разработки (©) Владислав Лавров, vlavrov.com
  • 17.
    17 Методы нисходящей разработки Модуль1 Модуль 3 Модуль 4 Модуль 2 Модуль 5 5 4 3 2 1 Последовательность разработки и тестирования (©) Владислав Лавров, vlavrov.com
  • 18.
    18 Модификация нисходящей разработки,при которой модульная древовидная структура программы формируется в процессе программирования модулей. Методы разработки структуры программы Конструктивный подход (©) Владислав Лавров, vlavrov.com
  • 19.
    19 1-й шаг разработкиструктуры программы Конструктивный подход Текст головного модуля Спецификация программы (головного модуля) Спецификация 1-й подзадачи Спецификация 2-й подзадачи Спецификация 3-й подзадачи (©) Владислав Лавров, vlavrov.com
  • 20.
    20 Конструктивный подход Текст головногомодуля Спецификация программы (головного модуля) Спецификация 1-й подзадачи Спецификация 2-й подзадачи Спецификация 3-й подзадачи Текст головного модуля 1-й подзадачи Текст головного модуля 3-й подзадачи Текст головного модуля 2-й подзадачи Спецификация 2.1-й подзадачи Спецификация 2.1-й подзадачи 2-й шаг разработки структуры программы (©) Владислав Лавров, vlavrov.com
  • 21.
    21 Модификация восходящей разработки,при которой при которой модульная структура программы формируется в процессе программирования модуля. Для заданной предметной области выделяются типичные функции, каждая из которых может использоваться при решении разных задач в этой области, и специфицируются, а затем и программируются отдельные программные модули, выполняющие эти функции. Методы разработки структуры программы Архитектурный подход (©) Владислав Лавров, vlavrov.com
  • 22.
    22 Классификация методов разработкиструктуры программ Методы разработки структуры программы Нисходящие Восходящие Классический подход Конструктивный подход Классический подход Архитектурный подход (©) Владислав Лавров, vlavrov.com
  • 23.
    23 8.4. Контроль структурыпрограммы 1. Статический контроль. 2. Смежный контроль. 3. Сквозной контроль. (©) Владислав Лавров, vlavrov.com