- •СОДЕРЖАНИЕ
- •ВВЕДЕНИЕ
- •РАЗДЕЛ 1. ВВЕДЕНИЕ В ТЕХНОЛОГИИ РАЗРАБОТКИ ПРОГРАММНЫХ СРЕДСТВ
- •1.1. Основные понятия и определения
- •ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
- •2.2.1. Общие сведения о каскадных моделях
- •2.2.2. Классическая каскадная модель
- •2.2.3. Каскадная модель с обратными связями
- •2.2.5. V-образная модель
- •2.3.1. Базовая RAD-модель
- •2.5.5. Спиральная модель Боэма
- •ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
- •РАЗДЕЛ 3. ВЫБОР МОДЕЛИ ЖИЗНЕННОГО ЦИКЛА ДЛЯ КОНКРЕТНОГО ПРОЕКТА
- •ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
- •РАЗДЕЛ 4. КЛАССИЧЕСКИЕ МЕТОДОЛОГИИ РАЗРАБОТКИ ПРОГРАММНЫХ СРЕДСТВ
- •4.1. Структурное программирование
- •4.3. Методы нисходящего проектирования
- •4.3.1. Пошаговое уточнение
- •4.3.4. Анализ сообщений
- •4.4. Методы восходящего проектирования
- •4.5. Методы расширения ядра
- •4.6. Метод JSP Джексона
- •4.6.1. Основные конструкции данных
- •4.6.2. Построение структур данных
- •4.6.3. Проектирование структур программ
- •4.7.1. Связность модуля
- •4.7.2. Сцепление модулей
- •ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
- •РАЗДЕЛ 5. CASE-ТЕХНОЛОГИИ СТРУКТУРНОГО АНАЛИЗА И ПРОЕКТИРОВАНИЯ ПРОГРАММНЫХ СРЕДСТВ
- •5.1. Общие сведения о CASE-технологиях
- •5.2.1. Общие сведения о методологии SADT
- •5.2.2. Основные понятия IDEF0-модели
- •5.2.3. Синтаксис IDEF0-диаграмм
- •5.2.4. Синтаксис IDEF0-моделей
- •5.3.1. Основные понятия DFD-модели
- •5.3.2. Синтаксис DFD-диаграмм
- •5.3.3. Синтаксис DFD-моделей
- •5.4.3. Атрибуты
- •5.4.5. Правила атрибутов
- •5.4.9. Формализация соединительных связей
- •5.4.11. Неспецифические связи
- •5.4.13. Связи категоризации в IDEF1X
- •5.5.1. Метод JSD Джексона
- •5.5.2. Диаграммы Варнье–Орра
- •ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
- •6.1.3. Основы языка UML
- •6.3. Диаграмма вариантов использования
- •ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
- •РАЗДЕЛ 7. ИНСТРУМЕНТАЛЬНЫЕ СРЕДСТВА РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
- •7.1. История развития CASE-средств
- •7.4. Классификация CASE-средств
- •7.4.1. Классификация по типам
- •7.4.2. Классификация по категориям
- •7.4.3. Классификация по уровням
- •ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
- •ЛИТЕРАТУРА
4.3.4. Анализ сообщений
Анализ сообщений является второй из рассматриваемых классических стратегий, реализующих метод нисходящего проектирования. Анализ сообщений используется в первую очередь для структуризации ПС обработки информации и основывается на анализе потоков данных, обрабатываемых программным средством [22].
Пример 4.5
Рассмотрим тот же пример проектирования программы обработки файла дат, который был рассмотрен в пп. 4.3.2, 4.3.3. Необходимо отделить правильные даты от неправильных, отсортировать правильные даты, перенести летние и зимние даты в выходной файл, вывести неправильные даты.
Рис. 4.21, 4.22 иллюстрируют возможные варианты укрупненного и детализированного представления потоков информации и обрабатывающих их процессов для данной программы, представленные с помощью диаграмм потоков данных (Data Flow Diagram, DFD) в нотации Йодана–ДеМарко (см. подразд. 5.3).
Файл |
Правильные |
Результаты |
Сообщения |
|
даты |
||||
|
Запоми- об ошибках |
|||
дат |
Проверка |
|
||
Обработка |
нание пра- |
|||
|
входных |
|||
|
дат |
вильных ре- |
||
|
дат |
|||
|
|
зультатов |
||
|
|
|
Рис. 4.21. Укрупненная диаграмма потоков данных для программы обработки файла дат
В соответствии со стратегией анализа сообщений первоначальный поток данных разбивается на три потока: первый содержит непреобразованные входные данные, второй – потоки преобразования, третий – только выходную информацию. Границы, разделяющие эти потоки, на рис. 4.21, 4.22 показаны штриховыми линиями. Они делят диаграмму на три части.
Данные, подлежащие обработке с помощью процесса «Обработка дат» (см. рис. 4.21), могут не включать все входные даты, но это еще часть входных данных. Процесс «Обработка дат» в общем случае может включать различные виды преобразования данных (например, кодирование, декодирование, вычисления и др.). Результаты данного процесса представляют собой выходные данные, хотя они могут быть еще неотформатированными, неотредактированными, возможно, неверными.
103
Три части программы, соответствующие трем потокам данных, принято называть соответственно истоком, преобразователем и стоком [22].
|
|
Правильная |
Обработанная |
|||
Прочитанная |
дата |
Обработка |
дата |
Проверка |
||
Проверка |
|
|||||
дата |
дат |
правиль- |
|
результата |
||
Файл |
|
|
ных дат |
|
|
|
дат |
|
|
|
|
||
|
|
|
|
|
|
|
Чтение дат |
Неправильная |
|
|
|
Правиль- |
|
|
Неправильный |
|||||
|
|
дата |
|
ный |
||
|
|
|
результат |
|||
|
|
|
|
результат |
||
|
|
Сохране- |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
Запомина- |
|
|
|
ние непра- |
|
|
|
|
|
|
вильных |
|
|
|
ние дат |
дат
Сообщения об ошибках
Рис. 4.22. Детализированная диаграмма потоков данных для программы обработки файла дат
Преобразователь – это основная часть программы, исток выполняет функцию управления входным потоком данных, сток выполняет функцию управления выходным потоком данных.
На рис. 4.23 представлен общий вид DFD-диаграммы разбиения любой программы на исток – преобразователь – сток. Линии на диаграмме показывают потоки передачи данных между процессами.
А
В
С
Исток Преобразователь Сток
Рис. 4.23. DFD-диаграмма разбиения программы на исток-преобразователь-сток
104
Рис. 4.24 содержит соответствующую схему иерархии компонентов программы. В схеме иерархии линии указывают связи по управлению между компонентами, а также изображают отношения типа вызывающий – вызываемый.
Процесс декомпозиции программы заключается в рекурсивном использовании метода разбиения на исток – преобразователь – сток на отдельных ветвях ее древовидной структуры. На нижнем уровне в результате формируется совокупность программных модулей – наименьших единиц проектирования программы. Каждый из модулей может быть реализован в зависимости от назначения, сложности и размера как независимый модуль, внутренняя подпрограмма или некоторая часть основной программы.
Следует отметить, что не все компоненты программы обязательно должны быть разбиты на три компонента более низкого уровня. Результат декомпозиции компонента-стока должен обязательно содержать сток, компонентапреобразователя – преобразователь, компонента-истока – исток. Вызывающий компонент – это главный сток для компонента-истока и главный исток для компонента-стока.
Управление
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
А |
|
|
В |
|
|
С |
|||
|
|
|
|
|
|
|
|
|
|
Рис. 4.24. Схема иерархии компонентов программы
Если структуры данных имеют большие размеры, управление ими осуществляется на уровне детализации данных для компонентов истока и стока.
На рис. 4.25 представлена иерархическая структура компонентов для первого уровня декомпозиции программы обработки файла дат, на рис. 4.26 – для второго уровня декомпозиции.
На данных рисунках приняты следующие обозначения: 1– проверка входных дат (исток); 2– обработка дат (преобразователь);
3– запоминание правильных результатов (сток);
4– чтение дат (исток истока 1);
5– проверка дат (преобразователь истока 1);
6– сохранение неправильных дат (сток истока 1);
7– обработка правильных дат (преобразователь преобразователя 2);
8– проверка результата (преобразователь стока 3);
9– запоминание дат (сток стока 3).
105
Количество уровней декомпозиции определяется сложностью задачи и необходимой степенью детализации.
Обработка дат
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
2 |
|
|
3 |
|||
|
|
|
|
|
|
|
|
|
|
Рис. 4.25. Схема иерархии программы обработки дат (декомпозиция первого уровня)
Обработка дат
|
|
|
|
|
|
|
|
|
|
1 |
|
2 |
|
|
3 |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
5 |
6 |
7 |
8 |
9 |
Рис. 4.26. Схема иерархии программы обработки дат (декомпозиция второго уровня)
Каждый компонент программы при информационном обмене использует определенную часть данных. Однако в иерархической структуре программы информационные связи между компонентами не отражены. Поэтому описание иерархической структуры должно содержать таблицу взаимодействия компонентов, показывающую передачу данных между ними. В этой таблице должны быть определены все способы информационного обмена, задаваемые как при помощи формальных параметров, так и с помощью глобальных переменных.
В табл. 4.1 представлены информационные связи между компонентами программы обработки дат. В таблице отражены те данные, которые передаются каждому компоненту в момент его вызова. Входные данные управляющего компонента изображаются как выходные для вызываемых им компонентов.
106
