3441

Методы и технологии программирования

Конспект

Информатика, кибернетика и программирование

Введение в технологию разработки промышленного ПО. Основные понятия Трудозатраты, связанные с созданием программного обеспечения (ПО) прямо связаны с качеством и сложностью создаваемого ПО. Так трудозатраты на создание программного продукта в...

Русский

2012-10-31

5.26 MB

74 чел.

1. Введение в технологию разработки промышленного ПО

1.1. Основные понятия

Трудозатраты, связанные с созданием программного обеспечения (ПО) прямо связаны с качеством и сложностью создаваемого ПО. Так трудозатраты на создание программного продукта в три раза больше, чем обычной программы, а трудозатраты на создание простого приложения (редактор текстов), среднего уровня сложности (трансляторы) и высокого уровня сложности (операционные системы) возрастают еще в три раза.

Поэтому крайне важны используемые технологии для разработки промышленного программного продукта.

Технология ПО включает в себя такие понятия, как методы, инструменты, организационные мероприятия направленные на создания промышленного ПО.

Под технологией программирования понимают организованную совокупность методов, средств и их программного обеспечения, организационно–административных установлений, направленных на разработку, распространение и сопровождение программной продукции.

Создание ПО включает:

Существенные задачи – моделирование сложных концептуальных структур объектов реального мира большой сложности с помощью абстрактных программных объектов;

 Второстепенные задачи – создание представлений этих абстрактных объектов в программе и описание их поведения.

И если 90% усилий разработчиков (затрат) связано не с существенными задачами, то сведя все затраты к нулю не получим роста в порядки (сравните с электроникой).

Если просмотреть историю, то все усилия были направлены на преодоление второстепенных задач.

Пути преодоления существенной сложности:

Массовый рынок (главное не скорость, а качество и сопровождение);

Лучший способ повысить производительность труда – купить;

Быстрое макетирование для установления технических требований к ПО;

Наращивать программы постепенно, добавляя функциональность (хорошо протестированную);

Хорошая команда.

Трудности создания ПО:

1. Внутренние, присущие ему (задание технических требований, проектирование и проверка):

Сложность – размеры, одинаковых нет, они не просто объединяются, масштабирование это непростое увеличение, это добавление новых элементов и связей, нелинейный рост сложности – сложность присуща (существенна) программным объектам и от нее абстрагироваться нельзя;

Согласованность – между людьми, между интерфейсами, которые появились не понятно, как и когда (10 и более лет);

Изменяемость – постоянно изменяются требования и применение ПО;

Незримость – ПО невидимо, различные графовые модели дают некоторое представление только с определенной точки зрения, но само ПО не плоское и его трудно передать такими моделями.

2. Сопутствующие, внутренне ему не присущие.

Движущей силой использования принципов программной инженерии было опасение крупных аварий, к которым могла привести (и привела) разработка все более сложных систем неуправляемыми художниками (не производительность в разы, хотя она и возросла от 3 до 5 раз)

Данные МО США по цене исправления одной ошибки следующие: обнаруженные и исправленные на стадии требований – 139$, на стадии кодирования – 1000$, на стадии тестирования – 7000$, на стадии внедрения – 14000$.

1.2. Жизненный цикл ПО

Одним из базовых понятий методологии проектирования информационных систем (ИС) является понятие жизненного цикла ее программного обеспечения (ЖЦ ПО). ЖЦ ПО – это непрерывный процесс, который начинается с момента принятия решения о необходимости его создания и заканчивается в момент его полного изъятия из эксплуатации.

Основным нормативным документом, регламентирующим ЖЦ ПО, является международный стандарт ИСО/МЭК 12207 – 95 «Информационная технология. Процессы жизненного цикла программных средств» или ISO/IEC 12207 (ISO – International Organization of Standardization – Международная организация по стандартизации, IEC – International Electrotechnical Commission – Международная комиссия по электротехнике). Он определяет структуру ЖЦ, содержащую процессы, действия и задачи, которые должны быть выполнены во время создания ПО.

Структура ЖЦ ПО по стандарту ИСО/МЭК 12207 – 95 базируется на трех группах процессов:

– основные процессы ЖЦ ПО (приобретение, поставка, разработка, эксплуатация, сопровождение);

– вспомогательные процессы, обеспечивающие выполнение основных процессов (документирование, управление конфигурацией, обеспечение качества, верификация, аттестация, оценка, аудит, решение проблем);

– организационные процессы (управление проектами, создание инфраструктуры проекта, определение, оценка и улучшение самого ЖЦ, обучение).

Разработка включает в себя все работы по созданию ПО и его компонент в соответствии с заданными требованиями, включая оформление проектной и эксплуатационной документации, подготовку материалов, необходимых для проверки работоспособности и соответствующего качества программных продуктов, материалов, необходимых для организации обучения персонала и т.д. Разработка ПО включает в себя, как правило, анализ, проектирование и реализацию (программирование).

Эксплуатация включает в себя работы по внедрению компонентов ПО в эксплуатацию, в том числе конфигурирование базы данных и рабочих мест пользователей, обеспечение эксплуатационной документацией, проведение обучения персонала и т.д., и непосредственно эксплуатацию, в том числе локализацию проблем и устранение причин их возникновения, модификацию ПО в рамках установленного регламента, подготовку предложений по совершенствованию, развитию и модернизации системы.

Управление проектом связано с вопросами планирования и организации работ, создания коллективов разработчиков и контроля за сроками и качеством выполняемых работ. Техническое и организационное обеспечение проекта включает выбор методов и инструментальных средств для реализации проекта, определение методов описания промежуточных состояний разработки, разработку методов и средств испытаний ПО, обучение персонала и т.п.

Обеспечение качества проекта связано с проблемами верификации, проверки и тестирования ПО.

Верификация – это процесс определения того, отвечает ли текущее состояние разработки, достигнутое на данном этапе, требованиям этого этапа. Проверка позволяет оценить соответствие параметров разработки с исходными требованиями. Проверка частично совпадает с тестированием, которое связано с идентификацией различий между действительными и ожидаемыми результатами и оценкой соответствия характеристик ПО исходным требованиям. В процессе реализации проекта важное место занимают вопросы идентификации, описания и контроля конфигурации отдельных компонентов и всей системы в целом.

Управление конфигурацией является одним из вспомогательных процессов, поддерживающих основные процессы жизненного цикла ПО, прежде всего процессы разработки и сопровождения ПО. При создании проектов сложных ИС, состоящих из многих компонентов, каждый из которых может иметь разновидности или версии, возникает проблема учета их связей и функций, создания унифицированной структуры и обеспечения развития всей системы. Управление конфигурацией позволяет организовать, систематически учитывать и контролировать внесение изменений в ПО на всех стадиях ЖЦ. Общие принципы и рекомендации конфигурационного учета, планирования и управления конфигурациями ПО отражены в стандарте ISO 12207–2.

Каждый процесс характеризуется определенными задачами и методами их решения, исходными данными, полученными на предыдущем этапе, и результатами. Результатами анализа, в частности, являются функциональные модели, информационные модели и соответствующие им диаграммы. ЖЦ ПО носит итерационный характер: результаты очередного этапа часто вызывают изменения в проектных решениях, выработанных на более ранних этапах.

1.3. Модели жизненного цикла ПО

Стандарт ISO/IEC 12207 не предлагает конкретную модель ЖЦ и методы разработки ПО (под моделью ЖЦ понимается структура, определяющая последовательность выполнения и взаимосвязи процессов, действий и задач, выполняемых на протяжении ЖЦ. Модель ЖЦ зависит от специфики ИС и специфики условий, в которых последняя создается и функционирует). Его регламенты являются общими для любых моделей ЖЦ, методологий и технологий разработки. Стандарт ИСО/МЭК 12207 – 95 описывает структуру процессов ЖЦ ПО, но не конкретизирует в деталях, как реализовать или выполнить действия и задачи, включенные в эти процессы.

К настоящему времени наибольшее распространение получили следующие две основные модели ЖЦ:

– каскадная модель (70–85 г.г.);

– спиральная модель (86–90 г.г.).

В изначально существовавших однородных ИС каждое приложение представляло собой единое целое. Для разработки такого типа приложений применялся каскадный способ. Его основной характеристикой является разбиение всей разработки на этапы, причем переход с одного этапа на следующий происходит только после того, как будет полностью завершена работа на текущем (рис. 1.1.). Каждый этап завершается выпуском полного комплекта документации, достаточной для того, чтобы разработка могла быть продолжена другой командой разработчиков.

Положительные стороны применения каскадного подхода заключаются в следующем:

– на каждом этапе формируется законченный набор проектной документации, отвечающий критериям полноты и согласованности;

– выполняемые в логичной последовательности этапы работ позволяют планировать сроки завершения всех работ и соответствующие затраты.

Каскадная модель ЖЦ:

Рис. 1.1. Каскадная схема разработки ПО

Трудозатраты:

Оценка трудозатрат по Бруксу:

1/3 – планирование

1/6 – написание программ

1/4 – тестирование компонент

1/4 – системное тестирование

В настоящее время трудозатраты составляют:

на стадиях разработки – 20%

и на сопровождение – 80%

Примерное распределение трудозатрат:

 

Рис. 1.2. Распределение трудозатрат при построении ИС

Каскадный подход хорошо зарекомендовал себя при построении ИС, для которых в самом начале разработки можно достаточно точно и полно сформулировать все требования с тем, чтобы предоставить разработчикам свободу реализовать их как можно лучше с технической точки зрения. В эту категорию попадают сложные расчетные системы, системы реального времени и другие подобные задачи. Однако в процессе использования этого подхода обнаружился ряд его недостатков, вызванных, прежде всего тем, что реальный процесс создания ПО никогда полностью не укладывался в такую жесткую схему. В процессе создания ПО постоянно возникала потребность в возврате к предыдущим этапам и уточнении или пересмотре ранее принятых решений. В результате реальный процесс создания ПО принимал следующий вид (рис. 1.3.):

Рис. 1.3. Реальный процесс разработки ПО согласно каскадной схеме

Основным недостатком каскадного подхода является существенное запаздывание с получением результатов. Согласование результатов с пользователями производится только в точках, планируемых после завершения каждого этапа работ, требования к ИС "заморожены" в виде технического задания на все время ее создания. Таким образом, пользователи могут внести свои замечания только после того, как работа над системой будет полностью завершена. В случае неточного изложения требований или их изменения в течение длительного периода создания ПО, пользователи получают систему, не удовлетворяющую их потребностям. Модели (как функциональные, так и информационные) автоматизируемого объекта могут устареть одновременно с их утверждением.

Для преодоления перечисленных проблем была предложена спиральная модель ЖЦ (рис. 1.4.), делающая упор на начальные этапы ЖЦ: анализ и проектирование. На этих этапах реализуемость технических решений проверяется путем создания прототипов. Каждый виток спирали соответствует созданию фрагмента или версии ПО, на нем уточняются цели и характеристики проекта, определяется его качество и планируются работы следующего витка спирали. Таким образом углубляются и последовательно конкретизируются детали проекта и в результате выбирается обоснованный вариант, который доводится до реализации.

Разработка итерациями отражает объективно существующий спиральный цикл создания системы. Неполное завершение работ на каждом этапе позволяет переходить на следующий этап, не дожидаясь полного завершения работы на текущем. При итеративном способе разработки недостающую работу можно будет выполнить на следующей итерации. Главная же задача – как можно быстрее показать пользователям системы работоспособный продукт, тем самым, активизируя процесс уточнения и дополнения требований.

Основная проблема спирального цикла – определение момента перехода на следующий этап. Для ее решения необходимо ввести временные ограничения на каждый из этапов жизненного цикла. Переход осуществляется в соответствии с планом, даже если не вся запланированная работа закончена. План составляется на основе статистических данных, полученных в предыдущих проектах, и личного опыта разработчиков.

Спиральная модель ЖЦ:

Рис. 1.4. Спиральная модель ЖЦ


2. Методологии и технологии проектирования ИС

2.1. Общие требования к методологии и технологии

Методологии, технологии и инструментальные средства интегрированной системы проектирования (CASE–средства) составляют основу проекта любой ИС. Методология реализуется через конкретные технологии и поддерживающие их стандарты, методики и инструментальные средства, которые обеспечивают выполнение процессов ЖЦ.

Под технологией программирования понимают организованную совокупность методов, средств и их программного обеспечения, организационно–административных установлений, направленных на разработку, распространение и сопровождение программной продукции.

Технология проектирования определяется как совокупность трех составляющих:

– пошаговой процедуры, определяющей последовательность технологических операций проектирования (рис. 2.1.);

– критериев и правил, используемых для оценки результатов выполнения технологических операций;

– нотаций (графических и текстовых средств), используемых для описания проектируемой системы.

Рис. 2.1. Представление технологической операции проектирования

Технологические инструкции, составляющие основное содержание технологии, должны состоять из описания последовательности технологических операций, условий, в зависимости от которых выполняется та или иная операция, и описаний самих операций.

Технология проектирования, разработки и сопровождения ИС должна удовлетворять следующим общим требованиям:

– технология должна поддерживать полный ЖЦ ПО;

– технология должна обеспечивать гарантированное достижение целей разработки ИС с заданным качеством и в установленное время;

– технология должна обеспечивать возможность выполнения крупных проектов в виде подсистем (т.е. возможность декомпозиции проекта на составные части, разрабатываемые группами исполнителей ограниченной численности с последующей интеграцией составных частей). Опыт разработки крупных ИС показывает, что для повышения эффективности работ необходимо разбить проект на отдельные слабо связанные по данным и функциям подсистемы. Реализация подсистем должна выполняться отдельными группами специалистов. При этом необходимо обеспечить координацию ведения общего проекта и исключить дублирование результатов работ каждой проектной группы, которое может возникнуть в силу наличия общих данных и функций;

– технология должна обеспечивать возможность ведения работ по проектированию отдельных подсистем небольшими группами (3–7 человек). Это обусловлено принципами управляемости коллектива и повышения производительности за счет минимизации числа внешних связей;

– технология должна обеспечивать минимальное время получения работоспособной ИС. Речь идет не о сроках готовности всей ИС, а о сроках реализации отдельных подсистем. Реализация ИС в целом в короткие сроки может потребовать привлечения большого числа разработчиков, при этом эффект может оказаться ниже, чем при реализации в более короткие сроки отдельных подсистем меньшим числом разработчиков. Практика показывает, что даже при наличии полностью завершенного проекта, внедрение идет последовательно по отдельным подсистемам;

– технология должна предусматривать возможность управления конфигурацией проекта, ведения версий проекта и его составляющих, возможность автоматического выпуска проектной документации и синхронизацию ее версий с версиями проекта;

– технология должна обеспечивать независимость выполняемых проектных решений от средств реализации ИС (систем управления базами данных (СУБД), операционных систем, языков и систем программирования);

– технология должна быть поддержана комплексом согласованных CASE–средств, обеспечивающих автоматизацию процессов, выполняемых на всех стадиях ЖЦ.

Реальное применение любой технологии проектирования, разработки и сопровождения ИС в конкретной организации и конкретном проекте невозможно без выработки ряда стандартов (правил, соглашений), которые должны соблюдаться всеми участниками проекта. К таким стандартам относятся следующие:

– стандарт проектирования;

– стандарт оформления проектной документации;

– стандарт пользовательского интерфейса.

Стандарт проектирования должен устанавливать:

– набор необходимых моделей (диаграмм) на каждой стадии проектирования и степень их детализации;

– правила фиксации проектных решений на диаграммах, в том числе: правила именования объектов (включая соглашения по терминологии), набор атрибутов для всех объектов и правила их заполнения на каждой стадии, правила оформления диаграмм, включая требования к форме и размерам объектов, и т. д.;

– требования к конфигурации рабочих мест разработчиков, включая настройки операционной системы, настройки CASE–средств, общие настройки проекта и т. д.;

– механизм обеспечения совместной работы над проектом, в том числе: правила интеграции подсистем проекта, правила поддержания проекта в одинаковом для всех разработчиков состоянии (регламент обмена проектной информацией, механизм фиксации общих объектов и т.д.), правила проверки проектных решений на непротиворечивость и т. д.

Стандарт оформления проектной документации должен устанавливать:

– комплектность, состав и структуру документации на каждой стадии проектирования;

– требования к ее оформлению (включая требования к содержанию разделов, подразделов, пунктов, таблиц и т.д.),

– правила подготовки, рассмотрения, согласования и утверждения документации с указанием предельных сроков для каждой стадии;

– требования к настройке издательской системы, используемой в качестве встроенного средства подготовки документации;

– требования к настройке CASE–средств для обеспечения подготовки документации в соответствии с установленными требованиями.

Стандарт интерфейса пользователя должен устанавливать:

– правила оформления экранов (шрифты и цветовая палитра), состав и расположение окон и элементов управления;

– правила использования клавиатуры и мыши;

– правила оформления текстов помощи;

– перечень стандартных сообщений;

– правила обработки реакции пользователя.

2.2. Структура комплекта документов

Стандарты ISO 12207 и ISO 9000–3 оставляют право выбора содержания комплекта документов в каждом конкретном случае за разработчиком и заказчиком. Некоторые документы могут объединяться в один, а некоторые вообще исключаться. Но в любом случаи документы, схемы, модели, исходный код и др. являются основой управления проектом. Ниже приведен максимально возможный набор документов в ЖЦ базовой версии сложного ПС на базе стандартов ISO 12207 и ISO 9000–3.

Этап 1. Системный анализ проекта ПС.

Результаты обследования и описание объекта и целей его информатизации.

Отчет о результатах предварительного технико–экономического анализа проекта ПС, оценки сроков, бюджета, рентабельности и риска разработки ПС.

Концепция и предложения по созданию типовой, базовой версии ПС.

Описание постановки задач и предварительная спецификация требований к ПС в целом, к крупным функциональным компонентам и описания данных.

Формализованное описание модели ЖЦ проектируемого ПС.

Предварительный состав стандартов и дополнительных нормативных документов для формирования профиля ЖЦ ПС.

Предварительный укрупненный план проектирования и разработки базовой версии ПС.

Предварительное распределение специалистов по функциональным и технологическим компонентам и по этапам разработки ПС, а также оценка потребности в субподрядчиках и поставщиках компонентов.

Предварительный состав возможных для применения готовых компонентов и версий ПС в целом.

Системный проект, общее описание базовой версии ПС.

Контракт (договор) с заказчиком на проведение предварительного и детального проектирования типовой, базовой версии ПС.

Этап 2. Предварительное (пилотное) проектирование базовой версии ПС.

Уточненная схема архитектуры ИС, взаимодействия программных и информационных компонентов, организации вычислительного процесса и распределения ресурсов среды.

Описание функционирования ПС с объектами внешней среды и человеко–машинного диалога.

Общее описание ПС и комплект спецификаций требований к функциональным программным компонентам и описания данных.

Описание системы управления базами данных комплекса программ, структуры и распределения программных и информационных объектов версии ПС.

Предварительный вариант руководства администратора и пользователя (оператора) ИС и по применению базовой версии ПС,

Состав документации на технологию, средства ее автоматизации и документирование при разработке базовой версии ПС.

Описание предварительного распределения компонентов в базе данных проектирования версии ПС.

Проект руководства по техническому проектированию, программированию, тестированию и отладке функциональных программных компонентов версии ПС,

Описание требований к составу и формам отчетных документов по этапам, работам и компонентам базовой версии ПС.

Таблица распределения специалистов по компонентам версии ПС и по этапам работ.

Аттестаты разработчиков на право использования технологии, профилей стандартов и средств автоматизации разработки базовой версии ПС.

Описание показателей качества компонентов, профилей стандартов и требований к ним по этапам ЖЦ базовой версии ПС.

Пояснительная записка к предварительному проекту базовой версии ПС.

Уточненное и утвержденное техническое задание на проектирование и разработку базовой версии ПС.

Уточненный контракт (договор) с заказчиком на техническое проектирование базовой версии ПС.

Этап 3. Детальное проектирование базовой версии ПС.

Схема архитектуры ПС, взаимодействия компонентов и распределения вычислительных ресурсов среды.

Описания функционирования ПС, потоков данных и человеко–машинного диалога.

Утвержденные спецификации требований и алгоритмы на функциональные группы программ, программные и информационные компоненты.

Руководства программистам по применению технологии и средств автоматизации при разработке программных и информационных компонентов версии ПС.

Руководство по управлению обеспечением качества, надежности и безопасности версии ПС.

Руководство по применению профиля стандартов в ЖЦ базового ПС.

Детальный откорректированный и утвержденный план разработки и распределения ресурсов проекта базовой версии ПС.

Детальный план обеспечения средствами генерации тестов, а также обработки результатов тестирования и отладки модулей и функциональных компонентов и руководство по их применению.

Комплект апробированных программных и информационных компонентов типовой версии ПС и формирования адаптивных версий ПС пользователей.

Пояснительная записка технического проекта базовой версии ПС.

Уточненное техническое задание на разработку и внедрение базовой версии ПС.

Уточненный договор с заказчиком разработку и внедрение базовой версии ПС.

Этап 4. Кодирование (программирование), отладка и разработка документации компонентов базовой версии ПС.

Исходные тексты программных компонентов и описаний данных.

Планы тестирования и отладки программных компонентов.

Сценарии тестирования, спецификации тестов, используемых при тестировании и отладке компонентов.

Отчеты о результатах тестирования, достигнутых показателях качества, откорректированные после отладки программ и описаний данных.

Тексты программных и информационных компонентов на языке программирования и в объектном коде реализующей ЭВМ после завершения отладки и испытаний.

Этап 5. Интеграция (комплексирование) и комплексная отладка базовой версии ПС.

План, средства и руководство для комплексирования и сборки программных и информационных компонентов базовой версии ПС.

Руководства по применению средств автоматизации тестирования программ, обработке результатов отладки и проведению изменений в базовой версии ПС.

Результаты тестирования и полные характеристики функционирования базовой версии ПС в имитированной внешней среде.

План и средства автоматизации интеграции базовой версии ПС с аппаратными средствами в реальной операционной и внешней среде.

План и средства автоматизации и руководства для комплексной отладки и квалификационного тестирования базовой версии ПС в реальной операционной и внешней среде.

Этап 6. Испытания и документирование базовой версии ПС.

Программа, методики и описание средств обеспечения приемо–сдаточных испытаний базовой версии ПС, согласованные с заказчиком.

Результаты определения показателей качества ПС в процессе комплексной отладки и предварительных приемо–сдаточных испытаний.

Отчет о результатах опытной эксплуатации базовой версии ПС.

План адаптации, поставки и переноса на платформы пользователей базовой версии ПС.

Акт по результатам приемо–сдаточных испытаний базовой версии ПС и руководство пользователя.

Комплект эксплуатационной документации, описание версии ПС и руководство пользователя.

Исходные тексты программ, описания данных и полные спецификации требований к программным компонентам и версии ПС в целом.

Тексты и генераторы текстовых данных для тестирования программных и информационных компонентов и версии ПС в целом.

Руководство по установке, адаптации и генерации пользовательской версии ПС и загрузке базы данных в соответствии с условиями и характеристиками внешней среды пользователя.

Сертификат на применение и сопровождение версии ПС и область его действия.

Акт о завершении приемо–сдаточных и сертификационных испытаний и результатах выполнения контракта на разработку типовой базовой версии ПС.

2.3. Наиболее перспективные и приемлемые технологии разработки ПО

Технология создания крупных информационных систем предъявляет особые требования к методикам реализации и программным инструментальным средствам, а именно:

– реализацию крупных проектов принято разбивать на стадии анализа (прежде чем создавать ИС необходимо понять и описать бизнес–логику предметной области), проектирования (необходимо определить модули и архитектуру будущей системы), непосредственного кодирования, тестирования и сопровождения. Известно, что исправление ошибок, допущенных на предыдущей стадии, обходится примерно в десять раз дороже, чем на текущей, откуда следует, что наиболее критичными являются первые стадии проекта. Поэтому крайне важно иметь эффективные средства автоматизации ранних этапов реализации проекта;

– крупный проект невозможно реализовать в одиночку. Коллективная работа существенно отличается от индивидуальной, поэтому при реализации крупных проектов необходимо иметь средства координации и управления коллективом разработчиков;

– жизненный цикл создания сложной ИС сопоставим с ожидаемым временем ее эксплуатации. Компании регулярно перестраивают свои бизнес – процессы и, если работать в традиционной технологии для создания ИС может оказаться, что к моменту сдачи ИС она уже никому не нужна, поскольку компания, ее заказавшая, вынуждена перейти на новую технологию работы. Следовательно, для создания крупной ИС жизненно необходим инструмент значительно (в несколько раз) уменьшающий время разработки ИС;

– вследствие значительного жизненного цикла может оказаться, что в процессе создания системы внешние условия изменились. Обычно внесение изменений в проект на поздних этапах создании ИС – весьма трудоемкий и дорогостоящий процесс. Поэтому для успешной реализации крупного проекта необходимо, чтобы инструментальные средства, на которых он реализуются, были достаточно гибкими к изменяющимся требованиям.

На современном рынке средств разработки ИС достаточно много систем, в той или иной степени удовлетворяющих перечисленным требованиям (например, Sybase PowerDesigner). Здесь будет рассмотрена вполне конкретная технология разработки, основывающаяся на решениях фирм Computer Associates и IBM Rational Software, которые является одними из лучших на сегодняшний день по полноте охвата автоматизации и формализации технологического процесса производства программного обеспечения.

2.3.1. Технологии, базирующиеся на CASE–средствах Computer Associates

Известно, что наиболее критичными являются ранние этапы создания информационных систем – этап анализа и этап проектирования, поскольку именно на этих этапах могут быть допущены наиболее опасные и дорогостоящие ошибки. Существуют различные методологии и CASE–средства, обеспечивающие автоматизацию этих этапов. Такие CASE–средства должны выполнять следующие задачи:

1. Построение модели бизнес–процессов предприятия и анализ этой модели, анализ эффективности бизнес–процессов с помощью имитационного моделирования.

2. Создание структурной модели предприятия и связывание структуры с функциональной моделью. Результатом такого связывания должно быть распределение ролей и ответственности участников бизнес–процессов.

3. Описание документооборота предприятия.

4. Создание сценариев выполнения бизнес–функций, подлежащих автоматизации и полного описание последовательности действий (включающее все возможные сценарии и логику развития).

5. Создание сущностей и атрибутов и построение на этой основе модели данных.

6. Определение требований к информационной системе и связь функциональности информационной системы с бизнес–процессами.

7. Создание объектной модели, на которой в дальнейшем может быть автоматически сгенерирован программный код.

8. Интеграцию с инструментальными средствами, обеспечивающими поддержку групповой разработки, системами быстрой разработки, средствами управления проектом, средствами управления требованиями, средствами тестирования, средствами управления конфигурациями, средствами распространения и средствами документирования.

Практика показывает, что одна отдельно взятая нотация или инструмент не могут в полной мере удовлетворить всем перечисленным требованиям. CASE–средства фирмы Computer Associates (CA) представляет собой набор связанных между собой инструментальных средств, обеспечивающих решение задач анализа, проектирования, генерации, тестирования и сопровождения информационных систем. На рис. 2.2. приведены основные CASE– средства CA и их взаимодействие.

AllFusion Process Modeler (BPwin) позволяет создавать модели процессов и поддерживает три стандарта (нотации) моделирования – IDEF0, DFD и IDEF3. Каждая из трех нотаций, поддерживаемых в BPwin, позволяет рассмотреть различные стороны деятельности предприятия.

Модель IDEF0 предназначена для описания бизнес–процессов на предприятии, она позволяет понять, какие объекты или информация служат сырьем или источником для процессов, какие результаты производят работы, что является управляющими факторами и какие ресурсы для этого необходимы. Методология структурного моделирования предполагает построение модели AS–IS (как есть), анализ и выявление недостатков существующих бизнес–процессов и построение модели TO–BE (как должно быть), то есть модели, которая должна использоваться при построении автоматизированной системы управлением предприятия.

Нотация IDEF0 позволяет наглядно представить бизнес–процессы и легко выявить такие недостатки, как недостаточно эффективное управление, ненужные, дублирующие, избыточные или неэффективные работы, неправильно использующиеся ресурсы и т.д. При этом часто выясняется, что обработка информации и использование ресурсов неэффективны, важная информация не доходит до соответствующего рабочего места и т.д. Признаком неэффективной организации работ является, например, отсутствие обратных связей по входу и управлению для многих критически важных работ. Встроенная система стоимостного анализа (ABC) позволяет количественно оценить стоимость каждой работы и эффективность реализации той или иной технологии.

Рис. 2.2. Схема взаимодействия CASE–средств Computer Associates

Диаграммы потоков данных (Data flow diagramming, DFD) используются для описания документооборота и обработки информации. DFD описывают функции обработки информации, документы, объекты, а также сотрудников или отделы, которые участвуют в обработке информации. Наличие в диаграммах DFD элементов для описания источников, приемников и хранилищ данных позволяет более эффективно и наглядно описать процесс документооборота.

Для описания логики взаимодействия информационных потоков более подходит IDEF3, называемая также workflow diagramming, – нотация моделирования, использующая графическое описание информационных потоков, взаимоотношений между процессами обработки информации и объектов, являющихся частью этих процессов. Диаграммы IDEF3 позволяют описать как отдельные сценарии реализации бизнес–процессов, так и полное описание последовательности действий.

Организационные диаграммы (organization charts) позволяют описать структуру предприятия и создаются на основе предварительно созданных ролей. Благодаря организационным диаграммам можно отобразить как структуру организации, так и любую другую иерархическую структуру.

В BPwin возможен экспорт модели в систему имитационного моделирования Arena (Systems Modeling Corp.).

Имитационное моделирование – это метод, позволяющий строить модели, учитывающие время выполнения функций. Полученную модель можно “проиграть” во времени и получить статистику происходящих процессов так, как это было бы в реальности. В имитационной модели изменения процессов и данных ассоциируются с событиями. “Проигрывание” модели заключается в последовательном переходе от одного события к другому. Обычно имитационные модели строятся для поиска оптимального решения в условиях ограничения по ресурсам, когда другие математические модели оказываются слишком сложными. Экспорт модели процессов в Arena позволит аналитикам более качественно производить реорганизацию деятельности предприятий и оптимизировать производственные процессы.

BPwin поддерживает словари сущностей и атрибутов, что позволяет создавать объекты модели данных непосредственно в среде BPwin, связывать их с объектами модели процессов и экспортировать в систему моделирования данных AllFusion Erwin Data Modeler. Такая связь гарантирует завершенность анализа, гарантирует, что есть источник данных (Сущность) для всех потребностей данных (Работа) и позволяет делить данные между единицами и функциями бизнес–процессов. Каждая стрелка в модели процессов может быть связана с несколькими атрибутами различных сущностей. Связи объектов способствуют согласованности, корректности и завершенности анализа.

Для построения модели данных Computer Associates предлагает мощный и удобный инструмент – AllFusion Erwin Data Modeler.

ERwin имеет два уровня представления модели – логический и физический. На логическом уровне данные представляются безотносительно конкретной СУБД, поэтому могут быть наглядно представлены даже для неспециалистов. Физический уровень данных – это отображение системного каталога, который зависит от конкретной реализации СУБД.

ERwin позволяет проводить процессы прямого и обратного проектирования для СУБД более 20 типов. Это означает, что по модели данных можно сгенерировать схему БД или автоматически создать модель данных на основе информации системного каталога с учетом реализации конкретной СУБД. Кроме того, ERwin позволяет выравнивать модель и содержимое системного каталога после редактирования того, либо другого. ERwin поддерживает три нотации (IDEF1X, IE и DIMENSIONAL), что делает его незаменимым как для проектирования оперативных баз данных, так и для создания хранилищ данных.

2.3.2. Технологии, базирующиеся на CASE–средствах IBM Rational

IBM Rational Unified Process – база знаний, представленная в виде гипертекстового справочника, оформленного как Web–сайт.

RUP – методологическая основа для всего, что выпускает IBM Rational Corp. То есть данный продукт является энциклопедией (методологическим руководством) того, как нужно строить эффективное информационное производство. Также RUP регламентирует этапы разработки ПО, документы, сопровождающие каждый этап, и продукты самой IBM Rational Corp. для каждого этапа. В RUP заложены все самые современные идеи. Продукт постоянно обновляется, включая в себя все новые и новые возможности. К достоинством данной методологии стоит отнести чрезвычайную гибкость, то есть RUP не диктует, что необходимо сделать, а только рекомендует использовать то или иное средство.

Методология RUP основана на следующих основных принципах современной программной инженерии:

– итеративная разработка,

– управление требованиями,

– компонентная архитектура,

– визуальное моделирование,

– управление изменениями,

– постоянный контроль качества.

В методологии RUP каждый типовой проект разработки или внедрения ПО схематично представляется в виде диаграммы, на временной оси которой показана динамическая структура процесса. В соответствие с RUP работа над проектом разбивается на четыре фазы жизненного цикла (рис. 2.3.):

– начало проекта (эскизное проектирование)

– детализация системы (разработка технического задания)

– создание системы (рабочее проектирование)

– внедрение системы (приемо–сдаточные испытания) или переход.

Рис. 2.3. Схема RUP по стадиям работы над проектом

Каждая фаза может быть разбита на итерации (итеративный подход). Каждая итерация завершается выпуском работающего прототипа конечной системы. Это позволяет правильно оценивать риски проекта и эффективно снижать или устранять их на ранних стадиях разработки.

Для каждого процесса разработки методология RUP определяет ролевой состав проектной команды и описывает регламент действий, потоки событий, получаемые результаты и документы (артефакты процесса). Интегральная интенсивность этих действий в зависимости от времени показана на диаграмме RUP для всех основных и вспомогательных процессов. Из диаграммы видно, что в отличие от каскадной модели в методологии RUP все процессы выполняются практически во всех фазах жизненного цикла проекта. Однако в зависимости от фазы меняются текущие цели проекта и, соответственно, соотношение между объемами работ, соответствующих различным процессам.

2.3.2.1. Краткая характеристика основных технологических программных продуктов IBM Rational

Решения IBM Rational прежде всего адресованы крупным компаниям и организациям, имеющим выделенный ИТ бюджет и ведущим большое количество проектов разработки, приобретения, внедрения или сопровождения ПО, аутсортинговым компаниям–разработчикам заказного ПО и системным интеграторам.

Технология IBM Rational может служить основой для построения корпоративной стратегии в области разработки, внедрения и сопровождения ПО корпоративных ИС, удовлетворяющей требованиям современных международных (ISO 12207, 1504), национальных (ГОСТ 34, 19) и отраслевых стандартов. Вместе с тем она является очень гибкой и может использоваться для успешного выполнения проектов с минимальным объемом документирования.

Продуктовая линейка инструментов IBM Rational Corp. состоит из:

интегрированных функциональных наборов Rational Suite, представляющих эффективное и оптимизированное по цене решение для организации коллективной работы над ИТ проектами;

семейства продуктов IBM Rational XDE, которое дополняет возможности Rational Suite и предоставляет расширенный опыт разработки (eXtended Development Experience) для проектирования, разработки и тестирования Java и .NET приложений, включая Web–ориентированные решения;

специализированных инструментов для автоматизации отдельных процессов жизненного цикла ПО ИС (из этих инструментов комбинируются наборы Rational Suite).

Ориентировочный срок выполнения работ по внедрению процессов управления требованиями, визуального моделирования, конфигурационного управления и функционального тестирования составляет от 7–ми до 9–ти месяцев.

IBM Rational Rose:

IBM Rational Rose – CASE–средство визуального проектирования информационных систем, позволяющее моделировать как бизнес процессы, так и различные компоненты программного обеспечения. Поддерживает различные объектно–ориентированные методологии: язык моделирования (UML), нотации Гради Буча и Джеймса Рамбо.

Данный продукт позиционируется для использования проектировщиками, аналитиками, разработчиками. Rose является CASE средством, чьи графические возможности, основанные на языке UML (Universal Modeling Language – универсальном языке моделирования), способны решить любые задачи, связанные с любым проектированием и моделированием: от общей модели процессов (абстрактной) предприятия до конкретной (физической) модели класса в создаваемом ПО. Работа в Rational Rose заключается в проектировании определенного вида диаграмм, задавая при этом все свойства, отношения и взаимодействие друг с другом.

При разработке любой информационной системы в первую очередь возникает проблема взаимопонимания подрядчика и заказчика уже на стадии договоренности о структуре системы. Имея такой инструмент, как Rose, проектировщик (аналитик) всегда может показать заказчику не абстрактное словесное описание процесса, а его конкретную модель. Rose позволит быстрее утрясти с заказчиком все детали планируемой системы. Как говорилось выше, RUP описывает все артефакты (документы), возникающие как по ходу проекта, так и в Rose. Результатом моделирования является файл с моделью, которую проектировщик передает следующему звену сотрудников – кодировщикам, которые дополняют полученную логическую модель системы моделями конкретных классов на конкретном языке программирования.

Rose предоставляет разработчикам возможность проектирования и моделирования систем на языке UML c последующей кодогенерацией скелетов программ языке С++, С#, Ada, Java, J#, Basic, Xml, Oracle и др. Возможность обратного проектирования – реинжениринга, когда готовую информационную систему (например, на С++) или базу данных (на Oracle) “закачивают” в Rose с целью получения наглядной визуальной (структурной) модели. Редакция Rose DataModeler – позволяет проектировать базы данных.

Rose RealTime – узкоспециализированная версия, способная проводить 100% кодогенерацию и реинжениринг. Имеет неполный набор диаграмм.

Rose Enterprise – наиболее полная версия, включает в себя все вышеописанные возможности может быть использован проектировщиками, аналитиками, разработчиков широкого профиля.

IBM Rational SoDA:

IBM Rational SoDa – система, автоматизирующая процесс создания и обновления проектной документации. Результатом любой деятельности, является документ или отчет заранее установленного образца. Еще лучше, когда “внутренние стандарты” как–то соотносятся с общепринятыми мировыми. Последнее особенно важно интернациональным командам, работающим совместно с зарубежными партнерами. На решение всех проблем с документооборотом направлен инструмент Rational SoDA. Его основная обязанность – подготовить отчет по заранее установленному шаблону. Данные для отчета берутся из любого инструмента Rational. Например, необходимо получить готовый документ по имеющейся модели в Rational Rose. SoDA позволит сгенерировать подобный отчет, представив результат в виде обычного документа в формате MS Word.

SoDA является макросом (шаблоном) для MS Word. Система вызовов и меню интегрирована в Word и позволяет генерировать шаблоны на базе имеющихся файлов. SoDA допускает к использованию, как стандартных шаблонов, так и созданных пользователем при помощи специального Wizard, также встроенного в систему меню Word.

Набор отчетов, поддерживаемых SoDA: Rational Rose, Rose RealTime, Requisite PRO, ClearCase, TeamTest.

IBM Rational Requisite PRO:

IBM Rational RequisitePro – средство управления требованиями, позволяющее организовать совместную работу большого числа специалистов и исполнителей над одним проектом. Позволяет всем членам проектной команды находиться в курсе событий в течение всего процесса разработки. RequisitePro – это удобный инструмент для ввода и управления требованиями, который может использоваться всеми участниками команды. Продукт позволяет в наглядной форме получать, выводить, структурировать наборы вводимых требований.

Для каждого требования поддерживается набор атрибутов, позволяющий эффективно управлять проектом на основе задания иерархий требований, установки их приоритетов, сортировки, назначения требований конкретным исполнителям. Для требований предусмотрен, предопределен набор атрибутов, который может быть расширен пользователем по своему усмотрению, что позволяет характеризовать требования в соответствии с представлениями пользователя.

Развитые возможности прослеживания требований позволяют визуально определять схожие требования в рамках одного или нескольких проектов. Это дает возможность применения готовых апробированных решений в новом проекте. Возможность задания связей между требованиями позволяет легко проследить, какие требования следует подвергнуть анализу (и, возможно, пересмотру) при модификации некоторого конкретного требования или атрибута. Тем самым упрощается процесс внесения изменений.

Для каждого требования хранится его история, позволяющая отследить, какие изменения были внесены в требование, кем, когда и почему.

Выгоды эффективного управления требованиями с помощью RequisitePRO увеличиваются экспоненциально при использовании его всей командой разработчиков. RequisitePRO упрощает общение между разработчиками путем предоставления общего доступа ко всем требованиям проекта, либо к их части.

Все документы и данные, относящиеся к требованиям, централизованно организуются при помощи RequisitePRO. Требования заказчика, дизайн подсистем, сценарии, функциональные и нефункциональные спецификации и планы тестирования распределяются и связываются таким образом, чтобы максимально облегчить управление проектом.

IBM Rational ClearQuest:

IBM Rational ClearQuest – средство для управления запросами на изменения проекта и отслеживание дефектов в проекте на основе средств e–mail и Web–доступа.

ClearQuest является мощным средством управления запросами на изменение (change request management – CRM), специально разработанным с учетом динамической и сложной структуры процесса разработки ПО. ClearQuest отслеживает и управляет любым типом действий, приводящих к изменениям в течение всего жизненного цикла продукта, помогая, тем самым, организациям более предсказуемым (правильным) образом создавать качественное ПО.

Основные задачи, решаемые посредством ClearQuest:

– управлять изменениями, возникающими в ходе процесса разработки ПО.

– оптимизировать путь прохождения запросов на изменения, а также связанные с ним формы и процедуры.

– через World Wide Web поддерживать связь внутри команд, разделенных территориально.

– интегрироваться со средствами конфигурационного управления, такими как Rational’s ClearCase, позволяя создавать связи между запросами на изменение и развитие кода.

Каждый участник проекта может заходить в базу и определять собственные запросы.

Запросы на изменения проходят цикл из нескольких состояний (states), начиная с подачи и заканчивая их разрешением. Например, только что поданный запрос находится в состоянии “Подан” (Submitted). После передачи запроса сотруднику он переходит в состояние “Назначен” (Assigned). Начало работы над запросом переводит его в “Открытое” состояние (Open), и вся команда может видеть, что кто–то обрабатывает запрос. Наконец, когда запрос проверен и закрыт, он проходит соответственно стадии “Проверка” (Verify) и “Закрыт” (Resolved).

Таким образом, любой участник проекта, от подчиненного до руководителя, может пользоваться базой в собственных целях.

IBM Rational TestManager:

IBM Rational TestManager – позволяет централизованно контролировать и управлять всеми задачами по тестированию. Все задачи тестирования и средства функционального, нагрузочного тестирования и тестирования надежности доступны всем разработчикам группы.

IBM Rational Quantify:

IBM Rational Quantify – средство количественного определения узких мест, влияющих на общую эффективность работы программы.

Quantify – это простое, но в то же время мощное и гибкое средство учета производительности приложений, инструмент для сбора и анализа информации о производительности созданного программного продукта.

Quantify генерирует в табличной форме список всех вызываемых в процессе работы приложения функций, указывая временные характеристики каждой из них.

Quantify предоставляет полную статистическую выкладку по всем вызовам (внешним и внутренним), невзирая на размеры тестируемого приложения и время его тестирования. Сбор данных осуществляется посредством технологии OCI (Object Code Insertion). Суть способа состоит в подсчете всех машинных циклов путем вставки счетчиков в код для каждого функционального блока тестируемой программы (все циклы приложения просчитываются реально, а не при помощи произвольных выборок, как в большинстве пакетов тестирования). Уникальность данного подхода заключается в том, что, во–первых, тестируется не только сам исходный код, но и все используемые компоненты, (например: библиотеки DLL, системные вызовы), а во–вторых, для подобного анализа совсем необязательно иметь исходные тексты тестируемого приложения (правда, в этом случае нет возможности отслеживать внутренние вызовы).

Статистическая информация по вызовам может быть перенесена в Microsoft Excel, где можно построить как графики, так и сводные таблицы для разных запусков программы.

IBM Rational Purify:

IBM Rational Purify – продукт для локализации труднообнаруживаемых Runtime–ошибок программы.

Данный продукт направлен на разрешение всех проблем, связанных с утечками памяти и Runtime–ошибками. Многие программные продукты замыкают на себя во время работы все системные ресурсы без большой на то необходимости. Это случай, который приведет готовую систему к краху в самый ответственный момент. Возникновение подобного рода ошибок достаточно трудно отследить стандартными средствами, имеющимися в арсенале разработчика. И дело тут не только в том, что разработчик может где–то недосмотреть, а в том, что в подавляющем большинстве случаев проектные сроки вынуждают смотреть “сквозь пальцы” на “мелкие” неточности.

В общих чертах работа Purify сводится к выводу детальнейшей статистики об использовании памяти приложением. Программа собирает данные о любых потерях в памяти. К ним можно отнести и банальное невозвращение блока, и не использование указателей, и остановку исполнения программы с выводом состояния среды при возникновении Runtime–ошибки.

Purify предоставляет возможность разработчику не только видеть состояние исполнения (предупреждения, ошибки), но и переходить к соответствующему исходному тексту (естественно, такая возможность существует только для внутренних вызовов, поскольку исходные тексты динамических библиотек пока программистам недоступны).

IBM Rational PureCoverage:

IBM Rational PureCoverage – средство идентификации участков кода, пропущенных при тестировании.

Основное и единственное назначение продукта – выявление участков кода, пропущенного при тестировании приложения. Вполне очевидно, что при тестировании программы специалисту не удается оттестировать абсолютно все ее функции. А невозможно это, как правило, по двум причинам: во–первых, разработчик не может сделать все абсолютно правильно с учетом всех возможных нюансов, во–вторых, даже учитывая все возможные реакции приложения на внешние “раздражители” невозможно на 100% быть уверенным в том, что все оттестировано.

PureCoverage собирает статистику о тех участках программы, которые во время тестирования не были выполнены (пройдены). Дополнительно программа считает активно исполнявшиеся строки. Стало быть, разработчик может оценить не просто, сколько раз вызывалась та или иная функция, а сколько раз исполнилась каждая строка, составляющая ее. Имея подобную статистику, очень просто выявить не исполнившиеся строки и проанализировать причину, по которой они не получили управления.

Подобные строки PureCoverage подсвечивает красным цветом, четко указывая на наличие черных дыр в программе в виде не оттестированного кода.

PureCoverage позволяет организовать тестирование по одному из критериев белого ящика – выполнить все операторы в программе хотя бы один раз (это самый слабый критерий тестирования по критерию «белого ящика»).

IBM Rational TestFactory:

IBM Rational TestFactory позволяет производить любое тестирование, начиная от 32–битного Windows–приложения, компонентов ActiveX, DLL, сервера автоматизации OLE (OLE Automation server) или приложения на основе Web. Visual Test является автоматизированным инструментом тестирования для любых задач.

TestFactory дает возможность создавать поддерживаемые, расширяемые и пригодные для повторного применения компоненты тестирования, которые можно приспосабливать ко многим версиям и после некоторого планирования ко многим проектам.

Основу гибкости и мощи TestFactory составляет производный от Visual Basic расширенный язык тестирования программ SQABasic, с сотнями специфических для теста функций, специальных конструкций для облегчения тестирования, простого доступа к Windows API и открытой архитектурой, которая делает этот язык расширяемым.

Данный продукт обеспечивает надежное функциональное тестирование.

TestFactory может строить карту приложения, а затем автоматически генерировать сценарии тестирования для IBM Rational Robot.

IBM Rational Robot:

IBM Rational Robot – модуль, предназначенный для разработки, записи и выполнения автоматизированных тестов для сборочного, функционального и регрессионного тестирования приложений. Обеспечивает накопление и повторное использование тестовых процедур.

Robot – средство функционального тестирования, базирующееся на объектно–ориентированной технологии, что позволяет существенно превзойти традиционные средства GUI–тестирования (тестирования графического интерфейса), так как здесь тестируются сотни и тысячи свойств всех объектов приложения (даже скрытых объектов), как вместе, так и каждого в отдельности.

Программа способна работать в двух режимах: в автоматическом и ручном. В ручном режиме пользователь сам задает на специальном языке (SQABasic) сценарий тестирования (скрипт), в автоматическом – пользователь тестирует приложение, а Robot автоматически генерирует необходимый скрипт для дальнейшего повторного тестирования.

Скрипты, создаваемые в Rational Robot, обеспечивают поиск ошибок в приложении, оставаясь виртуально независимыми от внесенных изменений и платформы. Объектное тестирование обеспечивает быстрое создание скриптов, которые в дальнейшем можно легко изменять, создавать заново и воспроизводить. Rational Robot поддерживает широкий спектр языков программирования и ERP–решений. Rational Robot позволяет редактировать, отлаживать и настраивать скрипты. Допускает также тестирование сложных систем клиент/сервер на платформе Windows.

IBM Rational SiteLoad\Check:

IBM Rational SiteLoad\Check – средство автоматизированного тестирования характеристик распределенных сетевых приложений на платформах Windows и Unix.

Тесты производительности выполняются с помощью программы SiteLoad. При этом тестировании типично используется нагрузка сервера большим количеством виртуальных пользователей. Например, можно установить таймер для одного VU, чтобы определить, сколько времени займет выполнение запроса, когда тысячи других VU посылают запросы на тот же самый сервер в то же самое время. Термин “тесты производительности” включает нагрузочные, стрессовые, конкурирующие и конфигурационные тесты. Совокупность этих тестов позволяет ускорить цикл тестирования производительности и достигнуть значимых и точных результатов.

Нагрузочное тестирование с использованием SiteLoad выполняется тогда, когда нужно определить время отклика серверов или клиентских приложений при изменяющейся нагрузке. Нагрузочное тестирование также используется тогда, когда нужно вычислить, какое максимальное количество транзакций может выполнить сервер за определенный временной отрезок. Если клиент/серверная система использует распределенную архитектуру или средства балансировки нагрузки – нагрузочное тестирование может быть использовано для того, чтобы проверить правильность выбранных методов для балансирования или конструирования системы.

Нагрузочное тестирование выполняется как с использованием режима только виртуальных пользователей, когда измеряется время отклика только серверной части или комбинации виртуальных пользователей, так и пользователей графического интерфейса для измерения времени отклика системы для конкретного клиентского приложения.

Таким образом, становится возможным при использовании данной программы проверять на производительность любую систему клиент/сервер.

Этот продукт направлен на тестировщиков, разработчиков, WEB–разработчиков.

IBM Rational Suite:

IBM Rational Suite – это наборы основных программных продуктов, направленных на покрытие одного или нескольких этапов разработки программного обеспечения. Данный подход вполне оправдывает себя, поскольку, например, команде аналитиков незачем переплачивать за средства тестирования, которые им не нужны, и наоборот – тестировщикам ни к чему ставить Rose Modeler для проектирования баз данных. Второе преимущество наборов заключается в том, что их легче устанавливать и администрировать, поскольку продукты идут комплектом, а не разрозненно.

В качестве базовых средств для организации процессов управления требованиями, визуального моделирования, функционального тестирования и управления изменениями предлагается использовать ролевые наборы инструментов: IBM Rational Suite Team Unifying Platform – руководитель проекта; IBM Rational Suite Enterprise, IBM Rational Suite Development Studio – системные аналитики и разработчики проекта, и генерального подрядчика по разработке ПС и ИС; и IBM Rational Suite TestStudio – группа тестирования.

IBM Rational Suite обеспечивает:

Объединение усилий менеджеров, аналитиков, разработчиков и тестировщиков, снимая барьеры, которые существуют между ними, в том числе и при распределенной разработке

Оптимизацию работы исполнителей проекта, предоставляя набор инструментальных средств для выполнения специфических задач каждого члена команды

Простоту установки, поддержки и совместного использования продуктов, входящих в IBM Rational Suite, включая их обновление

Экономию средств – общая стоимость IBM Rational Suite значительно ниже стоимости приобретения по отдельности продуктов, входящих в пакет IBM Rational Suite

Ниже приведено краткое описание предлагаемых ролевых наборов IBM Rational Suite:

DevelopmentStudio – обеспечивает визуальное моделирование информационных систем, предоставляет необходимые инструменты для проектирования и создания программ высокого качества. Это средство, доступное на платформах Windows и UNIX, предназначенное для аналитиков, проектировщиков и разработчиков ИС

TestStudio – обеспечивает поддержку всех видов автоматического функционального и нагрузочного тестирования и тестирования надежности в течение всего жизненного цикла разработки информационной системы. Предназначено как для менеджеров проектов, тестировщиков приложений и проектировщиков тестов, так и для остальных членов тестовой команды

Enterprise – объединяет в себе весь спектр продуктов IBM Rational Software. Обеспечивает поддержку полного жизненного цикла разработки информационной системы. Ориентировано на использование, как менеджерами проектов, так и аналитиками, разработчиками и тестировщиками.

Для реализации конфигурационного управления и организации репозитория проектных материалов предлагается использовать комбинацию (Bundle) лицензий ролевых наборов инструментов с лицензиями инструментального средства IBM Rational.

Для создания инфраструктуры разработки и оснащения рабочих мест разработчиков представляется целесообразным использовать ролевой набор инструментов IBM Rational Suite Development Studio в комбинации с инструментом конфигурационного управления ClearCase (80% от полного числа рабочих мест). Этот набор содержит оптимальный комплект инструментов для реализации процессов управления требованиями и изменениями, визуального моделирования, анализа и проектирования, конфигурационного управления и управления проектами разработки и сопровождения ПС и ИС.

Инструментальные средства IBM Rational позволяют автоматизировать все процессы, описанные в методологии RUP, обеспечивают выполнение проектов на платформах Windows, UNIX, Linux и частично на Mainframe. Эти инструменты поддерживают широкий спектр языков и сред разработки, включая Java, Eclipse, C/C++/C#, Visual Basic, J2EE, .NET, Microsoft.NET, COM/+, CORBA и программные оболочки для разработки встроенного ПО и Realtime–приложений.


3. Методология функционального моделирования IDEF0

Постоянное усложнение производственно–технических и организационно экономических систем – фирм, предприятий, производств, и др. субъектов производственно–хозяйственной деятельности – и необходимость их анализа с целью совершенствования функционирования и повышения эффективности обусловливают необходимость применения специальных средств описания и анализа таких систем. Эта проблема приобретает особую актуальность в связи с появлением интегрированных компьютеризированных производств и автоматизированных предприятий.

В США это обстоятельство было осознано еще в конце 70–ых годов, когда ВВС США предложили и реализовали Программу интегрированной компьютеризации производства ICAM (ICAM – Integrated Computer Aided Manufacturing), направленную на увеличение эффективности промышленных предприятий посредством широкого внедрения компьютерных (информационных) технологий.

Реализация программы ICAM потребовала создания адекватных методов анализа и проектирования производственных систем и способов обмена информацией между специалистами, занимающимися такими проблемами. Для удовлетворения этой потребности в рамках программы ICAM была разработана методология IDEF (ICAM Definition), позволяющая исследовать структуру, параметры и характеристики производственно–технических и организационно–экономических систем. Общая методология IDEF состоит из трех частных методологий моделирования, основанных на графическом представлении систем:

– IDEF0 используется для создания функциональной модели, отображающей структуру и функции системы, а также потоки информации и материальных объектов, связывающие эти функции.

– IDEF1 применяется для построения информационной модели, отображающей структуру и содержание информационных потоков, необходимых для поддержки функций системы;

– IDEF2 позволяет построить динамическую модель меняющихся во времени поведения функций, информации и ресурсов системы.

К настоящему времени наибольшее распространение и применение имеют методологии IDEF0 и IDEF1 (IDEF1X), получившие в США статус федеральных стандартов.

Методология IDEF0 основана на подходе, разработанном Дугласом Т. Россом в начале 70–ых годов и получившем название SADT (Structured Analysis & Design Technique – метод структурного анализа и проектирования). Основу подхода и, как следствие, методологии IDEF0, составляет графический язык описания (моделирования) систем, обладающий следующими свойствами.

– Графический язык – полное и выразительное средство, способное наглядно представлять широкий спектр деловых, производственных и других процессов и операций предприятия на любом уровне детализации.

– Язык обеспечивает точное и лаконичное описание моделируемых объектов, удобство использования и интерпретации этого описания.

– Язык облегчает взаимодействие и взаимопонимание системных аналитиков, разработчиков и персонала изучаемого объекта (фирмы, предприятия), т.е. служит средством «информационного общения» большого числа специалистов и рабочих групп, занятых в одном проекте, в процессе обсуждения, рецензирования, критики и утверждения результатов.

– Язык прошел многолетнюю проверку и продемонстрировал работоспособность, как в проектах ВВС США, так и в других проектах, выполнявшихся государственными и частными промышленными компаниями.

– Язык легок и прост в изучении и освоении.

– Язык может генерироваться рядом инструментальных средств машинной графики; известны коммерческие программные продукты, поддерживающие разработку и анализ моделей – диаграмм IDEF0, например, продукт Design/IDEF 3.7 (и более поздние версии) фирмы Meta Software Corporation (США).

Перечисленные свойства языка предопределили выбор методологии IDEF0 в качестве базового средства анализа и синтеза производственно–технических и организационно–экономических систем, что нашло свое отражение в упомянутых федеральных стандартах США.

В Российской Федерации стандарт IDEF0 адаптирован в руководящий документ «Методология функционального моделирования IDEF0» (РД IDEF0–2000). Основные определения пунктов 3.1–3.7 используют информацию из данных стандартов.

3.1. Концепция методологии функционального моделирования IDEF0

М моделирует А, если М отвечает на вопросы относительно А. Здесь М – модель, А – моделируемый объект (оригинал).

Модель разрабатывают для понимания, анализа и принятия решений о реконструкции или замене существующей, либо проектировании новой системы.

Система представляет собой совокупность взаимосвязанных и взаимодействующих частей, выполняющих некоторую полезную работу. Частями (элементами) системы могут быть любые комбинации разнообразных сущностей, включающие людей, информацию, программное обеспечение, оборудование, изделия, сырье или энергию (энергоносители). Модель описывает, что происходит в системе, как ею управляют, какие сущности она преобразует, какие средства использует для выполнения своих функций и что производит.

Блочное моделирование и его графическое представление. Основной концептуальный принцип методологии IDEF – представление любой изучаемой системы в виде набора взаимодействующих и взаимосвязанных блоков, отображающих процессы, операции, действия, происходящие в изучаемой системе. В IDEF0 все, что происходит в системе и ее элементах, принято называть функциями. Каждой функции ставится в соответствие блок. На IDEF0–диаграмме блок представляет собой прямоугольник. Интерфейсы, посредством которых блок взаимодействует с другими блоками или с внешней по отношению к моделируемой системе средой, представляются стрелками, входящими в блок или выходящими из него. Входящие стрелки показывают, какие условия должны быть одновременно выполнены, чтобы функция, описываемая блоком, осуществилась.

Лаконичность и точность. Документация, описывающая систему, должна быть точной и лаконичной. Многословные характеристики, изложенные в форме традиционных текстов, неудовлетворительны. Графический язык позволяет лаконично, однозначно и точно показать все элементы (блоки) системы и все отношения и связи между ними, выявить ошибочные, лишние или дублирующие связи и т.д.

Передача информации. Средства IDEF0 облегчают передачу информации от одного участника разработки модели (отдельного разработчика или рабочей группы) к другому. К числу таких средств относятся:

– диаграммы, основанные на простой графике блоков и стрелок, легко читаемые и понимаемые;

– метки на естественном языке для описания блоков и стрелок, а также глоссарий и сопроводительный текст для уточнения смысла элементов диаграммы;

– последовательная декомпозиция диаграмм, строящаяся по иерархическому принципу, при котором на верхнем уровне отображаются основные функции, а затем происходит их детализация и уточнение;

– древовидные схемы иерархии диаграмм и блоков, обеспечивающие обозримость модели в целом и входящих в нее деталей.

Строгость и формализм. Разработка моделей IDEF0 требует соблюдения ряда строгих формальных правил, обеспечивающих преимущества методологии в отношении однозначности, точности и целостности сложных многоуровневых моделей. Все стадии и этапы разработки и корректировки модели должны строго, формально документироваться с тем, чтобы при ее эксплуатации не возникало вопросов, связанных с неполнотой или некорректностью документации.

Итеративное моделирование. Разработка модели в IDEF0 представляет собой пошаговую, итеративную процедуру. На каждом шаге итерации разработчик предлагает вариант модели, который подвергают обсуждению, рецензированию и последующему редактированию, после чего цикл повторяется. Такая организация работы способствует оптимальному использованию знаний системного аналитика, владеющего методологией и техникой IDEF0, и знаний специалистов – экспертов в предметной области, к которой относится объект моделирования.

Отделение «организации» от «функций». При разработке моделей следует избегать изначальной «привязки» функций исследуемой системы к существующей организационной структуре моделируемого объекта (предприятия, фирмы). Это помогает избежать субъективной точки зрения, навязанной организацией и ее руководством. Организационная структура должна явиться результатом использования (применения) модели. Сравнение результата с существующей структурой позволяет, во–первых, оценить адекватность модели, а во–вторых – предложить решения, направленные на совершенствование этой структуры.

3.2. Основные определения (понятия) методологии и языка IDEF0

Блок: прямоугольник, содержащий имя и номер и используемый для описания функции.

Ветвление: разделение стрелки на два или большее число сегментов. Может означать «развязывание пучка».

Внутренняя стрелка: входная, управляющая или выходная стрелка, концы которой связывают источник и потребителя, являющиеся блоками одной диаграммы. Отличается от граничной стрелки.

Входная стрелка: класс стрелок, которые отображают вход IDEF0–блока, то есть данные или материальные объекты, которые преобразуются функцией в выход. Входные стрелки связываются с левой стороной блока

Выходная стрелка: класс стрелок, которые отображают выход IDEF0–блока, то есть данные или материальные объекты, произведенные функцией. Выходные стрелки связываются с правой стороной блока IDEF0.

Глоссарий: список определений для ключевых слов, фраз и аббревиатур, связанных с узлами, блоками, стрелками или с моделью IDEF0 в целом.

Граничная стрелка: стрелка, один из концов которой связан с источником или потребителем, а другой не присоединен ни к какому блоку на диаграмме. Отображает связь диаграммы с другими блоками системы и отличается от внутренней стрелки.

Декомпозиция: разделение моделируемой функции на функции – компоненты.

Дерево узлов: представление отношений между родительскими и дочерними узлами модели IDEF0 в форме древовидного графа. Имеет то же значение и содержание, что и перечень узлов.

Диаграмма A–0: специальный вид (контекстной) диаграммы IDEF0, состоящей из одного блока, описывающего функцию верхнего уровня, ее входы, выходы, управления, и механизмы, вместе с формулировками цели модели и точки зрения, с которой строится модель.

Диаграмма: часть модели, описывающая декомпозицию блока.

Диаграмма–иллюстрация (FEO): графическое описание, используемое, для сообщения специфических фактов о диаграмме IDEF0. При построении диаграмм FEO можно не придерживаться правила IDEF0.

Дочерний блок: блок на дочерней (порожденной) диаграмме.

Дочерняя диаграмма: диаграмма, детализирующая родительский (порождающий) блок.

Имя блока: глагол или глагольный оборот, помещенный внутри блока и описывающий моделируемую функцию.

Интерфейс: разделяющая граница, через которую проходят данные или материальные объекты; соединение между двумя или большим числом компонентов модели, передающее данные или материальные объекты от одного компонента к другому.

Код ICOM: аббревиатура (Input – Вход, Control – Управление, Output – Выход, Mechanism – Механизм), код, обеспечивающий соответствие граничных стрелок дочерней диаграммы со стрелками родительского блока; используется для ссылок.

Контекст: окружающая среда, в которой действует функция (или комплект функций на диаграмме).

Контекстная диаграмма: диаграмма, имеющая узловой номер A–n (n ≥0), которая представляет контекст модели, Диаграмма A–0, состоящая из одного блока, является необходимой (обязательной) контекстной диаграммой; диаграммы с узловыми номерами A–1, A–2,... – дополнительные контекстные диаграммы.

Метка стрелки: существительное или оборот существительного, связанные со стрелкой или сегментом стрелки и определяющие их значение.

Модель IDEF0: графическое описание системы, разработанное с определенной целью и с выбранной точки зрения. Комплект одной или более диаграмм IDEF0, которые изображают функции системы с помощью графики, текста и глоссария.

Номер блока: число (0–6), помещаемое в правом нижнем углу блока и однозначно идентифицирующее блок на диаграмме.

Перечень узлов: список, часто ступенчатый, показывающий узлы модели IDEF0 в упорядоченном виде. Имеет то же значение и содержание, что и дерево узлов.

Примечание к модели: текстовый комментарий, являющийся частью диаграммы IDEF0 и используемый для записи факта, не нашедшего графического изображения.

Родительская диаграмма: диаграмма, которая содержит родительский блок.

Родительский блок: блок, который подробно описывается дочерней диаграммой.

Связывание/развязывание: объединение значений стрелок в составное значение (связывание в «пучок»), или разделение значений стрелок (развязывание «пучка»), выраженные синтаксисом слияния или ветвления стрелок.

Сегмент стрелки: сегмент линии, который начинается или заканчивается на стороне блока, в точке ветвления или слияния, или на границе (несвязанный конец стрелки).

Семантика: значение синтаксических компонентов языка.

Синтаксис: Структурные компоненты или характеристики языка и правила, которые определяют отношения между ними.

Слияние: объединение двух или большего числа сегментов стрелок в один сегмент. Может означать «развязывание пучка».

С–номер: номер, создаваемый в хронологическом порядке и используемый для идентификации диаграммы и прослеживания ее истории; может быть использован в качестве ссылочного выражения при определении конкретной версии диаграммы.

Стрелка: направленная линия, состоящая из одного или нескольких сегментов, которая моделирует открытый канал или канал, передающий данные или материальные объекты от источника (начальная точка стрелки), к потребителю (конечная точка с «наконечником»). Имеется 4 класса стрелок: входная стрелка, выходная стрелка, управляющая стрелка, стрелка механизма (включает стрелку вызова).

Стрелка вызова: вид стрелки механизма, который обозначает обращение из блока данной модели (или части модели) к блоку другой модели (или другой части той же модели) и обеспечивает связь между моделями или между разными частями одной модели.

Стрелка механизма: класс стрелок, которые отображают механизмы IDEF0, то есть средства, используемые для выполнения функции; включает специальный случай стрелки вызова. Стрелки механизмов связываются с нижней стороной блока IDEF0.

Стрелка, помещенная в туннель (туннельная стрелка): стрелка (со специальной нотацией), не удовлетворяющая обычному требованию, согласно которому каждая стрелка на дочерней диаграмме должна соответствовать стрелкам на родительской диаграмме.

Текст: любой текстовый (не графический) комментарий к графической диаграмме IDEF0.

Тильда: небольшая ломаная (волнистая) линия, используемая для соединения метки с конкретным сегментом стрелки или примечания модели с компонентом диаграммы.

Точка зрения: указание на должностное лицо или подразделение организации, с позиции которого разрабатывается модель.

Узел: блок, порождающий дочерние блоки; родительский блок.

Узловая ссылка: код, присвоенный диаграмме, для ее идентификации и определения положения в иерархии модели; формируется из сокращенного имени модели и узлового номера диаграммы с дополнительными расширениями.

Узловой номер диаграммы: часть узловой ссылки диаграммы, которая соответствует номеру родительского блока.

Узловой номер: код, присвоенный блоку и определяющий его положение в иерархии модели; может быть использован в качестве подробного ссылочного выражения.

Управляющая стрелка: класс стрелок, которые в IDEF0 отображают управления, то есть условия, при выполнении которых выход блока будет правильным. Данные или объекты, моделируемые как управления, могут преобразовываться функцией, создающей соответствующий выход. Управляющие стрелки связываются с верхней стороной блока IDEF0.

Функция: деятельность, процесс или преобразование (моделируемые блоком IDEF0), идентифицируемое глаголом или глагольной формой, которая описывает, что должно быть выполнено.

Цель: краткая формулировка причины создания модели.

3.3. Синтаксис графического языка IDEF0

Набор структурных компонентов языка, их характеристики и правила, определяющие связи между компонентами, представляют собой синтаксис языка. Компоненты синтаксиса IDEF0 – блоки, стрелки, диаграммы и правила. Блоки представляют функции, определяемые как деятельность, процесс, операция, действие или преобразование. Стрелки представляют данные или материальные объекты, связанные с функциями. Правила определяют, как следует применять компоненты; диаграммы обеспечивают формат графического и словесного описания моделей. Формат образует основу для управления конфигурацией модели.

Блок. Блок описывает функцию. Типичный блок показан на рис. 3.1. Внутри каждого блока помещается его имя и номер. Имя должно быть активным глаголом или глагольным оборотом, описывающим функцию. Номер блока размещается в правом нижнем углу. Номера блоков используются для их идентификации на диаграмме и в соответствующем тексте. Размеры блоков должны быть достаточными для того, чтобы включить имя блока. Блоки должны быть прямоугольными, с прямыми углами. Блоки должны быть нарисованы сплошными линиями.

Рис. 3.1. Пример блока

Стрелка. Стрелка формируется из одного или более отрезков прямых и наконечника на одном конце. Как показано на рис. 3.2., сегменты стрелок могут быть прямыми или ломаными; в последнем случае горизонтальные и вертикальные отрезки стрелки сопрягаются дугами, имеющими угол 90 градусов. Стрелки не представляют поток или последовательность событий, как в традиционных блок–схемах потоков или процессов. Они лишь показывают, какие данные или материальные объекты должны поступить на вход функции для того, чтобы эта функция могла выполняться.

Стрелки должны быть нарисованы сплошными линиями различной толщины. Стрелки могут состоять только из вертикальных или горизонтальных отрезков; отрезки, направленные по диагонали, не допускаются. Концы стрелок должны касаться внешней границы функционального блока, но не должны пересекать ее. Стрелки должны присоединяться к блоку на его сторонах. Присоединение в углах не допускается.

Рис. 3.2. Синтаксис стрелок

3.4. Семантика языка IDEF0

Семантика определяет содержание (значение) синтаксических компонентов языка и способствует правильности их интерпретации. Интерпретация устанавливает соответствие между блоками и стрелками с одной стороны и функциями и их интерфейсами – с другой.

Поскольку IDEF0 есть методология функционального моделирования, имя блока, описывающее функцию, должно быть глаголом или глагольным оборотом; например, имя блока "Выполнить проверку", означает, что блок с таким именем превращает непроверенные детали в проверенные. После присваивания блоку имени, к соответствующим его сторонам присоединяются входные, выходные и управляющие стрелки, а также стрелки механизма, что и определяет наглядность и выразительность изображения блока IDEF0.

Чтобы гарантировать точность модели, следует использовать стандартную терминологию. Блоки именуются глаголами или глагольными оборотами и эти имена сохраняются при декомпозиции Стрелки и их сегменты, как отдельные, так и связанные в «пучок», помечаются существительными или оборотами существительного. Метки сегментов позволяют конкретизировать данные или материальные объекты, передаваемые этими сегментами, с соблюдением синтаксиса ветвлений и слияний.

Каждая сторона функционального блока имеет стандартное значение с точки зрения связи блок/стрелки. В свою очередь, сторона блока, к которой присоединена стрелка, однозначно определяет ее роль.

Стрелки, входящие в левую сторону блока – входы. Входы преобразуются или расходуются функцией, чтобы создать то, что появится на ее выходе.

Стрелки, входящие в блок сверху – управления. Управления определяют условия, необходимые функции, чтобы произвести правильный выход.

Стрелки, покидающие блок справа – выходы, т.е. данные или материальные объекты, произведенные функцией.

Стрелки, подключенные к нижней стороне блока, представляют механизмы.

Стрелки, направленные вверх, идентифицируют средства, поддерживающие выполнение функции.

Другие средства могут наследоваться из родительского блока. Стрелки механизма, направленные вниз, являются стрелками вызова. Стрелки вызова обозначают обращение из данной модели или из данной части модели к блоку, входящему в состав другой модели или другой части модели, обеспечивая их связь, т.е. разные модели или разные части одной и той же модели могут совместно использовать один и тот же элемент (блок).

Стандартное расположение стрелок показано на рис. 3.3.

Рис. 3.3. Расположение стрелок

3.5. Имена и метки

Имя блока должно быть активным глаголом или глагольным оборотом. Каждая сторона функционального блока должна иметь стандартное отношение блок/стрелки:

а) входные стрелки должны связываться с левой стороной блока;

б) управляющие стрелки должны связываться с верхней стороной блока;

в) выходные стрелки должны связываться с правой стороной блока;

г) стрелки механизма (кроме стрелок вызова) должны указывать вверх и подключаться к нижней стороне блока.

д) стрелки вызова механизма должны указывать вниз, подключаться к нижней стороне блока, и помечаться ссылкой на вызываемый блок.

Сегменты стрелок, за исключением стрелок вызова, должны помечаться существительным или оборотом существительного, если только единственная метка стрелки, несомненно, не относится к стрелке в целом. В метках стрелок не должны использоваться следующие термины: функция, вход, управление, выход, механизм, вызов.

Чтобы связать стрелку с меткой, следует использовать "тильду".

Как указывалось, имена функций – глаголы или глагольные обороты. Примеры таких имен: производить детали, планировать ресурсы, наблюдать за выполнением, проектировать систему, эксплуатировать, разработать детальные чертежи, изготовить компонент, проверять деталь.

Стрелки идентифицируют данные или материальные объекты, необходимые для выполнения функции или производимые ею. Каждая стрелка должна быть помечена существительным или оборотом существительного, например: спецификации, отчет об испытаниях, бюджет, конструкторские требования, конструкция, детали, директива, инженер–конструктор, плата в сборе, требования.

Пример размещения меток стрелок и имени блока показан на рис. 3.4.

Рис. 3.4. Пример размещения меток стрелок и имени блока

3.6. Отношения блоков на диаграммах

В методологии IDEF0 существует 6 (шесть) типов отношений между блоками в пределах одной диаграммы:

– доминирование;

– управление;

– выход – вход;

– обратная связь по управлению;

– обратная связь по входу;

– выход – механизм.

Первое из перечисленных отношений определяется взаимным расположением блоков на диаграмме. Предполагается, что блоки, расположенные на диаграмме выше и левее, «доминируют» над блоками, расположенными ниже и правее. «Доминирование» понимается как влияние, которое один блок оказывает на другие блоки диаграммы.

Остальные пять отношений описывают связи между блоками и изображаются соответствующими стрелками.

Отношения управления и выход – вход являются простейшими, поскольку отражают прямые взаимодействия, которые понятны и очевидны.

Отношение управления (рис. 3.5.) возникает тогда, когда выход одного блока служит управляющим воздействием на блок с меньшим доминированием.

Рис. 3.5. Отношение управления

Отношение выход – вход (рис. 3.6.) возникает при соединении выхода одного блока с входом другого блока с меньшим доминированием.

Рис. 3.6. Отношение входа

Обратная связь по управлению и обратная связь по входу являются более сложными типами отношений, поскольку они представляют итерацию (выход функции влияет на будущее выполнение других функций с большим доминированием, что впоследствии влияет на исходную функцию). Обратная связь по управлению (рис. 3.7.) возникает тогда, когда выход некоторого блока создает управляющее воздействие на блок с большим доминированием.

Рис. 3.7. Обратная связь по управлению

Отношение обратной связи по входу (рис. 3.8.) имеет место тогда, когда выход блока становиться входом другого блока с большим доминированием.

Рис. 3.8. Обратная связь по входу

Связи «выход – механизм» (рис. 3.9.) отражают ситуацию, при которой выход одной функции становиться средством достижения цели для другой. Связи «выход – механизм» возникают при отображении в модели процедур пополнения и распределения ресурсов, создания или подготовки средств для выполнения функций системы (например, приобретение или изготовление требуемых инструментов и оборудования, обучение персонала, организация физического пространства, финансирование, закупка материалов).

Рис. 3.9. Связь «выход – механизм»

3.7. Диаграммы IDEF0

IDEF0–модели состоят из трех типов документов: графических диаграмм, текста и глоссария. Эти документы имеют перекрестные ссылки друг на друга.

Диаграмме может быть поставлен в соответствие структурированный текст, представляющий собой краткий комментарий к содержанию диаграммы. Текст используется для объяснений и уточнений характеристик, потоков, внутриблочных соединений и т.д. Текст не должен использоваться для описания и без того понятных блоков и стрелок на диаграммах.

Глоссарий предназначен для определения аббревиатур (акронимов), ключевых слов и фраз, используемых в качестве имен и меток на диаграммах. Глоссарий определяет понятия и термины, которые должны быть одинаково понимаемы всеми участниками разработки и пользователями модели, чтобы правильно интерпретировать ее содержание.

Графическая диаграмма – главный компонент IDEF0–модели, содержащий блоки, стрелки, соединения блоков и стрелок и ассоциированные с ними отношения. Блоки представляют основные функции моделируемого объекта. Эти функции могут быть разбиты (декомпозированы) на составные части и представлены в виде более подробных диаграмм; процесс декомпозиции продолжается до тех пор, пока объект не будет описан на уровне детализации, необходимом для достижения целей конкретного проекта. Диаграмма верхнего уровня обеспечивает наиболее общее или абстрактное описание объекта моделирования. За этой диаграммой следует серия дочерних диаграмм, дающих более детальное представление об объекте.

Каждая модель должна иметь контекстную диаграмму верхнего уровня, на которой объект моделирования представлен единственным блоком с граничными стрелками. Эта диаграмма называется A–0 (А минус нуль). Стрелки на этой диаграмме отображают связи объекта моделирования с окружающей средой. Поскольку единственный блок представляет весь объект, его имя общее для всего проекта. Это же справедливо и для всех стрелок диаграммы, поскольку они представляют полный комплект внешних интерфейсов объекта. Диаграмма A–0 устанавливает область моделирования и ее границу. Пример диаграммы A–0 показан на рис. 3.10., рис. 3.11., рис. 3.12.

 

Рис. 3.10. Пример контекстной диаграммы

Рис. 3.11. Пример контекстной диаграммы

Рис. 3.12. Пример контекстной диаграммы

Контекстная диаграмма A–0 также должна содержать краткие утверждения, определяющие точку зрения должностного лица или подразделения, с позиций которого создается модель, и цель, для достижения которой ее разрабатывают. Эти утверждения помогают руководить разработкой модели и ввести этот процесс в определенные рамки.

Точка зрения определяет, что и в каком разрезе можно увидеть в пределах контекста модели. Изменение точки зрения, приводит к рассмотрению других аспектов объекта. Аспекты, важные с одной точки зрения, могут не появиться в модели, разрабатываемой с другой точки зрения на тот же самый объект.

Формулировка цели выражает причину создания модели, т.е. содержит перечень вопросов, на которые должна отвечать модель, что в значительной мере определяет ее структуру.

Наиболее важные свойства объекта обычно выявляются на верхних уровнях иерархии; по мере декомпозиции функции верхнего уровня и разбиения ее на подфункции, эти свойства уточняются. Каждая подфункция, в свою очередь, декомпозируется на элементы следующего уровня, и так происходит до тех пор, пока не будет получена релевантная структура, позволяющая ответить на вопросы, сформулированные в цели моделирования. Каждая подфункция моделируется отдельным блоком. Каждый родительский блок подробно описывается дочерней диаграммой на более низком уровне. Все дочерние диаграммы должны быть в пределах области контекстной диаграммы верхнего уровня.

3.8. Дочерняя диаграмма 

После создания контекстной диаграммы можно приступить к декомпозиции.

Единственная функция, представленная на контекстной диаграмме верхнего уровня, может быть разложена на основные подфункции посредством создания дочерней диаграммы. В свою очередь, каждая из этих подфункций может быть разложена на составные части посредством создания дочерней диаграммы следующего, более низкого уровня, на которой некоторые или все функции также могут быть разложены на составные части. Каждая дочерняя диаграмма содержит дочерние блоки и стрелки, обеспечивающие дополнительную детализацию родительского блока.

Дочерняя диаграмма, создаваемая при декомпозиции, охватывает ту же область, что и родительский блок, но описывает ее более подробно. Таким образом, дочерняя диаграмма как бы вложена в свой родительский блок. Эта структура иллюстрируется рис. 3.13., рис. 3.14., рис. 3.15.

Рис. 3.13. Пример декомпозиции контекстной диаграммы рис. 3.11.

Рис. 3.14. Пример декомпозиции контекстной диаграммы рис. 3.12.

3.9. Родительская диаграмма

Родительская диаграмма – та, которая содержит один или более родительских блоков. Каждая обычная (не–контекстная) диаграмма является также дочерней диаграммой, поскольку, по определению, она подробно описывает некоторый родительский блок. Таким образом, любая диаграмма может быть как родительской диаграммой (содержать родительские блоки), так и дочерней (подробно описывать собственный родительский блок). Аналогично, блок может быть как родительским (подробно описываться дочерней диаграммой) так и дочерним (появляющимся на дочерней диаграмме). Основное иерархическое отношение существует между родительским блоком и дочерней диаграммой, которая его подробно описывает (рис. 3.15.).

То, что блок является дочерним и раскрывает содержание родительского блока на диаграмме предшествующего уровня, указывается специальным ссылочным кодом, написанным ниже правого нижнего угла блока. Этот ссылочный код может формироваться несколькими способами, из которых самый простой заключается в том, что код, начинающийся с буквы А (по имени диаграммы А–0), содержит цифры, определяемые номерами родительских блоков. Например, показанные на рис. 3.16. коды означают, что диаграмма является декомпозицией 1–го блока диаграммы, которая, в свою очередь является декомпозицией 6–го блока диаграммы А0, а сами коды образуются присоединением номера блока.

Рис. 3.15. Иерархия отношений

Рис. 3.16. Ссылочные коды

Таким образом, код формируется так:

3.10. Свойства диаграмм

3.10.1. Стрелки как ограничения 

Стрелки на диаграмме IDEF0, представляя данные или материальные объекты, одновременно задают своего рода ограничения (условия). Входные и управляющие стрелки блока, соединяющие его с другими блоками или с внешней средой, по сути, описывают условия, которые должны быть выполнены для того, чтобы реализовалась функция, записанная в качестве имени блока.

Рис. 3.17. Пример ограничения

Рис. 3.17. иллюстрирует случай, при котором "функция 3" может быть выполнена только после получения данных, выработанных "функцией 1" и "функцией 2".

3.10.2. Параллельное функционирование

Различные функции в модели могут быть выполнены параллельно, если удовлетворяются необходимые ограничения (условия). Как показано на рис. 18., один блок может создать данные или материальные объекты, необходимые для параллельной работы нескольких блоков.

Рис. 3.18. Пример параллельного выполнения

3.10.3. Ветвление и слияние сегментов стрелок

Ветвление и слияние стрелок призвано уменьшить загруженность диаграмм графическими элементами (линиями). Чтобы стрелки и их сегменты правильно описывали связи между блоками – источниками и блоками – потребителями, используется аппарат меток. Метки связываются с сегментами посредством тильд. При этом между сегментами возникают определенные отношения, описанные ниже:

– непомеченные сегменты (рис. 3.19.) содержат все объекты, указанные в метке стрелки перед ветвлением (т.е. все объекты принадлежат каждому из сегментов);

Рис. 3.19. Пример ветвления стрелок

– сегменты, помеченные после точки ветвления (рис. 3.20.), содержат все объекты, указанные в метке стрелки перед ветвлением, или их часть, описываемую меткой каждого конкретного сегмента;

Рис. 3.20. Пример ветвления стрелок

– при слиянии непомеченных сегментов объединенный сегмент стрелки содержит все объекты, принадлежащие сливаемым сегментам и указанные в общей метке стрелки после слияния (рис. 3.21.);

– при слиянии помеченных сегментов (рис. 3.22.) объединенный сегмент содержит все или некоторые объекты, принадлежащие сливаемым сегментам и перечисленные в общей метке после слияния; если общая метка после слияния отсутствует, это означает, что общий сегмент передает все объекты, принадлежащие сливаемым сегментам;

Рис. 3.21. Пример слияния непомеченных сегментов

Рис. 3.22. Пример слияния помеченных сегментов

3.11. Создание диаграмм IDEF0 в среде AllFusion Process Modeler

После запуска программы на экране появиться диалоговое окно, в котором следует выбрать режим работы: либо создать новую модель (Create model), либо открыть существующую модель (Open model) (рис. 3.23.). При первом открытии программы (при создании новой модели) область построения содержит диаграмму IDEF0.

Рис. 3.23.

На основной панели инструментов расположены элементы управления, в основном знакомые по другим Windows–интерфейсам (рис. 3.24.).

Рис. 3.24.

На основной панели инструментов (либо в любом желаемом месте экрана) расположены инструменты редактора BPWin:

Рис. 3.25.

Любая диаграмма состоит из совокупности следующих объектов: блоков, дуг, текстовых блоков. Для работы с любым из этих объектов можно использовать либо основное меню (рис. 3.26.), либо контекстно–зависимое меню (меню, появляющееся при нажатии правой кнопке мыши). Принципы работы с меню являются стандартными для среды Windows. Объект сначала делается активным, затем над ним осуществляются необходимые действия.

Рис. 3.26.

Каждая диаграмма располагается внутри бланка имеющего несколько информационных полей.

IDEF0–модель предполагает наличие четко сформулированной цели, единственного субъекта моделирования и одной точки зрения. Для внесения области, цели и точки зрения в модели IDEF0 в BPwin следует выбрать пункт меню Model/Model Properties, вызывающий диалог Model Properties (рис. 3.27.).

Рис. 3.27.

В закладке Purpose следует внести цель и точку зрения, а в закладку Definition –определение модели и описание области. В закладке Status того же диалога можно описать статус модели (черновой вариант, рабочий, окончательный и т.д.), время создания и последнего редактирования (отслеживается в дальнейшем автоматически по системной дате). В закладке Source описываются источники информации для построения модели (например, "Опрос экспертов предметной области и анализ документации"). Закладка General служит для внесения имени проекта и модели, имени и инициалов автора и временных рамок, модели – AS–IS и TО–ВЕ.

Результат описания модели можно получить в отчете Model Report. Диалог настройки отчета по модели вызывается из пункта меню Tools/Reports/ModelReport. В диалоге настройки следует выбрать необходимые поля (при этом автоматически отображается очередность вывода информации в отчет) (рис. 3.28.).

Рис. 3.28.

Принцип работы в пакете BPwin рассмотрим на примере задачи обслуживания клиентов в банке для автомобилистов.

Задача: В банке для автомобилистов имеется два окошечка, каждое из которых обслуживается одним кассиром и имеет отдельную подъездную полосу. Обе полосы расположены рядом. Из предыдущих наблюдений известно, что интервалы времени между прибытием клиентов в час пик распределены экспоненциально с математическим ожиданием равным 0,5 единицы времени. Так как банк перегружен только в часы пик, то анализируется только этот период. Продолжительность обслуживания у обоих кассиров одинакова и распределена экспоненциально с математическим ожиданием, равным 0,3 единицы времени. Известно также, что при равной длине очереди, а так же при отсутствии очередей клиенты отдают предпочтение первой полосе. Во всех других случаях клиенты выбирают более короткую очередь. После того как клиент въехал в банк, он не может покинуть его, пока не будет обслужен. Однако он может сменить очередь, если стоит последним и разница в длине очередей при этом составляет не менее двух автомобилей. Из–за ограниченного места на каждой полосе может находиться не более трех автомобилей. В банке, таким образом, не может находиться более восьми автомобилей, включая автомобили двух клиентов, обслуживаемых в текущий момент кассиром. Если место перед банком заполнено до отказа, прибывший клиент считается потерянным, так как сразу уезжает.

Начальные условия имитации:

1. Оба кассира заняты. Продолжительность обслуживания для каждого кассира нормально распределена с математическим ожиданием, равным 1 единице времени, и среднеквадратическим отклонением, равным 0,3 единицы времени.

2. Прибытие первого клиента запланировано на момент времени 0,1.

3. В каждой очереди ожидают по два автомобиля.

Необходимо оценить следующие характеристики:

1. загрузку по каждому кассиру

2. число обслуженных клиентов

3. среднее время пребывания клиента в банке

4. среднее число клиентов в каждой очереди

5. процент клиентов, которым отказано в обслуживании

6. число смен подъездных полос

Имитация системы проводиться в течение 1000 единиц времени.

Методология IDEF0 предписывает построение иерархической системы диаграмм – единичных описаний фрагментов системы. Сначала проводиться описание системы в целом (контекстная диаграмма), после чего проводиться декомпозиция – система разбивается на подсистемы, и каждая подсистема описывается отдельно.

После создания проекта мы видим окно с единственным блоком. Назовем данный блок «Банк автомобилистов». Для этого необходимо щелкнуть правой клавишей мыши по блоку и выбрать команду Name и в диалоговом окне ввести название (рис. 3.29.).

Рис. 3.29.

После создания объекта «Банк автомобилистов» необходимо обозначить его основные функции и элементы взаимодействия. В Bpwin этими элементами являются u1076 дуги. Для построения дуг управления, входа, выхода и механизмов необходимо выбрать инструмент (Arrow Tool), затем щелкнуть мышью со стороны периметра и второй щелчок с соответствующей стороны блока. Для построения дуги выхода щелкнуть первоначально справой стороны блока, затем со стороны периметра.

То с какой стороны дуга подходит к блоку является своего рода значением данной дуги.

Слева – вход в блок

Справа – выход в блок

Сверху – управляющая информация

Снизу – механизмы (средства производства)

Дугам, как и блокам можно придавать свои имена. Для этого необходимо: щелкнуть правой клавишей мыши по блоку и выбрать команду Name и в диалоговом окне ввести название дуги.

Определите наименования для созданных ранее дуг, соответственно типу дуги: «вход клиента», «выход клиента», «количество клиентов в очереди 1», «количество клиентов в очереди 2», «кассир 1», «кассир 2».

Название дуги является независимым объектом, который можно перемещать относительно дуги. Текст может располагаться по отношению к дуге в свободной форме, либо соединен с дугой символом тильды. Чтобы установить тильду следует нажать инструмент (Squiggle Tool), а затем выбрать дугу, либо использовать команду контекстно–зависимого меню Squiggle.

Дуга представляет собой совокупность отельных графических объектов: прямые участки, изогнутые участки, изображение наконечника. Отдельные элементы можно передвигать независимо друг от друга, меняя форму дуги, также дугу можно перемещать как единый неделимый элемент.

Для набора текста следует нажать инструмент (Text Block Tool), после чего щелкнуть мышью в позиции предполагаемого ввода текста. Затем в появившемся диалоговом окне набрать нужный текст и установить опцию значимости (обычный текст, цель, точка зрения).

Для удаления блока и дуги или текста необходимо их выделить щелчком левой кнопки мыши и нажать клавишу Delete, а затем подтвердить намерения по поводу удаления.

Пример контекстной диаграммы рассматриваемой задачи смотрите на рис. 3.12.

После создания контекстной диаграммы необходимо расписать работу отдельных участков банка автомобилистов. Для этого декомпозируем эту диаграмму (рис. 3.14.).

Для декомпозиции необходимо в браузере щелкнуть левой кнопкой мыши на имени диаграммы, а затем нажать кнопку  (Go to Child Diagram), затем в диалоговом окне (рис. 3.30.) ввести необходимое количество блоков и тип диаграммы.

Рис. 3.30.

Выполним декомпозицию блока диаграммы А–0 (рис. 3.12.), создав диаграмму А0 (рис. 3.14.), состоящую из 4 блоков: «Выбор очереди», «Обслужить касса 1», «Обслужить касса 2», «Выход». Если в дальнейшем необходимо добавить блоки на диаграмме, то необходимо выбрать инструмент (Activity Box Tool) и щелкнуть мышью в нужном месте диаграммы.

После декомпозиции необходимо соединить получившиеся блоки дугами. Для этого необходимо выбрать инструмент, щелкнуть мышью по исходной стороне блока затем по конечной стороне следующего блока. Аналогично строятся разветвления и слияния дуг.

3.12. Диаграммы DFD

Диаграммы потоков данных (Data flow diagramming, DFD) используются для описания документооборота и обработки информации. Их можно использовать как дополнение к модели IDEF0 для более наглядного отображения текущих операций документооборота в корпоративных системах обработки информации. DFD описывают функции обработки информации (работы), документы (стрелки, arrow), объекты, сотрудников или отделы, которые участвуют в обработке информации (внешние ссылки, external references) и таблицы для хранения документов (хранилище данных, data store).

Создание диаграмм DFD в среде BPwin аналогично созданию диаграмм IDEF0. Только после запуска среды следует выбрать область построения DFD.

Пример диаграммы DFD приведен на рис. 3.31.

Рис. 3.31.

3.13. Пример проектирования функций подсистемы обработки и хранения данных

Рис. 3.32.

Рис. 3.33.

Рис. 3.34.

Рис. 3.35.

Рис. 3.36.

Пример описания логики работы системы управления данными:

Рис. 3.37.

Рис. 3.38.

Рис. 3.39.

Рис. 3.40.

Рис. 3.41.

Рис. 3.42.

Рис. 3.43.

Рис. 3.44.


4. IDEF3 – методология описания и моделирования процессов

Введем понятие процесса. Процесс – форма представления и методы использования информации о производстве и используемых производственных ресурсах, их характеристиках и ограничениях с точки зрения управления производством. – Это упорядоченный набор функций, охватывающий различные сущности предприятия и завершающийся глобальной целью. Есть и другие определения процесса. Под “процессом” мы понимаем набор операций, которые, взятые вместе, создают результат, имеющий ценность для потребителя.

Бизнес процессы могут быть разного масштаба: масштаба предприятия – в него вовлечены работники нескольких подразделений, бизнес–процесс может не выходить за рамки отдела или производственного цеха и т.п. Внутри одного бизнес процесса часть составляющих его технологических и организационно–деловых процессов может быть организована в отдельный вложенный бизнес–процесс меньшего масштаба. Отдельные технологические и организационно–деловые процессы могут раскладываться на операции (законченные части процесса, выполняемые на одном рабочем месте, такие как выписать накладную, составить договор), которые в свою очередь делятся на функции (законченные части операции, выполняемые одними и теми же средствами – позвонить, записать, фрезеровать и т.п.).

Введем понятие модель. Модель – это идеализированное представление достаточно близко отражающее описываемую систему. Мощность модели заключается в ее способности упростить реальную систему, что дает возможность предсказывать факты в системе на основании соответствующих фактов представленных в модели. Основная цель моделирования процесса состоит в том, чтобы идентифицировать и документировать все аспекты работы системы.

Стандарт IDEF3 это методология описания процессов, рассматривающая последовательность выполнения и причинно–следственные связи между ситуациями и событиями для структурного представления знаний о системе, и описания изменения состояний объектов, являющихся составной частью описываемых процессов.

Моделирование в стандарте IDEF3 производится с использованием графического представления процесса, материальных и информационных потоков в этом процессе, взаимоотношений между операциями и объектами в процессе. При помощи IDEF3 описывают логику выполнения работ, очередность их запуска и завершения, т.е. IDEF3 предоставляет инструмент моделирования сценариев действий сотрудников организации, отделов, цехов и т.п., например порядок обработки заказа или события, на которые необходимо реагировать за конечное время, выполнение действий по производству товара им т.д.

Метод IDEF3 использует категорию Сценариев для упрощения структуры описаний сложного многоэтапного процесса. Сценарии определяют граничные условия описания. Здесь под сценарием (Scenario) будем понимать повторяющуюся последовательность ситуаций или действий, которые описывают типичный класс проблем, присутствующих в организации или системе, описание последовательности изменений свойств объекта, в рамках рассматриваемого процесса (например, описание последовательности обработки менеджером заявки).

IDEF3 предоставляет инструментарий для наглядного исследования и моделирования сценариев выполнения процессов. Метод позволяет проводить описание с необходимой степенью подробности посредством использования декомпозиции. IDEF3 как инструмент моделирования фиксирует следующую информацию о процессе:

Объекты, которые участвуют при выполнении сценария,

Роли, которые выполняют эти объекты (например, агент, транспорт и т.д.),

Отношения между работами в ходе выполнения сценария процесса,

Состояния и изменения, которым подвергаются объекты,

Время выполнения и контрольные точки синхронизации работ,

Ресурсы, которые необходимы для выполнения работ.

Основная цель IDEF3 состоит в том, чтобы предоставить специалисту (эксперту) предметной области инструмент – методологию структурного анализа, при помощи которой он сможет представлять знания о выполнении операций в системе или организации в целом. Цель описания может состоять как в документальном оформлении и распространении знаний о процессе, так и в идентификации противоречивости или несовместимости выполнения отдельных операций. Приобретение знаний допускается прямым сбором утверждений о практике выполнения процессов и возникновении различных ситуаций в процессе в форме, которая является наиболее естественной.

Итак, методология IDEF3 предназначена для обеспечения сбора данных о процессе. Описание процесса IDEF3 представляет собой структурированную базу знаний, которая состоит из набора диаграмм описания процесса, объектных диаграмм изменения состояний объектов и уточняющих форм. Средства документирования и моделирования IDEF3 позволяют выполнять следующие задачи:

Документировать имеющиеся данные о технологии выполнения процесса, выявленные, скажем, в процессе опроса специалистов предметной области, ответственных за организацию рассматриваемого процесса или участвующих в нем.

Анализировать существующие процессы и разрабатывать новые.

Определять и анализировать точки влияния потоков сопутствующего документооборота на сценарий технологических процессов.

Определять ситуации, в которых требуется принятие решения, влияющего на жизненный цикл процесса, например изменение конструктивных, технологических или эксплуатационных свойств конечного продукта.

Содействовать принятию оптимальных решений при реорганизации процессов.

Разрабатывать имитационные модели технологических процессов, по принципу "КАК БУДЕТ, ЕСЛИ..."

IDEF3 – уникальная методология способная фиксировать и структурировать описание работы системы. При этом сбор сведений может производится из многих источников, что позволяет зафиксировать информацию от экспертов о поведении системы, а не наоборот – строить модель, чтобы приблизить поведение системы. Эта особенность IDEF3 как инструмента моделирования выделяется среди основных характеристик, отличающих IDEF3 от альтернативных предложений.

В стандарте IDEF3 существуют два типа диаграмм, представляющие описание одного и того же сценария технологического процесса в разных ракурсах. Диаграммы, относящиеся к первому типу, называются диаграммами Описания Последовательности выполнения Процесса (Process Flow Description Diagrams, PFDD). Второй тип диаграмм описывает Состояния Объекта и Трансформаций в Процессе и называется (Object State Transition Network, OSTN) Сеть изменений объектных состояний.

Если диаграммы PFDD описывают процесс, то другой класс диаграмм IDEF3 OSTN используются для иллюстрации трансформаций объекта, которые происходят на каждой стадии выполнения соответствующих работ ("С точки зрения объекта"). Состояния объекта и Изменение состояния являются ключевыми понятиями OSTN диаграммы.

Диаграммы Процесса имеют тенденцию быть наиболее знакомыми и широко использовали компонент метода IDEF3. Эти диаграммы обеспечивают механизм визуализации для центрированных процессом описаний сценария. Графические элементы, которые включают диаграммы процесса, включают Модуль полей (UOB) Поведения, связей старшинства, перекрестков, объектов ссылки, и примечаний.

Объекты ссылки и примечания – конструкции, которые являются общими для диаграмм процесса и объектов.

Каждый из графических элементов, используемых для разработки диаграмм процесса, представлен ниже, вместе с обсуждениями того, как формулировать более комплексные инструкции, использующие эти графические элементы. Обсуждение начинается с наиболее фундаментального из этих стандартных блоков – функционального элемента (UOB).

Основы создания диаграмм IDEF3 в среде BPwin аналогичны созданию диаграмм IDEF0. Только после запуска среды следует выбрать область построения IDEF3.

4.1. Функциональный элемент

Описание процесса представляет всевозможные ситуации (процессы, функции, действия, акты, события, сценарии, процедуры, операции или решения), которые могут происходить в моделируемой системе в логических и временных отношениях. Каждый процесс представлен полем, отображающим название процесса (рис. 4.1.). Номер идентификатора процесса назначается по порядку. В правом нижнем углу UOB элемента располагается ссылка (IDEF0/USER или другие) и используется для указания ссылок либо на элементы из функциональной модели IDEF0, либо для указания на отделы или конкретных исполнителей, которые будут выполнять указанную работу.

Рис. 4.1. Синтаксис UOB элемента

4.2. Элемент связи

Связь необходима для связи элементов диаграммы и описания динамики происходящих процессов. Связи используются, прежде всего, для обозначения отношений между функциональными элементами UOB. Для отображения временной последовательности выполнения сценариев в диаграммах описания процесса используются два основных типа связей: связи старшинства и относительные связи. Для описания специфических отношений между элементами предназначены четыре дополнительных типа связей – сдерживаемых связей старшинства. Использование в IDEF3 диаграммах описания процесса различных типов связей дает возможность пользователям метода фиксировать дополнительные информацию о специфике отношений между элементами диаграммы. Символы, которые представляют каждый тип связей, изображены на рис. 4.2.

Рис. 4.2. Типы связей в диаграммах описания процесса

4.2.1. Связи старшинства

Связи Старшинства выражают временные отношения старшинства между элементами диаграммы. При этом первый элемент должен завершиться прежде, чем начнет выполняться следующий. Графически стрелка предшествования (старшинства) отображается сплошной линией с одиночной стрелкой (рис. 4.3.).

Рис. 4.3. Семантика использования связи старшинства

4.2.2. Сдерживаемые связи старшинства

Данные виды связей не представлены ни в одном из CASE–продуктов, поддерживающих методологию IDEF3. Сдерживаемые связи старшинства указывают (в дополнение к семантике запуска связей простого старшинства):

элементу А нужно предшествовать элементом В,

элементу В нужно предшествовать элементом A,

любой элемент должен сопроводиться элементом B, и что элементу B нужно предшествовать элементом A.

Эти связи добавляют дополнительные условия к системе. Эти дополнительные условия не только выражают то, как система работает, но и устанавливают требования к тому, как система должна себя вести.

Рис. 4.4. Обобщенное представление сдерживаемых связей предшествования

4.2.3. Относительные связи

Использование относительной связи указывает на тот факт, что между взаимодействующими элементами диаграммы описания процесса существует отношения неопределенного типа. Относительные связи графически показываются как пунктирные линии.

4.2.4. Связь поток объектов

Тип связи поток объектов предложен разработчиками CASE–средств, поддерживающих моделирование в стандарте IDEF3. Графически эта связь показываются как сплошная линия с двойной стрелкой (см. рис. 4.5.). Этот тип связи выражает перенос одного или нескольких объектов от одного функционального элемента к другому. Этот вид связи элементов IDEF3 наследует все свойства простой связи старшинства. Таким образом, значение связи поток объектов таково: между UOB элементами происходит передача объекта(ов), причем первый элемент UOB должен завершиться прежде, чем начнет выполняться следующий.

Рис. 4.5. Представление связи поток объектов

4.3. Перекресток

Перекрестки используются для отображения логики отношений между множеством событий и временной синхронизации активизации элементов диаграмм IDEF3. Различают перекрестки для слияния (Fan–in Junction) и разветвления (Fan–out Junction) стрелок.

Рис. 4.6. Перекрестки разветвления и слияния

Перекресток не может использоваться одновременно для слияния и для разветвления. При внесении перекрестка в диаграмму необходимо указать тип перекрестка. Тип перекрестка определяет логику и временные параметры отношений между элементами диаграммы. Все перекрестки в PFDD диаграмме нумеруются, каждый номер имеет префикс "J".

4.3.1. Типы перекрестков

Тип перекрестка обозначается на элементе как:

& –– логический И

O – логический ИЛИ

X – логический перекресток НЕЭКВИВАЛЕНТНОСТИ.

Стандарт IDEF3 предусматривает разделение перекрестков типа & и O на синхронные и асинхронные. Это разделение позволяет учитывать в диаграммах описания процессов синхронизацию времени активизации. Более подробно этот вопрос будет рассмотрен далее на примерах.

Рис. 4.7. Пример обозначения синхронности и асинхронности перекрестков

Для последующего изложения материала необходимо ввести понятие – График запуска. График запуска – это визуальное отображение временной последовательности выполнения UOB элементов. Пример графика запуска приведен на рис. 4.8. Визуальное отображение на графике запуска временной последовательности выполнения UOB элементов поможет правильно понять как перекрестки описывают логику отношений между элементами диаграммы описания процессов и каким образом перекрестки позволяют синхронизировать по времени выполнение UOB элементов.

Рис. 4.8. Пример графика запуска

4.3.2. Значения комбинаций перекрестков

Методология IDEF3 использует пять логических типов для моделирования возможных последовательностей действий процесса в сценарии:

Наименование

Смысл в случае слияния стрелок (Fan–in Junction)

Смысл в случае разветвления стрелок (Fan–out Junction)

Asynchronous AND

Все предшествующие процессы должны быть завершены

Все следующие процессы должны быть запущены

Synchronous AND

Все предшествующие процессы завершены одновременно

Все следующие процессы запускаются одновременно

Asynchronous OR

Один или несколько предшествующих процессов должны быть завершены

Один или несколько следующих процессов должны быть запущены

Synchronous OR

Один или несколько предшествующих процессов завершаются одновременно

Один или несколько следующих процессов запускаются одновременно

XOR

Только один предшествующий процесс завершен

Только один следующий процесс

Примеры:

Рис. 4.9. Использование перекрестков асинхронный AND

 

Рис. 4.10. Возможный график запуска для рис. 4.9.

Рис. 4.11. Использование перекрестков синхронный AND

Рис. 4.12. Возможный график запуска для рис. 4.11.

Рис. 4.13. Использование перекрестков синхронный OR

Рис. 4.14. Использование перекрестков синхронный AND

Рис. 4.15. Возможный график запуска для рис. 4.14.

Рис. 4.16. Использование асинхронный AND перекрестка разветвления и асинхронного OR перекрестка слияния

Рис. 4.17. Возможный график запуска для рис. 4.16.

Рис. 4.18. Невозможное совместное использование перекрестков

4.4. Декомпозиция описания процесса

Методология IDEF3 дает возможность представлять процесс в виде иерархически организованной совокупности диаграмм. Диаграммы состоят из нескольких элементов описания процесса IDEF3, причем каждый функциональный элемент UOB потенциально может быть детализирован на другой диаграмме. Такое разделение сложных комплексных процессов на его структурные части называется декомпозицией. Декомпозиция формирует границы для описания процесса и каждый UOB элемент рассматривается как формальная граница некоторой части целой системы, которая описывает весь процесс. Декомпозированная диаграмма, называемая диаграммой потомком, более детально описывает процесс. Декомпозируемый UOB элемент называется родительским, а содержащая его диаграмма – соответственно родительской диаграммой.

Итак, декомпозиция – это процесс создания диаграммы, детализирующей определенный UOB элемент. Результатом ее является описание, которое представляет собой дробление родительского UOB элемента на меньшие и более частные операции или функции. Кроме того, само слово "анализ" означает разложение на составляющие. Но декомпозиция – это больше, чем разложение на части. Она включает также синтез. Подлинная декомпозиция заключается в начальном разделении объекта на более мелкие части и последующем соединении их в более детальное описание.

Применяя принцип декомпозиции неоднократно, возможно структурировать описание процесса до любого уровня подробности. Декомпозиция обеспечивает средства организации более детального описания UOB элементов. Каждый UOB элемент может иметь любое число различных декомпозиций на том же самом уровне детализации с целью представления различных точек зрения или обеспечения большей подробности при описании исходного процесса.

Рис. 4.19. Пример нумерации UOB элементов при использовании декомпозиции и описания различных точек зрения на выполнение процессов

4.5. Примеры

Выполнить системный анализ деятельности предприятия (организации)


Деятельность банка


5. Язык моделирования баз данных IDEF1x

Методология IDEF1X – один из подходов к семантическому моделированию баз данных, основанный на концепции "сущность–связь" (Entity–Relationship). Это инструмент для анализа информационной структуры систем различной природы. Информационная модель, построенная с помощью IDEF1X–методологии, отображает логическую структуру информации об объектах системы.

Методология IDEF1X является стандартом разработки реляционных баз данных и использует условный синтаксис, специально разработанный для удобного построения концептуальной схемы.

Концептуальная схема – универсальное представление структуры данных, независимое от конечной реализации базы данных и аппаратной платформы.

Понятие концептуальной модели данных связано с методологией семантического моделирования данных, т.е. с представлением данных в контексте их взаимосвязей с другими данными. Концептуальная модель, представленная в соответствии со стандартом IDEF1X, является логической схемой базы данных для проектируемой системы.

Основным преимуществом IDEF1X, по сравнению с другими многочисленными методами разработки реляционных баз данных, является жесткая и строгая стандартизация моделирования. Установленные стандарты позволяют избежать различной трактовки построенной модели, которая, несомненно, является значительным недостатком.

5.1. Сущности

При моделировании на языке IDEF1x на логическом уровне, объекты реального мира представляются сущностями (одной или более).

Сущность отражает набор экземпляров объекта (объектов) реального мира, представляет совокупность или набор экземпляров похожих по свойствам, но однозначно отличаемых друг от друга. Каждая сущность имеет имя и некоторый набор атрибутов (моделируемых характеристик реального мира). Кроме имени и атрибутов, каждая сущность должна иметь текстовое определение (definition), что собой представляет данная сущность.

В дальнейшем данное определение используется как документация к проекту и как комментарий к таблице физически представляющей данную сущность в конкретной СУБД.

Ниже в таблицах приведены определения сущности “Страны”, их атрибутов и индексов для работы с данными:

Столбцы таблицы(s) of "COUNTRYS" Table – Страны

Name

Definition/Comment

COUNTRY_NO

Код страны

COU_DATE_INS

Дата вставки записи в таблицу COUNTRYS

REGION

Код региона

REG_DATE_INS

Дата вставки записи в таблицу REGION

COUNTRY_ID

Мнемокод страны

COUNTRY_NAME

Наименование страны

COUNTRY_FULLNAME

Полное наименование страны

Индексы(s) of "COUNTRYS" Table

Name

Definition/Comment

Type

P_K_COU_

Код страны

PK

H_COU_NO

Индекс историчности объекта

AK1

I_COU_NO

Индекс поколения объекта

IE1

F_REGION

Ссылка на "Регионы"

FK

Первичный ключ(s) of "COUNTRYS" Table

Name

Datatype

Definition/Comment

COUNTRY_NO

CHAR(3)

Код страны

COU_DATE_INS

TIMESTAMP

Дата вставки записи в таблицу COUNTRYS

Конкретное значение объекта представляется конкретным значением набора каждого из атрибутов сущности (или сущностей) и называется экземпляром сущности (instance), другими словами значением сущности. Каждый экземпляр сущности однозначно идентифицируется с помощью значений одного или более атрибутов. Данные атрибуты образуют первичный ключ. При реализации логической модели средствами конкретной СУБД каждая сущность на физическом уровне, как правило, отображается в таблицу, а набор атрибутов сущности в колонки таблицы с указанием типа данных каждой колонки. Конкретный экземпляр значений всех колонок представляется записью в данной таблице, т.е. каждая запись в таблице (или таблицах) отражает некоторое значение объекта реального мира. Первичный ключ используется для поиска конкретной записи в таблице. На примере ниже приведена таблица Countries, которая отражает сущность «Страна» и атрибуты – колонки, которые отражают характеристики каждой реальной страны (Country_No – Код страны, Country_Name – Наименование страны и т.д.), а первичным ключом является колонка COUNTRY_NO – атрибут «Код страны» и скрытый атрибут «дата вставки записи в таблицу» (COU_DATE_INS).

Таблица.

Код страны COUNTRY_

NO

Код региона REGION

Мнемокод страны COUNTRY_ID

Наименование страны COUNTRY_NAME

Полное наименование страны COUNTRY_FULLNAME

000

N

NOT

НЕОПРЕДЕЛЕННОЕ ЗНАЧЕНИЕ

НЕОПРЕДЕЛЕННОЕ ЗНАЧЕНИЕ

004

O

AF

АФГАНИСТАН

РЕСПУБЛИКА АФГАНИСТАН

008

O

AL

АЛБАНИЯ

НАРОДНАЯ СОЦИАЛИСТИЧЕСКАЯ РЕСПУБЛИКА

010

O

AQ

АНТАРКТИКА

АНТАРКТИКА

012

O

DZ

АЛЖИР

АЛЖИРСКАЯ НАРОДНАЯ ДЕМОКРАТИЧЕСКАЯ РЕСПУБЛИКА

016

O

AS

ВОСТОЧ.САМОА

(США)

АМЕРИКАНСКОЕ САМОА

020

O

AD

АНДОРРА

КНЯЖЕСТВО АНДОРРА

024

O

АО

АНГОЛА

НАРОДНАЯ РЕСПУБЛИКА АНГОЛА (НРА)

028

O

AG

АНТИГУА И БАРБУДА

АНТИГУА И БАРБУДА

031

S

AZ

АЗЕРБАЙДЖАН

АЗЕРБАЙДЖАН

032

O

AR

АРГЕНТИНА

АРГЕНТИНСКАЯ РЕСПУБЛИКА

036

O

AU

АВСТРАЛИЯ

АВСТРАЛИЯ

5.2. Связи и отношения

В процессе моделирования сущности связываются отношениями, например, отдел А «состоит из» из сотрудников В, сотрудник из В «пишет» программу С и Д. В данном случаи, связь является логическим отношением между сущностями. При таком связывании сущность А является родительской для сущности В, а сущность В является потомком (дочерней) для сущности А.

Сами сущности могут быть «зависимые» и «независимые», а связи «идентифицирующими» – между «независимой» и «зависимой» сущностями или «не идентифицирующими», дочерняя сущность остается независимой. В случае если потомок связан «идентифицирующей» связью, дочерняя сущность «зависит» от родительской, то каждое значение родительской сущности связано с одним или более значениями дочерней сущности, и отображает связи, которые не могут быть без родительской сущности. В этом случае, любое значение дочерней сущности идентифицируется с помощью некоторого значения родительской сущности и атрибуты первичного ключа родительской сущности мигрируют в атрибуты первичного ключа дочерней сущности.

Если же связи между двумя сущностями не могут быть идентифицированы, но существуют, сущности «независимые», то любое значение дочерней сущности однозначно определяется без значения родительской сущности, и атрибуты первичного ключа родительской сущности мигрируют в состав не ключевых атрибутов дочерней сущности. В языке IDEF1x, «независимые» сущности изображаются прямоугольником с острыми углами, а «зависимые» прямоугольником с овальными углами, сами связи изображаются прямой линией с точкой, смотрите рис. 5.1. (прерывистой – «не идентифицирующие» или сплошной – «идентифицирующие»).

5.2.1. Мощность связей

Спецификация мощности связей (отношений) служит для обозначения количества экземпляров (значений) дочерних сущностей связанных с соответствующим значением родительской сущности. Здесь приняты следующие обозначения: Ра – родительская сущность, Сh – дочерняя:

Рa Сh 0, 1 или много

Pa Ch 1 или много

Р

Pa Ch 0 или 1

z

Pa Ch точно N (7)

7

Pa Ch от n до m

N – m

Pa Ch многие – ко многим, отношения не установлены, должны быть разрешены позже.

На рис. 5.2. приведен диалог установления мощности отношений.

Рис. 5.1. Пример идентифицирующей связи

Рис. 5.2. Мощности отношений

5.3. Ключи

Как уже отмечалось выше, каждый экземпляр сущности должен быть уникален, и каждое значение атрибутов должно отличаться одно от другого. Для идентификации каждого экземпляра сущности используется первичный ключ – PK (Primary Key).

Рассмотрение атрибутов – кандидатов для формирования первичного ключа и его выбор (а он может быть только один для таблицы) требуют знания данных предметной области. Существуют строгие правила, использующиеся при выборе первичного ключа. Атрибут (атрибуты) первичного ключа должны:

уникально идентифицировать значение сущности;

не должны включать значение NULL;

не должны изменяться через промежуток времени. Всякий элемент сущности берет свою идентичность от ключа. Если ключ поменяется, то это уже другой элемент;

должен быть как можно более коротким, что облегчать индексацию и восстановление данных. Если нужно использовать ключ, который является комбинацией ключей из других сущностей, то каждая часть ключа должна придерживаться этих правил.

Связи между сущностями реализуются с помощью внешних ключей – FK (Foreign Key), которые образуются из PK путем их миграции из родительской сущности в дочернюю сущность. Сущности и их связи, ключи PK и FK – это основные элементы модели данных. Кроме ключей PK и FK – при построении модели данных, используются альтернативные и инверсные ключи – AK (Alternate Key) и IK (Inversion Key). Альтернативные ключи, так же как и PK, обеспечивают уникальный доступ к значениям сущности, но по другим наборам атрибутов, а инверсные ключи, обеспечивают доступ к некоторому набору значений сущности, имеющего общие характеристики.

5.3.1 Внутренние и внешние ключи

Одно из важнейших понятий, используемых при работе с базами данных, – это первичные ключи, с их помощью идентифицируются значения сущности (записи в таблице). В качестве первичного ключа может использоваться суррогатный или естественный ключ.

Естественный ключ – это атрибут или набор атрибутов, которые однозначно идентифицируют значение сущности (записи таблицы) и имеют некий физический смысл вне БД (номер вагона, номер станции, номер контейнера и т.д.).

Данный метод построения модели БД основан на естественной идентификации сущностей. Уникальность записи может достигаться не только значением уникального кода внешнего объекта, но, например, и датой вставки записи в таблицу (первичный ключ PK – состоит из значения кода объекта и даты вставки записи в БД), см. примеры диаграмм приведенные выше. Конечно естественная идентификация значений сущностей более понятная и предпочтительная, т.к. нет необходимости вводить дополнительные атрибуты не несущие ни какой внешней смысловой нагрузки. Да, и при эксплуатации БД в сложных ситуациях можно восстановить их значения. Но, не всегда возможно выбрать атрибут или короткий набор атрибутов для идентификации значений. В этом случаи без использования внутренних, суррогатных ключей трудно обойтись.

Суррогатный ключ – автоматически сгенерированное значение, никак не связанное с информационным содержанием записи, имеющий некий физический смысл только внутри БД; обычно в роли суррогатного ключа могут использоваться данные типа integer или datestamp.

В данном методе построения модели БД суррогатная идентификация значений сущностей позволяет решить проблему идентификации за счет введения внутреннего ID – сущности и выработки внутреннего суррогатного ключа (PK) для каждого значения в БД. Такой подход предполагает, что для каждой сущности существует набор определенных характеристик, которые в процессе жизни могут меняться или уточняться. Поэтому в БД каждой сущности на предприятии присваивается своя внутренняя идентификация, уникальная на всей протяжении жизни сущности и все характеристики (текущие или измененные) уникально идентифицируются для каждой сущности (создается уникальный внутренний суррогатный ID – сущности). Данный уникальный идентификатор каждого значения в БД является первичным ключом записи (PK) в сущностях (таблицах), содержащих значения характеристик сущностей. На примере рис. 5.3. приведена таблица для выработки и хранения суррогатного ID сущности, на основе которого создаются суррогатные PK ключи значений сущностей (таблиц).

Рис. 5.3. Пример суррогатного ID сущности

5.3.2. Ссылочная целостность

 

Одной из главных задач при эксплуатации БД, является задача поддержания правил ссылочной целостности, которые были определены при проектировании. Эти правила отражают заданные связи между сущностями и порядок выполнения операций вставка, замена и удаление. Если эти правила не будут соблюдены, то БД быстро деградирует, и не будет отражать те бизнес – правила, которые были заложены при ее проектировании.

Правила контроля и выполнения этих операций может быть возложена на специально разработанные пользователем программы, но данное решение крайне не надежное и трудоемкое для его реализации. Задача поддержания правил ссылочной целостности обычно реализуется автоматически при генерации схемы БД на основе режимов реализации связей (отношений) с помощью триггеров, обеспечивающих ссылочную целостность. Данные триггера представляют собой программы, выполняемые всякий раз при выполнении операций вставка, замена и удаление. Таким образом, при проектировании автоматически обеспечивается правильная эксплуатация БД.

На рис. 5.4. приведен пример определения правил ссылочной целостности для реализации связи F_COU_AD в среде Erwin.

Рис. 5.4. Пример определения правил ссылочной целостности

Cascade – задает каскадное действие (например, удаление родительской записи влечет удаление всех записей у потомков), Restrict – задает ограничение на выполнение действия, (на пример, нельзя удалить родительскую запись, пока есть записи у потомков и наоборот), Set Null – задает действие по установлению FK равным NULL, при удалении родительской записи, Set Default – задает действие по установлению FK равным Default, при удалении родительской записи, None Action – ни каких действий не требуется, если удалены потомки (например, D:R – для родителя, D:S – для потомка или I:R – для потомка, если нет родителя).

5.4. Домены

Стандарт IDEF1x определяет домен как – поименованный и определенный набор значений, такой что один или более атрибутов получают значения из этого домена.

Домен, как и класс, который фиксирует и определяет допустимое множество значений. Например, домен «код–страны» (см. рис. 5.5.) – определяет код страны, который может состоять из двух специальных букв. Домен – это неизменный класс значения, которого не изменяются во времени. В противоположность этому значения сущности меняются во времени. Каждое значение домена уникальное в этом домене.

Рис. 5.5. Пример домена

Существуют два типа доменов: базовые домены (Character, Numeric, Boolean в IDEF1x, а в Erwin: String, Number, Datetime, Blob) и типизированные домены (производные), например, «код–страны–СНГ». Все базовые домены имеют правила использования значений данных из домена. Наиболее используемые это два правила: список значений и диапазоны. Для каждого домена могут быть установлены свои правила определения значений.

Типизированные домены – это подтипы базовых типов или другие типизированные домены.

На логическом уровне домены можно описать без конкретных физических свойств, а уже на физическом уровне они получают конкретные специфические свойства. Например, домен «код–страны–СНГ» на логическом уровне может иметь тип String, а на физическом уровне (DB2) будет присвоен тип Char(2) и указано конкретное множество значений домена и правила валидации. Для другой БД физический уровень значений может быть задан свой.

5.5. Представления

Представления (View) представляют собой объекты СУБД данные, в которых формируются динамически при обращении к представлению, т.е. данные не хранятся постоянно как в таблицах БД. Представление определяется в терминах тех таблиц БД и их атрибутов, которые уже есть БД. Для создания представления может использоваться одна или более реальных таблиц БД.

Использование представлений (View) крайне удобный механизм:

– для обеспечения безопасности и секретности доступа к данным в БД, для каждого пользователя (разработчика), может быть разработано и предоставлено свое представление (видение) данных;

– для разработки интерфейса взаимодействия между подсистемами или системами;

– для разработки пользовательского интерфейса WEB – сайта;

– для замены сложной системы репликацией данных в другие системы, в которых модели данных существенно отличаются от модели данных исходной системы.

Разработка представлений разрабатывается на физическом уровне и AllFusion Erwin Data Modeler содержит специальные средства для создания таблиц представления и операторов SQL для заполнения их данными.

Так на рис. 5.6. приведена диаграмма представления для таблиц БД. Эти таблицы содержат внутренние суррогатные PK ключи идентификации данных, которые для пользователя БД ни о чем не говорят. Пользователю БД необходимы реальные общепринятые данные: код дороги, код отделения дороги, код станции на дороге – поэтому для отображения реальных данных используются представления. Таблицы представлений (прямоугольники с овальными углами) связаны отношениями с таблицами БД (прямоугольники) и содержат те атрибуты, которые будут заполнены из соответствующих атрибутов таблиц БД.

Рис. 5.6. Диаграмма представления для таблиц БД

На рис. 5.7. и 5.8. приведен диалог Views для определения представления и генерации оператора Create для его создания в среде ERwin.

На рис. 5.9. приведен диалог создания оператора Select для заполнения представления.

Рис. 5.7. Определение представления

Рис. 5.8. Генерации оператора Create для создания представления

Рис. 5.9. Диалог создания оператора Select для заполнения представления

На рис. 5.10. приведена информация, выдаваемая пользователю прямо из таблицы БД, которая содержит внутренние ключи (PK и FK) и на рис. 5.11. приведена информация, выдаваемая пользователю через разработанное представление.

Рис. 5.10. Информация, выдаваемая пользователю прямо из таблицы БД

Рис. 5.11. Информация, выдаваемая пользователю через разработанное представление

5.6. Нормализация данных

Здесь приводятся основные определения нормальных форм данных. Примеры нормализации данных можно найти в любом учебнике по БД.

Нормализация данных – это процесс проверки, тестирования и, если требуется, реорганизации сущностей (таблиц) и атрибутов (столбцов) в модели и сведения таблиц к набору столбцов, в котором все не ключевые столбцы зависят от столбцов первичного ключа. Она позволяет устранить недостатки в уже спроектированной модели данных, исключить дублирование данных, т.е. информация о некотором факте должна храниться только в одном месте – тем самым однозначно и окончательно определить принадлежность каждого столбца только определенной таблице. Нормализация делает БД более устойчивой к изменениям к новым требованиям задач, позволяет обеспечить целостность самой БД и сокращает память для хранения информации.

Все нормальные формы основаны на понятии функциональной зависимости.

Атрибут А1 сущности Е функционально зависит от атрибута А2 сущности Е тогда и только тогда, когда каждое значение А2 в сущности Е связано точно с одним значением А1 в сущности Е, т.е. для любого значения х≤А1, существует только одно значение у ≤ А2.

Атрибут А1 сущности Е полностью функционально зависит от ряда атрибута А2 сущности Е тогда и только тогда, когда А1: 1. функционально зависит от А2 и 2. нет зависимости от подмножества А2, т.е. нет транзитивной зависимости.

Первая нормальная форма (1NF) гласит – все атрибуты сущности содержат атомарные (неделимые) значения и среди атрибутов не должно встречаться повторяющихся групп. То есть, с одной стороны, атрибуты не должны содержать повторяющихся групп (нескольких значений атрибута) и, с другой, – атрибут не должен хранить разные по смыслу значения. Приведение к 1NF форме производится созданием новой таблицы для повторяющихся значений и установлением связи от прежней таблицы (PK) к новой (FK).

Сущность находится во второй нормальной форме (2NF), если она находиться в первой нормальной форме (1NF) и любой ее не ключевой атрибут полностью зависит от всего первичного ключа, а не от его части. 2NF имеет смысл для объектов со сложным ключом. Сущность приводится к 2NF выделением атрибутов, зависящих от части ключа в отдельную таблицу и установлением связи с основной таблицей.

Сущность находится в третьей нормальной форме (3NF), если она находится во второй нормальной форме (2NF) и любой ее не ключевой атрибут не зависит от другого не ключевого атрибута этой сущности. Не ключевые атрибуты не зависят от не ключевых атрибутов, в сущности нет атрибутов значения, которых получено из других атрибутов данной сущности. Сущность приводится к 3NF выделением атрибутов, зависящих от не ключевого атрибута в отдельную таблицу и установлением связи с основной таблицей.

Сущность находится в четвертой нормальной форме (4NF), если ни в одной строке нет нескольких многозначных фактов об одном объекте, т.е. нет многозначных зависимостей между атрибутами. Сущность приводится к 4NF выделением атрибутов с многозначными фактами в отдельные таблицы.

Case система AllFusion Erwin Data Modeler помогает создание нормализованной модели БД, контролирует уникальность имени атрибута, поддерживает создания ключей и связей.

5.7. Примеры построения диаграмм

Диаграммы моделей строятся из сущностей (зависимых и независимых) и связей (идентифицирующих и не идентифицирующих) и отражают моделируемую предметную область. Ниже на рис. 5.12. приведена диаграмма модели «Участки диспетчерования», которая состоит сущностей: «диспетчерских участков», «укрупненных участков» и «линейных участков» и отношений связывающих эти сущности. В данном случае дочерние сущности зависят от родительских сущностей и в качестве отношений используются «идентифицирующие» связи. Родительские PK мигрировали в ключевую часть атрибутов потомков.

Рис. 5.12. Диаграмма модели «Участки диспетчерования»

На рис. 5.13. приведен фрагмент модели топологии железной дороги: в общем случае есть «Администрация дорог», которой подчиняются «Железные дороги» в данном государстве (Россия, Белоруссия и др.). «Железные дороги» делятся на «Отделения» и состоят из «Станций», полная административная подчиненность известна, только для Белорусских станций. В данной диаграмме используются не идентифицирующие отношения, дочерние сущности не зависят от родительских сущностей, т.е. в некоторые FK могут иметь значения «по умолчанию» неравное значению родительского PK, «нет родительской записи».

Рис. 5.13. Фрагмент модели топологии железной дороги

На рис. 5.14. сущность «Станция», содержащая все станции стран СНГ, используется для построения других сложных понятий таких как: «Внешний стык» и «Пограничный переход». Сущность «Внешний стык» определяется двумя станциями с одной и другой стороны «Железной дороги», а сущность «Пограничный переход» определяется пятью станциями (рис. 5.15.). Общее множество по выделенным свойствам разбивается на другие подмножества, обладающие определенными признаками. Так как ключевой атрибут STATION_NO не может мигрировать больше одного раза как внешний ключ, то в дочерних сущностях данный атрибут переименован как STATION_NO_1, …., STATION_NO_5.

Рис. 5.14. Использование сущности «Станция»

Таблица.

Номер пограничного перехода BOUN

DARY_NO

Номер направления в пограничном переходе BOU_DIRECTION

Код станции передачи вагонов Белорусской железной дороги (СПВ БЧ) STATION_NO_1

Код стыковой пограничной станции Белорусской железной дороги (СПС БЧ) STATION_NO_2

Код стыковой пограничной станции не Белорусской железной дороги (СПС не БЧ) STATION_NO_3

Код станции передачи вагонов не Белорусской железной дороги (СПВ не БЧ) STATION_NO_4

Код стыкового пункта учета поездов и вагонов (стык УПВ) STATION_NO_5

1

1

138507

136605

121101

121008

120518

1

2

137608

136605

121101

121008

120518

1

3

138507

136605

121101

120804

120518

1

4

137608

136605

121101

120804

120518

2

1

135208

135000

NULL

121008

134900

3

1

162900

164107

120202

121008

163000

3

2

162900

164107

120202

120804

163000

4

1

161306

161401

110200

110003

161700

5

1

161306

161202

066900

067000

161607

6

1

160002

161005

067405

067104

160801

7

1

160002

165805

172008

170004

165608

8

1

166704

169100

171401

170004

171346

Рис. 5.15. Определение сущности «Пограничный переход» пятью станциями

На рис. 5.16. и 5.17. приведены примеры разрешения связей многие – ко – многим. Данный тип отношений возникает в том случаи, если между сущностями не удается установить связь типа «родитель – потомок», эти сущности не зависят друг от друга. Так на рис. 5.16. приведены две сущности: классы операций и сами операции. С помощью дополнительной сущности «класс операции – операции» – установлены отношения между сущностями «класс операции» и «операции». Множество операций сущности «операция» и классифицировано по определенным признакам и разрешены отношения многие – ко – многим. Фактически новая сущность «класс операции – операция» может состоять только из всевозможных пар PK – ключей обеих сущностей, которые образуют PK новой сущности.

Рис. 5.16. Пример разрешения связей многие – ко – многим

Рис. 5.17. содержит аналогичное решение для разрешения проблемы связи между станциями и видами грузовых работ (параграфами станций) допустимых на них. На различных станциях могут выполняться различные виды грузовых работ, а на некоторых выполнение таких работ вообще не допускается.

Рис. 5.17. Пример разрешения связей многие – ко – многим

На рис. 5.18. приведена не простая диаграмма, отражающая топологию участков железной дороги. Кроме этого на этой диаграмме отражены участки движения локомотивов. Опять же, основным строительным элементом является сущность «Станция» и ее подмножество «Выделенная станция». Логическая сущность «Участок» объединяет такие объекты, которые содержат информацию об участках железной дороги, принадлежности станций участкам, выделенных станциях, ближайших выделенных станциях, длины участков и время хода на них, участках обращения локомотивов, принадлежности участков железной дороге, участку обращения локомотивов, расстояния и времена хода от выделенных до невыделенных станций.

Даная диаграмма в терминах языка IDEF1x реализует географическую топологию железной дороги: «Станция» (все станции), «Выделенная станция» (подмножество Станций), «Участок» (участок дороги от одной выделенной станции до другой, на котором располагаются другие станции), «Участок обращения локомотивов» (состоит из нескольких участков дороги) и содержит все элементы данных этой топологии.

Рис. 5.18. Топология участков железной дороги

Существует особый вид отношений – рекурсия. Это такой вид отношений (связей) когда одна и та же сущность является и родительской и дочерней. При реализации таких связей PK мигрирует в качестве FK в состав не ключевых атрибутов, один и тот же атрибут не может появиться дважды под одним и тем же именем. Поэтому нужно или переименовывать атрибуты FK (см. рис. 5.14.) или использовать имена ролей связей при именовании таких FK (см. рис. 5.19.).

Возможны и другие виды рекурсии: неявные (косвенные), сетевые. Есть сущности, которые находятся сами с собою в связи «многие – ко – многим». Примером такой сущности может быть сущность родственник, когда значения такой сущности связаны с другими значениями этой же сущности. В общем случае, можно говорить о сетевой рекурсии внутри самой сущности. Разрешить такие связи можно с помощью введения новой сущности отношения родственников, в которой будут заданы пары ключевых атрибутов и атрибут тип отношения «мать–сын», «дед–внук», «тесть–зять» и т.д. Данная сущность будет дважды связана с сущностью родственник и PK сущности родственник дважды мигрирует в новую сущность отношения родственников как FK. Но и как в предыдущем случае, правила именования атрибутов должны быть соблюдены: или должны быть введены разные ролевые отношения или имена атрибутов должны бать изменены.

Рис. 5.19. Пример рекурсии

5.8. Общие сведения о среде проектирования AllFusion Erwin Data Modeler

В настоящее время быстрое и грамотное проектирование и реализация баз данных (БД) без средств графического моделирования данных практически невозможна. Ручные методы разработки и сопровождения БД давно уже исчерпали себя в силу низкого качества и эффективности получаемого результата и низкой производительности труда.

В данной работе, в качестве базового компонента проектирования и разработки БД используется готовое CASE средство AllFusion Erwin Data Modeler, опирающееся на стандарты разработки БД FIPS, ISO9001 и язык моделирования БД IDEF1X. CASE средство AllFusion Erwin Data Modeler реализует структурные подходы к развитию информационной системы и к дизайну данных этих систем. Данное CASE средство является лидером среди аналогичных систем, около 60% средств моделирования данных мирового рынка принадлежит AllFusion Erwin Data Modeler.

AllFusion Erwin Data Modeler не только помогает в дизайне (изображении) логической модели данных, он поддерживает дизайн соответствующей физической модели данных и автоматически генерирует структуру физической БД (“Forward engineering”).

AllFusion Erwin Data Modeler включает в себя средства для генерации из функционирующей физической БД соответствующей ей модели данных (“reverse engineering”), поддерживая при этом обе – физическую и логическую/физическую модели данных. Таким образом можно поддерживать функционирующие БД или осуществлять миграцию всей БД или ее части (подсхемы БД) на другие серверные платформы.

CASE средство также включает средства автоматического сравнения моделей и баз данных (“complete compare”), выдачи и анализа различий между ними, что позволяет в дальнейшем выборочно перемещать эти различия в модель или генерировать их в БД. Общая функциональная схема проектирования БД с помощью CASE средства AllFusion Erwin Data Modeler представлена на рис. 5.20.

Использование уровней моделирования позволяет реализовать хорошо структурированный нисходящий сверху вниз подход к разработке модели БД, при котором успех детализации объектов на нижестоящем уровне создается на каждом этапе проектирования.

Рис. 5.20. Общая функциональная схема проектирования БД

На верхних уровнях моделирования информационная модель включает общие сведения об объектах, обеспечивая тем самым ее технологическую независимость от конкретной платформы СУБД. Она называется логической моделью. На более низких уровнях проектирования модель дополняется детализированными сведениями об объектах. Это связано с тем, что физическая организация данных, например, в СУБД DB2 существенно отличается от физической организации этих данных в СУБД Oracle. Такая детализированная модель называется физической моделью.

AllFusion Erwin Data Modeler обеспечивает два вышеуказанных уровня представления модели – логический и физический. Логический уровень включает наиболее общие сведения о предметной области. Объекты модели логического уровня называются сущностями и атрибутами. Логический уровень модели данных может быть построен на основе диаграмм модели бизнес–процессов предметной области. Физический уровень позволяет описать всю детальную информацию о конкретных физических объектах – таблицах, столбцах, связях между объектами, индексах, процедурах и др. При этом AllFusion Erwin Data Modeler позволяет создавать модели трех типов: модель, имеющую логический уровень представления данных, модель, имеющую физический уровень представления данных, и модель, имеющую как логический, так физический уровень.

Такое многоуровневое моделирование БД имеет ряд достоинств. Наиболее очевидное достоинство – это систематическое документирование, которое может использоваться постоянно для развития базы данных и прикладных применений, чтобы определить системные требования и связать их непосредственно с требованиями конечного пользователя. Второе достоинство – это обеспечение ясной картины ссылочных ограничений целостности БД. Поддержание ссылочной целостности существенно в реляционной модели, где отношения не кодируются явно. Третье достоинство – это независимая картина базы данных, которое следует из "логической" модели БД. Логическая модель БД может использоваться автоматизированными средствами для генерации различных физических СУБД. Таким образом, можно использовать одну и ту же логическую модель на языке IDEF1x в Erwin, для получения из нее как схемы таблиц DB2, также как и схемы таблиц для других реляционных СУБД.

Ниже в таблице приводится перечень общих терминов логической и физической моделей, используемых в дальнейшем при проектировании и сопровождении БД:

Логическая модель

Физическая модель

Сущность /объект/ (Entity)

Таблица (Table)

Зависимая сущность

Внешний ключ FK является частью PK дочерней таблицы

Независимая сущность

Родительская или дочерняя таблица, у которой FK не является частью ее PK

Атрибут (Attribute)

Столбец (Column)

Логический тип данных (текст, число, дата)

Физический тип данных (зависит от выбранного сервера назначения)

Домен (логический)

Домен (физический)

Первичный ключ (Primary key)

Первичный ключ, PK индекс

Внешний ключ (Foreign key)

Внешний ключ, FK индекс

Альтернативный ключ (AK)

AK индекс— уникальный, но не первичный ключ

Инверсионный вход (IE)

IE индекс — не уникальный индекс, созданный для поиска информации в таблице по не уникальному значению

Ключевая группа (Key group)

Индекс (Index)

Бизнес–правило (Business rule)

Триггер или хранимая процедура

Правило проверки данных (Validation rule)

Принудительный контроль данных (Constraint)

Отношение (Relationship)

Отношение, реализованное с использованием FKs

Идентифицированные (определенные) отношения (Identifying)

FK как часть PK дочерней таблицы (выше линии)

Не идентифицированные (неопределенные) отношения (Non–Identifying)

FK не является частью PK дочерней таблицы (ниже линии)

Отношение подтипа (Subtype)

Денормализованные таблицы (Denormalized tables)

Отношение многие ко многим (Many–to–many)

Ассоциативная таблица (Associative table)

Ссылочная (относительная) целостность (cascade, restrict, set null, set default)

Триггеры для операций INSERT, UPDATE и DELETE

Мощность, количество элементов (Cardinality)

Триггеры для операций INSERT, UPDATE и DELETE

При проектировании смешанной модели, включающей логический и физический уровень, переключение между ними осуществляется с помощью списка выбора “Model type indicator” – «Указатель типа модели» в панели инструментов AllFusion Erwin Data Modeler (logical / physical). Состояние этого указателя очень важно, так как оно определяет приоритет терминов логического уровня перед физическим уровнем. Надо первоначально определять объекты и их характеристики на логическом уровне, затем при первоначальном переключении на физический уровень соответствующие термины для него будут созданы автоматически (рис. 5.21.).

Рис. 5.21. Интерфейс пользователя AllFusion Erwin Data Modeler

Работа с компонентом в Erwin организуется с помощью Горизонтального меню “Menu bar” и двух рабочих пространств “Model Explorer” и “Diagram Window”. Горизонтальное меню AllFusion Erwin Data Modeler располагается в верхней части экрана и, хотя оно напоминает типовое для такого рода программ, полный перечень функций меню AllFusion Erwin Data Modeler достаточно большой и требует некоторого времени для поэтапного прохождения по всем операциям и возможностям, причем некоторые из них выполняются достаточно редко. Рабочее пространство “Model Explorer” расположено в левой стороне экрана. Оно обеспечивает иерархическое текстовое изображение модели данных, которая синхронно в графическом виде представляется в правой части экрана в рабочем пространстве “Diagram Window”.

В любом из этих пространств по своему выбору разработчик БД может осуществлять вызов всех операций по обслуживанию элементов логической и физической схем БД: создание, удаление, переименование, изменение характеристик схем, подсхем, объектов, атрибутов, связей, таблиц, столбцов, ключей, шаблонов, триггеров, скриптов, табличных пространств, пулов буферов и других характеристик. AllFusion Erwin Data Modeler обеспечивает координацию внесения изменений в обоих рабочих пространствах – как в текстовом, так и в графическом виде.

Вся работа в рабочем пространстве “Model Explorer” выполняется в текстовом виде, т.е. вводом в выдаваемые AllFusion Erwin Data Modeler окна и поля соответствующих значений, либо путем выбора их из предоставленного AllFusion Erwin Data Modeler списка значений.

В “Diagram Window” инструментарий AllFusion Erwin Data Modeler синхронно создает или изменяет объекты схемы в графическом режиме. Разработчик БД может работать в этом окне, используя механизм перетягивания графических элементов схемы (объектов, связей) из AllFusion Erwin Data Modeler Toolbox и Drawing toolbar в окно “Diagram Window”. Здесь можно просто щелкнуть мышкой по любому объекту или связи и вызвать соответствующее им окно для выдачи сведений о нем и их корректировки.

Создание модели данных – длительный, итерационный процесс по идентификации и документированию предметной области в той части общесистемных требований, которая касается структур данных и взаимосвязей между ними.

В общем случае, разработка и сопровождения БД включает такие работы как: анализ предметной области, создание схемы БД, корректировку и поддержание схемы БД в актуальном состоянии, выпуск новой версии БД, выгрузку и загрузку данных. Жизненный цикл БД (по аналогии с жизненным циклом программного обеспечения) включает не только этап создания (проектирования) логической и физической моделей БД, этап генерации БД, этап загрузки данных и тестирования, но и этапы работ, которые выполняются при сопровождении БД:

получение исходных данных для внесения изменений и подготовка документации для внесения изменений;

выполнение подготовительных действий по анализу модели эксплуатируемой БД и планированию создания и запуска ее новой версии;

выполнение редактирования старой схемы и получение новой схемы, получение задания на языке DDL для создания новой версии БД;

запуск задания на создание новой пустой БД;

выполнение выгрузки (экспорта) данных из старой версии БД;

выполнение загрузки (импорта) данных из файлов–копий формата IXF в новую версию БД;

внесение или дополнение необходимых данных в новые объекты новой версии;

выполнение процедуры проверки и опытной эксплуатации новой версии БД;

ввод в промышленную эксплуатацию новой версии БД и объявление об ее выпуске.

5.8.1. Построение логической модели

Существует три вида логических моделей, которые используются, чтобы охватить информационные требования предметной области: “Entity Relationship Diagram” (ERD) – “Диаграмма сущность – связь”, “Key–Based Model” (KBM)– “Модель на основе ключа” и “Fully Attributed model” (FAM) – “Полностью атрибутная модель”.

ERD и KBM модели также называются "моделями данных области", потому что они часто охватывают широкую предметную область, которая является, как правило, большей чем бизнес правила, направленные на единственный отдельный проект автоматизации.

ERD модель используется на первоначальном этапе проектирования для отображения основных сущностей и возможных их связей для обсуждения с экспертами предметной области структур данных.

Модель данных, основанная на ключах (KBM), включает описание всех сущностей и ключей, которые соответствуют предметной области. Она дает более подробное описание предметной области.

Полностью атрибутная модель (FAM) – дает наиболее полное представление о структурах данных. Она состоит из полностью определенных: сущностей, их атрибутов и связей и должна представлять данные в третьей нормальной форме.

5.8.1.1. Диаграмма сущность – связь

Первый шаг в построении логической модели – конструирование “Диаграммы сущность – связь” (ERD), как самого высокого уровня моделирования данных рассматриваемой предметной области. ER–диаграмма показывает основные сущности и связи, которые определяют предметную область в целом.

Диаграмма связей (отношений) сущностей использует два главных строительных элемента: сущности и связи (отношения), и возможно некоторые атрибуты. Эти термины, проведя аналогию диаграммы ERD с разговорным языком, можно упрощенно интерпретировать следующим образом: сущности – это существительные, атрибуты – это прилагательные или характеристики и связи – это глаголы. Значениями сущностей являются экземпляры подобных объектов реального мира, а атрибуты их характеристики. Построение модели данных в Erwin – просто вопрос обнаружения правильного собрания существительных, глаголов и прилагательных и размещения их всех вместе.

Цель ERD моделирования состоит в том, чтобы обеспечить наиболее общее представление о требованиях предметной области, достаточных для планирования дальнейшей разработки информационной системы. Эти модели не очень детализированы, включают только главные сущности, нет многих характеристик объектов (атрибутов), если таковые вообще имеются. Могут присутствовать отношения многие–ко–многим и неопределенные отношения, ключи обычно вообще отсутствуют. Это прежде всего первоначальное представление о бизнес–правилах или первоначальная модель для обсуждения.

ERD модель может быть разделена на подсхемы (subject areas), которые используются для определения части модели, удовлетворяющей интересы отдельного приложения или даже отдельных функций. Использование подсхем позволяет разделить большие модели на меньшие, более управляемые подмножества сущностей, что может быть легче для определения и дальнейшей поддержки (см. рис. 5.22.).

Рис. 5.22. Пример использования подсхем

В диаграмме ERD, сущность (объект) представляется в виде прямоугольника, который содержит название (имя) объекта. Названия сущностей (объектов) всегда желательно употреблять в единственном числе, что облегчает "чтение" диаграммы в дальнейшем. Связь между двумя объектами на диаграмме представляется в виде линии и она указывает, что данные одной таблицы находятся в некоторой связи (отношении) с данными из другой таблицы. В этой связи всегда присутствует пара таблиц, родительская (Parent) и детская (Child).

На рис. 5.23. приведена ERD модель, на которой приведены имена сущностей, их определения и отношения между ними.

Рис. 5.23. Пример ERD модели

5.8.1.2. Модель данных на основе ключа

“Модель данных на основе ключа” – это модель данных, которая полностью описывает все основные структуры данных, которые удовлетворяют требованиям предметной области. Цель модели KBM – включение всех сущностей и атрибутов, которые представляют интерес для бизнеса. Модель на основе ключа, как и следует из ее названия, в основном содержит в себе ключи. В логической модели ключ однозначно идентифицирует экземпляр данных, т.е. строку внутри сущности (таблицы). В дальнейшем, когда соответствующая физическая модель будет использоваться, применение ключа обеспечит быстрый доступ к нужным данным.

В целом, модель KBM охватывает те же самые возможности, что и ERD, но раскрывает их более подробно и детально, насколько это возможно. В порядке развития ERD к правильной логической модели данных, необходимо определить ключи, чтобы однозначно идентифицировать каждый элемент в сущности (объекте), т.е. его значение.

В каждом объекте в диаграмме модели данных горизонтальная линия разделяет атрибуты на две группы: ключевую область (выше линии) и не ключевую область или область данных (ниже линии).

Ключевая область содержит первичный ключ (Primary key PK) для сущности. Первичный ключ может включать один или более первичных ключевых атрибутов. Количество их должно быть достаточным, чтобы выбранные атрибуты сформировали уникальный идентификатор для каждого элемента в сущности. Сущность, кроме ключевых атрибутов, как правило, имеет не ключевые атрибуты.

Всем вышеописанным ключам Erwin автоматически присваивает имена индексов и порядковые номера путем добавления специальных кодов перед именем таблицы следующим образом, при желании имена ключе и индексов можно изменить вручную.

Замечание. Первичный ключ, выбранный для сущности при проектировании логической модели, может иногда и не быть первичным ключом в физической модели, как исключение, для более эффективного доступа к таблице. В этом случае ключ может быть изменен, чтобы удовлетворить потребности и требования физической модели базы данных в некотором исключительном случае.

Ниже на рис. 5.24. и 5.25. приведены KBM диаграммы некоторых моделей на основе PK ключей. В данных моделях присутствуют только имена атрибутов, которые могут быть использованы для идентификации значений сущности.

Рис. 5.24. Пример KBM диаграммы

Рис. 5.25. Пример KBM диаграммы

5.8.1.3. Полная атрибутивная модель

“Полная атрибутивная модель” (FAM) получается из “Модели на основе ключа” добавлением в сущности недостающих атрибутов, уточнением связей между сущностями, установления ссылочной целостности и нормализацией самих сущностей.

В терминологии IDEF1X рассматривается концепция зависимых и независимых сущностей, как тип логических отношений, связывающих две сущности. Сущности, которые не зависят ни от какой другой сущности в модели, называются независимыми сущностями. В зависимых сущностях устанавливается логическая связь путем использования общих атрибутов в этих сущностях.

Связевые отношения выступают как “глаголы” между сущностями (“существительными”) на диаграмме. Правильный подбор этих “связевых глаголов” между зависимыми сущностями позволяет использовать их для чтения отношений от родительских таблиц к дочерним, и в обратную сторону, используя пассивную форму соответствующего глагола.

Зависимая сущность не может существовать без родителя и без идентификации этой зависимости. Это означает, что зависимая сущность не может быть идентифицирован без использования ключа родителя. Таким образом, в соответствии с концепцией отношений сущностей в IDEF1X, связь устанавливается миграцией атрибутов первичного ключа (PK) из родительской сущности в дочернюю, где эти атрибуты дочерней сущности называются уже внешним ключом (Foreing Key FK). В общем случае некоторая дочерняя сущность может быть одновременно связана с несколькими родительскими сущностями, и иметь несколько внешних ключей (FKn). На диаграмме модели данных соответствующие атрибуты связи в дочерней сущности сопровождаются меткой (FKn) (рис. 5.26.).

Рис. 5.26. Пример FAM диаграммы

Связь между двумя сущностями может быть определенная и неопределенная (идентифицирующая и не идентифицирующая). Идентифицирующие связи устанавливаются между сущности, если внешний ключ FKn мигрирует в ключевую область зависимой сущности. На диаграмме модели идентифицирующие связи между сущности изображаются сплошной линией, соединяющей эти сущности. Для таких типов связей, отношений СУБД самостоятельно контролирует ссылочную целостность между записями в родительской и дочерних таблицах на физическом уровне, например, могут выполняться каскадные операции удаления.

Не идентифицирующие связи (отношения) устанавливается, если FKn мигрирует в не ключевую область зависимой сущности. На диаграмме модели данных не идентифицирующие связи между сущностями изображаются прерывистой линией, соединяющей эти сущности. В обоих случаях на диаграмме помещается точка в конце соединительной линии у дочерней сущности (рис. 5.27.).

Рис. 5.27. Пример FAM диаграммы с не идентифицирующими связями

Для таких типов связей стратегия ссылочной целостность между записями в родительской и дочерних таблицах изменяется. Например, для задачи резервирования билетов (родительская сущность – «заказчик», дочерняя – «места»), при отказе «заказчика» от зарезервированных билетов выполняется операция удаления записи в родительской таблице (отказ от заказанных билетов), записи в дочерней таблице связанные с записью в родительской таблице могут и не удаляться, а их FK принимать значение по умолчанию (например, NULL, места то ведь остались).

Всем вышеописанным связям Erwin автоматически присваивает имена связи и порядковые номера связи.

После построения «Атрибутной модели» (FAM) выполняется нормализация данных.

5.8.2. Создание новой модели

Создание новой логической/физической модели, производится в Меню “File” выбором опции “New”. В появившемся окне необходимо выбрать из предложенного списка тип модели (логическая/физическая), указать используемую базу данных (DB2) и выбрать версию (рис. 5.28.). После нажатия кнопки “Ok” AllFusion Erwin Data Modeler открывает окна “Model Explorer” и “Diagram Window”.

Рис. 5.28. Создание новой модели данных

5.8.3. Создание физического уровня базы данных на основе логического 

Как уже было сказано выше, нужно с начало определить сущности и их характеристики на логическом уровне, затем при первоначальном переключении на физический уровень соответствующие термины для него будут созданы автоматически. Переключение между уровнями осуществляется с помощью списка выбора “Model type indicator” – «Указатель типа модели» в панели инструментов AllFusion Erwin Data Modeler (logical/physical) (рис. 5.21.).

5.8.4. Редактирование таблиц

Функция редактирования выполняется в графическом и текстовом режиме.

Выполнение функции “Создание/Добавление таблицы” в графическом режиме производится помещением курсора в поле “AllFusion Erwin Data Modeler Toolbox” (рис. 5.21.) и нажатием дважды на рисунок, изображающий таблицу “Entity”. Затем курсор перемещается в некоторое выбранное место для размещения таблицы в “Diagram Window” и делается щелчок мышкой. Таблица появляется с временным именем Е/1. Такая операция называется перетягиванием и может повторяться для нескольких таблиц. Поверх временного имени таблицы набирается ее действительное имя. Сразу после этого можно вводить имена атрибутов данной таблицы. Как указано выше, одновременно в окне “Model Explorer” в текстовом виде отражается появление созданной новой таблицы.

Выполнение этой функции можно производить и в текстовом режиме в окне “Model Explorer”: правый щелчок по “Entity”, во всплывающем меню выбрать “New” и щелкнуть по нему. В появившемся окне поверх имени Е/1 набрать нужное имя таблицы. После появления таблицы в окне “Model Explorer” можно выполнять другие функции с таблицей схемы: переименование (Rename), удаление (Delete), переход к таблице на схеме (Go to), показать свойства (возможно для их корректировки или дополнения) таблицы (Property). Для этого необходимо сделать правый щелчок по выбранному “Entity”, во всплывающем меню выбрать требуемую функцию.

Выполнение функции “Переименование таблицы” легко выполняется в окне “Model Explorer”: правый щелчок по “Entity”, во всплывающем меню выбрать “Rename” и щелкнуть по нему. Поверх старого имени ввести новое имя таблицы.

Первоначальное определение объекта (Name, definition, note) производится в логической схеме, дальнейшее доопределение параметров объекта/таблицы при создании или добавлении таблицы можно производить в меню Property в окне “Model Explorer” по мере развития логической схемы и перехода ее к физической.

Параметры сущности для логической модели показаны на рис. 5.29. Параметры таблицы для физической модели показаны на рис. 5.30.

Рис. 5.29. Параметры сущности для логической модели

Рис. 5.30. Параметры таблицы для физической модели

5.8.5. Редактирование столбцов таблицы

Аналогично вышеизложенному производится выполнение функций по добавлению/переименованию/удалению атрибута таблицы. При создании таблицы и ее атрибутов в соответствии с требованиями реляционных баз данных необходимо обеспечить однозначную идентификацию каждой строки таблицы. Это достигается путем выбора одного или нескольких атрибутов таблицы в качестве первичного ключа (PK). Эти атрибуты образуют область ключа таблицы (Key area). Остальные неключевые атрибуты образуют область данных таблицы (Data area). Эти области разделяются в таблице в окне “Diagram Window” горизонтальной линией, поэтому при добавлении атрибутов во вновь создаваемую таблицу сначала выше горизонтальной линии вводятся ключевые атрибуты, а затем после нажатия клавиши “Tab” – неключевые.

AllFusion Erwin Data Modeler включает удобные средства перемещения атрибутов между вышеуказанными областями и внутри этих областей при корректировке модели.

Первоначальное определение атрибута (Name, General, Datatype, definition, note, Key Group) производится в логической схеме. Дальнейшее доопределение параметров атрибута/столбца таблицы при его добавлении можно производить в меню Property в окне “Model Explorer” по мере развития логической схемы и перехода ее к физической (рис. 5.31.).

Рис. 5.31. Добавление/корректировка столбцов в физической модели данных

5.8.6. Редактирование ключей и индексов таблицы

При проектировании логической модели для некоторого объекта может создаваться “Ключевая группа”. Она автоматически включает в себя ключи PK, а также другие виды ключей – индексов. Первоначальное определение ключей (имя ключевой группы, тип индекса таблицы) производится в логической схеме. Детальное проектирование ключей и индексов (Index), как правило, производится на уровне физической модели.

Как уже излагалось выше, первичный ключ (PK) – это набор атрибутов, которые используются для однозначной идентификации экземпляров объекта. Первичный ключ может включать один или более первичных ключевых атрибутов. Ключ PK всегда единственный для таблицы и создается автоматически для каждой таблицы при вводе атрибутов в ключевую область.

Выполнения данной функции производится в меню “Key Group”/”Index” в окне “Model Explorer” выбором опции “Property”/”New” (рис. 5.32.).

Рис. 5.32. Создание/корректировка индексов в физической модели данных

Название ключа можно переименовать, используя клавишу “Rename”, так же как и изменить любой из вышеуказанных параметров индекса на уровне логической или физической модели.

5.8.7. Редактирование связей таблиц

Модель БД имеет сложную древовидную (сетевую) структуру, в которой все сущности (таблицы) связаны между собой некоторыми связями или отношениями. Зависимая (дочерняя) сущность не может существовать без родительской и без идентификации этой зависимости. Это означает, что зависимая таблица не может быть идентифицирован без использования ключа родителя. Такая связь изображается сплошной или прерывистой линией между родительской и детской таблицами в окне “Diagram Window”. Каждая таблица может выступать в какой–то связи как родительская (“Parent relationships”) и, в то же время, в какой–то другой связи как дочерняя (“Child relationships”). В диаграмме сущностей схемы БД предусмотрено окно “Relationships” для регистрации всех параметров этой связи между сущностями (рис. 5.33.).

Рис. 5.33. Создание/корректировка связи в модели данных

Активизация этого окна производится в окне “Diagram Window” щелчком мышкой по выбранной линии связи или в окне “Model Explorer” выбором нужной таблицы, нажав для нее меню “Parent relationships” или “Child relationships”, опции “Property”/”New”.

5.8.8. Сохранение модели базы данных

Создание модели данных – это длительный, итерационный процесс, выполнение вышеизложенных функций и операций разработчиком БД может повторяться многократно для получения схемы модели данных, удовлетворяющей требованиям задач и пользователей на некотором этапе сопровождения БД.

При этом полученная модель всякий раз после окончания корректировки должна быть сохранена с помощью операций “Save” или “Save as” в виде AllFusion Erwin Data Modeler файла с расширением *.er1. Эта модель в последующем может быть выбрана для дальнейшей обработки с помощью операции “Open”. Все эти функции AllFusion Erwin Data Modeler достаточно подробно описаны в документе “AllFusion Erwin Data Modeler. Getting Started”.

AllFusion Erwin Data Modeler запоминает имена файлов для создаваемых моделей и их местоположение (пути доступа) и предлагает их для выбора при входе. Тем самым ускоряется процесс выборки требуемой модели и облегчается сопровождение БД.

5.8.9. Генерация операторов для создания базы данных

После окончательного определения и построения физической модели данных можно перейти к выполнению одной из наиболее важных функций – генерации схемы, а именно – генерации операторов на языке DDL, описывающих БД. Эти операторы используются затем для создания физической БД и ее поддержки на выбранном для ее размещения сервере.

AllFusion Erwin Data Modeler обеспечивает ведение следующих групп опций (режимов) для описания (указания) необходимых разработчику вариантов генерации схемы: “Schema”, “Summary table”, “View”, “Table”, “Column”, “Index”, “Referential Integrity”, “Trigger”, “Other options”. Включение параметров для указанных групп опций влияет на характеристики создаваемой физической БД, которые зависят от выбранной платформы СУБД. В связи с этим, не все группы опций используются одинаково для различных СУБД и, естественно, не все опции используются в данной разработке БД.

Генерация операторов на языке DDL производится при открытой модели БД, при этом необходимо выбрать тип “Physical” для модели. Перед генерацией необходимо выполнить выбор типа БД и ее версии для сервера назначения (рис. 5.34.). Для этого в меню “Database” выбрать “Choose Database”, в окне “Target Server” включить кнопки “DB2” и “DB2 version” – выбрать соответствующую версию DB2 для дальнейшей генерации операторов DDL. Следует заметить, что эту операцию необходимо выполнить только первоначально при генерации задания на языке DDL первый раз, либо при смене платформы СУБД или ее версии в дальнейшем, так как AllFusion Erwin Data Modeler запоминает предыдущее состояние введенных параметров и использует их при следующем входе.

Далее, для продолжения операции получения файла задания на языке DDL, необходимо перейти в меню “Tools”, подменю “Forward Engineer/Schema generation” – появляется окно, изображенное на рис. 5.35.

Для указанных в окне “Schema generation” режимов “Schema”, “View”, “Table”, “Columns”, “Index”, “Referential Integrity”, “Trigger”, “Other options” необходимо справа в окне “Schema” указать необходимость включения соответствующих последовательностей SQL операторов в файл задания на языке DDL. Это операторы Create, Drop и другие, которые будут сгенерированы AllFusion Erwin Data Modeler автоматически для схемы в целом, для табличных пространств и буферных пулов, таблиц, индексов, триггеров и других элементов схемы. Полностью состояние включения элементов в операторы на языке DDL можно посмотреть, щелкнув по кнопке “Summary”.

Рис. 5.34. Выбор БД и ее версии

Рис. 5.35. Генерация файла с операторами DDL для БД

Для завершения операции – генерация файла скриптов и получения операторов DDL в виде файла – задания необходимо нажать кнопку “Report” в нижней части экрана. Появляется окно, в котором разработчик должен выбрать папку и указать имя файла для сохранения сгенерированных операторов DDL в виде задания (сеанса в терминах DB2) для создания БД на сервере.

Сгенерированные операторы можно просмотреть, нажав кнопку “Preview” в нижней части экрана. При этом используются сохраненные на этапе генерации значения параметров для переключения режимов генерации операторов DDL схемы (см. часть примера ниже).

CREATE TABLE "NSI"."ADMINIST" (

"ADMIN_NO" CHAR(2) NOT NULL,

"ADM_DATE_INS" IMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP,

"ADMIN_ID" VARCHAR(12),

"COUNTRY_NO" CHAR(3),

"COU_DATE_INS" TIMESTAMP,

"ADMIN_NAME" VARCHAR(32),

"ADMIN_FULLNAME" VARCHAR(150),

"ADMIN_REAL_PR" CHAR(1),

"ADM_BGN_DATE" TIMESTAMP NOT NULL,

"ADM_END_DATE" TIMESTAMP NOT NULL,

"ADM_SIGN" CHAR(1) NOT NULL

)

IN "STARAITS"

INDEX IN "STARAIIS"

;

ALTER TABLE "NSI"."ADMINIST"

DATA CAPTURE CHANGES

;

COMMENT ON TABLE "NSI"."ADMINIST" IS 'Администрация';

COMMENT ON COLUMN "NSI"."ADMINIST"."ADMIN_NO" IS 'Код администрации';

CREATE UNIQUE INDEX "NSI"."H_ADM_NO" ON "NSI"."ADMINIST"

(

"ADMIN_NO" ASC,

"ADM_BGN_DATE" ASC,

"ADM_END_DATE" ASC

);

COMMENT ON INDEX "NSI"."H_ADM_NO" IS 'Индекс историчности объекта';

CREATE INDEX "NSI"."F_COUADM" ON "NSI"."ADMINIST"

(

"COUNTRY_NO" ASC,

"COU_DATE_INS" ASC

);

5.8.10. Подготовка исходных данных для разработки новой версии БД 

Исходные данные для получения новой версии БД определяются требованиями появляющихся новых функций и модификации задач по мере их развития. Назначение этапа – проверка и обеспечение достоверности схемы модели БД, проверка правильности исходных данных для корректировки и соответствия их схеме модели БД.

Исходные данные для внесения изменений и получения новой версии БД включают:

– схему эксплуатируемой предыдущей версии БД в среде AllFusion Erwin Data Modeler (по возможности) или структура таблиц данных конкретной БД (при первоначальном формировании схемы);

– совокупность отчетов по старой схеме БД в среде AllFusion Erwin Data Modeler;

– эксплуатируемую физическую БД;

– исходные данные для изменений по форме некоторого установленного документа пользователя;

– источник ввода данных и порядок их заполнения, порядок установления связей с другими таблицами (для вновь включаемых таблиц, столбцов, связей должен быть определен).

Формы документов, предназначенных для документального оформления требований по внесению изменений в эксплуатирующуюся БД, получению исходных данных для заполнения БД и выпуску новой ее версии, регламентируется внутренними распоряжениями или документами пользователя. Рекомендуется по возможности приближать вид этих документов к отчетам AllFusion Erwin Data Modeler для схем моделей БД.

На данном этапе можно выполнить определенные подготовительные работы, которые позволят в дальнейшем сократить время и улучшить качество работ по созданию и запуску новой версии БД. Необходимость их выполнения определяется разработчиком БД в зависимости от того, есть ли достоверная схема БД на данный момент, насколько она соответствует физической БД, насколько большой список изменений в БД и насколько тщательно подготовлены исходные данные для корректировки. Предлагается выполнить следующий перечень операций (рис. 5.36.):

– запустить CASE систему AllFusion Erwin Data Modeler;

– загрузить существующую модель старой БД в AllFusion Erwin Data Modeler или получить ее средствами AllFusion Erwin Data Modeler, операция “Reverse engineering”;

– получить доступ к эксплуатируемой БД;

– произвести полное сравнение существующей модели БД с физической БД средствами AllFusion Erwin Data Modeler для контроля их соответствия;

– при наличии отклонений произвести выяснение причин различий и привести в соответствии схемы модели БД структуре физической БД;

– получить полную логическую и физическую схемы БД со всеми ее подсхемами, таблицами, столбцами и их характеристиками;

– произвести анализ исходных данных для внесения изменений и определения оптимального варианта их включения в новую версию БД;

– на основе анализа получить более полный, исправленный и детализированный перечень вносимых изменений в БД по структуре отчетов AllFusion Erwin Data Modeler для БД (вставка, замена, удаление элементов схемы).

Рис. 5.36. Схема технологического процесса этапа подготовки исходных данных для новой версии БД


6. Язык UML, модели ПО, объектно–ориентированный анализ и проектирование ПО.

Язык UML представляет собой общецелевой язык визуального моделирования, который разработан для спецификации, визуализации, проектирования и документирования компонентов программного обеспечения, бизнес–процессов и других систем. Язык UML является достаточно строгим и мощным средством моделирования, который может быть эффективно использован для построения концептуальных, логических и графических моделей сложных систем различного целевого назначения. Этот язык вобрал в себя наилучшие качества и опыт методов программной инженерии, которые с успехом использовались на протяжении последних лет при моделировании больших и сложных систем.

С точки зрения методологии ООАП достаточно полная модель сложной системы представляет собой определенное число взаимосвязанных представлений (views), каждое из которых адекватно отражает аспект поведения или структуры системы. При этом наиболее общими представлениями сложной системы принято считать статическое и динамическое, которые в свою очередь могут подразделяться на другие более частные.

Принцип иерархического построения моделей сложных систем предписывает рассматривать процесс построения моделей на разных уровнях абстрагирования или детализации в рамках фиксированных представлений.

Уровень представления (layer) — способ организации и рассмотрения модели на одном уровне абстракции, который представляет горизонтальный срез архитектуры модели, в то время как разбиение представляет ее вертикальный срез.

При этом исходная или первоначальная модель сложной системы имеет наиболее общее представление и относится к концептуальному уровню. Такая модель, получившая название концептуальной, строится на начальном этапе проектирования и может не содержать многих деталей и аспектов моделируемой системы. Последующие модели конкретизируют концептуальную модель, дополняя ее представлениями логического и физического уровня.

В целом же процесс ООАП можно рассматривать как последовательный переход от разработки наиболее общих моделей и представлений концептуального уровня к более частным и детальным представлениям логического и физического уровня. При этом на каждом этапе ООАП данные модели последовательно дополняются все большим количеством деталей, что позволяет им более адекватно отражать различные аспекты конкретной реализации сложной системы. Общая схема взаимосвязей моделей ООАП представлена на рис. 6.1.

Рис. 6.1. Взаимосвязь моделей ООАП

Для описания языка UML используются средства самого языка. К базовым средствам относится пакет, который служит для группировки элементов модели. При этом сами элементы модели, в том числе произвольные сущности, отнесенные к одному пакету, выступают в роли единого целого. При этом все разновидности элементов графической нотации языка UML организованы в пакеты.

Унифицированный язык моделирования (UML) является стандартным инструментом для моделирования программного обеспечения. С помощью UML можно визуализировать, специфицировать, конструировать и документировать артефакты программных систем.

UML можно применять для моделирования любых систем: от информационных систем масштаба предприятия до распределенных Web–приложений и даже встроенных систем реального времени. Это очень выразительный язык, позволяющий рассмотреть систему со всех точек зрения, имеющих отношение к ее разработке и последующему развертыванию. Несмотря на обилие выразительных возможностей, этот язык прост для понимания и использования.

Однако, UML – это всего лишь язык моделирования; он является одной из составляющих процесса разработки программного обеспечения. Хотя UML не зависит от моделируемой реальности, лучше всего применять его, когда процесс моделирования основан на рассмотрении вариантов использования, является итеративным и пошаговым, а сама система имеет четко выраженную архитектуру.

UML не является языком визуального программирования, но модели, созданные с его помощью, могут быть непосредственно переведены на различные языки программирования. Иными словами, UML–модель можно отобразить на такие языки, как Java, C++, Visual Basic и даже на таблицы реляционной базы данных. Те понятия, которые предпочтительно передавать графически, так и представляются в UML; те же, которые лучше описывать в текстовом виде, выражаются с помощью языка программирования.

Такое отображение модели на язык программирования позволяет осуществлять прямое проектирование: генерацию кода из модели UML в какой–то конкретный язык. Можно решить и обратную задачу: реконструировать модель по имеющейся реализации.

Кроме того, UML позволяет решить проблему документирования системной архитектуры и всех ее деталей, предлагает язык для формулирования требований к системе и определения тестов и, наконец, предоставляет средства для моделирования работ на этапе планирования проекта и управления версиями.

6.1. Основные элементы языка UML 

Словарь языка UML включает три вида строительных блоков:

– сущности (предметы);

– отношения;

– диаграммы.

6.1.1. Сущности 

Сущности – это абстракции, являющиеся основными элементами модели. Отношения связывают различные сущности. Диаграмма – это графическое представление множества сущностей. Изображается она, чаще всего, как связный граф из вершин (сущностей) и дуг (отношений).

В UML имеется четыре типа сущностей:

– структурные;

– поведенческие;

– группирующие;

– аннотационные.

Сущности являются основными объектно–ориентированными блоками языка. С их помощью можно создавать корректные модели.

Структурные сущности – представляют собой статические части модели, соответствующие концептуальным или физическим элементам системы. Существует семь разновидностей структурных сущностей.

Класс (Class) – это описание совокупности объектов с общими атрибутами, операциями, отношениями и семантикой. Класс реализует один или несколько интерфейсов. Графически класс изображается в виде прямоугольника, в котором обычно записаны его имя, атрибуты и операции, как показано на рис. 6.2.

Рис. 6.2. Классы

Интерфейс (Interface) – это совокупность операций, которые определяют сервис (набор услуг), предоставляемый классом или компонентом. Таким образом, интерфейс описывает видимое извне поведение элемента. Интерфейс может представлять поведение класса или компонента полностью или частично; он определяет только спецификации операций (сигнатуры), но никогда – их реализации. Графически интерфейс изображается в виде круга, под которым пишется его имя, как показано на рис. 6.3. Интерфейс редко существует сам по себе – обычно он присоединяется к реализующему его классу или компоненту.

Рис. 6.3. Интерфейсы

Кооперация (Collaboration) определяет взаимодействие; она представляет собой совокупность ролей и других элементов, которые, работая совместно, производят некоторый кооперативный эффект, не сводящийся к простой сумме слагаемых. Кооперация, следовательно, имеет как структурный, так и поведенческий аспект. Один и тот же класс может принимать участие в нескольких кооперациях; таким образом, они являются реализацией образцов поведения, формирующих систему. Графически кооперация изображается в виде эллипса, изображенного пунктирной линией, в который обычно заключено только имя, как показано на рис. 6.4.

Рис. 6.4. Кооперативные диаграммы

Вариант использования (Use case) – это описание последовательности выполняемых системой действий, которая производит наблюдаемый результат, значимый для какого–то определенного актера (Actor). Варианты использования реализуются посредством кооперативных диаграмм. Графически вариант использования изображается в виде изображенного непрерывной линией эллипса, обычно содержащего только его имя, как показано на рис. 6.5.

Рис. 6.5. Варианты использования

Три другие сущности – активные классы, компоненты и узлы – подобны классам: они описывают совокупности объектов с общими атрибутами, операциями, отношениями и семантикой. Тем не менее, они в достаточной степени отличаются друг от друга и от классов и, учитывая их важность при моделировании определенных аспектов объектно–ориентированных систем, заслуживают специального рассмотрения.

Активным классом (Active class) называется класс, объекты которого вовлечены в один или несколько процессов, или нитей (Threads), и поэтому могут инициировать управляющее воздействие. Активный класс во всем подобен обычному классу, за исключением того, что его объекты представляют собой элементы, деятельность которых осуществляется одновременно с деятельностью других элементов. Графически активный класс изображается так же, как простой класс, но ограничивающий прямоугольник рисуется жирной линией и обычно включает имя, атрибуты и операции.

Два оставшихся элемента – компоненты и узлы – также имеют свои особенности. Они соответствуют физическим сущностям системы, в то время как пять предыдущих – концептуальным и логическим сущностям.

Компонент (Component) – это физическая заменяемая часть системы, которая соответствует некоторому набору интерфейсов и обеспечивает его реализацию. В системе можно встретить различные виды устанавливаемых компонентов, такие как СОМ+ или Java Beans, а также компоненты, являющиеся артефактами процесса разработки, например файлы исходного кода. Компонент, как правило, представляет собой физическую упаковку логических элементов, таких как классы, интерфейсы и кооперативные диаграммы. Графически компонент изображается в виде прямоугольника с вкладками, содержащего обычно только имя, как показано на рис. 6.6.

Рис. 6.6. Компоненты

Узел (Node) – это элемент реальной (физической) системы, который существует во время функционирования программного комплекса и представляет собой вычислительный ресурс, обычно обладающий как минимум некоторым объемом памяти, а часто еще и способностью обработки. Совокупность компонентов может размещаться в узле, а также мигрировать с одного узла на другой. Графически узел изображается в виде куба, обычно содержащего только имя, как показано на рис. 6.7.

Рис. 6.7. Узлы

Существуют также разновидности этих сущностей: актеры, сигналы, утилиты (виды классов), процессы и нити (виды активных классов), приложения, документы, файлы, библиотеки, страницы и таблицы (виды компонентов).

Поведенческие сущности (Behavioral things) являются динамическими составляющими модели UML. Они описывают поведение модели во времени и пространстве. Существует всего два основных типа поведенческих сущностей.

Взаимодействие (Interaction) – это поведение, суть которого заключается в обмене сообщениями (Messages) между объектами в рамках конкретного контекста для достижения определенной цели. С помощью взаимодействия южно описать как отдельную операцию, так и поведение совокупности объектов. Взаимодействие предполагает ряд других элементов, таких как сообщения, последовательности действий (поведение, инициированное сообщением) и связи (между объектами). Графически сообщения изображаются в виде стрелки, над которой почти всегда пишется имя соответствующей операции (рис. 6.8.).

Рис. 6.8. Сообщения

Автомат (State machine) – это алгоритм поведения, определяющий последовательность состояний, через которые объект или взаимодействие проходят на протяжении своего жизненного цикла в ответ на различные события, а также реакции на эти события. С помощью автомата можно описать поведение отдельного класса или кооперативной диаграммы классов. С автоматом связан ряд других элементов: состояния, переходы (из одного состояния в другое), события (сущности, инициирующие переходы) и виды действий (реакция на переход). Графически состояние изображается в виде прямоугольника с закругленными углами, содержащего имя и, возможно, подсостояния (рис. 6.9.).

Эти два элемента – взаимодействия и автоматы – являются основными поведенческими сущностями, входящими в модель UML. Семантически они часто бывают связаны с различными структурными элементами, в первую очередь – классами, кооперациями и объектами.

Рис. 6.9. Состояния

Группирующие сущности являются организующими частями модели UML. Это блоки, на которые можно разложить модель. Есть только одна первичная группирующая сущность, а именно пакет.

Пакеты (Packages) представляют собой универсальный механизм организации элементов в группы. В пакет можно поместить структурные, поведенческие и даже другие группирующие сущности. В отличие от компонентов, существующих во время работы программы, пакеты носят чисто концептуальный характер, то есть существуют только во время разработки. Изображается пакет в виде папки с закладкой, содержащей, как правило, только имя и иногда – содержимое (рис. 6.10.).

Рис. 6.10. Пакеты

Пакет – основной способ организации элементов модели в языке UML. Каждый пакет владеет всеми своими элементами, т. е. теми элементами, которые включены в него. Про соответствующие элементы пакета говорят, что они принадлежат пакету или входят в него. При этом каждый элемент может принадлежать только одному пакету. В свою очередь, одни пакеты могут быть вложены в другие.

Подпакет (Subpackage) — пакет, который является составной частью другого пакета.

По определению все элементы подпакета принадлежат и более общему пакету. Тем самым для элементов модели задается отношение вложенности пакетов, которое представляет собой иерархию.

Для графического изображения пакетов на диаграммах применяется большой прямоугольник с небольшим прямоугольником, присоединенным к левой части верхней стороны первого. Можно сказать, что визуально символ пакета напоминает пиктограмму папки в популярном графическом интерфейсе. Внутри большого прямоугольника может записываться информация, относящаяся к данному пакету. Если такой информации нет, то внутри большого прямоугольника записывается имя пакета, которое должно быть уникальным в пределах рассматриваемой модели. Если же такая информация имеется, то имя пакета записывается в верхнем маленьком прямоугольнике (рис. 6.11.).

Рис. 6.11. Графическое изображение пакетов в языке UML

Перед именем пакета может помещаться строка текста, содержащая ключевое слово, заранее определенное в языке UML, и называемое стереотипом.

В языке UML определены следующие стереотипы сообщений:

<<call>> (вызвать) – сообщение, требующее вызова операции или процедуры объекта–получателя. Если сообщение с этим стереотипом рефлексивное, то оно инициирует локальный вызов операции у пославшего это сообщение объекта.

<<return>> (возвратить) – сообщение, возвращающее значение выполненной операции или процедуры вызвавшему ее объекту. Значение результата может инициировать ветвление потока управления.

<<create>> (создать) – сообщение, требующее создания другого объекта для выполнения определенных действий. Созданный объект может стать активным (ему передается поток управления), а может остаться пассивным.

<<destroy>> (уничтожить) – сообщение с явным требованием уничтожить соответствующий объект. Посылается в том случае, когда необходимо прекратить нежелательные действия со стороны существующего в системе объекта, либо когда объект больше не нужен и должен освободить задействованные им системные ресурсы.

<<send>> (послать) – обозначает посылку другому объекту сигнала, который асинхронно инициируется одним объектом и принимается (перехватывается) другим. Отличие сигнала от сообщения заключается в том, что сигнал должен быть явно описан в том классе, объект которого инициирует его передачу.

В качестве содержимого пакета могут выступать имена его отдельных элементов и их свойства, такие как видимость элементов за пределами пакета.

Одним из типов отношений между пакетами является отношение вложенности или включения пакетов друг в друга. В языке UML это отношение может быть изображено без использования линий простым размещением одного пакета–прямоугольника внутри другого пакета–прямоугольника. Так, в данном случае пакет с именем Пакет_1 содержит в себе два подпакета: Пакет_2 и Пакет_3 (рис. 6.12.).

Рис. 6.12. Графическое изображение вложенности пакетов друг в друга

Кроме того, в языке UML это же отношение может быть изображено с помощью отрезков линий аналогично графическому представлению дерева. В этом случае наиболее общий пакет или контейнер изображается в верхней части рисунка, а его подпакеты – уровнем ниже. Контейнер соединяется с подпакетами сплошной линией, на конце которой, примыкающей к контейнеру, изображается специальный символ – . Он означает, что подпакеты "собственность" или часть контейнера, и, кроме этих подпакетов, контейнер не содержит никаких других. Рассмотренный выше пример может быть представлен с помощью явной визуализации отношения включения (рис. 6.13.).

Рис. 6.13. Графическое изображение языка UML для вложенности пакетов друг в друга с помощью явной визуализации отношения включения

Пакеты – это основные группирующие сущности, с помощью которых можно организовать модель UML. Существуют также вариации пакетов, например каркасы (Frameworks), модели и подсистемы.

Модель является подклассом пакета и представляет собой абстракцию физической системы, которая предназначена для вполне определенной цели. Именно эта цель предопределяет те компоненты, которые должны быть включены в модель и те, рассмотрение которых не является обязательным. Другими словами, модель отражает релевантные аспекты физической системы, оказывающие непосредственное влияние на достижение поставленной цели. В прикладных задачах цель обычно задается в форме исходных требований к системе, которые, в свою очередь, в языке UML записываются в виде вариантов использования системы.

В языке UML для одной и той же физической системы могут быть определены различные модели, каждая из которых специфицирует систему с различных точек зрения. Примерами таких моделей являются логическая модель, модель проектирования, модель вариантов использования и другие. При этом каждая такая модель имеет собственную точку зрения на физическую систему и свой уровень абстракции. Модели, как и пакеты, могут быть вложены друг в друга. Пакет может включать в себя несколько различных моделей одной и той же системы, и в этом состоит один из важнейших механизмов разработки моделей на языке UML. Общая модель системы в контексте языка UML содержит в себе модель анализа и модель проектирования, что явно отражает связь с ООАП (рис. 6.14.).

Рис. 6.14. Изображение модели системы в виде пакетов моделей анализа и проектирования

Подсистема есть просто группировка элементов модели, которые специфицируют простейшее поведение физической системы. При этом элементы подсистемы делятся на две части – спецификацию поведения и его реализацию. Для графического представления подсистемы применяется специальное обозначение – прямоугольник, как в случае пакета, но дополнительно разделенный на три секции. При этом в верхнем маленьком прямоугольнике изображается символ, по своей форме напоминающий "вилку" и указывающий на подсистему. Имя подсистемы вместе с необязательным ключевым словом или стереотипом записывается внутри большого прямоугольника. Однако при наличии строк текста внутри большого прямоугольника имя подсистемы может быть записано рядом с обозначением "вилки" (рис. 6.15.).

Рис. 6.15. Графическое изображение подсистемы в языке UML

Операции подсистемы записываются в левой верхней секции, ниже указываются элементы спецификации, а справа от вертикальной линии – элементы реализации. При этом два последних раздела помечаются соответствующими метками: "Элементы спецификации" и "Элементы реализации". Секция операций никак не помечается. Если в подсистеме отсутствуют те или иные секции, то они не отображаются на схеме.

Аннотационные сущности – пояснительные части модели UML. Это комментарии для дополнительного описания, разъяснения или замечания к любому элементу модели. Имеется только один базовый тип аннотационных элементов – примечание.

Примечание (Note) – это просто символ для изображения комментариев или ограничений, присоединенных к элементу или группе элементов. Графически примечание изображается в виде прямоугольника с загнутым краем, содержащим текстовый или графический комментарий, как показано на рис. 6.16.

Рис. 6.16. Примечание

Этот элемент является основной аннотационной сущностью, которую можно включать в модель UML. Чаще всего примечания используются, чтобы снабдить диаграммы комментариями или ограничениями, которые можно выразить в виде неформального или формального текста. Существуют вариации этого элемента, например, требования, где описывают некое желательное поведение с точки зрения внешней по отношению к модели.

6.1.2. Отношения

В языке UML определены четыре типа отношений:

– зависимость;

– ассоциация;

– обобщение;

– реализация.

Эти отношения являются основными связующими строительными блоками в UML и применяются для создания моделей.

Зависимость (Dependency) – это семантическое отношение между двумя сущностями, при котором изменение одной из них, независимой, может повлиять на семантику другой, зависимой. Графически зависимость изображается в виде прямой пунктирной линии, часто со стрелкой, которая может содержать метку (рис. 6.17.).

Рис. 6.17. Зависимость

Ассоциация (Association) – структурное отношение, описывающее совокупность связей (соединение между объектами). Разновидностью ассоциации является агрегирование (Aggregation), определяющее структурное отношение между целым и его частями. Графически ассоциация изображается в виде прямой линии (иногда завершающейся стрелкой или содержащей метку), рядом с которой могут присутствовать дополнительные обозначения, на пример кратность и имена ролей (рис. 6.18.).

Рис. 6.18. Ассоциация

Обобщение (Generalization) – это отношение "специализация/обобщение", при котором объект специализированного элемента (потомок) может быть подставлен вместо объекта обобщенного элемента (родителя или предка). Таким образом, потомок (Child) наследует структуру и поведение своего родителя (Parent). Графически отношение обобщения изображается в виде линии с не закрашенной стрелкой, указывающей на родителя, как показано на рис. 6.19.

Рис. 6.19. Обобщение

Реализация (Realization) – это семантическое отношение между классификаторами, при котором один классификатор определяет "контракт", а другой гарантирует его выполнение. Отношения реализации встречаются в двух случаях: во–первых, между интерфейсами и реализующими их классами или компонентами, а во–вторых, между прецедентами и реализующими их кооперациями. Отношение реализации изображается в виде пунктирной линии с не закрашенной стрелкой, как нечто среднее между отношениями обобщения и зависимости (рис. 6.20.).

Рис. 6.20. Реализация

Четыре описанных элемента являются основными типами отношений, которые можно включать в модели UML.

6.1.3. Диаграммы

В рамках языка UML все представления о модели сложной системы фиксируются в виде специальных графических конструкций, получивших название диаграмм.

Диаграмма в UML – это графическое представление набора элементов, изображаемое чаще всего в виде графа с вершинами (сущностями) и ребрами (отношениями). Диаграммы рисуют для визуализации системы с разных точек зрения. Диаграмма – это в некотором смысле одна из проекций системы. Теоретически диаграммы могут содержать любые комбинации сущностей и отношений. На практике, однако, применяется сравнительно небольшое количество типовых комбинаций. В UML выделяют девять типов диаграмм:

диаграммы классов;

диаграммы объектов;

диаграммы вариантов использования;

диаграммы последовательностей;

кооперативные диаграммы;

диаграммы состояний;

диаграммы деятельностей;

диаграммы компонентов;

диаграммы размещения.

На диаграмме классов показывают классы, интерфейсы, объекты и кооперативные диаграммы, а также их отношения. При моделировании объектно–ориентированных систем этот тип диаграмм используют чаще всего. Диаграммы классов соответствуют статическому виду системы с точки зрения проектирования. Диаграммы классов, которые включают активные классы, соответствуют статическому виду системы с точки зрения процессов.

На диаграмме объектов представлены объекты и отношения между ними. Они являются статическими изображениями экземпляров сущностей, показанных на диаграммах классов. Диаграммы объектов, как и диаграммы классов, относятся к статическому виду системы с точки зрения проектирования или процессов, но с расчетом на настоящую или макетную реализацию.

На диаграмме вариантов использования представлены варианты использования и актеры (частный случай классов), а также отношения между ними. Диаграммы вариантов использования относятся к статическому виду системы с точки зрения вариантов использования. Они особенно важны при организации и моделировании поведения системы.

Диаграммы последовательностей и кооперативные диаграммы являются частными случаями диаграмм взаимодействия. На диаграммах взаимодействия представлены связи между объектами; показаны, в частности, сообщения, которыми объекты могут обмениваться. Диаграммы взаимодействия относятся к динамическому виду системы. При этом диаграммы последовательности отражают временную упорядоченность сообщений, а кооперативные диаграммы – структурную организацию обменивающихся сообщениями объектов. Эти диаграммы являются изоморфными, то есть могут быть преобразованы друг в друга.

На диаграммах состояний представлен автомат, включающий в себя состояния, переходы, события и виды действий. Диаграммы состояний относятся к динамическому виду системы; особенно они важны при моделировании поведения интерфейса, класса или кооперативной диаграммы. Они акцентируют внимание на поведении объекта, зависящем от последовательности событий, что очень полезно для моделирования реактивных систем.

Диаграмма деятельности – это частный случай диаграммы состояний; на ней представлены переходы потока управления от одной деятельности к другой внутри системы. Диаграммы деятельностей относятся к динамическому виду системы; они наиболее важны при моделировании ее функционирования и отражают поток управления между объектами.

На диаграмме компонентов представлена организация совокупности компонентов и существующие между ними зависимости. Диаграммы компонентов относятся к статическому виду системы с точки зрения реализации. Они могут быть соотнесены с диаграммами классов, так как компонент обычно отображается на один или несколько классов, интерфейсов или коопераций.

На диаграмме размещения представлена конфигурация обрабатывающих узлов системы и размещенных в них компонентов. Диаграммы размещения относятся к статическому виду архитектуры системы с точки зрения размещения. Они связаны с диаграммами компонентов, поскольку в узле обычно размещаются один или несколько компонентов.

Инструментальные средства позволяют генерировать и другие диаграммы, но девять перечисленных встречаются на практике чаще всего.

В целом интегрированная модель сложной системы в нотации UML может быть представлена в виде совокупности указанных выше диаграмм (рис. 6.21.).

 

 

Рис. 6.21. Интегрированная модель сложной системы в нотации UML

Кроме графических элементов, которые определены для каждой канонической диаграммы, на них может быть изображена текстовая информация, которая расширяет семантику базовых элементов.

В последующем канонические диаграммы рассматриваются более подробно.

6.2. Диаграмма вариантов использования как концептуальное представление бизнес–системы в процессе ее разработки 

Визуальное моделирование с использованием нотации UML можно представить как процесс поуровневого спуска от наиболее общей и абстрактной концептуальной модели исходной бизнес–системы к логической, а затем и к физической модели соответствующей программной системы. Для достижения этих целей вначале строится модель в форме так называемой диаграммы вариантов использования (use case diagram), которая описывает функциональное назначение системы или, другими словами, то, что бизнес–система должна делать в процессе своего функционирования.

Диаграмма вариантов использования (Use case diagram) — диаграмма, на которой изображаются отношения между актерами и вариантами использования.

Диаграмма вариантов использования – это исходное концептуальное представление или концептуальная модель системы в процессе ее проектирования и разработки. Создание диаграммы вариантов использования имеет следующие цели:

– Определить общие границы и контекст моделируемой предметной области на начальных этапах проектирования системы

– Сформулировать общие требования к функциональному поведению проектируемой системы

– Разработать исходную концептуальную модель системы для ее последующей детализации в форме логических и физических моделей

– Подготовить исходную документацию для взаимодействия разработчиков системы с ее заказчиками и пользователями

Назначение данной диаграммы состоит в следующем: проектируемая программная система представляется в форме так называемых вариантов использования, с которыми взаимодействуют внешние сущности или актеры. При этом актером или действующим лицом называется любой объект, субъект или система, взаимодействующая с моделируемой бизнес–системой извне. Это может быть человек, техническое устройство, программа или любая другая система, которая служит источником воздействия на моделируемую систему так, как определит разработчик. Вариант использования служит для описания сервисов, которые система предоставляет актеру. Другими словами каждый вариант использования определяет набор действий, совершаемый системой при диалоге с актером. При этом ничего не говорится о том, каким образом будет реализовано взаимодействие актеров с системой и собственно выполнение вариантов использования.

Рассматривая диаграмму вариантов использования в качестве модели бизнес–системы, можно ассоциировать ее с "черным ящиком". Концептуальный характер этой диаграммы проявляется в том, что подробная детализация диаграммы или включение в нее элементов физического уровня представления на начальном этапе проектирования скорее имеет отрицательный характер, поскольку предопределяет способы реализации поведения системы. Эти аспекты должны быть сознательно скрыты от разработчика на диаграмме вариантов использования.

В самом общем случае, диаграмма вариантов использования представляет собой граф специального вида, который является графической нотацией для представления конкретных вариантов использования, актеров и отношений между этими элементами. При этом отдельные элементы диаграммы заключают в прямоугольник, который обозначает границы проектируемой системы. В то же время отношения, которые могут быть изображены на данном графе, представляют собой только фиксированные типы взаимосвязей между актерами и вариантами использования, которые в совокупности описывают сервисы или функциональные требования к моделируемой системе.

6.2.1. Базовые элементы диаграммы вариантов использования

Базовыми элементами диаграммы вариантов использования являются вариант использования и актер.

Вариант использования (Use case) — внешняя спецификация последовательности действий, которые система или другая сущность могут выполнять в процессе взаимодействия с актерами.

Вариант использования представляет собой спецификацию общих особенностей поведения или функционирования моделируемой системы без рассмотрения внутренней структуры этой системы. Несмотря на то, что каждый вариант использования определяет последовательность действий, которые должны быть выполнены проектируемой системой при взаимодействии ее с соответствующим актером, сами эти действия не изображаются на рассматриваемой диаграмме.

Содержание варианта использования может быть представлено в форме дополнительного пояснительного текста, который раскрывает смысл или семантику действий при выполнении данного варианта использования. Такой пояснительный текст получил название текста–сценария или просто сценария. Далее в этой главе рассматривается один из шаблонов, который может быть рекомендован для написания сценариев вариантов использования.

Отдельный вариант использования обозначается на диаграмме эллипсом, внутри которого содержится его краткое имя в форме существительного или глагола с пояснительными словами. Сам текст имени варианта использования должен начинаться с заглавной буквы (рис. 6.22.).

Рис. 6.22. Графическое обозначение варианта использования

Цель спецификации варианта использования заключается в том, чтобы зафиксировать некоторый аспект или фрагмент поведения проектируемой системы без указания особенностей реализации данной функциональности. В этом смысле каждый вариант использования соответствует отдельному сервису, который предоставляет моделируемая система по запросу актера, т. е. определяет один из способов применения системы. Сервис, который инициализируется по запросу актера, должен представлять собой законченную последовательность действий. Это означает, что после того как система закончит обработку запроса актера, она должна возвратиться в исходное состояние, в котором снова готова к выполнению следующих запросов.

Диаграмма вариантов использования содержит конечное множество вариантов использования, которые в целом должны определять все возможные стороны ожидаемого поведения системы. Для удобства множество вариантов использования может рассматриваться как отдельный пакет. Применение вариантов использования на всех этапах работы над проектом позволяет не только достичь требуемого уровня унификации обозначений для представления функциональности подсистем и системы в целом, но и является мощным средством последовательного уточнения требований к проектируемой системе на основе их итеративного обсуждения со всеми заинтересованными специалистами.

Примерами вариантов использования могут быть следующие действия: проверка состояния текущего счета клиента, оформление заказа на покупку товара, получение дополнительной информации о кредитоспособности клиента, отображение графической формы на экране монитора и другие действия.

Актер (Actor) — согласованное множество ролей, которые играют внешние сущности по отношению к вариантам использования при взаимодействии с ними.

Актер представляет собой любую внешнюю по отношению к моделируемой системе сущность, которая взаимодействует с системой и использует ее функциональные возможности для достижения определенных целей или решения частных задач. Каждый актер может рассматриваться как некая отдельная роль относительно конкретного варианта использования. Стандартным графическим обозначением актера на диаграммах является фигурка "человечка", под которой записывается имя актера (рис. 6.23.).

Рис. 6.23. Графическое обозначение актера

В некоторых случаях актер может обозначаться в виде прямоугольника класса со стереотипом <<actor>> и обычными составляющими элементами класса. Имена актеров должны начинаться с заглавной буквы и следовать рекомендациям использования имен для типов и классов модели. При этом символ отдельного актера связывает соответствующее описание актера с конкретным именем.

Имя актера должно быть достаточно информативным с точки зрения семантики. Для этой цели подходят наименования должностей в компании (например, продавец, кассир, менеджер, президент). Не рекомендуется давать актерам имена собственные или названия моделей конкретных устройств, даже если это с очевидностью следует из контекста проекта. Дело в том, что одно и то же лицо может выступать в нескольких ролях и, соответственно, обращаться к различным сервисам системы.

Актеры используются для моделирования внешних по отношению к проектируемой системе сущностей, которые взаимодействуют с системой. В качестве актеров могут выступать другие системы, в том числе подсистемы проектируемой системы или ее отдельные классы. Важно понимать, что каждый актер определяет согласованное множество ролей, в которых могут выступать пользователи данной системы в процессе взаимодействия с ней. В каждый момент времени с системой взаимодействует вполне определенный пользователь, при этом он играет или выступает в одной из таких ролей. Наиболее наглядный пример актера — конкретный посетитель web–сайта в Интернет со своими параметрами аутентификации.

Поскольку в общем случае актер всегда находится вне системы, его внутренняя структура никак не определяется. Для актера имеет значение только его внешнее представление, т.е. то, как он воспринимается со стороны системы. Актеры взаимодействуют с системой посредством передачи и приема сообщений от вариантов использования. Сообщение представляет собой запрос актером сервиса от системы и получение этого сервиса. Это взаимодействие может быть выражено посредством ассоциаций между отдельными актерами и вариантами использования. Кроме этого, с актерами могут быть связаны интерфейсы, которые определяют, каким образом другие элементы модели взаимодействуют с этими актерами.

6.2.2. Отношения на диаграмме вариантов использования

Отношение (Relationship) — семантическая связь между отдельными элементами модели.

Между элементами диаграммы вариантов использования могут существовать различные отношения, которые описывают взаимодействие экземпляров одних актеров и вариантов использования с экземплярами других актеров и вариантов. Один актер может взаимодействовать с несколькими вариантами использования. В этом случае этот актер обращается к нескольким сервисам данной системы. В свою очередь один вариант использования может взаимодействовать с несколькими актерами, предоставляя для всех них свой сервис.

В то же время два варианта использования, определенные в рамках одной моделируемой системы, также могут взаимодействовать друг с другом, однако характер этого взаимодействия будет отличаться от взаимодействия с актерами. Однако в обоих случаях способы взаимодействия элементов модели предполагают обмен сигналами или сообщениями, которые инициируют реализацию функционального поведения моделируемой системы.

В языке UML имеется несколько стандартных видов отношений между актерами и вариантами использования:

ассоциации (association relationship)

включения (include relationship)

расширения (extend relationship)

обобщения (generalization relationship)

При этом общие свойства вариантов использования могут быть представлены тремя различными способами, а именно — с помощью отношений включения, расширения и обобщения.

6.2.2.1. Отношение ассоциации

Отношение ассоциации (Association) – одно из фундаментальных понятий в языке UML и в той или иной степени используется при построении всех графических моделей систем в форме канонических диаграмм. Применительно к диаграммам вариантов использования ассоциация служит для обозначения специфической роли актера при его взаимодействии с отдельным вариантом использования. Другими словами, ассоциация специфицирует семантические особенности взаимодействия актеров и вариантов использования в графической модели системы. На диаграмме вариантов использования, так же как и на других диаграммах, отношение ассоциации обозначается сплошной линией между актером и вариантом использования. Эта линия может иметь некоторые дополнительные обозначения, например, имя и кратность (рис. 6.24.).

 

Рис. 6.24. Пример графического представления отношения ассоциации между актером и вариантом использования

В контексте диаграммы вариантов использования отношение ассоциации между актером и вариантом использования может указывать на то, что актер инициирует соответствующий вариант использования. Такого актера называют главным. В других случаях подобная ассоциация может указывать на актера, которому предоставляется справочная информация о результатах функционирования моделируемой системы. Таких актеров часто называют второстепенными. Более детальное описание семантических особенностей отношения ассоциации будет дано при рассмотрении других диаграмм в последующих лекциях.

6.2.2.2. Отношение включения

Отношение включения (Include) в языке UML — это разновидность отношения зависимости между базовым вариантом использования и его специальным случаем. При этом отношением зависимости (dependency) является такое отношение между двумя элементами модели, при котором изменение одного элемента (независимого) приводит к изменению другого элемента (зависимого).

Отношение включения устанавливается только между двумя вариантами использования и указывает на то, что заданное поведение для одного варианта использования включается в качестве составного фрагмента в последовательность поведения другого варианта использования. Данное отношение является направленным бинарным отношением.

Так, например, отношение включения, направленное от варианта использования "Предоставление кредита в банке" к варианту использования "Проверка платежеспособности клиента", указывает на то, что каждый экземпляр первого варианта использования всегда включает в себя функциональное поведение или выполнение второго варианта использования. В этом смысле поведение второго варианта использования является частью поведения первого варианта использования на данной диаграмме. Графически данное отношение обозначается как отношение зависимости в форме пунктирной линии со стрелкой, направленной от базового варианта использования к включаемому варианту использования. При этом данная линия помечается стереотипом <<include>>, как показано на рис. 6.25.

Рис. 6.25. Пример графического изображения отношения включения между вариантами использования

Семантика этого отношения определяется следующим образом. Процесс выполнения базового варианта использования включает в себя как собственное подмножество последовательность действий, которая определена для включаемого варианта использования. При этом выполнение включаемой последовательности действий происходит всегда при инициировании базового варианта использования.

Один вариант использования может входить в несколько других вариантов, а также содержать в себе другие варианты. Включаемый вариант использования является независимым от базового варианта в том смысле, что он предоставляет последнему инкапсулированное поведение, детали реализации которого скрыты от последнего и могут быть легко перераспределены между несколькими включаемыми вариантами использования. Более того, базовый вариант зависит только от результатов выполнения включаемого в него варианта использования, но не от структуры включаемых в него вариантов.

6.2.2.3. Отношение расширения

Отношение расширения (Extend) определяет взаимосвязь базового варианта использования с другим вариантом использования, функциональное поведение которого задействуется базовым не всегда, а только при выполнении дополнительных условий.

В языке UML отношение расширения является зависимостью, направленной к базовому варианту использования и соединенной с ним в так называемой точке расширения. Отношение расширения между вариантами использования обозначается как отношение зависимости в форме пунктирной линии со стрелкой, направленной от того варианта использования, который является расширением для базового варианта использования. Данная линия со стрелкой должна быть помечена стереотипом <<extend>>, как показано на рис. 6.26.

Рис. 6.26. Пример графического изображения отношения расширения между вариантами использования

В изображенном фрагменте имеет место отношение расширения между базовым вариантом использования "Предоставление кредита в банке" и вариантом использования "Предоставление налоговых льгот". Это означает, что свойства поведения первого варианта использования в некоторых случаях могут быть дополнены функциональностью второго варианта использования. Для того чтобы это расширение имело место, должно быть выполнено определенное логическое условие данного отношения расширения.

Отношение расширения позволяет моделировать таким образом, что один из вариантов использования должен присоединять к своему поведению дополнительное поведение, определенное для другого варианта использования. В то же время, данное отношение всегда предполагает проверку условия и ссылку на точку расширения в базовом варианте использования. Точка расширения определяет место в базовом варианте использования, в которое должно быть помещено расширение при выполнении соответствующего логического условия. При этом один из вариантов использования может быть расширением для нескольких базовых вариантов, а также иметь в качестве собственных расширений другие варианты. Базовый вариант использования не зависит от своих расширений.

Семантика отношения расширения определяется следующим образом. Если базовый вариант использования выполняет некоторую последовательность действий, которая определяет его поведение, и при этом имеется точка расширения на экземпляр другого варианта использования, которая является первой из всех точек расширения у базового варианта, то проверяется логическое условие данного отношения. Если это условие выполняется, исходная последовательность действий расширяется посредством включения действий другого варианта использования. Следует заметить, что условие отношения расширения проверяется лишь один раз — при первой ссылке на точку расширения, и если оно выполняется, то все расширяющие варианты использования вставляются в базовый вариант.

6.2.2.4. Отношение обобщения

Два и более актера могут иметь общие свойства, т. е. взаимодействовать с одним и тем же множеством вариантов использования одинаковым образом. Такая общность свойств и поведения представляется в виде отношения обобщения (Generalization) с другим.

Графически отношение обобщения обозначается сплошной линией со стрелкой в форме не закрашенного треугольника, которая указывает на родительский вариант использования (рис. 6.27.). Эта линия со стрелкой имеет специальное название — стрелка–обобщение.

Рис. 6.27. Пример графического изображения отношения обобщения между вариантами использования

В данном примере отношение обобщения указывает на то, что вариант использования "Предоставление кредита корпоративным клиентам" – специальный случай варианта использования "Предоставление кредита клиентам банка". Другими словами, первый вариант использования является специализацией второго варианта использования. При этом вариант использования "Предоставление кредита клиентам банка" еще называют предком или родителем по отношению к варианту использования "Предоставление кредита корпоративным клиентам", а последний вариант называют потомком по отношению к первому варианту использования. Следует подчеркнуть, что потомок наследует все свойства поведения своего родителя, а также может обладать дополнительными особенностями поведения.

Отношение обобщения между вариантами использования применяется в том случае, когда необходимо отметить, что дочерние варианты использования обладают всеми особенностями поведения родительских вариантов. При этом дочерние варианты использования участвуют во всех отношениях родительских вариантов. В свою очередь, дочерние варианты могут наделяться новыми свойствами поведения, которые отсутствуют у родительских вариантов использования, а также уточнять или модифицировать наследуемые от них свойства поведения.

 

6.2.3. Дополнительные обозначения языка UML для бизнес–моделирования

Язык UML включает в себя специальные механизмы расширения, которые позволяют ввести в рассмотрение дополнительные графические обозначения, ориентированные для решения задач из определенной предметной области. Примеры подобных обозначений, которые используются для моделирования бизнес–систем и могут быть изображены на диаграммах вариантов использования: бизнес–актер, сотрудник и бизнес–вариант использования (рис. 6.28.).

Бизнес–актер (Business actor) – индивидуум, группа, организация, компания или система, которые взаимодействуют с моделируемой бизнес–системой, но не входят в нее, т.е. не являются частью моделируемой системы. Примерами бизнес–актеров являются клиенты, покупатели, поставщики, партнеры. Общее свойство бизнес–актеров состоит в том, что они являются инициаторами или клиентами бизнес–процессов моделируемой системы.

Сотрудник (Business worker) – индивидуум, который действует внутри моделируемой бизнес–системы, взаимодействует с другими сотрудниками и является участником бизнес–процесса моделируемой системы. Примерами сотрудников являются менеджеры, администраторы, кассиры, инженеры. Общее свойство сотрудников заключается в том то, что они являются субъектами и входят в состав моделируемой системы.

Бизнес–вариант использования (Business use case) — вариант использования, определяющий последовательность действий моделируемой системы, направленных на выполнение отдельного бизнес–процесса. Общее свойство бизнес–вариантов использования состоит в том, что они являются концептуальной моделью отдельных бизнес–процессов моделируемой системы.

Рис. 6.28. Графические изображения бизнес–актера (а), бизнес–сотрудника (б) и бизнес–варианта использования (в)

6.2.4. Примеры USE CASE и их реализация

Рис. 6.29. Пример использования пакетов

Краткое описание рис. 6.29:

В данном use case пользователь (Actor) может получить доступ к сайту, и к базе данных НСИ – согласно зарегистрированному имени.

Actors: User, Operator, and Administrator

Поток событий: Основной поток

Начало: Use Case начинается, когда пользователь вводит Login и Password в соответствующие формы и подтверждает ввод.

Проверка: Система проверяет введённые пользователем данные и разрешает доступ.

Альтернативный поток:

Альтернативный поток1:

Отказать в доступе. Введённый пользователем Login и Password не верны. Система предлагает повторить ввод или зарегистрироваться.

Альтернативный поток 2:

Пользователь выбирает сервис "Зарегистрироваться". Система предлагает заполнить форму регистрации и при верном её заполнении создаёт новый аккаунт.

Альтернативный поток 3:

В любой момент времени пользователь может выбрать сервис «Выйти». Текущая сессия пользователя завершается. Соединение с сервером разрывается.

 Специфические требования:

Использование IE. Разрабатываемая система предполагает использование браузера Microsoft Internet Explorer v.5.0 и выше.

Постусловия:

Постусловие1:

Загрузка основной страницы. После авторизации пользователя система загружает главную страницу сайта.

Рис. 6.30. Use Case «Войти на сайт»

Рис. 6.31. Use Case «Исправление не верно введенной записи»

Краткое описание рис. 6.31:

Use Case стартует, когда Оператор выбирает сервис "Исправить". Назначением данного сервиса является исправление активной записи в БД ПЭ НСИ без создания истории. Оператор выбирает поле, которое должно быть исправлено, вносит в форму ввода новое значение. После ввода значения, сервис "Исправить" вносит изменения в соответствующую запись таблицы БД ПЭ НСИ.

Actors: Оператор

Поток событий:

Основной поток:

Выбор поля:

Оператор выбирает сервис "Исправить". Сервис предлагает выбрать требуемое поле исправляемой записи, отображая список возможных для исправления полей и их текущее значение.

Внесение изменения:

Оператор выбирает поле для исправления и заносит новое значение выбранного поля в форму ввода. Сервис отправляет запрос к БД ПЭ НСИ. СУБД DB2 проверяет права пользователя и, если они являются достаточными, разрешает изменение.

Форма изменения:

С точки зрения разрабатываемой ПЭ НСИ, исправление ошибки не является исторически–информационным и не влечёт за собой появление новых записей и изменения в связанных записях.

Альтернативные потоки:

Альтернативный поток1:

Сообщить об ошибке. При выборе сервиса "Исправление записи" система возвращает Пользователю сообщение об ошибках:

Рис. 6.32. Use Case «Изменение данных в таблице»

Краткое описание рис. 6.32:

Use Case стартует, когда Оператор выбирает сервис "Модификация данных". Оператор может выбрать: вставить новую запись; удалить существующую запись; изменить существующую запись. Система контролирует действия Оператора, и правильность введённых данных (по типам)

Actors: Operator

Поток событий:

Основной поток:

Выбрать действие. Оператор выбирает возможное действие: вставить новую запись; удалить существующую запись; изменить существующую запись.

Рис. 6.33. Use Case «Найти»

6.3. Диаграммы последовательности 

Диаграмма последовательности (Sequence diagram) – диаграмма, на которой показаны взаимодействия объектов, упорядоченные по времени их проявления.

Диаграммы последовательности характеризуются двумя особенностями.

Во–первых, на них показана линия жизни объекта.

Линия жизни объекта (Object lifeline) – вертикальная линия на диаграмме последовательности, которая представляет существование объекта в течение определенного периода времени. Линия жизни объекта изображается пунктирной вертикальной линией, ассоциированной с единственным объектом на диаграмме последовательности. Линия жизни служит для обозначения периода времени, в течение которого объект существует в системе и, следовательно, может потенциально участвовать во всех ее взаимодействиях. Если объект существует в системе постоянно, то и его линия жизни должна продолжаться по всей рабочей области диаграммы последовательности от самой верхней ее части до самой нижней.

Большая часть объектов, представленных на диаграмме взаимодействий, существует на протяжении всего взаимодействия, поэтому их изображают в верхней части диаграммы, а их линии жизни прорисованы сверху донизу. Объекты могут создаваться и во время взаимодействий. Линии жизни таких объектов начинаются с получения сообщения со стереотипом create. Объекты могут также уничтожаться во время взаимодействий; в таком случае их линии жизни заканчиваются получением сообщения со стереотипом destroy, а в качестве визуального образа используется большая буква X, обозначающая конец жизни объекта. (Обстоятельства жизненного цикла объекта можно указывать с помощью ограничений new, destroyed и transient.)

Если объект на протяжении своей жизни изменяет значения атрибутов, состояние или роль, это можно показать, поместив копию его пиктограммы на линии жизни в точке изменения.

Вторая особенность этих диаграмм – фокус управления. Он изображается в виде вытянутого прямоугольника, показывающего промежуток времени, в течение которого объект выполняет какое–либо действие, непосредственно или с помощью подчиненной процедуры. Верхняя грань прямоугольника выравнивается по временной оси с моментом начала действия, нижняя – с моментом его завершения (и может быть помечена сообщением о возврате). Вложенность фокуса управления, вызванную рекурсией (то есть обращением к собственной операции) или обратным вызовом со стороны другого объекта, можно показать, расположив другой фокус управления чуть правее своего родителя (допускается вложенность произвольной глубины). Если место расположения фокуса управления требуется указать с максимальной точностью, можно заштриховать область прямоугольника, соответствующую времени, в течение которого метод действительно работает и не передает управление другому объекту.

Крайним слева на диаграмме последовательности изображается объект – инициатор моделируемого процесса взаимодействия (объект a на рис. 6.34.). Правее – другой объект, который непосредственно взаимодействует с первым. Таким образом, порядок расположения объектов на диаграмме последовательности определяется исключительно соображениями удобства визуализации их взаимодействия друг с другом.

Рис. 6.34. Графические элементы диаграммы последовательности

Начальному моменту времени соответствует самая верхняя часть диаграммы. При этом процесс взаимодействия объектов реализуется посредством сообщений, которые посылаются одними объектами другим. Сообщения изображаются в виде горизонтальных стрелок с именем сообщения и образуют определенный порядок относительно времени своей инициализации. Другими словами, сообщения, расположенные на диаграмме последовательности выше, передаются раньше тех, которые расположены ниже. При этом масштаб на оси времени не указывается, поскольку диаграмма последовательности моделирует лишь временную упорядоченность взаимодействий типа "раньше–позже".

В отдельных случаях инициатором взаимодействия в системе может быть актер или внешний пользователь. При этом актер изображается на диаграмме последовательности самым первым объектом слева со своим фокусом управления (рис. 6.35.). Наиболее часто актер и его фокус управления будут существовать в системе постоянно, отмечая характерную для пользователя активность в инициировании взаимодействий с системой. Актер может иметь собственное имя либо оставаться анонимным.

 

Рис. 6.35. Графическое изображение актера, рефлексивного сообщения и рекурсии на диаграмме последовательности

6.3.1. Сообщения на диаграмме последовательности

На диаграмме последовательности все сообщения упорядочены по времени своей передачи в моделируемой системе, хотя номера у них могут не указываться.

На диаграммах последовательности могут присутствовать три разновидности сообщений, каждое из которых имеет свое графическое изображение (рис. 6.36.).

 

Рис. 6.36. Графическое изображение различных видов сообщений между объектами на диаграмме последовательности

Первая разновидность сообщения (рис. 6.36, а) наиболее распространена и используется для вызова процедур, выполнения операций или обозначения отдельных вложенных потоков управления. Начало этой стрелки, как правило, соприкасается с фокусом управления того объекта–клиента, который инициирует это сообщение. Конец стрелки соприкасается с линией жизни того объекта, который принимает это сообщение и выполняет в ответ определенные действия. При этом принимающий объект может получить фокус управления, становясь в этом случае активным. Передающий объект может потерять фокус управления или остаться активным.

Вторая разновидность сообщения (рис. 6.36, б) используется для обозначения простого асинхронного сообщения, которое передается в произвольный момент времени. Передача такого сообщения обычно не сопровождается получением фокуса управления объектом–получателем.

Третья разновидность сообщения (рис. 6.36, в) используется для возврата из вызова процедуры. Примером может служить простое сообщение о завершении вычислений без предоставления результата расчетов объекту–клиенту. В процедурных потоках управления эта стрелка может быть опущена, поскольку ее наличие неявно предполагается в конце активизации объекта. В то же время считается, что каждый вызов процедуры имеет свою пару – возврат вызова. Для непроцедурных потоков управления, включая параллельные и асинхронные сообщения, стрелка возврата должна указываться явным образом.

Обычно сообщения изображаются горизонтальными стрелками, соединяющими линии жизни или фокусы управления двух объектов на диаграмме последовательности. При этом неявно предполагается, что время передачи сообщения достаточно мало по сравнению с процессами выполнения действий объектами. Считается также, что за время передачи сообщения с соответствующими объектами не может произойти никаких событий. Другими словами, состояния объектов не изменяются. Если же это предположение не может быть признано справедливым, то стрелка сообщения изображается под наклоном, так чтобы конец стрелки располагался ниже ее начала.

Каждое сообщение на диаграмме последовательности ассоциируется с определенной операцией, которая должна быть выполнена принявшим его объектом. При этом операция может иметь аргументы или параметры, значения которых влияют на получение различных результатов. Соответствующие параметры операция будет иметь и вызывающее это действие сообщение. Более того, значения параметров отдельных сообщений могут содержать условные выражения, образуя ветвление или альтернативные пути основного потока управления.

На диаграммах последовательностей внимание акцентируется, прежде всего, на временной упорядоченности сообщений. На рис. 6.37. показано, что для создания такой диаграммы надо, прежде всего, расположить объекты, участвующие во взаимодействии, в верхней ее части вдоль оси X. Обычно инициирующий взаимодействие объект размещают слева, а остальные – правее (тем дальше, чем более подчиненным является объект). Затем вдоль оси Y размещаются сообщения, которые объекты посылают и принимают, причем более поздние оказываются ниже. Это дает читателю наглядную картину, позволяющую понять развитие потока управления во времени.

Рис. 6.37. Диаграмма последовательностей

В отдельных случаях объект может посылать сообщения самому себе, инициируя так называемые рефлексивные сообщения. Для этой цели служит специальное изображение (сообщение у объекта а на рис. 6.35.). Такие сообщения изображаются в форме сообщения, начало и конец которого соприкасаются с линией жизни или фокусом управления одного и того же объекта.

6.3.2. Ветвление потока управления

Одна из особенностей диаграммы последовательности – возможность визуализировать простое ветвление процесса. Для изображения ветвления используются две или более стрелки, выходящие из одной точки фокуса управления объекта (объект ob1 на рис. 6.38.). При этом рядом с каждой из них должно быть явно указано соответствующее условие ветви в форме булевского выражения.

Количество ветвей может быть произвольным, однако наличие ветвлений может существенно усложнить интерпретацию диаграммы последовательности. Предложение–условие должно быть явно указано для каждой ветви и записывается в форме обычного текста, псевдокода или выражения языка программирования. Это выражение всегда должно возвращать некоторое булевское выражение. Запись этих условий должна исключать одновременную передачу альтернативных сообщений по двум и более ветвям. В противном случае на диаграмме последовательности может возникнуть конфликт ветвления.

Рис. 6.38. Графическое изображение бинарного ветвления потока управления на диаграмме последовательности

С помощью ветвления можно изобразить и более сложную логику взаимодействия объектов между собой (объект ob1 на рис. 6.39.). Если условий более двух, то для каждого из них необходимо предусмотреть ситуацию единственного выполнения. Описанный ниже пример относится к моделированию взаимодействия программной системы обслуживания клиентов в банке. В этом примере диаграммы последовательности объект ob1 вызывает выполнение действий у одного из трех других объектов.

Условием ветвления может служить сумма снимаемых клиентом средств со своего текущего счета. Если эта сумма превышает 1500$, то могут потребоваться дополнительные действия, связанные с созданием и последующим разрушением объекта Класса 1. Если же сумма превышает 100$, но не превышает 1500$, то вызывается операция или процедура объекта ob3. И, наконец, если сумма не превышает 100$, то вызывается операция или процедура объекта ob2. При этом объекты ob1, ob2 и ob3 постоянно существуют в системе. Последний объект создается от Класса 1 только в том случае, если справедливо первое из альтернативных условий. В противном случае он может быть никогда не создан.

Рис. 6.39. Графическое изображение тернарного ветвления потока управления на диаграмме последовательности

Объект ob1 имеет постоянный фокус управления, а все остальные объекты – получают фокус управления только для выполнения ими соответствующих операций.

На диаграммах последовательности при записи сообщений также могут использоваться стереотипы. Их семантика и синтаксис остаются без изменения, как они определены в нотации языка UML. Ниже представлена диаграмма последовательности для описанного выше случая ветвления, дополненная стереотипными значениями отдельных сообщений (рис. 6.40.). Очевидно, эта диаграмма последовательности является более выразительной и простой для своей содержательной интерпретации.

 

Рис. 6.40. Диаграмма последовательности со стереотипными значениями сообщений

6.3.3. Пример диаграммы последовательности

 

Рис. 6.41

6.4. Диаграмма кооперации 

Диаграмма кооперации (Collaboration diagram) предназначена для описания поведения системы на уровне отдельных объектов, которые обмениваются между собой сообщениями, чтобы достичь нужной цели или реализовать некоторый вариант использования.

С точки зрения аналитика или архитектора системы в проекте важно представить структурные связи отдельных объектов между собой. Такое представление структуры модели как совокупности взаимодействующих объектов и обеспечивает диаграмма кооперации.

Диаграммой последовательностей (Sequence diagram) называется диаграмма взаимодействий, акцентирующая внимание на временной упорядоченности сообщений.

А кооперативной диаграммой (Collaboration diagram) называется диаграмма взаимодействий, основное внимание в которой уделяется структурной организации объектов, принимающих и отправляющих сообщения. Графически такая диаграмма представляет собой граф из вершин и ребер (рис. 6.42.).

Рис. 6.42. Диаграммы кооперации

6.4.1. Объекты диаграммы кооперации и их графическое изображение

Объект (Object) — сущность с хорошо определенными границами и индивидуальностью, которая инкапсулирует состояние и поведение.

В контексте языка UML любой объект является экземпляром класса, описанного в модели и представленного на диаграмме классов. Объект создается на этапе реализации модели или выполнения программы. Он имеет собственное имя и конкретные значения атрибутов.

Следует рассмотреть особенности семантики и графической нотации объектов, из которых строятся диаграммы.

Для диаграмм полное имя объекта в целом представляет собой строку текста, разделенную двоеточием и записанную в формате: <собственное имя объекта >'/'<Имя роли класса>:<Имя класса >.

Имя роли класса указывается в том случае, когда соответствующий класс отсутствует в модели или разработчику необходимо акцентировать внимание на особенности его использования в рассматриваемом контексте моделирования взаимодействия. Имя класса – это имя одного из классов, представленного на диаграмме классов. Важно отметить, что вся запись имени объекта подчеркивается, что является визуальным признаком объектов на различных диаграммах языка UML.

Если указано собственное имя объекта, то оно должно начинаться со строчной буквы. В тоже время имя объекта, имя роли с символом "/" или имя класса могут отсутствовать. Однако двоеточие всегда должно стоять перед именем класса, а косая черта – перед именем роли.

Таким образом, на диаграммах могут встретиться следующие варианты:

о : C– объект с собственным именем о, экземпляр класса С.

: C– анонимный объект, экземпляр класса С.

о :(или просто о) — объект–сирота с собственным именем о.

о / R : C— объект с собственным именем о, экземпляр класса С, играющий роль R.

/ R : C— анонимный объект, экземпляр класса С, играющий роль R.

о / R— объект–сирота с собственным именем о, играющий роль R.

/ R— анонимный объект и одновременно объект–сирота, играющий роль R.

Примеры изображения объектов на диаграммах кооперации приводятся на рис. 6.43.

 

Рис. 6.43. Примеры графических изображений объектов на диаграммах кооперации и последовательности

Если собственное имя объекта отсутствует, то такой объект принято называть анонимным. Однако в этом случае обязательно ставится двоеточие перед именем соответствующего класса. Отсутствовать может и имя класса – такой объект называется сиротой. Для него записывается только собственное имя объекта, двоеточие не ставится, имя класса не указываются. Если для объектов указываются атрибуты, то в большинстве случаев они принимают конкретные значения. Для отдельных объектов могут быть дополнительно указаны роли, которые они играют в кооперации.

В контексте языка UML все объекты делятся на две категории: пассивные и активные. Пассивный объект оперирует только данными и не может инициировать деятельность по управлению другими объектами. Однако пассивные объекты могут посылать сигналы в процессе выполнения запросов, которые они обрабатывают. На диаграмме кооперации пассивные объекты изображаются обычным образом без дополнительных стереотипов.

Активный объект (Active object) имеет собственный процесс управления и может инициировать деятельность по управлению другими объектами.

Активный объект на диаграмме кооперации обозначаются прямоугольником с утолщенными границами (рис. 6.44.). Каждый активный объект является владельцем определенного процесса управления.

Рис. 6.44. Графическое изображение активного объекта (слева) на диаграмме кооперации

В данном фрагменте диаграммы кооперации активный объект а : Клиент является инициатором открытия счета, который представлен анонимным объектом : Счет.

6.4.2. Кооперация объектов

Кооперация (Collaboration) — спецификация множества объектов отдельных классов, совместно взаимодействующих с целью реализации отдельных вариантов использования в общем контексте моделируемой системы.

Понятие кооперации – одно из фундаментальных в языке UML. Цель самой кооперации состоит в том, чтобы специфицировать особенности реализации отдельных вариантов использования или наиболее значимых операций в системе. Кооперация определяет структуру поведения системы в терминах взаимодействия участников этой кооперации.

На диаграмме кооперации размещаются объекты, представляющие собой экземпляры классов, связи между ними, которые в свою очередь являются экземплярами ассоциаций и сообщения. Связи дополняются стрелками сообщений, при этом показываются только те объекты, которые участвуют в реализации моделируемой кооперации. Далее, как и на диаграмме классов, показываются структурные отношения между объектами в виде различных соединительных линий. Связи могут дополняться именами ролей, которые играют объекты в данной взаимосвязи. И, наконец, изображаются динамические взаимосвязи — потоки сообщений в форме стрелок с указанием направления рядом с соединительными линиями между объектами, при этом задаются имена сообщений и их порядковые номера в общей последовательности сообщений.

Одна и та же совокупность объектов может участвовать в реализации различных коопераций. В зависимости от рассматриваемой кооперации, могут изменяться как связи между отдельными объектами, так и поток сообщений между ними. Именно это отличает диаграмму кооперации от диаграммы классов, на которой должны быть указаны все без исключения классы, их атрибуты и операции, а также все ассоциации и другие структурные отношения между элементами модели.

На кооперативных диаграммах линию жизни объекта явным образом не показывают, хотя можно показать сообщения create и destroy. Не показывают там и фокус управления, однако порядковые номера сообщения могут отображать вложенность.

В языке UML предусмотрены стандартные действия, выполняемые в ответ на получение соответствующего сообщения. Они могут быть явно указаны на диаграмме кооперации в форме стереотипа перед именем сообщения, к которому они относятся, или выше его. В этом случае они записываются в угловых кавычках.

Кооперативная диаграмма акцентирует внимание на организации объектов, принимающих участие во взаимодействии. Как показано на рис. 6.45., для создания кооперативной диаграммы нужно расположить участвующие во взаимодействии объекты в виде вершин графа. Затем связи, соединяющие эти объекты, изображаются в виде дуг этого графа. Наконец, связи дополняются сообщениями, которые объекты принимают и посылают. Это дает пользователю ясное визуальное представление о потоке управления в контексте структурной организации кооперирующихся объектов.

Рис. 6.45. Кооперативная диаграмма

6.4.3. Пример совместного использования диаграмм кооперации и последовательности

Рис. 6.46.

Рис. 6.47.

6.5. Сравнение диаграммы последовательности и диаграммы кооперации

Диаграммы последовательностей и кооперативные диаграммы (и те, и другие называются диаграммами взаимодействий) относятся к числу пяти видов диаграмм, применяемых в UML для моделирования динамических аспектов системы.

В моделирование динамических аспектов системы входит моделирование конкретных и прототипических экземпляров классов, интерфейсов, компонентов и узлов, а также сообщений, которыми они обмениваются, – и все это в контексте сценария, иллюстрирующего данное поведение. Диаграммы взаимодействий могут существовать автономно и служить для визуализации, специфицирования, конструирования и документирования динамики конкретного сообщества объектов, а могут использоваться для моделирования отдельного потока управления в составе прецедента.

Диаграммы взаимодействий важны не только для моделирования динамических аспектов системы, но и для создания исполняемых систем посредством прямого и обратного проектирования.

Диаграмме взаимодействий присущи общие для всех диаграмм свойства: имя и графическое содержание, являющееся одной из проекций модели. От других диаграмм ее отличает содержание.

На диаграммах взаимодействий показывают связи, включающие множество объектов и отношений между ними, в том числе сообщения, которыми объекты обмениваются. При этом диаграмма последовательностей акцентирует внимание на временной упорядоченности сообщений, а кооперативная диаграмма – на структурной организации посылающих и принимающих сообщения объектов.

У кооперативной диаграммы есть два свойства, которые отличают их от диаграмм последовательностей.

Первое – это путь. Для описания связи одного объекта с другим к дальней концевой точке этой связи можно присоединить стереотип пути (например, local, показывающий, что помеченный объект является локальным по отношению к отправителю сообщения). Имеет смысл явным образом изображать путь связи только в отношении путей типа local, parameter, global и self (но не associations).

Второе свойство – это порядковый номер сообщения. Для обозначения временной последовательности перед сообщением можно поставить номер (нумерация начинается с единицы), который должен постепенно возрастать для каждого нового сообщения (2, 3 и. т.д.). Для обозначения вложенности используется десятичная нотация Дьюи (1 – первое сообщение; 1.1– первое сообщение, вложенное в сообщение 1; 1.2 – второе сообщение, вложенное в сообщение 1 и т.д.). Уровень вложенности не ограничен. Для каждой связи можно показать несколько сообщений (вероятно, посылаемых разными отправителями), и каждое из них должно иметь уникальный порядковый номер.

Поскольку диаграммы последовательностей и кооперативные диаграммы используют одну и ту же информацию из метамодели UML, они семантически эквивалентны. Это означает, что можно преобразовать диаграмму одного типа в другой, без какой–либо потери информации. Это не означает, однако, что на обеих диаграммах представлена в точности одна и та же информация. Диаграммы обоих типов используют одну модель, но визуализируют разные ее особенности.

Диаграммы взаимодействий используются для моделирования динамических аспектов системы. Речь идет о взаимодействии экземпляра, любой разновидности в любом представлении системной архитектуры, включая экземпляры классов, в том числе активных, интерфейсов, компонентов и узлов.

Моделирование динамических аспектов системы с помощью диаграммы взаимодействий возможно в контексте системы в целом, подсистемы, операции или класса. Диаграммы взаимодействий можно присоединять также к прецедентам (для моделирования сценария) и к кооперациям (для моделирования динамических аспектов сообщества объектов).

При моделировании динамических аспектов системы диаграммы взаимодействий обычно используются двояко:

– для моделирования временной упорядоченности потоков управления. С этой целью используют диаграммы последовательностей. При этом внимание акцентируется на передаче сообщений во времени, что бывает особенно полезно для визуализации динамического поведения в контексте вариантов использования. Простые итерации и ветвления на диаграммах последовательностей отображать удобнее, чем на кооперативных диаграммах;

– для моделирования структурной организации потоков управления. В этом случае нужны кооперативные диаграммы. Основное внимание при этом уделяется моделированию структурных отношений между взаимодействующими экземплярами, вдоль которых передаются сообщения. Для визуализации сложных итераций, ветвлений и параллельных потоков управления кооперативные диаграммы подходят лучше, чем диаграммы последовательностей.

Моделирование временной упорядоченности потока управления осуществляется следующим образом:

– установите контекст взаимодействия, будь то система, подсистема, операция, класс или один из сценариев варианта использования либо кооперативные диаграммы.

– определите сцену для взаимодействия, выяснив, какие объекты принимают в нем участие.

– разместите их на диаграмме последовательностей слева направо так, чтобы более важные объекты были расположены левее.

– проведите для каждого объекта линию жизни. Чаще всего объекты существуют на протяжении всего взаимодействия. Для тех же объектов, которые создаются или уничтожаются в ходе взаимодействия, явно отметьте на линиях жизни моменты рождения и смерти с помощью подходящих стереотипных сообщений.

– начав с сообщения, инициирующего взаимодействие, расположите все последующие сообщения сверху вниз между линиями жизни объектов. Если необходимо объяснить семантику взаимодействия, покажите свойства каждого сообщения (например, его параметры).

– если требуется показать вложенность сообщений или точный промежуток времени, когда происходят вычисления, дополните линии жизни объектов фокусами управления.

– если необходимо специфицировать временные или пространственные ограничения, дополните сообщения отметками времени и присоедините соответствующие ограничения.

– для более строгого и формального описания потока управления присоедините к каждому сообщению пред– и постусловия.

– на одной диаграмме последовательностей можно показать только один поток управления (хотя с помощью нотации UML для итераций и ветвлений можно проиллюстрировать простые вариации). Поэтому, как правило, создают несколько диаграмм взаимодействий, одни из которых считаются основными, а другие описывают альтернативные пути и исключительные условия. Такой набор диаграмм последовательностей можно организовать в пакет, дав каждой диаграмме подходящее имя, отличающее ее от остальных.

– рассмотрите объекты, существующие в контексте системы, подсистемы, операции или класса. Рассмотрите также объекты и роли, принимающие участие в варианте использования или кооперативной диаграмме. Для моделирования потока управления, проходящего через эти объекты и роли, применяются диаграммы взаимодействий – при этом, чтобы показать передачу сообщений в контексте данной структуры, используют их разновидность – кооперативные диаграммы.

Моделирование структурной организации потоков управления состоит из следующих шагов:

– установите контекст взаимодействия. Это может быть система, подсистема, операция, класс или один из сценариев варианта использования либо кооперативная диаграмма.

– определите сцену для взаимодействия, выяснив, какие объекты принимают в нем участие. Разместите их на кооперативной диаграмме в виде вершин графа так, чтобы более важные объекты оказались в центре диаграммы, а их соседи – по краям.

– определите начальные свойства каждого из этих объектов. Если значения атрибутов, помеченные значения, состояния или роли объектов изменяются во время взаимодействия, поместите на диаграмму дубликаты с новыми значениями и соедините их сообщениями со стереотипами become и сору, сопроводив их соответствующими порядковыми номерами.

– детально опишите связи между объектами, вдоль которых передаются сообщения. Для этого:

– сначала нарисуйте связи–ассоциации. Они наиболее важны, поскольку представляют структурные соединения;

– после этого нарисуйте остальные связи, дополнив их соответствующими стереотипами пути (такими, как global или local), чтобы явным образом показать, как объекты связаны друг с другом.

– начав с сообщения, инициирующего взаимодействие, присоедините все последующие сообщения к соответствующим связям, задав порядковые номера. Вложенность показывайте с помощью нотации Дьюи.

– если требуется специфицировать временные или пространственные ограничения, дополните сообщения отметками времени и присоедините нужные ограничения.

– если требуется описать поток управления более формально, присоедините к каждому сообщению пред– и постусловия.

Как и в случае диаграмм последовательностей, на одной кооперативной диаграмме можно показать только один поток управления (хотя нотация UML для итераций и ветвлений помогает проиллюстрировать простые вариации). Поэтому, как правило, создают несколько диаграмм взаимодействий, одни из которых считаются основными, а другие описывают альтернативные пути и исключительные условия. Такие наборы кооперативных диаграмм можно организовать в пакеты, дав каждой диаграмме подходящее имя, отличающее ее от остальных.

Создавая диаграммы взаимодействий в UML, помните, что и диаграммы последовательностей, и кооперативные диаграммы являются проекциями динамических аспектов системы на одну и ту же модель. Ни одна диаграмма взаимодействий, взятая в отдельности, не может охватить все динамические аспекты. Для моделирования динамики системы в целом, равно как и ее подсистем, операций, классов, вариантов использования и кооперативных диаграмм, лучше использовать сразу несколько диаграмм взаимодействий.

Хорошо структурированная диаграмма взаимодействий обладает следующими свойствами:

акцентирует внимание только на одном аспекте динамики системы;

содержит только такие варианты использования и актеры, которые важны для понимания этого аспекта;

содержит только такие детали, которые соответствуют данному уровню абстракции, и только те дополнения, которые необходимы для понимания системы;

не настолько лаконична, чтобы ввести читателя в заблуждение относительно важных аспектов семантики.

6.6. Диаграммы состояний

Диаграмма состояний (Statechart diagram) показывает автомат, фокусируя внимание на потоке управления от состояния к состоянию. Диаграмма состояний изображается в виде графа с вершинами и ребрами.

 Автомат (State machine) – это описание последовательности состояний, через которые проходит объект на протяжении своего жизненного цикла, реагируя на события, – в том числе описание реакций на эти события.

На диаграмме состояний отображают жизненный цикл одного объекта (или класса объектов), начиная с момента его создания и заканчивая разрушением. Поэтому с помощью таких диаграмм удобно моделировать динамику поведения объекта класса. Например, объект Сотрудник может быть нанят, уволен, проходить испытательный срок, находиться в отпуске или в отставке. В каждом из этих состояний объект класса Сотрудник может вести себя по–разному.

Диаграмму состояний не требуется создавать для каждого класса. Многие проекты вообще обходятся без них. Если динамика класса важна, то для него полезно создать диаграмму состояний. Такие классы обычно имеют много различных состояний, то есть поведение объекта такого класса существенно, и есть смысл его моделировать. Поведение таких классов, естественно, управляется событиями.

Два основных элемента диаграммы состояний – это состояния и переходы между ними.

Состояние (State) – это ситуация в жизни объекта, на протяжении которой он удовлетворяет некоторому условию, осуществляет определенную деятельность или ожидает какого–то события.

Состоянием называется одно из возможных условий, в которых может находиться объект класса между двумя событиями. На языке UML состояние изображают в виде прямоугольника с закругленными краями (рис. 6.48.).

Рис. 6.48. Состояние

Например, телефон находится в состоянии ожидания, если трубка положена.

Имя состояния должно быть уникальным в своем классе. На значках некоторых состояний иногда полезно указать действия (детали), которые ассоциированы с этими состояниями объекта (это данные, связанные с состоянием).

Действие (Action) – это атомарное вычисление, которое приводит к смене состояния или возврату значения.

Действия могут быть трех типов: входные, выходные и деятельность. Рассмотрим типы действий позднее.

Переход (Transition) – это отношение между двумя состояниями, показывающее, что объект, находящийся в первом состоянии, должен выполнить некоторые действия и перейти во второе состояние, как только произойдет определенное событие и будут выполнены заданные условия.

Переходом называется перемещение объекта из одного состояния в другое. Переход изображается в виде линии со стрелкой (рис. 6.49.).

 

Рис. 6.49. Переход

Переходы могут быть рефлексивными (рис. 6.50.), то есть объект переходит в то же состояние, в котором он находится.

Рис. 6.50. Рефлексный переход

На переходах можно записывать события и действия (рис. 6.51.).

Рис. 6.51. Переход с событием и действием

Событие (Event) – это спецификация существенного факта, который происходит во времени и пространстве. В контексте автоматов событие – это стимул, способный вызвать срабатывание перехода.

Событие – определяет условие, когда переход может быть выполнен. Событием может быть объект (класс) или операция (чаще всего). Событие можно описать обычной фразой. Например: “Выполнить заказ ”, “Отменить заказ”.

Если событием является операция, то у нее могут быть аргументы.

Большинство переходов должно иметь события, так как именно они инициируют переход. Тем не менее, бывают и автоматические переходы, которые не имеют событий, то есть объект сам перемещается из одного состояния в другое согласно действиям, записанным внутри значка состояния: деятельность, входные или выходные.

После событий в квадратных скобках может быть записано ограждающее условие, которое определяет, когда переход выполняется, а когда нет. Их задавать необязательно. Чаще используются для автоматических переходов (когда на переходе не указано событие), особенно если их несколько из одного состояния.

Действие – это непрерываемое поведение, которое выполняется во время перехода. Эти действия не должны выполняться при входе или выходе из состояния (входные и выходные действия показываются внутри состояния). Действием перехода обычно является или вызов метода, или порождение другого объекта (события), или останов процесса.

Например, при переходе объекта "Счёт" из открытого в закрытое состояние должно выполняться действие "Сохранить дату закрытия счёта" (рис. 6.52.).

Рис. 6.52. Переход объекта из открытого в закрытое состояние

Такие действия размещают вдоль линии перехода после имени события (ему предшествует косая черта “/”).

Рассмотрим более подробно детали (действия), которые объект может выполнять, находясь в конкретном состоянии. Итак, с состоянием можно связать данные (операции) трех типов:

деятельность;

входное действие;

выходное действие.

Деятельность (Activity) – это продолжающееся неатомарное вычисление внутри автомата.

Деятельностью называется поведение, которое реализует объект, находясь в данном состоянии. Деятельность может быть прервана переходом объекта в другое состояние, а может, выполняться до конца в данном состоянии, но до перехода. Обычно деятельности предшествует слово do (рис. 6.53.).

Рис. 6.53. Деятельность

Деятельность может выполняться также в результате получения объектом некоторого сообщения (операции).

Входное действие – это поведение, которое всегда выполняется, когда объект переходит в данное состояние (независимо, из какого состояния). Входное действие осуществляется не после того, как объект перешел в состояние, а скорее как часть перехода в данное состояние. И поэтому оно рассматривается как непрерываемое. Ему на состоянии предшествует слово entry (рис. 6.54.).

Рис. 6.54. Входное действие

Выходное действие – это действие подобно входному действию, но осуществляется как составная часть процесса выхода из состояния, независимо от того, куда объект переходит (в какое состояние), то есть выходное действие является частью процесса перехода объекта в другое состояние и является поэтому непрерываемым. Ему предшествует слово exit (рис. 6.55.).

Рис. 6.55. Выходное действие

Поведение объекта во время деятельности, входных и выходных действий может включать в себя отправку сообщения другому объекту. Например, do: ^цель.Операция (Аргументы), где знак "^" указывает, что объект в данном состоянии отправляет сообщение объекту «цель».

На диаграмме состояний обычно указывают два специальных состояния объекта – начальное и конечное (Start и Stop).

Начальное состояние – это то состояние, в котором объект находится сразу после своего создания. Изображается в виде закрашенного кружочка (рис. 6.56.).

Рис. 6.56. Начальное состояние

 

От него проводится переход к первоначальному состоянию. Начальное состояние должно быть обязательно на диаграмме, и только одно.

Конечное состояние – это то состояние, в котором объект находится непосредственно перед уничтожением. Его изображают в виде значка «бычий глаз» (рис. 6.57.).

Рис. 6.57. Конечное состояние

Конечное состояние не является обязательным, и их может быть сколько угодно.

Для упорядочивания состояний на диаграмме их можно вкладывать друг друга. Вложенные состояния называются подсостояниями (Substates), а те, в которые они вложены, – суперсостояниями (Superstates).

Состояния обычно вкладываются (группируются), если у них имеются идентичные переходы. Тогда есть смысл сгруппировать их вместе в суперсостояние, которое будет поддерживать одинаковые переходы вложенных состояний. На диаграмме состояний будет меньше переходов, то есть говорят «навести порядок» на диаграмме.

От начального состояния можно провести переход к любому подсостоянию, и от любого подсостояния или суперсостояния можно добавить переход в конечное состояние. Может быть несколько уровней вложенности состояний.

6.6.1. Составное состояние и подсостояние

Моделирование сложных объектов и систем, как правило, связано с многоуровневым представлением их состояний. В этом случае возникает необходимость детализировать отдельные состояния, сделав их составными.

Составное состояние (Composite state) – сложное состояние, которое состоит из других вложенных в него состояний.

Составное состояние называют также состоянием–композитом. Вложенные состояния выступают по отношению к составному состоянию как подсостояния (Substate). И хотя между ними имеет место отношение композиции, графически все вершины диаграммы, которые соответствуют вложенным состояниям, изображаются внутри символа составного состояния (рис. 6.58.). В этом случае размеры графического символа составного состояния увеличиваются, так чтобы вместить в себя все подсостояния.

Составное состояние может содержать или несколько последовательных подсостояний, или несколько параллельных конечных подавтоматов. Каждое состояние–композит может уточняться только одним из указанных способов. При этом любое из подсостояний, в свою очередь, может быть состоянием–композитом и содержать внутри себя другие вложенные подсостояния. Количество уровней вложенности составных состояний в языке UML не фиксировано.

Рис. 6.58. Графическое представление составного состояния с двумя вложенными в него последовательными подсостояниями

6.6.1.1. Последовательные подсостояния

Последовательные подсостояния (Sequential substates) – вложенные состояния состояния–композита, в рамках которого в каждый момент времени объект может находиться в одном и только одном подсостоянии.

Поведение объекта в этом случае представляет собой последовательную смену подсостояний, от начального до конечного. Моделируемый объект или система продолжает находиться в составном состоянии, тем не менее, введение в рассмотрение последовательных подсостояний позволяет учесть более тонкие логические аспекты его внутреннего поведения.

В качестве примера моделируемой системы стоит рассмотреть обычный телефонный аппарат. Он может находиться в различных состояниях, в частности в состоянии дозвона до абонента. Очевидно, для того чтобы позвонить, необходимо снять телефонную трубку, услышать тоновый сигнал, после чего набрать нужный телефонный номер. Таким образом, состояние дозвона до абонента является составным и состоит из двух последовательных подсостояний: Телефонная трубка поднята и Набор телефонного номера. Фрагмент диаграммы состояний для этого примера содержит одно состояние–композит, которое состоит из двух последовательных подсостояний рис. 6.59.

Рис. 6.59. Пример составного состояния с двумя вложенными последовательными подсостояниями

Некоторых пояснений могут потребовать переходы.

Два из них специфицируют событие–триггер, которое имеет имя: набор цифры(n) с параметром n. В качестве параметра, как нетрудно предположить, выступает отдельная цифра на диске телефонного аппарата. Переход из начального подсостояния не содержит никакой строки текста. Последний переход в конечное подсостояние также не имеет события–триггера, но имеет сторожевое условие, проверяющее полноту набранного номера абонента. Только в случае истинности этого условия телефонный аппарат может перейти в конечное состояние для состояния–композита Дозвон до абонента.

Каждое составное состояние должно содержать в качестве вложенных состояний начальное и конечное состояния. При этом начальное подсостояние является исходным, когда происходит переход объекта в данное составное состояние. Если составное состояние содержит внутри себя конечное состояние, то переход в это вложенное конечное состояние означает завершение нахождения объекта в данном составном состоянии. Важно помнить, что для последовательных подсостояний начальное и конечное состояния должны быть единственными в каждом составном состоянии.

Это можно объяснить следующим образом. Каждая совокупность вложенных последовательных подсостояний представляет собой конечный подавтомат того конечного автомата, которому принадлежит рассматриваемое составное состояние. Поскольку каждый конечный автомат может иметь по определению единственное начальное и единственное конечное состояния, то для любого его конечного подавтомата это условие также должно выполняться.

6.6.1.2. Параллельные подсостояния

Параллельные подсостояния (Concurrent substates) – вложенные состояния, используемые для спецификации двух и более конечных подавтоматов, которые могут выполняться параллельно внутри составного состояния.

Каждый из конечных подавтоматов занимает некоторую графическую область внутри составного состояния, которая отделяется от остальных горизонтальной пунктирной линией. Если на диаграмме состояний имеется составное состояние с вложенными параллельными подсостояниями, то объект может одновременно находиться в каждом из этих подсостояний.

Отдельные параллельные подсостояния могут, в свою очередь, состоять из нескольких последовательных подсостояний (рис. 6.60.). В этом случае по определению моделируемый объект может находиться только в одном из последовательных подсостояний каждого подавтомата. Таким образом, для фрагмента диаграммы состояний (рис. 6.60.) допустимо одновременное нахождение объекта только в следующих подсостояниях: (А, В, Г), (Б, В, Г), (А, В, Д), (Б, В, Д).

Рис. 6.60. Графическое изображение состояния–композита с вложенными параллельными подсостояниями

6.6.1.3. Несовместимые подсостояния

Несовместимое подсостояние (Disjoint substate) – подсостояние, в котором подсистема не может находиться одновременно с другими подсостояниями одного и того же составного состояния.

В этом контексте недопустимо нахождение объекта одновременно в несовместимых подсостояниях (А, Б, В) или (В, Г, Д).

Поскольку каждый регион вложенного состояния специфицирует некоторый конечный подавтомат, то для каждого из вложенных конечных подавтоматов могут быть определены собственные начальное и конечное состояния (рис. 6.61.). При переходе в данное составное состояние каждый из конечных подавтоматов оказывается в своем начальном состоянии. Далее происходит параллельное выполнение каждого из этих конечных подавтоматов, причем выход из составного состояния будет возможен лишь в том случае, когда все конечные подавтоматы будут находиться в своих конечных состояниях. Если какой–либо из конечных подавтоматов пришел в свое финальное состояние раньше других, то он должен ожидать, пока и другие подавтоматы не придут в свои финальные состояния.

В некоторых случаях бывает желательно скрыть внутреннюю структуру составного состояния.

Например, отдельный конечный подавтомат, специфицирующий составное состояние, может быть настолько большим по масштабу, что его визуализация затруднит общее представление диаграммы состояний. В подобной ситуации допускается не раскрывать на исходной диаграмме состояний данное составное состояние, а указать в правом нижнем углу специальный символ–пиктограмму (рис. 6.61.). В последующем диаграмма состояний для соответствующего конечного подавтомата может быть изображена отдельно от основной диаграммы с необходимыми комментариями.

Рис. 6.61. Составное состояние со скрытой внутренней структурой и специальной пиктограммой

6.6.2. Исторические состояния

Обычный конечный автомат не позволяет учитывать предысторию в процессе моделирования поведения систем и объектов. Однако функционирование ряда систем основано на возможности выхода из отдельного состояния–композита с последующим возвращением в это же состояние. Может оказаться необходимым учесть ту часть деятельности, которая была выполнена на момент выхода из этого состояния–композита, чтобы не начинать ее выполнение сначала. Для этой цели в языке UML существует историческое состояние.

Историческое состояние (History state) – псевдосостояние, используемое для запоминания того из последовательных подсостояний, которое было текущим в момент выхода из составного состояния.

Историческое состояние применяется только в контексте составного состояния. При этом существует две разновидности исторического состояния: неглубокое или недавнее и глубокое или давнее (рис. 6.62.).

Рис. 6.62. Графическое изображение недавнего (а) и давнего (б) исторического состояния

Неглубокое историческое состояние (Shallow history state) обозначается в форме небольшой окружности, в которую помещена латинская буква "H" (рис. 6.62, а). Это состояние обладает следующей семантикой. Во–первых, оно является первым подсостоянием в составном состоянии, и переход извне в рассматриваемое составное состояние должен вести непосредственно в данное историческое состояние. Во–вторых, при первом попадании в неглубокое историческое состояние оно не хранит никакой истории. Другими словами, при первом переходе в недавнее историческое состояние оно заменяет собой начальное состояние соответствующего конечного подавтомата.

Далее могут последовательно изменяться вложенные подсостояния. Если в некоторый момент происходит выход из составного состояния (например, в случае наступления некоторого события), то рассматриваемое историческое состояние запоминает то из подсостояний, которое было текущим на момент выхода из данного составного состояния. При последующем входе в это составное состояние неглубокое историческое подсостояние имеет непустую историю и сразу отправляет конечный подавтомат в запомненное подсостояние, минуя все предшествующие ему подсостояния.

Историческое состояние теряет свою историю в тот момент, когда конечный подавтомат доходит до своего конечного состояния. При этом неглубокое историческое состояние запоминает историю только того конечного подавтомата, к которому оно относится. Другими словами, этот тип псевдосостояния способен запомнить историю только одного с ним уровня вложенности.

Если запомненное подсостояние также является составным состоянием, а при выходе из исходного составного состояния необходимо запомнить подсостояние второго уровня вложенности, то в этом случае следует воспользоваться более сильным псевдосостоянием – глубоким историческим состоянием.

Глубокое историческое состояние (Deep history state или состояние глубокой истории) также обозначается в форме небольшой окружности, в которую помещена латинская буква "H" с дополнительным символом "*" (рис. 6.62, б) и служит для запоминания всех подсостояний любого уровня вложенности для исходного составного состояния.

6.6.3. Сложные переходы и псевдосостояния

Рассмотренное выше понятие перехода вполне достаточно для большинства типичных расчетно–аналитических задач. Однако современные программные системы могут реализовывать сложную логику поведения отдельных своих компонентов. Иногда для адекватного представления процесса изменения состояний семантика обычного перехода для них недостаточна. С этой целью в языке UML специфицированы дополнительные обозначения и свойства, которыми могут обладать отдельные переходы на диаграмме состояний.

В отдельных случаях возникает необходимость явно показать ситуацию, когда переход может иметь несколько исходных состояний или целевых состояний. Такой переход получил название – параллельный переход. Введение в рассмотрение параллельных переходов может быть обусловлено необходимостью синхронизировать и/или разделить отдельные процессы управления на параллельные нити без спецификации дополнительной синхронизации в параллельных конечных подавтоматах.

Графически такой переход изображается вертикальной черточкой, аналогично обозначению перехода в известном формализме сетей Петри. Если параллельный переход имеет две или более исходящих из него дуг (рис. 6.63, а), то его называют разделением (fork). Если же он имеет две или более входящие дуги (рис. 6.63, б), то его называют слиянием (join). Текстовая строка спецификации параллельного перехода записывается рядом с черточкой и относится ко всем входящим или исходящим дугам.

Рис. 6.63. Графическое изображение перехода–разделения в параллельные подсостояния (а) и перехода–слияния из параллельных подсостояний (б)

Срабатывание параллельного перехода происходит следующим образом. В первом случае происходит разделение составного конечного автомата на два конечных подавтомата, образующих параллельные ветви вложенных подпроцессов. При этом после срабатывания перехода–разделения моделируемая система или объект одновременно будет находиться во всех целевых подсостояниях этого параллельного перехода (подсостояния 1 и 2). Далее процесс изменения состояний будет протекать согласно ранее рассмотренным правилам для составных состояний.

Во втором случае переход–слияние срабатывает, если имеет место событие–триггер для всех исходных состояний этого перехода, и выполнено (при его наличии) сторожевое условие. При срабатывании перехода–слияния одновременно покидаются все исходные подсостояния перехода (подсостояния 3 и 4) и происходит переход в целевое состояние. При этом каждое из исходных подсостояний перехода должно принадлежать отдельному конечному подавтомату, входящему в составной конечный автомат (процессу Б).

Переход, стрелка которого соединена с границей составного состояния, обозначает переход в это составное состояние (переход a на рис. 6.64.). Он эквивалентен переходу в начальное состояние каждого из конечных подавтоматов (единственному на рис. 6.64.), входящих в состав данного состояния–композита. Переход f, выходящий из составного состояния (рис. 6.64.), относится к каждому из вложенных состояний. Это означает, что моделируемая система или объект при наступления события f может покинуть данное составное состояние, находясь в любом из его вложенных состояний В и Г.

Рис. 6.64. Различные варианты переходов в составное состояние и из составного состояния

Иногда желательно реализовать ситуацию, когда выход из отдельного вложенного состояния соответствовал бы также выходу из составного состояния. В этом случае изображают переход, который непосредственно выходит из вложенного состояния и пересекает границу состояния–композита (переход С на рис. 6.64.). Аналогично, допускается изображение переходов, входящих извне состояния–композита в отдельное вложенное состояние (переход b на рис. 6.64.).

Переход d является внутренним для рассматриваемого состояния–композита и никак не влияет на выход из состояния–композита. Выход из данного составного состояния также возможен при наступлении события e, которое приводит в его конечное состояние, а из него – в состояние Е, находящееся вне данного состояния–композита.

В общем случае поведение параллельных конечных подавтоматов происходит независимо друг от друга, что позволяет, например, моделировать многозадачность в программных системах. Однако в отдельных ситуациях может возникнуть необходимость учесть в модели синхронизацию наступления отдельных событий и срабатывание соответствующих переходов. Для этой цели в языке UML имеется псевдосостояние, которое называется синхронизирующим состоянием или состоянием синхронизации.

6.6.4. Состояние синхронизации

Состояние синхронизации (Synch state) – псевдосостояние в конечном автомате, которое используется для синхронизации параллельных областей конечного автомата.

Синхронизирующее состояние обозначается небольшой окружностью, внутри которой помещен символ звездочки "*". Оно используется совместно с переходом–слиянием или переходом–разделением для того, чтобы явно указать события в других конечных подавтоматах, оказывающие непосредственное влияние на поведение данного подавтомата.

Так, например, при включении компьютера с некоторой сетевой операционной системой параллельно начинается выполнение нескольких процессов. В частности, происходит проверка пароля пользователя и запуск различных служб. При этом работа пользователя на компьютере станет возможной только в случае успешной его аутентификации, в противном случае компьютер может быть выключен. Рассмотренные особенности синхронизации этих параллельных процессов учтены на соответствующей диаграмме состояний с помощью синхронизирующего состояния (рис. 6.65.).

Рис. 6.65. Диаграмма состояний для примера включения компьютера

6.6.5. Рекомендации по построению диаграмм состояний 

По своему назначению диаграмма состояний не является обязательным представлением в модели и как бы "присоединяется" к тому элементу, который, по замыслу разработчиков, имеет нетривиальное поведение в течение своего жизненного цикла. Наличие у системы нескольких состояний, отличающихся от простой дихотомии "исправен – неисправен", "активен – неактивен", "ожидание – реакция на внешние действия", уже служит признаком необходимости построения диаграммы состояний. В качестве начального варианта диаграммы

состояний, если нет очевидных соображений по поводу состояний объекта, можно воспользоваться подобными состояниями, в качестве составных, уточняя их (детализируя их внутреннюю структуру) по мере рассмотрения логики поведения моделируемой системы или объекта.

При выделении состояний и переходов следует помнить, что длительность срабатывания отдельных переходов должна быть существенно меньшей, чем нахождение моделируемых элементов в соответствующих состояниях. Каждое из состояний должно характеризоваться определенной устойчивостью во времени. Другими словами, из каждого состояния на диаграмме не может быть самопроизвольного перехода в какое бы то ни было другое состояние. Все переходы должны быть явно специфицированы, в противном случае построенная диаграмма состояний является либо неполной (неадекватной), либо ошибочной с точки зрения нотации языка UML (ill formed).

При разработке диаграммы состояний нужно постоянно следить, чтобы объект в каждый момент мог находиться только в единственном состоянии. Если это не так, то данное обстоятельство может быть как следствием ошибки, так и неявным признаком наличия параллельности поведения у моделируемого объекта. В последнем случае следует явно специфицировать необходимое число конечных подавтоматов, вложив их в то составное состояние, которое характеризуется нарушением условия одновременности.

Следует произвести обязательную проверку, чтобы никакие два перехода из одного состояния не могли сработать одновременно. Другими словами, необходимо выполнить требование отсутствия конфликтов у всех переходов, выходящих из одного и того же состояния. Наличие такого конфликта может служить признаком ошибки, либо параллельности или ветвления рассматриваемого процесса. Если параллельность по замыслу разработчика отсутствует, то следует ввести дополнительные сторожевые условия либо изменить существующие, чтобы исключить конфликт переходов. При наличии параллельности следует заменить конфликтующие переходы одним параллельным переходом типа ветвления.

Использование исторических состояний оправдано в том случае, когда необходимо организовать обработку исключительных ситуаций (прерываний) без потери данных или выполненной работы. При этом применять исторические состояния, особенно глубокие, необходимо с известной долей осторожности. Нужно помнить, что каждый из конечных подавтоматов может иметь только одно историческое состояние. В противном случае возможны ошибки, особенно, когда подавтоматы изображаются на отдельных диаграммах состояний.

6.6.6. Примеры диаграмм состояний

Пример: Ниже приведен пример диаграммы состояний (простая форма) для класса Course (Учебный курс) (рис. 6.66.). Курс может быть открыт, закрыт, отменен или завершен

Рис. 6.66. Пример диаграммы состояний

Из этой диаграммы состояний видно, что состояния Открыт и Закрыт можно поместить в одно суперсостояние (например, Активный курс). Станет проще и понятнее, да и переходов будет меньше.

Пример: Показать диаграмму состояний для объектов класса Account (Счет) системы банковского автомата (АТМ). Счет может находиться в разных состояниях (открыт, закрыт, превышен), и в каждом из них ведет себя по–разному (рис. 6.67.)

Рис. 6.67. Диаграмма состояний для объектов банковского автомата

Пример: Изобразить диаграмму состояний для телефона (рис. 6.68.)

Рис. 6.68. Диаграмма состояний для телефона

Только что включенный в сеть телефон находится в начальном состоянии, то есть его предыдущее поведение несущественно. В начальном состоянии телефон готов к тому, чтобы можно было позвонить или принять звонок. Если поднять трубку, то телефон перейдет в новое состояние: готовности к набору номера. И в этом состоянии мы не ожидаем, что телефон зазвонит. Если кто–то наберет ваш номер, и телефон находится в начальном состоянии, то при поднятии трубки телефон перейдет в новое состояние: состояние с установленным соединением.

Пример: Создать диаграмму состояний для класса Заказ. Заказ может быть выполнен, отменен, выполнение заказа приостановлено (остаются не заказанные позиции в заказе) и при инициализации объекта “Заказ” сохранить дату заказа (входное действие), добавить к заказу новые позиции (деятельность) и т.д. (рис. 6.69.)

Рис. 6.69. Диаграмма состояний для класса Заказ

6.7. Диаграммы деятельностей

Диаграммы деятельностей (Activity diagram) используются для описания поведения систем.

В отличие от большинства других средств UML диаграммы деятельностей не имеют отношения к работам «троих друзей». Диаграммы деятельностей сочетают в себе идеи различных методов: диаграмм событий Джима Оделла, диаграмм состояний SDL и сетей Петри. Эти диаграммы особенно полезны в сочетании с потоками работ, а также в описании поведения, которое включает параллельные процессы.

Основным элементом диаграммы деятельностей является деятельность. Причем диаграммы деятельностей, как и диаграммы классов, могут строиться с трех различных точек зрения: с концептуальной, с точки зрения спецификации и с точки зрения реализации. В соответствии с точкой зрения деятельность рассматривается по–разному.

На концептуальной диаграмме деятельность – это некоторая задача, которую необходимо автоматизировать или выполнить вручную.

На диаграмме, построенной с точки зрения спецификации или реализации, деятельность – это некоторый метод над классом.

Рассмотрим пример диаграммы деятельностей (рис. 6.70.).

Рис. 6.70. Диаграмма деятельностей

Мы видим на примере, что за каждой деятельностью может следовать другая деятельность. В этом случае они образуют простую последовательность. Например, за деятельностью «Положить Кофе в Фильтр» следует деятельность «Вставить Фильтр в Автомат». При таком подходе диаграмма деятельностей напоминает блок–схему.

Разницу можно обнаружить, если посмотреть на деятельность «Поискать Напиток». Эта деятельность активизирует два действия: каждое действие содержит условие, которое может принимать одно из двух значений: «истина» или «ложь» (так же, как на диаграмме состояний). У нас Личность осуществляет деятельность «Поискать Напиток», выбирая между кофе и колой.

Предположим, что мы отыскали кофе, то есть идем вниз по «кофейному» маршруту. Этот путь ведет к линейке синхронизации, с которой связана активизация трех деятельностей: «Положить Кофе в Фильтр», «Добавить Воду в Ёмкость» и «Достать Чашки». Диаграмма указывает, что эти три деятельности могут выполняться параллельно. Причем порядок их выполнения не играет роли: их можно выполнять в любой последовательности, а можно и чередовать друг с другом. Например, достать одну чашку, затем добавить немного воды в ёмкость; достать другую чашку, добавить еще немного воды и т.д. А можно делать некоторые вещи одновременно: одной рукой наливать воду, а другой доставать чашки. Любой из этих вариантов допустим. Это и показывает линейка синхронизации, то есть выбор порядка выполнения действий остается за Личностью (за тем, кто выполняет эти действия). В этом заключается главное различие между диаграммой деятельностей и блок–схемой, то есть блок–схемы обычно показывают последовательные процессы, а диаграммы деятельностей могут поддерживать дополнительно параллельные процессы.

Поэтому диаграммы деятельностей являются полезными при параллельном программировании. Можно графически изобразить все ветви и показать, когда их необходимо синхронизировать. Такая возможность важна также при моделировании бизнес – процессов, так как среди бизнес–процессов часто встречаются такие, которые не обязаны выполняться последовательно: диаграмма побуждает людей искать возможности делать дела параллельно.

Итак, если при описании поведения системы выявляются параллельные процессы (деятельности), то их необходимо синхронизировать.

Простая линейка синхронизации (как в примере) показывает, что выходная деятельность («Включать Автомат») активизируется только тогда, когда выполнены обе входные деятельности: «Добавить Воду в Емкость» и «Вставить Фильтр в Автомат». Линейки могут быть и более сложными.

Обратите внимание, что второе решение (первое – «Поискать Напиток») относится к составным. Если кофе нет, то приходим ко второму решению, связанному с колой. При такой последовательности решений второе решение обозначается ромбом. Количество вложенных решений может быть любым.

Далее обратите внимание, что деятельность «Выпить Напиток» имеет два входа. Это означает, что она будет выполнена в любом случае, то есть рассматривается как условие «ИЛИ» (выполняется, если выполняется хотя бы одна из двух входящих деятельностей). Линейку же синхронизации можно рассматривать как условие «И».

Диаграммы деятельностей полезны для описания сложных методов. Их также можно применять где угодно. Например, для описания вариантов использования, если вариант использования представляет собой сложный процесс (функцию).

Например, вариант использования, который связан с обработкой заказа, можно изобразить следующей диаграммой деятельностей (рис. 6.71.).

Рис. 6.71. Диаграмма деятельностей, изображающая обработку заказа.

Cледующая диаграмма деятельностей может отражать вариант использования «Получение поставки» (рис. 6.72.).

Здесь введена новая конструкция: деятельность «Проверить Позицию Заказа», которая помечена символом «*». Это, так называемый, маркер множественности. Он показывает, что при "получении заказа" должны выполнить деятельность «Проверить Позицию Заказа» для каждой строки заказа. Это означает, что за деятельностью «Получить Заказ» следует один вызов деятельности «Проверить Платеж» и много вызовов деятельности «Проверить Позицию Заказа». Все эти вызовы производятся параллельно.

Этот случай подчеркивает второй источник параллелизма на диаграмме деятельностей. Параллельные деятельности могут быть связаны не только с линейной синхронизацией, но и с множественной активизацией. Для множественной активизации обязательно показывается ее основа. В нашем примере – «для каждой строки заказов».

Как видно из примера, диаграмма деятельностей необязательно включает явно определенную конечную точку (где заканчивается выполнение всех деятельностей). У нас деятельности не заканчиваются вместе.

В нашем примере не сможем выполнить Заказ, пока не пополнится запас на складе (после поставки следующей партии товара). Этой деятельности («Получение Поставки») может соответствовать отдельный вариант использования. Этот вариант использования покажет деятельность, которая связана с ожиданием заказа до получения очередной поставки.

Рис. 6.72. Диаграмма деятельностей, отражающая «Получение поставки»

Если посмотреть две диаграммы деятельностей (рис. 6.71.) и (рис. 6.72.), приведенные выше, то видно, что их можно объединить в одну. У них общая деятельность «выполнить поставку» (рис. 6.73.).

Рис. 6.73. Наложение диаграмм деятельностей

Такое объединение диаграмм называется наложением отдельных диаграмм деятельностей для обоих вариантов использования. Такие диаграммы могут содержать несколько начальных точек. Таким образом, с помощью диаграмм деятельностей можно одновременно описывать поведение нескольких вариантов использования. Можно отразить поведение системы целиком в одной диаграмме, а можно в нескольких.

Следует отметить, что диаграммы деятельностей отражают происходящие события. Однако они ничего не говорят о том, кто участвует в реализации процессов, то есть диаграмма деятельностей не показывает, какой класс (объект класса) отвечает за выполнение деятельности. Один из способов решить эту проблему – снабдить каждую деятельность меткой соответствующего класса (или человека), а затем дополнить диаграммой взаимодействий (последовательностей), где показать обмен сообщениями между объектами.

Другой способ – это, так называемые, «плавательные дорожки» (рис. 6.74.). В этом случае диаграмма деятельностей разделяется на вертикальные зоны с помощью пунктирных линий. Каждая зона представляет собой зону ответственности каждого класса или конкретного подразделения фирмы. Такой способ позволяет совместить логику диаграмм деятельностей с ответственностью классов, которая отражена на диаграммах взаимодействий. Но построить такую диаграмму не всегда легко, так как надо, чтобы все деятельности попали в свои зоны ответственности.

Рис. 6.74. Диаграмма деятельностей, использующая «плавательные дорожки»

Не всегда полезно одновременно заниматься решением двух проблем: строить диаграммы деятельностей и связывать поведение с конкретными объектами. Но в любом случае, важно то, чтобы связать процессы с классами. В противном случае невозможно построить общую модель – базовую архитектуру программной системы (диаграмма классов, построенная с концептуальной точки зрения).

Наконец, любая деятельность может быть декомпозирована, то есть уточнена. Уточнить деятельность можно либо в виде текста, либо в виде другой диаграммы деятельностей. Сложную логику можно изображать другими удобными средствами. Например, с помощью Р–схемы, или записать на псевдокоде.

Используя диаграмму деятельности, руководствуйтесь следующими принципами:

– дайте диаграмме имя, соответствующее ее назначению;

– начинайте с моделирования главного потока. Ветвления, параллельность и траектории объектов являются второстепенными деталями, которые можно изобразить на отдельной диаграмме;

– располагайте элементы так, чтобы число пересечений было минимальным;

– используйте примечания и закраску, чтобы привлечь внимание к важным особенностям диаграммы.


6.7.1. Примеры диаграмм деятельностей

Пример: Диаграмма описания алгоритма функции «Модификация данных»

Рис. 6.75. Модификация данных

Пример: Диаграмма описания алгоритма функции «Удалить запись»

Рис. 6.76. Удалить запись

6.8. Классы

Классы – это самые важные строительные блоки любой объектно–ориентированной системы.

Классом (Class) называется описание совокупности объектов с общими атрибутами, операциями, отношениями и семантикой. Правильно сконструированный класс должен представлять одну и только одну абстракцию. Хорошо структурированные классы характеризуются четкими границами и помогают формировать сбалансированное распределение обязанностей в системе.

Класс представляет не индивидуальный объект, а целую их совокупность.

Многие языки программирования поддерживают концепцию классов. В этом случае создаваемые абстракции могут быть непосредственно отображены в конструкциях языка программирования, даже если речь идет об абстракциях не программных сущностей типа "покупатель", "торговля" или "разговор".

Графическое изображение класса в UML показано на рис. 6.77. Такое обозначение абстракции независимо от конкретного языка программирования и подчеркивает ее наиболее важные характеристики: имя, атрибуты и операции.

Рис. 6.77. Классы

У каждого класса есть имя, отличающее его от других классов. Имя класса – это текстовая строка. Взятое само по себе, оно называется простым именем. К составному имени впереди добавлено имя пакета, в который входит класс. Имя класса в объемлющем пакете должно быть уникальным. Например, java::awt::Rectangle. Имя класса может состоять из любого числа букв, цифр и ряда знаков препинания (за исключением таких, например, как двоеточие, которое применяется для отделения имени класса от имени объемлющего пакета). Имя может занимать несколько строк. На практике для именования класса используют одно или несколько коротких существительных, взятых из словаря моделируемой системы. Обычно каждое слово в имени класса пишется с заглавной буквы, например: Customer (Клиент).

Атрибут – это именованное свойство класса, включающее описание множества значений, которые могут принимать экземпляры этого свойства. Класс может иметь любое число атрибутов или не иметь их вовсе. Атрибут представляет некоторое свойство сущности, общее для всех объектов данного класса. В каждый момент времени любой атрибут объекта, принадлежащего данному классу, обладает вполне определенным значением. Атрибуты представлены их именами в разделе, который расположен под именем класса (рис. 6.78.).

Имя атрибута, как и имя класса, может быть произвольной текстовой строкой. На практике для именования атрибута используют одно или несколько коротких существительных, соответствующих некоторому свойству объемлющего класса.

При описании атрибута можно явным образом указывать его класс и начальное значение, принимаемое по умолчанию, как показано на рис. 6.78.

Рис. 6.78. Атрибуты и их класс

Операцией называется реализация услуги, которую можно запросить у любого объекта класса для воздействия на поведение. Иными словами, операция – это абстракция того, что позволено делать с объектом. У всех объектов класса имеется общий набор операций. Класс может содержать любое число операций или не содержать их вовсе. Часто (хотя не всегда) обращение к операции объекта изменяет его состояние или его данные. Операции класса изображаются в разделе, расположенном ниже раздела с атрибутами. При этом можно ограничиться только именами, как показано на рис. 6.79. Имя операции, как и имя класса, может быть произвольной текстовой строкой. На практике для именования операций используют короткий глагол или глагольный оборот, соответствующий определенному поведению объемлющего класса. Каждое слово в имени операции, кроме самого первого, обычно пишут с заглавной буквы, например move или isEmpty.

Рис. 6.79. Операции

Операцию можно описать более подробно, указав ее сигнатуру, в которую входят имена и типы всех параметров, их значения, принятые по умолчанию, а применительно к функциям – тип возвращаемого значения, как показано на рис. 6.80.

Рис. 6.80. Операции и их сигнатуры

При изображении класса необязательно показывать все его атрибуты и операции. Их может быть много для одного рисунка. Поэтому нужно указывать наиболее важные атрибуты и операции или совсем опускать их. Таким образом, пустой раздел в соответствующем месте прямоугольника может означать не отсутствие атрибутов или операций, а только то, что их не сочли нужным изобразить. Явным образом наличие дополнительных атрибутов или операций можно обозначить, поставив в конце списка многоточие.

Для лучшей организации списков атрибутов и операций можно снабдить каждую группу дополнительным описанием, воспользовавшись стереотипами.

Обязанности (Responsibilities) класса – это своего рода контракт, которому должен подчиняться класс. Соответствующие атрибуты и операции являются теми свойствами, посредством которых выполняются обязанности класса.

Моделирование классов лучше всего начинать с определения обязанностей сущностей. Число обязанностей класса может быть произвольным, но на практике хорошо структурированный класс имеет по меньшей мере одну обязанность. С другой стороны, их не должно быть и слишком много. При уточнении модели обязанности класса преобразуются в совокупность атрибутов и операций, которые должны наилучшим образом обеспечить их выполнение.

Графически обязанности изображают в особом разделе в нижней части пиктограммы класса (рис. 6.81.). Их можно указать также в примечании.

Рис. 6.81. Обязанности

Кроме того, иногда приходится визуализировать или специфицировать и другие особенности классов: видимость отдельных атрибутов и операций, специфические для конкретного языка программирования свойства операции или исключения, которые объекты класса могут возбуждать или обрабатывать.

Классы редко существуют сами по себе. При построении моделей следует обращать внимание на группы взаимодействующих между собой классов. В языке UML такие сообщества принято называть кооперациями и изображать на диаграммах классов.

Надо избегать слишком больших или, наоборот, чересчур маленьких классов. Каждый класс должен хорошо делать что–то одно. Язык UML способен помочь в визуализации и специфицировании баланса обязанностей.

Хорошо структурированный класс обладает следующими свойствами:

является четко очерченной абстракцией некоторого понятия из словаря проблемной области или области решения;

содержит небольшой, точно определенный набор обязанностей и выполняет каждую из них;

поддерживает четкое разделение спецификаций абстракции и ее реализации;

понятен и прост, но в то же время допускает расширение и адаптацию к новым задачам.

6.8.1. Области видимости и действия, кратность и иерархия классов

Одна из деталей, наиболее существенных для атрибутов и операций классификаторов, – их видимость. Видимость свойства говорит о том, может ли оно использоваться другими классификаторами. Естественно, это подразумевает видимость самого классификатора. Один классификатор может "видеть" другой, если тот находится в области действия первого и между ними существует явное или неявное отношение. В языке UML можно определить три уровня видимости:

public (открытый) – любой внешний классификатор, который "видит" данный, может пользоваться его открытыми свойствами. Обозначается знаком + (плюс) перед именем атрибута или операции;

protected (защищенный) – любой потомок данного классификатора может пользоваться его защищенными свойствами. Обозначается знаком # (диез);

private (закрытый) – только данный классификатор может пользоваться закрытыми свойствами. Обозначается символом – (минус).

На рис. 6.82. показаны открытые, защищенные и закрытые атрибуты и методы для класса Toolbar.

Рис. 6.82. Видимость

Видимость свойств классификатора определяют для того, чтобы скрыть детали его реализации и показать только те особенности, которые необходимы для осуществления обязанностей, продекларированных абстракцией. Если символ видимости явно не указан, обычно предполагается, что свойство является открытым. Отношения дружественности (Friendship) позволяют классификатору показывать другим свои закрытые детали.

Еще одной важной характеристикой атрибутов и операций классификатора является область действия (Scope). Задавая область действия некоторого свойства, тем самым указывают, будет ли оно проявлять себя по–разному в каждом экземпляре классификатора, или одно и то же значение свойства будет разделяться (то есть совместно использоваться) всеми экземплярами. В UML определены два вида областей действия:

instance (экземпляр) – у каждого экземпляра классификатора есть собственное значение данного свойства;

classifier (классификатор) – все экземпляры классификатора совместно используют общее значение данного свойства.

Имя свойства, которое имеет область действия classifier, подчеркивается. Если подчеркивание отсутствует, предполагается область действия instance. Как правило, свойства моделируемых классификаторов имеют область действия экземпляра. Свойства с областью действия классификатора чаще всего применяются для описания закрытых атрибутов, общих для всех экземпляров, например для генерации уникальных идентификаторов или в операциях, создающих экземпляры класса.

При моделировании иерархии классов, верхние уровни занимают общие абстракции, а ниже находятся специализированные классы. Внутри этой иерархии некоторые классы определяют как абстрактные, то есть не имеющие непосредственных экземпляров. В языке UML имя абстрактного класса пишут курсивом. Наоборот, конкретными называются классы, которые могут иметь непосредственные экземпляры.

При моделировании класса часто возникает потребность задать ему свойства, унаследованные от более общих классов и, наоборот, предоставить возможность более специализированным классам наследовать особенности данного. Такая семантика легко обеспечивается для классов средствами UML. Можно определить и такие классы, у которых нет потомков. Они называются листовыми и задаются в UML с помощью свойства leaf (лист), написанного под именем класса.

Реже используется возможность задать класс, не имеющий родителей. Такой класс называется корневым и специфицируется с помощью свойства root (узел), записанного под его именем. Если имеется несколько независимых иерархий наследования, то начало каждой удобно обозначать таким способом.

Операции могут иметь сходные свойства. Как правило, операции являются полиморфными, – это значит, что в различных местах иерархии классов можно определять операции с одинаковыми сигнатурами. При этом те операции, которые определены в классе–потомке, перекрывают действие тех, что определены в родительских классах. Когда во время исполнения системы поступает какое–то сообщение, операция по его обработке вызывается полиморфно, – иными словами, выбирается та, которая соответствует типу объекта. В UML имена абстрактных операций пишутся курсивом, как и в случае с классами. Не полиморфные операции (листовые) обозначаются при помощи слова leaf. Это означает, что данная операция не может быть перекрыта другой.

При работе с классом разумно предположить, что может существовать любое количество его экземпляров – если, конечно, это не абстрактный класс, у которого вообще не существует непосредственных экземпляров, хотя у его потомков их может быть любое количество. В некоторых случаях, однако, число экземпляров класса нужно ограничить. Чаще всего возникает необходимость задать класс, у которого:

нет ни одного экземпляра – тогда класс становится служебным (Utility), содержащим только атрибуты и операции с областью действия класса;

ровно один экземпляр – такой класс называют одиночным (Singleton);

заданное число экземпляров;

произвольное число экземпляров – вариант по умолчанию.

Количество экземпляров класса называется его кратностью. В общем смысле кратность – это диапазон возможных кардинальных чисел некоторой сущности. В языке UML кратность класса задается выражением, написанным в правом верхнем углу его пиктограммы. Кратность применима и к атрибутам. Кратность атрибута записывают в виде выражения, заключенного в квадратные скобки и расположенного сразу после имени атрибута. Например, как показано на рис. 6.83.

Рис. 6.83. Кратность

Таким образом, на самом высоком уровне абстракции, моделируя структурные свойства класса (то есть атрибуты), можно просто записать их имена. В дополнение к этому, можно определить видимость, область действия и кратность каждого атрибута. Кроме того, можно задать тип, начальное значение и изменяемость атрибутов. А для обозначения множества логически связанных атрибутов допустимо использовать стереотипы.

В UML определены четыре стандартных стереотипа, применимые к классам:

metaclass – определяет классификатор, все объекты которого являются классами;

powertype – определяет классификатор, все объекты которого являются потомками данного родителя;

stereotype – определяет, что данный классификатор является стереотипом, который можно применить к другим элементам;

utility – определяет класс, атрибуты и операции которого находятся в области действия всех классов.

Суммируя сказанное, получаем, что хорошо структурированный классификатор обладает следующими свойствами:

наделен как структурными, так и поведенческими аспектами;

внутренне согласован и слабо связан с другими классификаторами;

раскрывает только те особенности, которые необходимы для, использующих класс клиентов, и скрывает остальные;

его семантика и назначение не допускают неоднозначного толкования;

не настолько формализован, чтобы лишить всякой свободы тех, кто будет его реализовывать;

специфицирован в достаточной степени, чтобы исключить неоднозначное толкование его назначения.

Изображая классификатор в UML, принимают во внимание следующие рекомендации:

показывать только те его свойства, которые необходимы для понимания абстракции в контексте класса;

использовать такие стереотипы, которые наилучшим образом отражают назначение классификатора.

6.8.2. Отношения между классами

Кроме внутреннего устройства классов важную роль при разработке проектируемой системы имеют различные отношения между классами, которые также могут быть изображены на диаграмме классов. Совокупность допустимых типов таких отношений строго фиксирована в языке UML и определяется самой семантикой этих отношений. Базовые отношения, изображаемые на диаграммах классов:

Отношение ассоциации (Association relationship)

Отношение обобщения (Generalization relationship)

Отношение агрегации (Aggregation relationship)

Отношение композиции (Composition relationship)

Каждое из этих отношений имеет собственное графическое представление, которое отражает семантический характер взаимосвязи между объектами соответствующих классов.

6.8.2.1. Отношение ассоциации

Ассоциация (Association) – семантическое отношение между двумя и более классами, которое специфицирует характер связи между соответствующими экземплярами этих классов.

Отношение ассоциации соответствует наличию произвольного отношения или взаимосвязи между классами. Данное отношение, как уже отмечалось, обозначается сплошной линией со стрелкой или без нее и с дополнительными символами, которые характеризуют специальные свойства ассоциации. Ассоциации рассматривались при изучении элементов диаграммы вариантов использования, применительно к диаграммам классов, тем не менее, семантика этого типа отношений значительно шире. В качестве дополнительных специальных символов могут использоваться имя ассоциации, символ навигации, а также имена и кратность классов–ролей ассоциации.

Имя ассоциации – необязательный элемент ее обозначения. Однако если оно задано, то записывается с заглавной буквы рядом с линией ассоциации. Отдельные классы ассоциации могут играть определенную роль в соответствующем отношении, на что явно указывает имя концевых точек ассоциации на диаграмме.

Наиболее простой случай данного отношения – бинарная ассоциация (Binary association), которая служит для представления произвольного отношения между двумя классами. Она связывает в точности два различных класса и может быть ненаправленным (симметричным) или направленным отношением. Частный случай бинарной ассоциации – рефлексивная ассоциация, которая связывает класс с самим собой. Ненаправленная бинарная ассоциация изображается линией без стрелки. Для нее на диаграмме может быть указан порядок чтения классов с использованием значка в форме треугольника рядом с именем данной ассоциации.

В качестве простого примера ненаправленной бинарной ассоциации можно рассмотреть отношение между двумя классами – классом Компания и классом Сотрудник (рис. 6.84.). Они связаны между собой бинарной ассоциацией Работает, имя которой указано на рисунке рядом с линией ассоциации. Для данного отношения определен следующий порядок чтения следования классов – сотрудник работает в компании.

Рис. 6.84. Графическое изображение ненаправленной бинарной ассоциации между классами

Направленная бинарная ассоциация изображается сплошной линией с простой стрелкой на одной из ее концевых точек. Направление этой стрелки указывает на то, какой класс является первым, а какой – вторым.

В качестве простого примера направленной бинарной ассоциации можно рассмотреть отношение между двумя классами – классом Клиент и классом Счет (рис. 6.85.). Они связаны между собой бинарной ассоциацией с именем Имеет, для которой определен порядок следования классов. Это означает, что конкретный объект класса Клиент всегда должен указываться первым при рассмотрении взаимосвязи с объектом класса Счет. Другими словами, эти объекты классов образуют кортеж элементов, например, <клиент, счет_1, счет_2,…, счет_n>.

Рис. 6.85. Графическое изображение направленной бинарной ассоциации между классами

Частный случай отношения ассоциации – так называемая исключающая ассоциация (Xor–association). Семантика данной ассоциации указывает на то, что из нескольких потенциально возможных вариантов данной ассоциации в каждый момент времени может использоваться только один. На диаграмме классов исключающая ассоциация изображается пунктирной линией, соединяющей две и более ассоциации (рис. 6.86.), рядом с которой записывается ограничение в форме строки текста в фигурных скобках: {xor}.

Рис. 6.86. Графическое изображение исключающей ассоциации между тремя классами

Тернарная ассоциация связывает отношением три класса. Ассоциация более высокой арности называется n–арной ассоциацией.

n–арная ассоциация (n–ary association) – ассоциация между тремя и большим числом классов.

Каждый экземпляр такой ассоциации представляет собой упорядоченный набор (кортеж), содержащий n экземпляров из соответствующих классов. Такая ассоциация связывает отношением более чем три класса, при этом класс может участвовать в ассоциации более чем один раз. Каждый экземпляр n–арной ассоциации представляет собой n–арный кортеж, состоящий из объектов соответствующих классов. В этом контексте бинарная ассоциация является частным случаем n–арной ассоциации, когда значение n=2, но имеет собственное обозначение. Бинарная ассоциация – это специальный случай n–арной ассоциации.

Графически n–арная ассоциация обозначается ромбом, от которого ведут линии к символам классов данной ассоциации. Сам же ромб соединяется с символами классов сплошными линиями. Обычно линии проводятся от вершин ромба или от середины его сторон. Имя n–арной ассоциации записывается рядом с ромбом соответствующей ассоциации. Однако порядок классов в n–арной ассоциации, в отличие от порядка множеств в отношении, на диаграмме не фиксируется.

В качестве примера тернарной ассоциации можно рассмотреть отношение между тремя классами: Сотрудник, Компания и Проект. Данная ассоциация указывает на наличие отношения между этими тремя классами, которое может представлять информацию о проектах, реализуемых в компании, и о сотрудниках, участвующих в выполнении отдельных проектов (рис. 6.87.).

Рис. 6.87. Графическое изображение тернарной ассоциации между тремя классами

Класс может быть присоединен к линии ассоциации пунктирной линией. Это означает, что данный класс обеспечивает поддержку свойств соответствующей n–арной ассоциации, а сама n–арная ассоциация имеет атрибуты, операции и/или ассоциации. Другими словами, такая ассоциация является классом с соответствующим обозначением в виде прямоугольника и самостоятельным элементом языка UML – ассоциацией классом (Association class).

Ассоциация–класс (Association class) – модельный элемент, который одновременно является ассоциацией и классом. Ассоциация класс может рассматриваться как ассоциация, которая обладает свойствами класса, или как класс, имеющий также свойства ассоциации.

Как уже упоминалось, отдельный класс в ассоциации может играть определенную роль в данной ассоциации. Эта роль может быть явно специфицирована на диаграмме классов. С этой целью в языке UML вводится в рассмотрение специальный элемент – концевая точка ассоциации или конец ассоциации (Association end), который графически соответствует точке соединения линии ассоциации с отдельным классом.

Конец ассоциации (Association end) – концевая точка ассоциации, которая связывает ассоциацию с классификатором.

Конец ассоциации – часть ассоциации, но не класса. Каждая ассоциация может иметь два или больше концов ассоциации. Наиболее важные свойства ассоциации указываются на диаграмме рядом с этими элементами ассоциации и должны перемещаться вместе с ними. Одним из таких дополнительных обозначений является имя роли отдельного класса, входящего в ассоциацию.

Роль (Role) – имеющее имя специфическое поведение некоторой сущности, рассматриваемой в определенном контексте. Роль может быть статической или динамической.

Имя роли представляет собой строку текста рядом с концом ассоциации для соответствующего класса. Она указывает на специфическую роль, которую играет класс, являющийся концом рассматриваемой ассоциации. Имя роли не обязательный элемент обозначений и может отсутствовать на диаграмме.

Следующий элемент обозначений – кратность ассоциации. Кратность относится к концам ассоциации и обозначается в виде интервала целых чисел, аналогично кратности атрибутов и операций классов, но без прямых скобок. Этот интервал записывается рядом с концом соответствующей ассоциации и означает потенциальное число отдельных экземпляров класса, которые могут иметь место, когда остальные экземпляры или объекты классов фиксированы.

Так, для примера (рис. 6.87.) кратность "1" для класса Компания означает, что каждый сотрудник может работать только в одной компании. Кратность "1..*" для класса Сотрудник означает, что в каждой компании могут работать несколько сотрудников, общее число которых заранее неизвестно и ничем не ограничено. Вместо кратности "1..*" нельзя записать только символ "*", поскольку последний означает кратность "0..*". Для данного примера это означало бы, что отдельные компании могут совсем не иметь сотрудников в своем штате. Такая кратность приемлема в ситуациях, когда в компании вообще не выполняется никаких проектов.

Имя ассоциации рассматривается в качестве отдельного атрибута у соответствующих классов ассоциаций и может быть указано на диаграмме явным способом в определенной секции прямоугольника класса.

Ассоциация является наиболее общей формой отношения в языке UML. Все другие типы рассматриваемых отношений можно считать частным случаем данного отношения. Однако важность выделения специфических семантических свойств и дополнительных характеристик для других типов отношений обусловливают необходимость их самостоятельного изучения при построении диаграмм классов. Поскольку эти отношения имеют специальные обозначения и относятся к базовым понятиям языка UML, следует перейти к их последовательному рассмотрению.

6.8.2.2. Отношение обобщения

Отношение обобщения является обычным таксономическим отношением или отношением классификации между более общим элементом (родителем или предком) и более частным или специальным элементом (дочерним или потомком).

Обобщение (Generalization) – таксономическое отношение между более общим понятием и менее общим понятием.

Менее общий элемент модели должен быть согласован с более общим элементом и может содержать дополнительную информацию. Данное отношение используется для представления иерархических взаимосвязей между различными элементами языка UML, такими как пакеты, классы, варианты использования.

Применительно к диаграмме классов данное отношение описывает иерархическое строение классов и наследование их свойств и поведения.

Наследование (Inheritance) – специальный концептуальный механизм, посредством которого более специальные элементы включают в себя структуру и поведение более общих элементов.

Согласно одному из главных принципов методологии ООАП – наследованию, класс–потомок обладает всеми свойствами и поведением класса–предка, а также имеет собственные свойства и поведение, которые могут отсутствовать у класса–предка.

Родитель, предок (Parent) – в отношении обобщения более общий элемент. Потомок (Child) – специализация одного из элементов отношения обобщения, называемого в этом случае родителем.

На диаграммах отношение обобщения обозначается сплошной линией с треугольной стрелкой на одном из концов (рис. 6.88.). Стрелка указывает на более общий класс (класс–предок или суперкласс), а ее начало – на более специальный класс (класс–потомок или подкласс).

Рис. 6.88. Графическое изображение отношения обобщения в языке UML

От одного класса–предка одновременно могут наследовать несколько классов–потомков, что отражает таксономический характер данного отношения. В этом случае на диаграмме классов для подобного отношения обобщения указывается несколько линий со стрелками.

Например, класс Транспортное средство (курсив обозначает абстрактный класс) может выступать в качестве суперкласса для подклассов, соответствующих конкретным транспортным средствам, таким как: Автомобиль, Автобус, Трактор и другим. Это может быть представлено графически в форме диаграммы классов следующего вида (рис. 6.89.).

Рис. 6.89. Пример графического изображения отношения обобщения для нескольких классов–потомков

С целью упрощения обозначений на диаграмме классов и уменьшения числа стрелок–треугольников и совокупности линий, обозначающих одно и то же отношение обобщения, может быть просто изображена стрелка. В этом случае отдельные линии сходятся к стрелке, которая имеет с этими линиями единственную точку пересечения (рис. 6.90.).

Рис. 6.90. Альтернативный вариант графического изображения отношения обобщения классов для случая объединения отдельных линий

Графическое изображение отношения обобщения по форме соответствует графу специального вида, а именно – иерархическому дереву. Как нетрудно заметить, в этом случае класс–предок является корнем дерева, а классы–потомки – его листьями. Отличие заключается в возможности указания на диаграмме классов дополнительной семантической информации, которая может отражать различные теоретико–множественные характеристики данного отношения. При этом класс–предок на диаграмме может занимать произвольное положение относительно своих классов–потомков, определяемое лишь соображениями удобства.

В дополнение к простой стрелке обобщения может быть присоединена строка текста, указывающая на специальные свойства этого отношения в форме ограничения. Этот текст будет относиться ко всем линиям обобщения, которые идут к классам–потомкам. Поскольку отмеченное свойство касается всех подклассов данного отношения, именно поэтому спецификация этого свойства осуществляется в форме ограничения, которое должно быть записано в фигурных скобках.

В качестве ограничений могут быть использованы следующие ключевые слова языка UML:

{complete} – означает, что в данном отношении обобщения специфицированы все классы–потомки, и других классов–потомков у данного класса–предка быть не может.

{incomplete} – означает случай, противоположный первому. А именно, предполагается, что на диаграмме указаны не все классы–потомки. В последующем возможно разработчик восполнит их перечень, не изменяя уже построенную диаграмму.

{disjoint} – означает, что классы–потомки не могут содержать объектов, одновременно являющихся экземплярами двух или более классов.

{overlapping} – случай, противоположный предыдущему. А именно, предполагается, что отдельные экземпляры классов–потомков могут принадлежать одновременно нескольким классам.

С учетом дополнительного использования стандартного ограничения диаграмма классов (рис. 6.90.) может быть уточнена (рис. 6.91.).

Рис. 6.91. Вариант уточненного графического изображения отношения обобщения классов с использованием строки–ограничения

6.8.2.3. Отношение агрегации

Агрегация (Aggregation) – специальная форма ассоциации, которая служит для представления отношения типа "часть–целое" между агрегатом (целое) и его составной частью.

Отношение агрегации имеет место между несколькими классами в том случае, если один из классов представляет собой сущность, которая включает в себя в качестве составных частей другие сущности. Данное отношение имеет фундаментальное значение для описания структуры сложных систем, поскольку применяется для представления системных взаимосвязей типа "часть–целое". Раскрывая внутреннюю структуру системы, отношение агрегации показывает, из каких элементов состоит система, и как они связаны между собой.

С точки зрения модели отдельные части системы могут выступать в виде, как элементов, так и подсистем, которые, в свою очередь, тоже могут состоять из подсистем или элементов. Таким образом, данное отношение по своей сути описывает декомпозицию или разбиение сложной системы на более простые составные части, которые также могут быть подвергнуты декомпозиции, если в этом возникнет необходимость.

Очевидно, что рассматриваемое в таком аспекте деление системы на составные части представляет собой иерархию, но принципиально отличную от той, которая порождается отношением обобщения. Отличие заключается в том, что части системы никак не обязаны наследовать ее свойства и поведение, поскольку являются самостоятельными сущностями. Более того, части целого обладают собственными атрибутами и операциями, которые существенно отличаются от атрибутов и операций целого.

Графически отношение агрегации изображается сплошной линией, один из концов которой представляет собой не закрашенный внутри ромб. Этот ромб указывает на тот класс, который представляет собой "целое" или класс–контейнер. Остальные классы являются его "частями" (рис. 6.92.).

Рис. 6.92. Графическое изображение отношения агрегации в языке UML

В качестве примера отношения агрегации можно рассмотреть взаимосвязь типа "часть–целое", которая имеет место между классом Системный блок персонального компьютера и его составными частями: Процессор, Материнская плата, Оперативная память, Жесткий диск и Дисковод гибких дисков. Используя обозначения языка UML, компонентный состав системного блока можно представить в виде соответствующей диаграммы классов (рис. 6.93.), которая в данном случае иллюстрирует отношение агрегации.

Рис. 6.93. Диаграмма классов для иллюстрации отношения агрегации на примере системного блока ПК

6.8.2.4. Отношение композиции

Композиция (Composition) – разновидность отношения агрегации, при которой составные части целого имеют такое же время жизни, что и само целое. Эти части уничтожаются вместе с уничтожением целого.

Отношение композиции – частный случай отношения агрегации. Это отношение служит для спецификации более сильной формы отношения "часть–целое", при которой составляющие части тесно взаимосвязаны с целым. Особенность этой взаимосвязи заключается в том, что части не могут выступать в отрыве от целого, т.е. с уничтожением целого уничтожаются и все его составные части.

Композит (Composite) – класс, который связан отношением композиции с одним или большим числом классов.

Графически отношение композиции изображается сплошной линией, один из концов которой представляет собой закрашенный внутри ромб. Этот ромб указывает на тот класс, который представляет собой класс–композит. Остальные классы являются его "частями" (рис. 6.94.).

Рис. 6.94. Графическое изображение отношения композиции в языке UML

Практический пример этого отношения – окно графического интерфейса программы, которое может состоять из строки заголовка, полос прокрутки, главного меню, рабочей области и строки состояния. Нетрудно заключить, что подобное окно представляет собой класс, а его составные элементы также являются отдельными классами. Последнее обстоятельство характерно для отношения композиции, поскольку отражает различные способы представления данного отношения.

Для отношений композиции и агрегации могут использоваться дополнительные обозначения, применяемые для отношения ассоциации. А именно, могут указываться кратности отдельных классов, которые в общем случае не обязательны. Применительно к описанному выше примеру класс Окно программы является классом–композитом, а взаимосвязи составляющих его частей могут быть изображены следующей диаграммой классов (рис. 6.95).

Рис. 6.95. Диаграмма классов для иллюстрации отношения композиции на примере класса–композита Окно программы

6.8.3. Примеры диаграмм классов

Логическая структура сайта ПЭ НСИ:

Рис. 6.96.

Логическая структура сайта ПЭ НСИ:

Уровень "Отображение" – представляет возможность конечному пользователю работать с БД ПЭ НСИ при помощи удаленного доступа. Отвечает за отображение информации ПЭ НСИ и обработку запросов пользователя. Отображение и ввод данных осуществляется при помощи технологии JSP–Servlete–JSP. На диаграмме представлены страницы JSP (аналог html–страниц, но в отличие от последних обрабатываются не только браузером но и сервером) и схема вызовов каждой из страниц.

Диаграмма логической структуры сайта ПЭ НСИ. Часть 1. Сервер:

Рис. 6.97.

Диаграмма логической структуры сайта ПЭ НСИ. Часть 1. Сервер:

Представлены два сервлета – контроллера, реализующих обработку запросов пользователя. При помощи классов пакета NSISRV_22 сервлеты – контроллеры получают доступ к БД ПЭ НСИ и её виртуальному отображению.

Логическая структура ПО ПЭ НСИ. Часть2. Бизнес логика:

Рис. 6.98.

Диаграмма логической структуры сайта ПЭ НСИ. Часть 2. Бизнес логика:

Представлены классы, реализующие бизнес–логику приложения:

– формирование sql запросов к БД ПЭ НСИ;

– обработка результатов sql запросов;

– виртуализация БД ПЭ НСИ;

– поиск информации;

– изменение информации;

– логирование.

6.9. Компоненты

Компонент (Component) – это физическая заменяемая часть системы, совместимая с одним набором интерфейсов и обеспечивающая реализацию какого–либо другого. Компонент изображается в виде прямоугольника с вкладками (рис. 6.99.).

Компоненты используются для моделирования физических сущностей, размещенных в узле: исполняемых модулей, библиотек, таблиц, файлов и документов. Обычно компонент представляет собой физическую пакет логических элементов, таких как классы, интерфейсы и кооперативные диаграммы.

Многие операционные системы и языки программирования непосредственно поддерживают понятие компонента. Объектные библиотеки, исполняемые программы, компоненты Enterprise JavaBeans – все эти примеры сущностей, которые могут быть непосредственно представлены компонентами в смысле UML. Компоненты могут использоваться не только для моделирования такого рода сущностей, но и для представления иных элементов работающей системы – к примеру, таблиц, файлов и документов.

Рис. 6.99. Компонент

Графически компонент в UML изображается так, как показано на рис. 6.102. Это обозначение позволяет рассматривать компонент без привязки к конкретной операционной системе или языку программирования. С помощью стереотипов – одного из механизмов расширения UML – можно приспособить эту нотацию для представления конкретных видов компонентов.

У каждого компонента должно быть имя, отличающее его от других компонентов. Имя – это текстовая строка; взятое само по себе, оно называется простым. В составном имени спереди от простого добавлено имя пакета, в котором находится компонент. Имя компонента должно быть уникальным внутри объемлющего пакета. Обычно при изображении компонента указывают только его имя, как видно из рис. 6.100. Тем не менее, как и в случае с классами, вы можете снабжать компоненты помеченными значениями или дополнительными разделами, чтобы показать детали.

Рис. 6.100. Простое и расширенное изображение компонентов

Имя компонента может состоять из любого числа букв, цифр и некоторых знаков препинания (за исключением таких, как двоеточия, которые применяются для отделения имени компонента от имени объемлющего пакета). Имя может занимать несколько строк. Как правило, для именования компонентов используют одно или несколько коротких существительных, взятых из словаря реализации, и в зависимости от выбранной операционной системы добавляют расширения имен файлов (например, java или dll).

Изображая компонент в UML, руководствуйтесь следующими правилами:

– применяйте свернутую форму интерфейса, если только не возникает острой необходимости раскрыть операции, предлагаемые этим интерфейсом;

– показывайте только те интерфейсы, которые необходимы для понимания назначения компонента в данном контексте;

– в тех случаях, когда вы используете компоненты для моделирования библиотек и исходного кода, указывайте помеченные значения, относящиеся к контролю версий.

Хорошо структурированный компонент обладает следующими свойствами:

предоставляет четкую абстракцию некоторой сущности, которая является частью физического аспекта системы;

предоставляет реализацию небольшого, хорошо определенного набора интерфейсов;

включает набор классов, которые, действуя совместно, реализуют семантику интерфейсов изящно и экономно;

слабо связан с другими компонентами; как правило, компоненты моделируются только совместно, с отношениями зависимости и реализации.

6.9.1. Виды компонентов

Можно выделить три вида компонентов.

Во–первых, это компоненты размещения (Deployment components), которые необходимы и достаточны для построения исполняемой системы. К их числу относятся динамически подключаемые библиотеки (DLL) и исполняемые программы (ЕХЕ). Определение компонентов в UML достаточно широко, чтобы охватить как классические объектные модели, вроде СОМ+, CORBA и Enterprise JavaBeans, так и альтернативные, возможно содержащие динамические Web–страницы, таблицы базы данных и исполняемые модули, где используются закрытые механизмы коммуникации.

Во–вторых, есть компоненты – рабочие продукты (Work product components). По сути дела, это побочный результат процесса разработки. Сюда можно отнести файлы с исходными текстами программ и данными, из которых создаются компоненты размещения. Такие компоненты не принимают непосредственного участия в работе исполняемой системы, но являются рабочими продуктами, из которых исполняемая система создается.

В–третьих, существуют компоненты исполнения (Execution components); Они создаются как результат работы системы. Примером может служить объект СОМ+, экземпляр которого создается из DLL.

Все механизмы расширения UML применимы и к компонентам. Чаще всего используются помеченные значения для расширения свойств компонентов (например, для задания версии компонента) и стереотипы для задания новых видов компонентов (например, зависимых от операционной системы).

В UML определены пять стандартных стереотипов, применимых к компонентам:

executable (исполнимый) – определяет компонент, который может исполняться в узле;

library (библиотека) – определяет статическую или динамическую объектную библиотеку;

table (таблица) – определяет компонент, представляющий таблицу базы данных;

file (файл) – определяет компонент, представляющий документ, который содержит исходный текст или данные;

document (документ) – определяет компонент, представляющий документ.

6.9.2. Отношения между компонентами

Вы можете организовывать компоненты, группируя их в пакеты, так же, как это делается для классов.

При организации компонентов между ними можно специфицировать отношения зависимости, обобщения, ассоциации (включая агрегирование) и реализации.

Другим случаем отношения зависимости на диаграмме компонентов является отношение программного вызова и компиляции между различными видами компонентов. Для рассмотренного фрагмента диаграммы компонентов (рис. 6.101.) наличие подобной зависимости означает, что исполнимый компонент Control.exe использует или импортирует некоторую функциональность компонента Library.dll, вызывает страницу гипертекста Home.html и файл помощи Search.hlp, а исходный текст этого исполнимого компонента хранится в файле Control.cpp. При этом характер отдельных видов зависимостей может быть отмечен дополнительно с помощью текстовых стереотипов.

Рис. 6.101. Графическое изображение отношения зависимости между компонентами

На диаграмме компонентов могут быть также представлены отношения зависимости между компонентами и реализованными в них классами. Эта информация имеет значение для обеспечения согласования логического и физического представлений модели системы. Разумеется, изменения в структуре описаний классов могут привести к изменению этой зависимости. Ниже приводится фрагмент зависимости подобного рода, когда исполнимый компонент Control.exe зависит от соответствующих классов (рис. 6.102.).

Рис. 6.102. Графическое изображение зависимости между компонентом и классами

6.9.3. Компоненты и классы 

Во многих отношениях компоненты подобны классам. Те и другие наделены именами, могут реализовывать набор интерфейсов, вступать в отношения зависимости, обобщения и ассоциации, быть вложенными, иметь экземпляры и принимать участие во взаимодействиях. Однако между компонентами и классами есть существенные различия: классы представляют собой логические абстракции, а компоненты – физические сущности. Таким образом, компоненты могут размещаться в узлах, а классы – нет; компоненты представляют собой физическую упаковку логических сущностей и, следовательно, находятся на другом уровне абстракции; классы могут обладать атрибутами и операциями. Компоненты обладают только операциями, доступными через их интерфейсы.

Первое отличие является самым важным. При моделировании системы решение о том, что использовать – класс или компонент, – очевидно: если моделируемая сущность непосредственно размещается в узле, то это компонент, в противном случае – класс.

Второе различие предполагает существование некоторого отношения между классами и компонентами, а именно: компонент – это физическая реализация множества логических элементов, таких как классы и кооперативные диаграммы. Как показано на рис. 6.103., отношение между компонентом и классом, который он реализует, может быть явно изображено с помощью отношения зависимости. Как правило, вам не придется рассматривать такие отношения; лучше хранить их как часть спецификации компонента.

Рис. 6.103. Компоненты и классы

Третье различие подчеркивает, что интерфейсы являются мостом между компонентами и классами. В следующем разделе более подробно объясняется, что, хотя и компоненты, и классы могут реализовывать интерфейсы, в отличие от класса услуги компонента обычно доступны только через его интерфейсы.

6.9.4. Компоненты и интерфейсы

Интерфейс – это набор операций, которые описывают услуги, предоставляемые классом или компонентом. В общем случае интерфейс графически изображается окружностью, которая соединяется с компонентом отрезком линии без стрелок (рис. 6.104, а). При этом имя интерфейса, которое рекомендуется начинать с заглавной буквы "I", записывается рядом с окружностью. Семантически линия означает реализацию интерфейса, а наличие интерфейсов у компонента означает, что данный компонент реализует соответствующий набор интерфейсов.

 

Рис. 6.104. Графическое изображение интерфейсов на диаграмме компонентов

Кроме того, интерфейс на диаграмме компонентов может быть изображен в виде прямоугольника класса со стереотипом <<interface>> и секцией поддерживаемых операций (рис. 6.104, б). Как правило, этот вариант обозначения используется для представления внутренней структуры интерфейса.

Как видно из рис. 6.105., отношения между компонентом и его интерфейсами можно изобразить двумя способами. Первый, наиболее распространенный, состоит в том, что интерфейс рисуется в свернутой (elided) форме. Компонент, реализующий интерфейс, присоединяется к нему с помощью отношения свернутой реализации. Во втором случае интерфейс рисуется в развернутом виде, возможно с раскрытием операций. Реализующий его компонент присоединяется с помощью отношения полной реализации. В обоих случаях компонент, получающий доступ к услугам других компонентов через этот интерфейс, подключается к нему с помощью отношения зависимости.