Перед руководителем информационной службы университета ставится задача разработки новой клиент-серверной системы регистрации студентов взамен старой системы на мейнфрейме. Новая система должна позволять студентам регистрироваться на курсы и просматривать свои табели успеваемости с персональных компьютеров, подключенных к локальной сети университета. Профессора должны иметь доступ к онлайновой системе, чтобы указать курсы, которые они будут читать, и проставить оценки за курсы.
Из-за недостатка средств университет не в состоянии заменить сразу всю существующую систему. Остается функционировать в прежнем виде база данных, содержащая всю информацию о курсах (каталог курсов). Эта база данных поддерживается реляционной СУБД. Новая система будет работать с существующей БД в режиме доступа, без обновления.
В начале каждого семестра студенты могут запросить каталог курсов, содержащий список курсов, предлагаемых в данном семестре. Информация о каждом курсе должна включать имя профессора, наименование кафедры и требования к предварительному уровню подготовки (прослушанным курсам).
Новая система должна позволять студентам выбирать 4 курса в предстоящем семестре. Дополнительно каждый студент может указать 2 альтернативных курса на тот случай, если какой-либо из выбранных им курсов окажется уже заполненным или отмененным. На каждый курс может записаться не более 10 и не менее 3 студентов (если менее 3, то курс будет отменен). В каждом семестре существует период времени, когда студенты могут изменить свои планы. В это время студенты должны иметь доступ к системе, чтобы добавить или удалить выбранные курсы. После того, как процесс регистрации некоторого студента завершен, система регистрации направляет информацию в расчетную систему, чтобы студент мог внести плату за семестр. Если курс окажется заполненным в процессе регистрации, студент должен быть извещен об этом до окончательного формирования его личного учебного плана.
В конце семестра студенты должны иметь доступ к системе для просмотра своих электронных табелей успеваемости. Поскольку эта информация конфиденциальная, система должна обеспечивать ее защиту от несанкционированного доступа.
Профессора должны иметь доступ к онлайновой системе, чтобы указать курсы, которые они будут читать, и просмотреть список студентов, записавшихся на их курсы. Кроме этого, профессора должны иметь возможность проставить оценки за курсы.
Глоссарий предназначен для описания терминологии предметной области. Он может быть использован как неформальный словарь данных системы.
Курс | Учебный курс, предлагаемый университетом |
Конкретный курс (Course Offering) | Конкретное чтение данного курса в конкретном семестре (один и тот же курс может вестись в нескольких параллельных сессиях). Включает точные дни недели и время. |
Каталог курсов | Полный каталог всех курсов, предлагаемых университетом. |
Расчетная система | Система обработки информации об оплате за курсы. |
Оценка | Оценка, полученная студентом за конкретный курс. |
Профессор | Преподаватель университета. |
Табель успеваемости (Report Card) | Все оценки за все курсы, полученные студентом в данном семестре. |
Список курса (Roster) | Список всех студентов, записавшихся на конкретный курс. |
Студент | Личность, проходящая обучение в университете. |
Учебный график (Schedule) | Курсы, выбранные студентом в текущем семестре. |
Назначение дополнительных спецификаций определить требования к системе регистрации курсов, которые не отражены в модели вариантов использования. Вместе они образуют полный набор требований к системе.
Дополнительные спецификации определяют нефункциональные требования к системе, такие, как надежность, удобство использования, производительность, сопровождаемость, а также ряд функциональных требований, являющихся общими для нескольких вариантов использования.
Функциональные возможности
Система должна обеспечивать многопользовательский режим работы.
Если конкретный курс оказывается заполненным в то время, когда студент формирует свой учебный график, включающий данный курс, то система должна известить его об этом.
Удобство использования
Пользовательский интерфейс должен быть совместимым с Windows 95/98.
Надежность
Система должна быть в работоспособном состоянии 24 часа в день 7 дней в неделю, время простоя не более 10%.
Производительность
Система должна поддерживать до 2000 одновременно работающих с центральной базой данных пользователей, и до 500 пользователей, одновременно работающих с локальными серверами.
Безопасность
Система не должна позволять студентам изменять любые учебные графики, кроме своих собственных, а также не должна позволять профессорам модифицировать конкретные курсы, выбранные другими профессорами.
Только профессора имеют право ставить студентам оценки.
Только регистратор может изменять любую информацию о студентах.
Проектные ограничения
Система должна быть интегрирована с существующей системой каталога курсов, функционирующей на основе реляционной СУБД.
Действующие лица:
Чтобы поместить действующее лицо в браузер:
Варианты использования:
Исходя из потребностей действующих лиц, выделяются следующие варианты использования:
Чтобы поместить вариант использования в браузер:
Диаграмма вариантов использования:
Создайте диаграмму вариантов использования для системы регистрации. Требуемые для этого действия подробно перечислены далее. Готовая диаграмма вариантов использования должна выглядеть как на рис. 3.1.
Рис. 3.1. Диаграмма вариантов использования для системы регистрации.
В среде Rose диаграммы вариантов использования создаются в представлении вариантов использования. Главная диаграмма (Main) предлагается по умолчанию. Для моделирования системы можно затем разработать столько дополнительных диаграмм, сколько необходимо.
Чтобы получить доступ к главной диаграмме вариантов использования:
Для создания новой диаграммы вариантов использования:
Наличие общего варианта использования Login для трех действующих лиц позволяет обобщить их поведение и ввести новое действующее лицо Any User. Модифицированная диаграмма вариантов использования показана на рис. 3.2.
Рис. 3.2. Модифицированная диаграмма вариантов использования
Вариант использования Login:
Краткое описание
Данный вариант использования описывает вход пользователя в систему регистрации курсов.
Основной поток событий
Данный вариант использования начинает выполняться, когда пользователь хочет войти в систему регистрации курсов.
1. Система запрашивает имя пользователя и пароль.
2. Пользователь вводит имя и пароль.
3. Система проверяет имя и пароль, после чего открывается доступ в систему.
Альтернативные потоки
Неправильное имя/пароль
Если во время выполнения Основного потока обнаружится, что пользователь ввел неправильное имя и/или пароль, система выводит сообщение об ошибке. Пользователь может вернуться к началу Основного потока или отказаться от входа в систему, при этом выполнение варианта использования завершается.
Предусловия
Отсутствуют.
Постусловия
Если вариант использования выполнен успешно, пользователь входит в систему. В противном случае состояние системы не изменяется.
Вариант использования Register for Courses:
Краткое описание
Данный вариант использования позволяет студенту зарегистрироваться на конкретные курсы в текущем семестре. Студент может изменить свой выбор (обновить или удалить курсы), если изменение выполняется в установленное время в начале семестра. Система каталога курсов предоставляет список всех конкретных курсов текущего семестра.
Основной поток событий
Данный вариант использования начинает выполняться, когда студент хочет зарегистрироваться на конкретные курсы или изменить свой график курсов.
1. Система запрашивает требуемое действие (создать график, обновить график, удалить график).
2. Когда студент указывает действие, выполняется один из подчиненных потоков (создать, обновить, удалить или принять график).
Создать график
1. Система выполняет поиск в каталоге курсов доступных конкретных курсов и выводит их список.
2. Студент выбирает из списка 4 основных курса и 2 альтернативных курса.
3. После выбора система создает график студента.
4. Выполняется подчиненный поток «Принять график».
Обновить график
1. Система выводит текущий график студента.
2. Система выполняет поиск в каталоге курсов доступных конкретных курсов и выводит их список.
3. Студент может обновить свой выбор курсов, удаляя или добавляя конкретные курсы.
4. После выбора система обновляет график.
5. Выполняется подчиненный поток «Принять график».
Удалить график
1. Система выводит текущий график студента.
2. Система запрашивает у студента подтверждения удаления графика.
3. Студент подтверждает удаление.
4. Система удаляет график. Если график включает конкретные курсы, на которые записался студент, он должен быть удален из списков этих курсов.
Принять график
Для каждого выбранного, но еще не «зафиксированного» конкретного курса в графике система проверяет выполнение студентом предварительных требований (прохождение определенных курсов), факт открытия конкретного курса и отсутствие конфликтов графика. Затем система добавляет студента в список выбранного конкретного курса. Курс фиксируется в графике и график сохраняется в системе.
Альтернативные потоки
Сохранить график
В любой момент студент может вместо принятия графика сохранить его. В этом случае шаг «Принять график» заменяется на следующий:
1. «Незафиксированные» конкретные курсы помечаются в графике как «выбранные».
2. График сохраняется в системе.
Не выполнены предварительные требования, курс заполнен или имеют место конфликты графика
Если во время выполнения подчиненного потока «Принять график» система обнаружит, что студент не выполнил необходимые предварительные требования, или выбранный им конкретный курс заполнен, или имеют место конфликты графика, то выдается сообщение об ошибке. Студент может либо выбрать другой конкретный курс и продолжить выполнение варианта использования, либо сохранить график, либо отменить операцию, после чего основной поток начнется с начала.
График не найден
Если во время выполнения подчиненных потоков «Обновить график» или «Удалить график» система не может найти график студента, то выдается сообщение об ошибке. После того, как студент подтвердит это сообщение, основной поток начнется с начала.
Система каталога курсов недоступна
Если окажется, что невозможно установить связь с системой каталога курсов, то будет выдано сообщение об ошибке. После того, как студент подтвердит это сообщение, вариант использования завершится.
Регистрация на курсы закончена
Если в самом начале выполнения варианта использования окажется, что регистрация на текущий семестр закончена, будет выдано сообщение и вариант использования завершится.
Удаление отменено
Если во время выполнения подчиненного потока "Удалить график" студент решит не удалять его, удаление отменяется, и основной поток начнется с начала.
Предусловия
Перед началом выполнения данного варианта использования студент должен войти в систему.
Постусловия
Если вариант использования завершится успешно, график студента будет создан, обновлен или удален. В противном случае состояние системы не изменится.
Вариант использования Close Registration:
Краткое описание
Данный вариант использования позволяет регистратору закрывать процесс регистрации. Конкретные курсы, на которые не записалось достаточного количества студентов (менее трех), отменяются. В расчетную систему передается информация о каждом студенте по каждому конкретному курсу, чтобы студенты могли внести оплату за курсы.
Основной поток событий
Данный вариант использования начинает выполняться, когда регистратор запрашивает прекращение регистрации.
1. Система проверяет состояние процесса регистрации. Если регистрация еще выполняется, выдается сообщение и вариант использования завершается.
2. Для каждого конкретного курса система проверяет, ведет ли его какой-либо профессор, и записалось ли на него не менее трех студентов. Если эти условия выполняются, система фиксирует конкретный курс в каждом графике, который включает данный курс.
3. Для каждого студенческого графика проверяется наличие в нем максимального количества основных курсов; если их недостаточно, система пытается дополнить альтернативными курсами из списка данного графика. Выбирается первый доступный альтернативный курс. Если таких курсов нет, то никакое дополнение не происходит.
4. Система закрывает все конкретные курсы. Если в каком-либо конкретном курсе оказывается менее трех студентов (с учетом добавлений, сделанных в п.3), система отменяет его и исключает из каждого содержащего его графика.
5. Система рассчитывает плату за обучение для каждого студента в текущем семестре и направляет информацию в расчетную систему. Расчетная система посылает студентам счета для оплаты с копией их окончательных графиков.
Альтернативные потоки
Конкретный курс никто не ведет
Если во время выполнения основного потока обнаруживается, что некоторый конкретный не ведется никаким профессором, то этот курс отменяется. Система исключает данный курс из каждого содержащего его графика.
Расчетная система недоступна
Если невозможно установить связь с расчетной системой, через некоторое установленное время система вновь попытается связаться с ней. Попытки будут повторяться до тех пор, пока связь не установится.
Предусловия
Перед началом выполнения данного варианта использования регистратор должен войти в систему.
Постусловия
Если вариант использования завершится успешно, регистрация закрывается. В противном случае состояние системы не изменится.
В результате представление вариантов использования в браузере примет следующий вид:
Удаление вариантов использования и действующих лиц
Существует два способа удалить элемент модели из одной диаграммы или из всей модели. Чтобы удалить элемент модели из диаграммы:
Чтобы удалить элемент из модели:
Принятие соглашений по моделированию
Включает:
Пример соглашений моделирования:
Реализация варианта использования (Use-Case Realization):
Описывает реализацию конкретного варианта использования в терминах взаимодействующих объектов и представляется с помощью набора диаграмм (диаграмм классов, реализующих вариант использования, и диаграмм взаимодействия (диаграмм последовательности и кооперативных диаграмм), отражающих взаимодействие объектов в процессе реализации варианта использования).
Рис 3.3. Реализация варианта использования
Идентификация ключевых абстракций Заключается в предварительном определении классов системы (классов анализа). Источники знание предметной области, требования к системе, глоссарий. Классы анализа для системы регистрации показаны на рис. 3.4:
Рис. 3.4. Классы анализа системы регистрации
Структура логического представления браузера должна иметь следующий вид:
Создание пакетов и диаграммы Traceabilities:
Рис. 3.5. Диаграмма Traceabilities
Создание классов анализа и соответствующей диаграммы Key Abstractions:
Идентификация классов, участвующих в реализации потоков событий варианта использования
В потоках событий варианта использования выявляются классы трех типов:
Пример набора классов, участвующих в реализации варианта использования Register for Courses, приведен на рис. 3.6.
Рис. 3.6. Классы, участвующие в реализации варианта использования Register for Courses
Распределение поведения, реализуемого вариантом использования, между классами
Реализуется с помощью диаграмм взаимодействия (диаграмм последовательности и кооперативных диаграмм). В первую очередь строится диаграмма (одна или более), описывающая основной поток событий и его подчиненные потоки. Для каждого альтернативного потока событий строится отдельная диаграмма. Примеры:
Нецелесообразно описывать тривиальные потоки событий (например, в потоке участвует только один объект).
Создадим диаграммы последовательности и кооперативные диаграммы для основного потока событий варианта использования Register for Courses. Готовые диаграммы последовательности должны иметь вид, как на рис. 3.7 3.11.
Рис. 3.7. Диаграмма последовательности Register for Courses Basic Flow
Рис. 3.8. Диаграмма последовательности Register for Courses Basic Flow (Create Schedule)
Настройка
Создание диаграммы последовательности
Добавление на диаграмму действующего лица, объектов и сообщений
Рис. 3.9. Диаграмма последовательности Register for Courses Basic Flow (Update Schedule)
Рис. 3.10. Диаграмма последовательности Register for Courses Basic Flow (Delete Schedule)
Соотнесение сообщений с операциями
Выполните аналогичные действия для создания диаграмм последовательности, показанных на рис. 3.8, 3.9, 3.10 и 3.11. Обратите внимание, что на диаграмме рис. 3.11 появился объект нового класса PrimarySheduleOfferingInfo (класса ассоциаций, описывающего связь между классами Shedule и OfferingInfo), который нужно предварительно создать.
Рис. 3.11. Диаграмма последовательности Register for Courses Basic Flow (Submit Schedule)
Создание примечаний
Чтобы поместить на диаграмму примечание:
Кроме примечаний, на диаграмму можно поместить также и текстовую область. С ее помощью можно, например, добавить к диаграмме заголовок.
Чтобы поместить на диаграмму текстовую область:
Создание кооперативной диаграммы
Для создания кооперативной диаграммы достаточно открыть диаграмму последовательности и нажать клавишу F5.
Определение обязанностей (responsibilities), атрибутов и ассоциаций классов
Обязанность (responsibility) действие, которое объект обязан выполнять по запросу других объектов. Обязанность преобразуется в одну или более операций класса на шаге проектирования. Обязанности определяются, исходя из сообщений на диаграммах взаимодействия, и документируются в классах в виде операций «анализа», которые появляются там автоматически в процессе построения диаграмм взаимодействия (соотнесения сообщений с операциями).
Так, диаграмма классов VOPC (classes only) (рис. 3.6) после построения диаграмм взаимодействия в упражнении 8 должна принять вид, изображенный на рис. 3.12.
Рис. 3.12. Диаграмма классов VOPC (classes only) с операциями «анализа»
Атрибуты классов анализа определяются, исходя из знаний о предметной области, требований к системе и глоссария.
Настройка
Добавление атрибутов
Рис. 3.13. Классы с операциями «анализа» и атрибутами
Связи между классами (ассоциации) определяются на основе диаграмм взаимодействия. Если два объекта взаимодействуют (обмениваются сообщениями), между ними должна существовать связь (путь взаимодействия). Для ассоциаций задаются множественность и, возможно, направление навигации. Могут использоваться множественные ассоциации, агрегации и классы ассоциаций.
Добавим связи к классам, принимающим участие в варианте использования Register for Courses. Для отображения связей между классами построим три новых диаграмм классов в кооперации Register for Courses пакета Use-Case Realization Register for Courses (рис. 3.14, 3.15 и 3.16).
Рис. 3.14. Диаграмма Entity Classes (классы-сущности)
Добавлены два новых класса - подклассы FulltimeStudent (студент очного отделения) и ParttimeStudent (студент вечернего отделения).
Рис. 3.15. Диаграмма CourseOfferingInfo
На данной диаграмме показаны классы ассоциаций, описывающие связи между классами Schedule и CourseOffering и добавлен суперкласс ScheduleOfferingInfo. Данные и операции, содержащиеся в этом классе (status курс включен в график или отменен), относятся как к основным, так и к альтернативным курсам, в то время как оценка (grade) и окончательное включение курса в график могут иметь место только для основных курсов.
Рис. 3.16. Полная диаграмма классов VOPC (без атрибутов и операций)
Создание ассоциаций
Ассоциации создают непосредственно на диаграмме классов. Панель инструментов диаграммы классов содержит кнопки для создания как однонаправленных, так и двунаправленных ассоциаций. Чтобы на диаграмме классов создать ассоциацию:
Чтобы задать возможности навигации по ассоциации:
Чтобы создать рефлексивную ассоциацию:
Создание агрегаций
Чтобы поместить на диаграмму классов рефлексивную агрегацию:
Создание обобщений
При создании обобщения может потребоваться перенести некоторые атрибуты или операции из одного класса в другой. Если, например, понадобится перенести их из подкласса в суперкласс Employee, в браузере для этого достаточно просто перетащить атрибуты или операции из одного класса в другой. Не забудьте удалить другую копию атрибута из второго подкласса, если он имеется.
Чтобы поместить обобщение на диаграмму классов:
Спецификации связей
Спецификации связей касаются имен ассоциаций, ролевых имена, множественности и классов ассоциаций.
Чтобы задать множественность связи:
Чтобы задать имя связи:
Чтобы задать связи ролевое имя:
Чтобы задать элемент связи (класс ассоциаций):
Задание для самостоятельной работы
Выполнить анализ варианта использования Close Registration и построить соответствующие диаграммы взаимодействия и классов.
Цели проектирования архитектуры системы:
Вводятся глобальные пакеты:
Определяются проектные классы (design classes):
Примеры возможных подсистем:
Принятие решения о преобразовании класса в подсистему определяется опытом и знаниями архитектора проекта.
Соглашения по проектированию интерфейсов:
Выделение архитектурных уровней:
Пример выделения архитектурных уровней и объединения элементов модели в пакеты для системы регистрации приведен на рис. 3.17.
Для того чтобы поместить класс в пакет, достаточно просто перетащить его в браузере на нужный пакет.
Рис. 3.17. Структура логического представления модели на шаге проектирования
Данное представление отражает следующие решения, принятые архитектором:
Структура и диаграммы пакета (подсистемы) CourseCatalogSystem показана на рис. 3.18, 3.19, 3.20, 3.21 и 3.22.
Рис. 3.18. Структура пакета CourseCatalogSystem
Рис. 3.19. Зависимости между подсистемой и другими пакетами (диаграмма классов CourseCatalogSystem Dependencies)
Чтобы поместить зависимость между пакетами на диаграмму классов:
Рис. 3.20. Классы, реализующие интерфейс подсистемы (диаграмма классов ICourseCatalogSystem)
Класс DBCourseOfferring отвечает за взаимодействие с БД каталога курсов.
Рис. 3.21. Диаграмма последовательности ICourseCatalogSystem::getCourseOfferings, описывающая взаимодействие элементов при реализации операции интерфейса getCourseOfferings
Рис. 3.22. Диаграмма последовательности ICourseCatalogSystem::initialize, описывающая взаимодействие элементов при реализации операции интерфейса initialize
Распределенная конфигурация системы моделируется с помощью диаграммы размещения. Ее основные элементы:
Пример: сетевая конфигурация системы регистрации (без процессов).
Рис. 3.23. Сетевая конфигурация системы регистрации
Распределение процессов по узлам сети производится с учетом следующих факторов:
Пример распределения процессов по узлам приведен на рис. 3.24.
Рис. 3.24. Сетевая конфигурация системы регистрации с распределением процессов по узлам
Чтобы открыть диаграмму размещения, надо дважды щелкнуть мышью на представлении Deployment View (представлении размещения) в браузере.
Чтобы поместить на диаграмму процессор:
В спецификациях процессора можно ввести информацию о его стереотипе, характеристиках и планировании. Стереотипы применяются для классификации процессоров (например, компьютеров под управлением UNIX или ПК).
Характеристики процессора это его физическое описание. Оно может, в частности, включать тактовую частоту процессора и объем памяти.
Поле планирования (scheduling) процессора содержит описание того, как осуществляется планирование его процессов:
Чтобы назначить процессору стереотип:
Чтобы ввести характеристики и планирование процессора:
Чтобы показать планирование на диаграмме:
Чтобы добавить связь на диаграмму:
Чтобы назначить связи стереотип:
Чтобы добавить процесс:
Чтобы показать процессы на диаграмме:
Классы анализа преобразуются в проектные классы:
Обязанности классов, определенные в процессе анализа, преобразуются в операции. Каждой операции присваивается имя, характеризующее ее результат. Определяется полная сигнатура операции: operationName(parameter:class, ):returnType. Создается краткое описание операции, включая смысл всех ее параметров. Определяется видимость операции: public, private, protected. Определяется область действия (scope) операции: экземпляр или классификатор.
Определяются (уточняются) атрибуты классов:
Чтобы задать тип данных, значение по умолчанию и видимость атрибута:
Рис. 3.25. Класс Student с полностью определенными операциями и атрибутами
Чтобы изменить нотацию для обозначения видимости:
Примечание. Изменение значения этого параметра приведет к смене нотации только для новых диаграмм и не затронет уже существующие диаграммы.
Чтобы задать тип возвращаемого значения, стереотип и видимость операции:
1. Щелкните правой кнопкой мыши на операции в браузере.
2. Откройте окно спецификации класса этой операции.
3. Укажите тип возвращаемого значения в раскрывающемся списке или введите свой тип.
4. Укажите стереотип в соответствующем раскрывающемся списке или введите новый.
5. В поле Export Control укажите значение видимости операции: Public, Protected, Private или Implementation. По умолчанию видимость всех операций установлена в public.
Чтобы добавить к операции аргумент:
1. Откройте окно спецификации операции.
2. Перейдите на вкладку Detail.
3. Щелкните правой кнопкой мыши в области аргументов, в открывшемся меню выберите Insert.
4. Введите имя аргумента.
5. Щелкните на колонке Data type и введите туда тип данных аргумента.
6. Если надо, щелкните на колонке default и введите значение аргумента по умолчанию.
Определение состояний для классов моделируется с помощью диаграмм состояний.
Диаграммы состояний создаются для описания объектов с высоким уровнем динамического поведения.
В качестве примера рассмотрим поведение объекта класса CourseOffering. Он может находиться в открытом состоянии (возможно добавление нового студента) или в закрытом состоянии (максимальное количество студентов уже записалось на курс). Таким образом, конкретное состояние зависит от количества студентов, связанных с объектом CourseOffering. Рассматривая каждый вариант использования, можно выделить еще два состояния: инициализация (до начала регистрации студентов на курс) и отмена (курс исключается из расписания).
Рис. 3.26. Диаграмма состояний для класса CourseOffering
Для создания диаграммы состояний:
1. Щелкните правой кнопкой мыши в браузере на нужном классе.
2. В открывшемся меню выберите пункт New > Statechart Diagram.
Чтобы добавить состояние:
1. На панели инструментов нажмите кнопку State
2. Щелкните мышью на диаграмме состояний в том месте, куда хотите его поместить.
Все элементы состояния можно добавить с помощью вкладки Detail окна спецификации состояния.
Чтобы добавить деятельность:
1. Откройте окно спецификации требуемого состояния.
2. Перейдите на вкладку Detail.
3. Щелкните правой кнопкой мыши на окне Actions.
4. В открывшемся меню выберите пункт Insert.
5. Дважды щелкните на новом действии.
6. Введите действие в поле Actions.
7. В окне When укажите Do, чтобы сделать новое действие деятельностью.
Чтобы добавить входное действие, в окне When укажите On Entry.
Чтобы добавить выходное действие, в окне When укажите On Exit.
Чтобы послать событие:
1. Откройте окно спецификации требуемого состояния.
2. Перейдите на вкладку Detail.
3. Щелкните правой кнопкой мыши на окне Actions.
4. В открывшемся меню выберите пункт Insert.
5. Дважды щелкните на новом действии.
6. В качестве типа действия укажите Send Event.
7. В соответствующие поля введите событие (event), аргументы (arguments) и целевой объект (Target).
Чтобы добавить переход:
1. Нажмите кнопку Transition панели инструментов.
2. Щелкните мышью на состоянии, откуда осуществляется переход.
3. Проведите линию перехода до того состояния, где он завершается.
Чтобы добавить рефлексивный переход:
1. Нажмите кнопку Transition to Self панели инструментов.
2. Щелкните на том состоянии, где осуществляется рефлексивный переход.
Чтобы добавить событие, его аргументы, ограждающее условие и действие:
1. Дважды щелкните на переходе, чтобы открыть окно его спецификации.
2. Перейдите на вкладку General.
3. Введите событие в поле Event.
4. Введите аргументы в поле Arguments.
5. Введите ограждающее условие в поле Condition.
6. Введите действие в поле Action.
Чтобы отправить событие:
1. Дважды щелкните на переходе, чтобы открыть окно его спецификации.
2. Перейдите на вкладку Detail.
3. Введите событие в поле Send Event.
4. Введите аргументы в поле Send Arguments.
5. Задайте цель в поле Send Target.
Для указания начального или конечного состояния:
1. На панели инструментов нажмите кнопку Start State или End State.
2. Щелкните мышью на диаграмме состояний в том месте, куда хотите поместить состояние.
Уточнение ассоциаций: некоторые ассоциации (семантические, структурные, устойчивые связи по данным) могут быть преобразованы в зависимости (неструктурные, временные связи, отражают видимость), а агрегации в композиции.
Рис. 3.27. Пример преобразования ассоциаций и агрегаций
Чтобы установить преобразовать агрегацию в композицию:
1. Щелкните правой кнопкой мыши на том конце агрегации, который упирается в класс-часть (на рис.3.27 Schedule).
2. В открывшемся меню выберите пункт Containment.
3. Укажите метод включения By Value.
Примечание. Значение By Value предполагает, что целое и часть создаются и разрушаются одновременно, что соответствует композиции. Агрегация (By Reference) предполагает, что целое и часть создаются и разрушаются в разное время.
Уточнение обобщений: в случае ситуации с миграцией подклассов (студент может переходить с очной формы обучения на вечернюю) иерархия наследования реализуется так, как показано на рис. 3.28. Такое решение повышает устойчивость системы (не нужно модифицировать описание объекта).
Рис. 3.28. Преобразование обобщения
Проектирование реляционных баз данных выполняется с использованием средства Data Modeler. Его работа основана на известном механизме отображения объектной модели в реляционную. Результатом является построение диаграммы «сущность-связь» и последующая генерация описания БД на SQL.
Проектирование БД состоит из следующих шагов:
Создание нового компонента базы данных:
1. Щелкните правой кнопкой мыши на представлении компонентов.
2. В открывшемся меню выберите пункт Data Modeler > New > Database.
3. Откройте окно спецификации вновь созданного компонента DB_0 и в списке Target выберите Oracle 8.x.
Определение устойчивых (persistent) классов:
1. Откройте окно спецификации класса Student в пакете University Artifacts.
2. Перейдите на вкладку Detail.
3. Установите значение переключателя Persistence в Persistent.
4. Проделайте такие же действия для классов Classification, FulltimeClassification и ParttimeClassification.
5. Откройте класс Student в браузере, нажав « + ».
6. Щелкните правой кнопкой мыши на атрибуте studentID.
7. В открывшемся меню выберите пункт Data Modeler > Part of Object Identity (указание атрибута в качестве части первичного ключа).
Примечание. Шаги 5, 6 и 7 можно выполнять в Rational Rose, начиная с версии 2001.
Создание схемы БД:
1. Щелкните правой кнопкой мыши на пакете University Artifacts.
2. В открывшемся меню выберите пункт Data Modeler > Transform to Data Model.
3. В появившемся окне в списке Target Database укажите DB_0 и нажмите ОК. В результате в логическом представлении появится новый пакет Schemas.
4. Откройте пакет Schemas и щелкните правой кнопкой мыши на пакете «Schema» S_0.
5. В открывшемся меню выберите пункт Data Modeler > New > Data Model Diagram.
6. Откройте пакет, затем откройте вновь созданную диаграмму «сущность-связь» NewDiagram и перенесите на нее все классы-таблицы, находящиеся в пакете «Schema» S_0. Получившаяся диаграмма показана на рис. 3.29.
Рис. 3.29. Диаграмма «сущность-связь»
Генерация описания БД на SQL:
1. Щелкните правой кнопкой мыши на пакете «Schema» S_0.
2. В открывшемся меню выберите пункт Data Modeler > Forward Engineer.
3. В открывшемся окне мастера Forward Engineering Wizard нажмите Next.
4. Отметьте все флажки генерации DDL и нажмите Next.
5. Укажите имя и расположение текстового файла с результатами генерации и нажмите Next.
6. После завершения генерации откройте созданный текстовый файл и просмотрите результаты.
В Rational Rose диаграммы компонентов создаются в представлении компонентов системы. Отдельные компоненты можно создавать непосредственно на диаграмме, или перетаскивать их туда из браузера.
Выберем в качестве языка программирования С++ и для класса Student создадим соответствующие этому языку компоненты.
Создание диаграммы компонентов:
1. Дважды щелкните мышью на главной диаграмме компонентов в представлении компонентов.
2. На панели инструментов нажмите кнопку Package Specification.
3. Поместите спецификацию пакета на диаграмму.
4. Введите имя спецификации пакета Student и укажите в окне спецификации язык С++.
5. На панели инструментов нажмите кнопку Package Body.
6. Поместите тело пакета на диаграмму.
7. Введите имя тела пакета Student и укажите в окне спецификации язык С++.
8. На панели инструментов нажмите кнопку Dependency.
9. Проведите линию зависимости от тела пакета к спецификации пакета.
Рис. 3.30. Диаграмма компонентов
Соотнесение классов с компонентами:
1. В логическом представлении браузера найдите класс Student.
2. Перетащите этот класс на спецификацию пакета компонента Student в представлении компонентов браузера. В результате класс Student будет соотнесен со спецификацией пакета компонента Student.
3. Перетащите класс Student на тело пакета компонента Student в представлении компонентов браузера. В результате класс Student будет соотнесен с телом пакета компонента Student.
Процесс генерации кода состоит из четырех основных шагов:
1. Проверка корректности модели.
2. Установка свойств генерации кода.
3. Выбор класса, компонента или пакета.
4. Генерация кода.
Для проверки модели:
1. Выберите в меню Tools > Check Model.
2. Проанализируйте все найденные ошибки в окне журнала.
К наиболее распространенным ошибкам относятся такие, например, как сообщения на диаграмме последовательности или кооперативной диаграмме, не соотнесённые с операцией, либо объекты этих диаграмм, не соотнесённые с классом.
С помощью пункта меню Check Model можно выявить большую часть неточностей и ошибок в модели. Пункт меню Access Violations позволяет обнаруживать нарушения правил доступа, возникающие тогда, когда существует связь между двумя классами разных пакетов, но связи между самими пакетами нет.
Чтобы обнаружить нарушение правил доступа:
1. Выберите в меню Report > Show Access Violations.
2. Проанализируйте все нарушения правил доступа в окне.
Можно установить несколько параметров генерации кода для классов, атрибутов, компонентов и других элементов модели. Этими свойствами определяется способ генерации программ. Для каждого языка в Rose предусмотрен ряд определенных свойств генерации кода. Перед генерацией кода рекомендуется анализировать эти свойства и вносить необходимые изменения.
Для анализа свойств генерации кода выберите Tools > Options, а затем вкладку соответствующего языка. В окне списка можно выбрать класс, атрибут, операцию и другие элементы модели. Для каждого языка в этом списке указаны свои собственные элементы модели. При выборе разных значений на экране появляются разные наборы свойств.
Любые изменения, вносимые в набор свойств в окне Tools > Options, воздействуют на все элементы модели, для которых используется данный набор.
Иногда нужно изменить свойства генерации кода для одного класса, атрибута, одной операции и т.д. Для этого отройте окно спецификации элемента модели. Выберите вкладку языка (C++, Java, ) и измените свойства здесь. Все изменения, вносимые в окне спецификации элемента модели, оказывают влияние только на этот элемент.
При генерации кода за один раз можно создать класс, компонент или целый пакет. Код генерируется с помощью диаграммы или браузера. При генерации кода из пакета можно выбрать или пакет логического представления на диаграмме классов, или пакет представления компонентов на диаграмме компонентов. При выборе пакета логического представления генерируются все классы этого пакета. При выборе пакета представления компонентов генерируются все компоненты этого пакета.
После выбора класса или компонента на диаграмме выберите в меню соответствующий вариант генерации кода. Сообщения об ошибках, возникающих в процессе генерации кода, будут появляться в окне журнала.
Во время генерации кода Rose выбирает информацию из логического и компонентного представлений модели и генерирует большой объем «скелетного» (skeletal) кода:
Классы. Генерируются все классы модели.
Атрибуты. Код включает атрибуты каждого класса, в том числе видимость, тип данных и значение по умолчанию.
Сигнатуры операций. Код содержит определения операций со всеми параметрами, типами данных параметров и типом возвращаемого значения операции.
Связи. Некоторые из связей модели вызывают создание атрибутов при генерации кода.
Компоненты. Каждый компонент реализуется в виде соответствующего файла с исходным кодом.
1. Откройте диаграмму компонентов системы.
2. Выберите все объекты на диаграмме компонентов.
3. Выберите Tools > C++ > Code Generation в меню.
4. Выполните генерацию кода.
5. Просмотрите результаты генерации (меню Tools > C++ > Browse Header и Tools > C++ > Browse Body).
Размещение на других ресурсах, а также коммерческое использование материалов, опубликованных в данном разделе, возможно только с разрешения авторов. По всем вопросам пишите: