
- •19.0. Введение
- •19.1. Моделирование как метод познания
- •20.1. Формы представления моделей
- •20.2. Классификация математических моделей
- •21.1. Математическая модель системы (объекта)
- •21.2. Методы математического моделирования
- •21.3. Технология математического моделирования системы (объекта)
- •1 Этап. Формулирование целей и задач моделирования, выявление проблем, описание объекта исследования.
- •2 Этап. Изучение априорной информации об объекте исследования.
- •3 Этап. Формализация постановки задачи: формальное описание целей и задач моделирования, формулировка требований.
- •4 Этап. Стратегическое и тактическое планирование эксперимента с объектом.
- •5 Этап. Экспериментирование с объектом.
- •6 Этап. Идентификация объекта.
- •7 Этап. Оценка адекватности модели, ее свойств, устойчивости, областей применения.
- •8 Этап. Решение задач моделирования, подведение итогов.
- •21.4. Контрольные вопросы и задания
- •22.1. Понятие информационной модели
- •22.2. Этапы моделирования
- •22.3. Типовые информационные модели
- •Графы, сети, деревья
- •23.1. Понятие алгоритма
- •23.2. Свойства алгоритма
- •23.3. Данные алгоритмов
- •23.4. Элементарные алгоритмические действия
- •23.5. Способы записи алгоритмов
- •24.0. Введение
- •25.0. Введение
- •26.0. Введение
- •27.0. Введение
- •28.1. Вычисление конечных и бесконечных сумм и произведений
- •28.2. Решение уравнений итерационными методами
- •28.3. Расчет таблиц функциональных зависимостей
- •28.4. Подсчет числа положительных, отрицательных и нулевых элементов массивов
- •28.5. Расчет модуля вектора и нормы матрицы
- •28.6. Расчет среднего и дисперсии элементов в массивах
- •28.7. Поиск минимальных или максимальных значений в массивах
- •28.8. Алгоритмы упорядочивания элементов в массивах
- •28.9. Умножение матрицы на вектор и матрицы на матрицу
- •28.10. Возведение квадратной матрицы в целую степень
- •28.11. Исключение элементов массивов
- •28.12. Расчет определителя квадратной матрицы
- •28.13. Транспонирование матриц
- •29.1. Что такое язык программирования?
- •29.2. Низкоуровневые языки программирования
- •29.3. Языки высокого уровня
- •Навигация по разделам:
- •29.3.1. Процедурные языки программирования
- •29.3.2. Функциональные языки программирования
- •29.3.3. Логические языки программирования
- •30.0. Введение
- •31.0. Введение
- •31.1. Постановка и формализация задачи
- •31.2. Разработка алгоритмов решения задачи
- •31.2. Разработка алгоритмов решения задачи
- •31.4. Анализ результатов
- •31.5. Сопровождение программ
- •32.0. Введение
- •33.1. Технология структурного программирования
- •33.2. Структурные методы анализа и проектирования по
- •33.3. Модульное программирование
- •Навигация по разделу
- •33.3.1. Hipo - диаграмма
- •33.3.2. Метод нисходящего проектирования
- •33.3.3. Метод расширения ядра
- •33.3.4. Метод восходящего проектирования
- •33.4. Базовые управляющие структуры структурного программирования
- •33.5. Проектирование и тестирование программы
- •33.6. Подпрограммы, процедуры и функции
- •Навигация по разделу:
- •33.6.1. Основные понятия и терминология
- •33.6.2. Локальность
- •33.6.3. Параметры процедуры
- •34.1. Методология объектно-ориентированного программирования
- •34.2. Объектно-ориентированные методы анализа и проектирования по
- •34.3. Основные принципы построения объектной модели
- •34.4. Основные элементы объектной модели
- •34.5. Пример разработки консольного приложения в технологии объектно-ориентированного подхода
- •Навигация по разделу:
- •34.5.1. Диаграмма прецендентов uml
- •34.5.2. Диаграмма последовательности uml для прецедента
- •34.5.3. Диаграмма классов uml для прецендента «перевести р-ичную строку в число»
- •34.5.4. Текст приложения на языке Object Pascal
- •35.0. Введение
- •35.1. История развития бд
- •35.2. Классификация бд
- •Навигация по разделу:
- •35.2.1. Основные функции субд
- •36.1. Основные понятия бд
- •36.2. Основные понятия реляционной модели бд
- •36.3. Предпроектное обследование предметной области. Связи таблиц
- •36.4. Нормализация отношений
- •36.5. Общие сведения о ms Access
- •36.6. Приложение
- •36.6. Приложение
- •37.2. Связь между таблицами и целостность данных
- •37.3. Создание запросов в ms access
- •Навигация по разделу:
- •37.3.1. Запросы на выборку
- •37.3.2. Запросы с параметрами
- •37.2.3. Запросы с вычислениями
- •37.2.4. Итоговые запросы
- •37.2.5. Перекрестные запросы
- •37.4. Формы
- •37.5. Отчеты
- •38.0. Введение
- •38.1. Различные подходы к построению систем ии
- •38.2. Экспертные системы
- •Методы, основанные на правилах.
- •Методы, основанные на фреймах.
33.3. Модульное программирование
← 33.2. Структурные методы анализа и... |
33.4. Базовые управляющие структуры... → |
Навигация по разделу
33.3.1. HIPO - диаграмма
33.3.2. Метод нисходящего проектирования
33.3.3. Метод расширения ядра
33.3.4. Метод восходящего проектирования
Прикладные программы чаще всего слишком сложны, чтобы быть написанными как единое целое или разработанными одним программистом. Поэтому большие программы на этапе проектирования разбивают на логические (функциональные) модули.
Под модульным программированием (модуляризацией) понимается разделение программы на части по некоторым установленным правилам.
Эти части на этапе кодирования могут быть реализованы в виде модулей или подпрограмм в зависимости от их размера и выбранного языка программирования.
Для того чтобы логический модуль можно было закодировать, необходимо предварительно описать его поведение, т.е. специфицировать. Для спецификации функций логических модулей с точки зрения входных выходных данных и связи между ними используют HIPO-диаграмму. Её название образовано из первых букв английского словосочетания hierarchy-input-processing-output (иерархическое описание вход-обработка-выход) [20].
Программы разбиваются на модули для того, чтобы:
упростить их разработку и реализацию;
облегчить чтение программ;
упростить их настройку и модификацию;
облегчить работу с данными, имеющими сложную структуру;
избежать чрезмерной детализации алгоритмов;
обеспечить более выгодное размещение программ в памяти ЭВМ.
Правильная декомпозиция является главным способом преодоления сложности разработки больших систем ПО. Понятие «правильная» по отношению к декомпозиции означает следующее:
количество связей между отдельными модулями должно быть минимальным (принцип «слабой связанности» - Low Coupling);
связность отдельных частей внутри каждого модуля должна быть максимальной (принцип «сильного сцепления» — High Cohesion).
Связность модуля определяется как мера зависимости его частей.
Чем выше связность модуля, тем лучше результат проектирования. Для обозначения связности используется также понятие силы связности модуля.
Сцепление модулей представляет собой меру относительной независимости модулей, которая определяет их читабельность и сохранность.
Независимые модули могут быть модифицированы без переделки каких-либо других модулей. Слабое сцепление более желательно, так как это означает высокий уровень их независимости. Модули являются полностью независимыми, если каждый из них не содержит о другом никакой информации. Чем больше информации о других модулях используется в них, тем менее они независимы и тем теснее сцеплены.
Методы проектирования программ, основанные на модульном принципе, делятся на три группы:
методы нисходящего проектирования,
методы расширения ядра и
методы восходящего проектирования.
На практике обычно применяются различные сочетания этих методов.
Рассмотрим применение функциональной декомпозиции на следующем примере.
Пусть нам необходимо разработать консольное приложение для представления десятичного действительного числа в систему счисления с основанием р (основание может меняться в диапазоне от 2 до 16).
Проектирование программы начинаем с функциональной декомпозиции задачи и построения на её основе схемы иерархии логических модулей. Схема иерархии логических модулей – это результат отображения разбиения исходной задачи на части на уровне проекта. Каждый логический модуль осуществляет преобразование некоторых входных данных в определённый результат и может быть снова разделён на части. Схема иерархии логических модулей отображает связь модулей по управлению, т.е. на ней с помощью прямых линий показано, какие модули могут быть вызваны из данного модуля. Результатом разбиения нашей задачи на части может быть схема иерархии, представленная ниже.
Рис. 33.1. Схема иерархии логических модулей.