- •Проектирование информационных систем
- •Для студентов пятого курса специальности 071900 – Информационные системы в технике и технологиях
- •1Введение
- •1.1Классификация методов проектирования
- •1.2Виды информационных систем
- •1.2.1Системы обработки данных
- •1.2.2Системы управления
- •1.2.3Офисные системы
- •1.2.4Системы поддержки принятия решений
- •1.2.5Экспертные системы
- •1.3Структура информационной системы
- •1.4Архитектура системы
- •1.4.1Общее понятие системной архитектуры
- •1.4.2Архитектурные уровни
- •2Проектирование информационных систем на основе объектно-ориентированного подхода
- •2.1Представления системы
- •2.2Uml-модель информационной системы
- •2.3Представления системы в rational rose
- •2.4Проектирование в rational rose
- •2.5Моделирование предметной области
- •2.5.1Моделирование организационной структуры
- •2.5.2Моделирование бизнес-процессов
- •2.5.3Моделирование бизнес-функций
- •2.5.4Моделирование документов и бизнес-сущностей
- •2.6Использование бизнес-модели на этапах разработки
- •2.7Диаграмма вариантов использования – use case diagram
- •2.7.1Обозначения в диаграмме вариантов использования
- •2.7.2Идентификация актёров и вариантов использования
- •2.7.3Категории вариантов использования
- •2.7.4Абстрактные варианты использования
- •2.7.5Конкретные варианты использования
- •2.7.6Запись актёров и вариантов использования
- •2.7.7.4Альтернативные потоки событий
- •2.7.7.5Постусловия варианта использования
- •2.8Диаграммы взаимодействия – interaction diagrams
- •2.8.1Идентификация объектов
- •2.8.2Использование диаграмм взаимодействия
- •2.8.3Диаграмма последовательности – Sequence diagram
- •2.8.4Подход к разработке диаграммы последовательности
- •2.8.5Диаграмма кооперации – Collaboration Diagram
- •2.9Диаграммы классов – class diagrams
- •2.9.1Классы
- •2.9.1.1Параметризованный класс – parameterized class
- •2.9.1.2Класс-наполнитель – instantiated class
- •2.9.1.3Утилита - utility
- •2.9.1.4Метакласс – metaclass
- •2.9.1.5Абстрактный класс – abstract class
- •2.9.2Стереотип класса
- •2.9.2.1Пограничные классы – boundary classes
- •2.9.2.2Управляющие классы – control classes
- •2.9.2.3Классы-сущности – entity classes
- •2.9.3Видимость класса – Visibility
- •2.9.4Пакеты – packages
- •2.9.5Диаграммы классов
- •2.9.6Создание диаграммы классов
- •2.9.6.1Идентификация программных классов
- •2.9.6.2Идентификация атрибутов
- •2.9.6.3Идентификация операций
- •2.9.6.4Идентификация ассоциаций
- •2.10Диаграммы состояний – statechart diagrams
- •2.10.1Основные сведения о диаграмме состояний
- •2.10.2События
- •2.10.2.1Сигнал
- •2.10.2.2С обытие вызова
- •2.10.2.3События времени и изменения
- •2.10.3Правила построения диаграммы состояний
- •2.10.4Диаграммы состояний для вариантов использования
- •2.10.5Классы и типы для диаграммы состояний
- •2.11Диаграммы компонентов – component diagrams
- •2.11.1Компоненты
- •2.11.2Основные виды компонентов
- •2.11.3Основные стереотипы компонентов
- •2.11.4Диаграмма компонентов
- •2.11.5Правила построения диаграммы компонентов
- •2.12Диаграмма развёртывания – deployment diagram
- •2.12.1Узлы - Nodes
- •2.12.2Соединения
- •2.12.3Диаграмма развёртывания
- •2.12.4Использование диаграмм развёртывания
- •2.12.4.1Встроенные системы
- •2.12.4.2Клиент-серверные системы
- •2.12.4.3Распределённые системы
- •3Системное проектирование сложных систем
- •3.1Цель и задачи системного проектирования
- •3.1.1Цель системного проектирования
- •3.1.2Задачи системного проектирования
- •3.2Структура и содержание документов системного проекта
- •3.2.1Техническое задание
- •3.2.2Описание архитектуры программного и информационного обеспечения системы
- •3.2.3Описание жизненного цикла, технологии и инструментария проектирования программного средства и базы данных
- •3.2.4Планы управления рабочими проектами
- •3.2.5Техническое задание на рабочее проектирование
- •3.2.6Системный проект
- •3.2.7Акт завершения работ и утверждения системного проекта
- •3.2.8Основные компоненты договора на детальное проектирование
- •3.3Работы и нормативные документы по системному проектированию информационной системы
- •3.4Стандарты в жизенном цикле информационных систем
- •3.4.1Нормативно-методическое обеспечение
- •3.4.2Рекомендуемые стандарты
- •4Проектирование систем как часть жизненного цикла
- •4.1Стадии и этапы жизненного цикла
- •4.1.1Исследование
- •4.1.2Проработка
- •4.1.3Создание
- •4.1.4Переходный период
- •4.2Процесс проектирования
- •4.2.1Концептуальное проектирование
- •4.2.2Логическое проектирование
- •4.2.3Физическое проектирование
2.9.6Создание диаграммы классов
Для построения диаграммы классов следует:
Определить все классы, необходимые для варианта использования. Для этого анализируются диаграммы взаимодействия.
Определить пакеты классов в соответствии с категориями классов (или по стереотипу, или по функциональности, или по комбинации функциональности и стереотипов).
Отобразить выделенные классы на диаграммах классов пакетов.
Добавить стереотипы к классам.
Добавить на диаграмму атрибуты соответствующих понятий.
Добавить имена операций на основе диаграмм взаимодействия.
Добавить информацию о типах и видимости атрибутов и операций.
Добавить необходимые ассоциации.
Добавить стрелки, определяющие направление навигации для ассоциаций.
Добавить линии зависимостей.
Добавить мощность отношений.
Далее рассматривается построение диаграммы классов на примере системы розничной торговли. В примере классам не задаются стереотипы, и классы не группируются в пакеты.
2.9.6.1Идентификация программных классов
Первым шагом при создании диаграммы классов является идентификация классов, которые должны участвовать в программном решении. Эту задачу можно решить, внимательно изучив все диаграммы взаимодействия и выбрав упомянутые в них классы. Для приложения POST в прецеденте Покупка товара к числу таких классов относятся следующие:
Имя класса |
Комментарий |
POST |
Управляющий класс |
ProductCatalog |
Каталог товаров |
ProductSpecification |
Спецификация товара |
Store |
Место, где происходит покупка товаров |
Sale |
Продажа |
SaleLineItem |
Элемент для определённого товара, приобретённого в рамках продажи |
Payment |
Оплата товара наличными |
2.9.6.2Идентификация атрибутов
Атрибут – это поименованное свойство объектов класса, описывающее диапазон значений, которые могут принимать экземпляры этого свойства. В модель следует включать те атрибуты, для которых определены соответствующие требования или для которых предполагается хранение.
Как правило, атрибуты непосредственно следуют из следующих данных:
Требования к системе.
Принятые варианты использования.
Поясняющие документы, допущения.
Атрибуты в спецификации сопровождаются коротким текстовым описанием.
С атрибутами связывают три основных фрагмента информации:
Имя атрибута. Имя должно адекватно отражать смысл атрибута.
Тип данных атрибута. Типы атрибутов зачастую рассматриваются как примитивные типы данных. К стандартным типам простых атрибутов относятся: Boolean, Date, Integer, Double, String, Time. В качестве типов данных можно использовать либо встроенные типы языка программирования, либо определённые в модели имена классов.
Первоначальное значение атрибута. Атрибуты могут иметь значение по умолчанию. Например, ставка налога с продаж может иметь неизменное значение 5%, следовательно, можно определить значение по умолчанию, равное 0.05.
Кроме имени, типа и значения в спецификации атрибута задают:
Видимость атрибута – attribute visibility. Допустимые значения:
Public – общий, открытый (знак +). Атрибут виден всем остальным классам. Любой класс может изменить значение атрибута.
Private – закрытый, секретный (знак –). Атрибут не виден никаким другим классам.
Protected – защищённый (знак #). Атрибут доступен только самому классу и его потомкам.
Implementation – реализационный (знака нет). Атрибут является общим только в пределах пакета классов.
В общем случае атрибуты рекомендуется делать закрытыми или защищёнными. Это позволяет лучше контролировать сам атрибут и код.
Метод локализации атрибута – containment. Возможные значения:
By value – по значению. Атрибут содержится внутри класса. Например, если атрибут относится к типу String, то эта строка будет содержаться внутри определения класса.
By reference – по ссылке. Атрибут локализован вне класса, но класс содержит указатель на него.
Unspecified – не определён. Метод локализации атрибута ещё не определён. При генерации кода применяется значение By value этого параметра.
Static – определение статичного атрибута (знак $). Под статичным атрибутом понимается атрибут, который используется всеми объектами класса.
Derived – определение производного атрибута (знак /). К производным атрибутам относятся такие, значения которых могут быть получены на основании других атрибутов класса (подобные атрибуты лучше не указывать в качестве атрибутов класса), а также такие, значения которых определяются из реального значения кратности ассоциации. Например, для Элемента продажи найдено 10 товаров, следовательно, значение атрибута Количество будет равно 10.
Атрибуты для варианта использования Покупка товара системы POST:
Имя атрибута |
Тип атрибута |
Комментарий |
Имя класса |
description |
String |
Описание элемента продажи |
ProductSpecification |
price |
Double |
Цена элемента продажи |
|
$ UPC |
String |
Универсальный код товара |
|
address |
String |
Адрес места продажи товаров |
Store |
name |
String |
Название места продажи товаров |
|
date |
Date |
Дата продажи |
Sale |
time |
Time |
Время продажи |
|
isComplete |
Boolean |
Завершённость продажи |
|
/ quantity |
Integer |
Количество приобретённых товаров |
SaleLineItem |
amount |
Double |
Количество денег, предоставленных покупателем для оплаты |
Payment |
total |
Double |
Итоговая сумма продажи |
Рекомендации по идентификации атрибутов
Класс с 10-15 атрибутами может быть вполне приемлемым. Следует только убедиться, что все его атрибуты нужны и действительно могут принадлежать этому классу. Если у класса слишком много атрибутов, то, возможно, этот класс следует разделить на два меньших. Точно так же необходимо внимательно относиться к классам, у которых слишком мало атрибутов. Может быть, стоит объединить два класса в один.
Когда возникают сомнения по поводу идентификации класса или атрибута, следует проанализировать наличие некоторого выраженного поведения. Если существует выраженное поведение, то тогда следует определить понятие как класс, если нет – как атрибут.
Например:
Система регистрирует предоставление услуг различным заказчикам. Может понадобиться информация о предприятиях, которым предоставляются услуги. В этом случае предприятие следует идентифицировать как класс Заказчик.
Система должна генерировать письма людям, работающим в разных предприятиях. При этом достаточно знать только названия этих предприятий. Название предприятия может быть объявлено атрибутом класса Контакт.
Атрибуты не должны использоваться для связи объектов. Типичной ошибкой является добавление атрибута внешнего ключа, что обычно происходит при разработке реляционной базы данных.
Вычисляемые атрибуты лучше не определять как атрибуты класса. Не следует путать их с производными (derived), значения которых можно получить из других данных, например, из реального (фактического) значения кратности ассоциации.