- •Предисловие
- •Глава 1. Основные понятия теории моделирования § 1.1. Термины моделирования
- •§ 1.2. Классификация видов моделирования
- •§ 1.3. Проблемы проектирования информационных систем
- •§ 1.4. Моделирование предметной области
- •§ 1.5. Три уровня анализа
- •§ 1.6. Набор типов моделей Объектная структура
- •Функциональная структура
- •Структура управления
- •Организационная структура
- •Техническая структура
- •Вопросы к главе 1
- •Глава 2. Концептуальные основы case-технологий § 2.1. Понятие case-технологии
- •§ 2.2. Проблемы внедрения case-технологий
- •§ 2.3. Общая характеристика case-средств
- •§ 2.4. Классификация case-средств
- •Вопросы к главе 2
- •Глава 3. Понятие и основные принципы функционального моделирования, обзор основных методологий.
- •§ 3.1. Технология структурного анализа и проектирования sadt
- •§ 3.2. Диаграммы потоков данных dfd (Data Flow Diagrams)
- •§ 3.3. Диаграммы потоков работ wfd (Work Flow Diagram)
- •§ 3.4. Семейство стандартов моделирования idef
- •§ 3.5. Основные элементы и понятия idef0
- •§ 3.6. Диаграммы "сущность-связь" erd (Entity-Relationchip diagram)
- •Вопросы к главе 3
- •Глава 4. Спецификации управления
- •§ 4.1. Диаграммы переходов состояний std (State Transition Diagrams)
- •§ 4.2. Особенности применения std диаграмм
- •§ 4.3. Структурные карты
- •§ 4.4. Структурные карты Константайна
- •§ 4.5. Структурные карты Джексона
- •§ 4.6. Характеристики хорошей модели реализации
- •4.6.1. Сцепление
- •4.6. 2. Связность
- •§ 4.7. Принципы проектирования, позволяющие построить качественную модель
- •§ 4.8. Транзакционный и трансформационный анализ или как получить структурные карты из диаграмм потоков данных
- •Вопросы к главе 4
- •Глава 5. Объектно-ориентированный подход к моделированию информационных систем § 5.1. Понятие объектно-ориентированного анализа
- •§ 5.2. Элементы объектно-ориентированной модели
- •§ 5.3. Объект и класс
- •§ 5.4. Язык моделирования uml
- •§ 5.5. Достоинства и недостатки объектно-ориентированного проектирования
- •Вопросы к главе 5
- •Глава 6. Метод имитационного моделирования
- •§ 6.1. Понятие имитационного моделирования
- •§ 6.2. Применение имитационного моделирования
- •§ 6.3. Виды имитационного моделирования
- •§ 6.4. Принципы и методы построения имитационных моделей
- •6.4.2. Принцип особых состояний
- •6.4.3. Основные методы имитационного моделирования.
- •Вопросы к главе 6
- •Глава 7. Инструментальные средства моделирования ис
- •§ 7.1. Российские программные продукты
- •7.1.1. Инталев: Корпоративный навигатор (инталев)
- •Бизнес-Инженер (Битек)
- •Case.Аналитик
- •§7.2. Зарубежные case - средства
- •7.2.3. Case-средство Silverrun
- •7.2.5. Case-средство Designer/2000
- •§ 7.3. Методология aris
- •7.3.1. Общие сведения о методологии aris
- •7.3.2. Архитектура aris
- •7.3.3. Обзор основных модулей
- •§ 7.4. Программные продукты имитационного моделирования
- •7.4.1. Система Arena
- •7.4.2. Пакет имитационного моделирования AnyLogic
- •Вопросы к главе 7
- •Библиографический список
- •Оглавление
§ 4.7. Принципы проектирования, позволяющие построить качественную модель
Очевидно, что для оценки качества проектируемой системы критериев сцепления и связности недостаточно. Например, если бы мы осуществляли оценку только по критерию сцепления, мы бы всегда получали системы, состоящие из одного модуля. Связность этого единственного модуля также была бы вполне приемлемой. Ниже кратко рассматриваются другие принципы проектирования, позволяющие получать качественные системы.
1) Принцип факторизации. Под факторизацией понимается выделение подзадачи, реализуемой некоторым модулем, в новый самостоятельный модуль. Это может быть сделано по следующим причинам:
чтобы уменьшить размеры модуля;
чтобы обеспечить возможность и преимущества классического проектирования сверху-вниз, позволяющего строить систему более легкой для понимания и облегчающего модификации системы;
чтобы избегать дублирования подзадачи, выполняемой более чем одним модулем;
чтобы отделить собственно вычисления от управления (вызовы и принятия решения);
чтобы обеспечить более широкую пригодность модулей для их использования в различных частях системы;
чтобы упростить реализацию.
2) Принцип единства решения. Процесс любого решения состоит из двух частей: распознавания того, какое действие выбрать, и исполнения этого действия. Поскольку эти две составляющие решения различны, информационные объекты, используемые при распознавании и исполнении, также могут существенно различаться и, следовательно, могут быть недоступными в одном модуле. Такая ситуация получила название расщепления решения (decision split). Сильное расщепление решения (хотя иногда расщепления не удается избежать) обычно является симптомом плохой организации модулей. Исполнительная часть решения должна располагаться как можно ближе к распознавательной части, чтобы распознанной информации не пришлось долго “блуждать” для того, чтобы быть обработанной.
3) Обработка ошибок. Сообщения об ошибках целесообразно формировать и визуализировать в модуле, который ошибку обнаруживает (и, следовательно, “знает”, что это за ошибка). Тексты сообщений рекомендуется хранить вместе по следующим резонам:
При таком походе легче сохранять согласованность формулировок и форматов сообщений. Представьте себе состояние пользователя, когда он получает различные сообщения для одной и той же ошибки, когда она встречается в разных частях системы.
Появляется возможность хранить тексты сообщений в отдельном файле, а не внутри кода модуля.
Легче избежать дублирования сообщений.
Облегчается модификация сообщений (включая их перевод на другой язык).
4) Принцип отсутствия памяти. Когда вызванный модуль возвращает управление вызвавшему его модулю после выполнения своей функции, этот модуль “умирает”, оставляя после себя только результат. При повторном вызове он делает свою работу так, как будто бы он родился впервые. Модуль не помнит, что происходило в его предыдущих жизнях. Однако, существует тип модуля, который знает о своем прошлом благодаря так называемой памяти состояния. Память состояния (state memory) - это информационный объект внутри модуля, который продолжает существовать неизмененным между двумя вызовами модуля. Работа модуля с памятью состояния в общем случае непредсказуема, это означает, что, хотя модуль вызывался с одинаковыми фактическими параметрами, исполняться он может по-разному, и результаты его работы при разных вызовах могут быть различными. Сопровождение такого модуля резко усложняется.
5) Инициализация и завершение. Как правило, модули инициализации и завершения являются трудными для сопровождения из-за их плохой (временной) связности и сильного сцепления. Общая рекомендация по решению этой проблемы - инициализацию каждой функции желательно выполнять как можно позже, а действия по завершению каждой функции должны производиться как можно раньше. И, конечно, необходимо проводить инициализацию и завершение как можно ближе к тому, что инициализируется или завершается.
6) Компромисс между ограниченностью и обобщенностью. Ограниченный модуль обладает, по крайней мере, одной из следующих характеристик:
Он выполняет излишне специфическую работу. Например, модуль, вычисляющий среднюю ежемесячную температуру для месяца продолжительностью в 30 дней, является ограниченным; на самом деле необходим модуль, который генерировал бы среднюю температуру для месяца любой продолжительности. Продолжительность месяца могла бы передаваться ему как параметр, а не быть жестко установленной внутри.
Он имеет дело с ограниченными значениями данных, их типами и структурами (например, модуль, предполагающий, что человек не может быть собственником более одного автомобиля).
Он включает в себя условия о месте и способе его использования.
Противоположная крайность ограниченному модулю —сверхобобщенный модуль, обладающий, по крайней мере, одной из следующих характеристик:
Он выполняет нелепо обширную работу. Примером является модуль, формирующий расписание игр чемпионата по футболу, как по Грегорианскому, так и по Юлианскому календарю.
Он имеет дело с слишком избыточными типами данных, их значениями и структурами. Например, использование числа типа REAL вместо INTEGER для того, чтобы следить за количеством болтов на складе, было бы чрезмерным обобщением.
Он принимает в качестве параметров данные, которые никогда не изменятся. Так модуль, которому передается количество дней в неделе, является определенно сверхобобщенным, а также до смешного нелепым.
7) Принцип минимизации избыточности. Если любой факт, условие или реализационное решение явно проявляются в более чем одном модуле, то усилия по сопровождению, состоящие из нахождения всех случаев этого факта и их изменения, увеличиваются. Также возникает опасность того, что человек, сопровождающий такую систему, забудет изменить один из дублей.
8) Нагрузка по входу и выходу. Под нагрузкой модуля по входу понимается количество непосредственных вызывающих его модулей. Соответственно, нагрузка модуля по выходу - это количество непосредственно подчиненных ему модулей. По уже упоминавшимся выше причинам нагрузка по выходу не должна превышать 6-7 модулей. Высокая нагрузка по входу требует от модуля хорошей связности.
