Пример выполнения лабораторной работы. Выделим архитектурные уровни:
Выделим архитектурные уровни:
· Application Layer – содержит элементы прикладного уровня (пользовательский интерфейс);
· Business Services Layer – содержит элементы, реализующие бизнес-логику приложений (наиболее устойчивая часть системы);
· Middleware Layer – обеспечивает сервисы, независимые от платформы.
Пример выделения архитектурных уровней и объединения элементов модели в пакеты для системы регистрации приведен на рисунке 2.21. Для того чтобы поместить класс в пакет, достаточно просто перетащить его в браузере на нужный пакет.

Рисунок 2.21 – Выделения архитектурных уровней
Данное представление отражает следующие решения, принятые архитектором:
· выделены три архитектурных уровня (созданы три пакета со стереотипом <<layer>>);
· в пакете Application создан пакет Registration, куда включены граничные и управляющие классы;
· граничный класс CourseCatalogSystem преобразован в подсистему (пакет CourseCatalogSystem со стереотипом <<subsystem>>);
· в пакет Business Services, помимо подсистемы CourseCatalogSystem, включены еще два пакета: пакет External System Interfaces включает интерфейс с подсистемой CourseCatalogSystem (класс ICourseCatalogSystem со стереотипом <<Interface>>), а пакет University Artifacts – все классы-сущности.
Структура и диаграммы пакета (подсистемы) CourseCatalogSystem показаны на рисунках 2.22-2.26.

Рисунок 2.22 – Структура пакета CourseCatalogSystem

Рисунок 2.23 – Зависимости между подсистемой и другими пакетами (диаграмма классов CourseCatalogSystem Dependencies)

Рисунок 2.24 – Классы, реализующие интерфейс подсистемы (диаграмма классов ICourseCatalogSystem)

Рисунок 2.25 – Диаграмма последовательности ICourseCatalogSystem::getCourse Offerings

Рисунок 2.26 – Диаграмма последовательности ICourseCatalogSystem: initialize
Чтобы поместить зависимость между пакетами на диаграмму классов:
1) нажмите кнопку Dependency панели инструментов;
2) проведите линию зависимости от зависимого пакета к тому, от которого он зависит.
Класс DBCourseOfferring отвечает за взаимодействие с БД каталога курсов.
Распределенная конфигурация системы моделируется с помощью диаграммы размещения (рисунок 2.27). Ее основные элементы:
· узел (node) – вычислительный ресурс (процессор, дисковая память, контроллеры различных устройств и т. д.). Для узла можно задать выполняющиеся на нем процессы;
· соединение (connection) – канал взаимодействия узлов (сеть). Пример: сетевая конфигурация системы регистрации (без процессов).
Распределение процессов по узлам сети производится с учетом таких факторов, как:
· используемые образцы распределения (трехзвенная клиент-серверная конфигурация, «толстый клиент», «тонкий клиент», равноправные узлы (peer-to-peer) и т.д.);
· время отклика;
· минимизация сетевого трафика;
· мощность узла;
· надежность оборудования и коммуникаций.
Пример распределения процессов по узлам приведен на рисунке 2.28.

Рисунок 2.27 – Сетевая конфигурация системы регистрации

Рисунок 2.28 – Сетевая конфигурация системы регистрации с распределением процессов по узлам
Чтобы открыть диаграмму размещения, надо дважды щелкнуть мышью на представлении Deployment View (представлении размещения) в браузере.
Чтобы поместить на диаграмму процессор:
1) на панели инструментов диаграммы нажмите кнопку Processor;
2) щелкните на диаграмме размещения в том месте, куда хотите его поместить;
3) введите имя процессора.
В спецификации процессора можно ввести информацию о его стереотипе, характеристиках и планировании. Стереотипы применяются для классификации процессоров (например, компьютеров под управлением UNIX). Характеристики процессора – это его физическое описание. Оно может, в частности, включать скорость процессора и объем памяти. Поле планирования (scheduling) процессора содержит описание того, как осуществляется планирование его процессов:
1) preemptive (с приоритетом). Высокоприоритетные процессы имеют преимущество перед низкоприоритетными;
2) non preemptive (без приоритета) – у процессов не имеется приоритета. Текущий процесс выполняется до его завершения, после чего начинается следующий;
3) cyclic (циклический) – управление передается между процессами по кругу. Каждому процессу дается определенное время на его выполнение, затем управление переходит к следующему процессу;
4) executive (исполнительный) – существует некоторый вычислительный алгоритм, который и управляет планированием процессов;
5) manual (вручную) – процессы планируются пользователем.
Чтобы назначить процессору стереотип:
1) откройте окно спецификации процессора.
2) перейдите на вкладку General.
3) введите стереотип в поле Stereotype.
Чтобы ввести характеристики и планирование процессора:
1) откройте окно спецификации процессора;
2) перейдите на вкладку Detail;
3) введите характеристики в поле характеристик;
4) укажите один из типов планирования.
Чтобы показать планирование на диаграмме:
1) щелкните правой кнопкой мыши на процессоре;
2) в открывшемся меню выберите пункт Show Scheduling.
Чтобы добавить связь на диаграмму:
1) на панели инструментов нажмите кнопку Connection;
2) щелкните на узле диаграммы;
3) проведите линию связи к другому узлу.
Чтобы назначить связи стереотип:
1) откройте окно спецификации связи;
2) перейдите на вкладку General;
3) введите стереотип в поле Stereotype (Стереотип).
Чтобы добавить процесс:
1) щелкните правой кнопкой мыши на процессоре в браузере;
2) в открывшемся меню выберите пункт меню New -> Process;
3) введите имя нового процесса.
Чтобы показать процессы на диаграмме:
1) щелкните правой кнопкой мыши на процессоре;
2) в открывшемся меню выберите пункт Show Processes.
Далее необходимо классы анализа преобразовать в проектные классы:
· проектирование граничных классов – зависит от возможностей среды разработки пользовательского интерфейса (GUI Builder);
· проектирование классов-сущностей – с учетом соображений производительности (выделение в отдельные классы атрибутов с различной частотой использования);
· проектирование управляющих классов – удаление классов, реализующих простую передачу информации от граничных классов к сущностям;
· идентификация устойчивых (persistent) классов, содержащих хранимую информацию.
Обязанности классов, определенные в процессе анализа, преобразуются в операции. Каждой операции присваивается имя, характеризующее ее результат. Определяется полная сигнатура операции: operationName(parameter:class,…):returnType. Создается краткое описание операции, включая смысл всех ее параметров. Определяется видимость операции: public, private, protected. Определяется область действия (scope) операции: экземпляр или классификатор.
Определяются (уточняются) атрибуты классов:
· кроме имени, задается тип и значение по умолчанию (необязательное): attributeName:Type = Default;
· учитываются соглашения по именованию атрибутов, принятые в проекте и языке реализации;
· задается видимость атрибутов: public, private, protected;
· при необходимости определяются производные (вычисляемые) атрибуты.
Определим атрибуты и операции для класса Student (рисунок 2.29).

Рисунок 2.29 – Класс Student с полностью определенными
операциями и атрибутами
Чтобы задать тип данных, значение по умолчанию и видимость атрибута:
1) щелкните правой кнопкой мыши на атрибуте в браузере;
2) в открывшемся меню выберите пункт Open Specification;
3) укажите тип данных в раскрывающемся списке типов или введите собственный тип данных;
4) в поле Initial Field (Первоначальное значение) введите значение атрибута по умолчанию;
5) в поле Export Control выберите видимость атрибута: Public, Protected, Private или Implementation. По умолчанию видимость всех атрибутов соответствует Private.
Чтобы изменить нотацию для обозначения видимости:
1) в меню модели выберите пункт меню Tools -> Options;
2) перейдите на вкладку Notation;
3) пометьте контрольный переключатель Visibility as Icons, чтобы использовать нотацию Rose, или снимите пометку, чтобы использовать нотацию UML.
Имейте в виду, что изменение значения параметра видимости приведет к смене нотации только для новых диаграмм и не затронет уже существующие диаграммы.
Чтобы задать тип возвращаемого значения, стереотип и видимость операции:
1) щелкните правой кнопкой мыши на операции в браузере;
2) откройте окно спецификации класса этой операции;
3) укажите тип возвращаемого значения в раскрывающемся списке или введите свой тип;
4) укажите стереотип в соответствующем раскрывающемся списке или введите новый;
5) в поле Export Control укажите значение видимости операции: Public, Protected, Private или Implementation. По умолчанию видимость всех операций установлена в public.
Чтобы добавить к операции аргумент:
1) откройте окно спецификации операции;
2) перейдите на вкладку Detail;
3) щелкните правой кнопкой мыши в области аргументов, в открывшемся меню выберите Insert;
4) введите имя аргумента;
5) щелкните на колонке Data type и введите туда тип данных аргумента;
6) если надо, щелкните на колонке default и введите значение аргумента по умолчанию.
Определение состояний для классов моделируется с помощью диаграмм состояний. Диаграммы состояний создаются для описания объектов с высоким уровнем динамического поведения.
В качестве примера рассмотрим поведение объекта - класса CourseOffering (рисунок 2.30). Он может находиться в открытом состоянии (возможно добавление нового студента) или в закрытом состоянии (максимальное количество студентов уже записалось на курс).

Рисунок 2.30 – Диаграмма состояний для класса CourseOffering
Таким образом, конкретное состояние зависит от количества студентов, связанных с объектом CourseOffering. Рассматривая каждый вариант использования, можно выделить еще два состояния: инициализация (до начала регистрации студентов на курс) и отмена (курс исключается из расписания).
Для создания диаграммы состояний для класса 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) щелкните мышью на диаграмме состояний в том месте, куда хотите поместить состояние.
Далее выполняется уточнение ассоциаций, т.к. некоторые ассоциации (семантические, структурные, устойчивые связи по данным) могут быть преобразованы в зависимости (неструктурные, временные связи, отражают видимость), а агрегации – в композиции.
Чтобы установить преобразование агрегации в композицию:
1) щелкните правой кнопкой мыши на том конце агрегации, который упирается в класс-часть (на рисунке 2.31 – Schedule);
2) в открывшемся меню выберите пункт Containment;
3) укажите метод включения By Value.
Имейте в виду, что значение By Value предполагает, что целое и часть создаются и разрушаются одновременно, что соответствует композиции. Агрегация (By Reference) предполагает, что целое и часть создаются и разрушаются в разное время.
Уточнение обобщений: в случае ситуации с миграцией подклассов (студент может переходить с очной формы обучения на вечернюю) иерархия наследования реализуется так, как показано на рисунке 2.32. Такое решение повышает устойчивость системы (не нужно модифицировать описание объекта).

Рисунок 2.31 – Пример преобразования ассоциаций и агрегаций

Рисунок 2.32 – Преобразование обобщения
Не нашли, что искали? Воспользуйтесь поиском:
|