Постановка задачи (описание предметной области).
Постановка задачи (описание предметной области).
Магазин осуществляет продажу товаров клиенту путем оформления документов «Заказ». Директор магазина - Антон, принял решение автоматизировать документооборот продаж товара и пригласил для выполнения работ программиста Павла. Поговорив с Антоном, в соответствие с концепцией жизненного цикла (ЖЦ) программы Павел приступил к описанию бизнес процессов, сопровождающих продажу товара. Взяв за основу язык UML, он начал с построения контекстной диаграммы процессов- Use Case diagram. Диаграмма должна ответить на вопрос - «что должно делаться в системе и кто участник этих процессов».
Лабораторная работа 1. Создание диаграммы вариантов использования и действующих лиц.
Окончательный вид диаграммы показан на рис. 1.
Рис. 1 Диаграмма вариантов использования задачи о заказе товара.
Этапы выполнения упражнения.
1. Дважды щелкнув мышью на Главной диаграмме Вариантов Использования (Main) в браузере, откройте ее.
2.С помощью кнопки Use Case (Вариант использования) панели инструментов поместите на диаграмму новый вариант использования. Назовите его "Ввести новый заказ".
3. Повторив этапы 2 и 3, поместите на диаграмму остальные варианты использования:
Изменить существующий заказ
Напечатать инвентарную опись
Обновить инвентарную опись
Оформить заказ
Отклонить заказ
Выполнить поставку заказа
4. С помощью кнопки Actor (Действующее лицо) панели инструментов поместите на диаграмму новое действующее лицо.
5. Назовите его "Продавец".
6. Повторив шаги 4 и 5, поместите на диаграмму остальных действующих лиц:
Управляющий магазином
Клерк магазина
Бухгалтерская система
7. Создание абстрактного варианта использования (не требующего дальнейшей декомпозиции).
Щелкните правой кнопкой мыши на варианте использования "Отклонить заказ" на диаграмме.
В открывшемся меню выберите пункт Open Specification (Открыть спецификацию).
Установите флажок Abstract (Абстрактный), чтобы сделать этот вариант использования абстрактным.
Добавление ассоциаций
1. С помощью кнопки Unidirectional Association (Однонаправленная ассоциация) панели инструменте нарисуйте ассоциацию между действующим лицом Продавец и вариантом использования "Ввести заказ".
2. Повторив шаг 1, поместите на диаграмму остальные ассоциации, согласно рис. 1.
Добавление связи расширения
С помощью кнопки Generalization (Обобщение) панели инструментов нарисуйте связь между вариантом использования "Отклонить заказ" и вариантом использования "Оформить заказ". Стрелка должна быть направлена от первого варианта использования ко второму. Связь расширения означает, что вариант использования "Отклонить заказ" при необходимости дополняет функциональные возможности варианта использования "Оформить заказ".
Щелкните правой кнопкой мыши на новой связи между вариантами использования "Отклонить заказ" и "Оформить заказ".
В открывшемся меню выберите пункт Open Specification (Открыть спецификацию).
В раскрывающемся списке стереотипов введите слово extends (расширение), затем нажмите ОК.
Надпись «extends» появится на линии данной связи.
Добавление описаний к вариантам использования
Выделите в браузере вариант использования "Ввести новый заказ".
В окне документации введите следующее описание: " Этот вариант использования дает клиенту возможность ввести новый заказ в систему".
С помощью окна документации добавьте описания ко всем остальным вариантам использования.
Добавление описаний к действующему лицу
Выделите в браузере действующее лицо Продавец.
В окне документации введите следующее описание: "Продавец — это служащий, старающийся продать товар".
С помощью окна документации добавьте описания к остальным действующим лицам.
Лабораторная работа 2. Создание диаграммы Последовательности.
Согласовав основные бизнес процессы с Антоном, Павел приступил к построению модели бизнес- процессов, что бы ответить на вопрос- «как это должно делаться в системе». Для начала он выбрал наиболее важный Вариант использования-«Ввод нового заказа» и построил для него диаграммы взаимодействия.
Этапы выполнения упражнения
Настройка программной среды
1. В меню модели выберите пункт Tools >- Options (Инструменты >- Параметры).
2. Перейдите на вкладку Diagram (Диаграмма).
3. Установите флажки Sequence numbering, Collaboration numbering и Focus of control.
4. Нажмите OK, чтобы выйти из окна параметров.
Создание диаграммы
1. Найдитев браузере класс Заказ.
2. Щелкните на классе правой кнопкоймыши и в открывшемся меню укажите пункт New > Statechart Diagram (Создать диаграмму состояний).
Добавление начального и конечного состояний
1. Нажмите кнопку Start State (Начальное состояние) панели инструментов.
2. Поместите это состояние на диаграмму.
3. Нажмите кнопку End State (Конечное состояние) панели инструментов.
4. Поместите это состояние на диаграмму.
Добавление суперсостояния
1. Нажмите кнопку State (Состояние) панели инструментов.
2. Поместите это состояние на диаграмму.
Добавление переходов
1. Нажмите кнопку Transition(Переход) панели инструментов.
2. Щелкните мышью на начальном состоянии.
3. Проведите линию перехода к состояниюИнициализация.
4. Повторив шаги с первого по третий, создайте следующие переходы:
- От состояния Инициализация к состояниюВыполнение заказа приостановлено
- От состоянияВыполнение заказа приостановлено к состояниюВыполнен
- Отсуперсостояния к состояниюОтменен
- От состоянияОтменен кконечному состоянию
- От состоянияВыполнен кконечному состоянию
5. На панели инструментов нажмите кнопку Transition to Self (Переход к себе).
6. Щелкните мышью на состоянии Выполнение заказа приостановлено
Описание переходов
1. Дважды щелкнув мышью на переходеот состояния Инициализацияк состоянию Выполнение заказа приостановлено, откройте окно спецификации перехода.
2. В поле Event (Событие) введите фразуВыполнить заказ.
3. Щелкнув на кнопке ОК, закройте окно спецификации.
4. Повторив шаги с первого по третий, добавьте событиеОтменить заказ к переходу между суперсостоянием и состоянием Отменен.
5. Дважды щелкнув мышью на переходе от состояния Выполнение заказа приостановлено к состоянию Выполнен, откройте окно его спецификации.
6. В поле Event (Событие) введите фразуДобавить к заказу новую позицию.
7.Перейдите на вкладку Detail (Подробно).
8. В поле Guard Condition (Сторожевое Условие) введитеНе осталось незаполненных позиций.
9.Щелкнув на кнопке ОК, закройте окно спецификации.
10. Дважды щелкните мышью на рефлексивном переходе (Transition to Self) состояния Выполнение заказа приостановлено.
11. В поле Event (Событие) введите фразуДобавить к заказу новую позицию.
12. Перейдите на вкладку Detail (Подробно).
13. В поле Guard Condition (Сторожевое Условие) введитеОстаются незаполненные позиции.
14. Щелкнув на кнопке ОК, закройте окно спецификации.
Лабораторная работа 5. Построение диаграммы Активности для варианта использования «Выполнить поставку Заказа».
Побеседовав с Павлом, Антон понял, что необходимо согласовать логику реализации еще одного варианта использования «Выполнить поставку заказа». Стало ясно, что здесь возможны несколько альтернативных потоков управления. Для таких ситуаций более удобно использовать не диаграммы взаимодействия, приспособленные для единственного потока, а диаграмму активности.
Описание варианта использования.
При оформлении заказа проверяют каждую содержащуюся в нем позицию, чтобы убедиться в наличии соответствующих товаров на складе. После этого выписываются товары для реализации заказа. Во время выполнения этих процедур одновременно проверяется прохождение платежа. Если платеж прошел, и товары имеются на складе, то осуществляется их поставка. Если платеж прошел, но товары на складе отсутствуют, то заказ ставится в ожидание. Если платеж не прошел, то заказ аннулируется.
Создание диаграммы Классов
Объедините обнаруженные классы в пакеты. Создайте диаграмму Классов для отображения пакетов, диаграммы Классов, для представления классов в каждом пакете и диаграмму Классов для представления всех классов варианта использования "Ввести новый заказ".
Этапы выполнения упражнения
Создание пакетов
1. Щелкните правой кнопкой мыши на Логическом представлении браузера.
2. В открывшемся меню выберите пункт New > Package (Создать >Пакет).
3. Назовите новый пакет Сущности.
4. Повторив шаги 1—3, создайте пакеты Границы и Управление.
Создание Главной диаграммы Классов
1. Дважды щелкнув мышью на Главной диаграмме Классов, находящейся под Логическим представлением браузера, откройте ее.
2. Перетащите пакет Сущности из браузера на диаграмму.
3. Перетащите пакеты Границы и Управление из браузера на диаграмму.
Главная диаграмма Классов должна выглядеть, как показано на рис. 7
Рис. 7 Главная диаграмма классов в логическом представлении браузера.
Создание диаграммы Классов для сценария "Ввести новый заказ" с отображением всех классов
1. Щелкните правой кнопкой мыши на Логическом представлении браузера.
2. В открывшемся меню выберите пункт New > Class Diagram (Создать > Диаграмма Классов).
3. Назовите новую диаграмму Классов: Ввод нового заказа.
4. Дважды щелкнув мышью на этой диаграмме в браузере, откройте ее.
5. Перетащите из браузера все классы (Выбор_заказа, Заказ_деталей, упр_заказами, Заказ, Упр_транзакциями.
Рис. 8 Представление пакетов и классов
Добавление диаграмм Классов к каждому пакету
1. В браузере щелкните правой кнопкой мыши на пакете Границы.
2. В открывшемся меню выберите пункт New > Class Diagram (Создать > Диаграмма Классов).
3. Введите имя новой диаграммы — Main (Главная).
4. Дважды щелкнув мышью на этой диаграмме, откройте ее.
5. Перетащите на нее из браузера классы выбор_заказа и заказ_деталей.
6. Закройте диаграмму.
В браузере щелкните правой кнопкой мыши на пакете Сущности.
8. В открывшемся меню выберите пункт New > Class Diagram (Создать > Диаграмма Классов).
9. Введите имя новой диаграммы — Main (Главная).
10. Дважды щелкнув мышью на этой диаграмме, откройте ее.
11. Перетащите на нее из браузера класс Заказ.
12. Закройте диаграмму
13. В браузере щелкните правой кнопкой мыши на пакете Управление
14. В открывшемся меню выберите пункт New > Class Diagram (Создать > Диаграмма Классов).
15. Введите имя новой диаграммы — Main (Главная).
16. Дважды щелкнув мышью на этой диаграмме, откройте ее.
17. Перетащите на нее из браузера классы Упр_заказами и Упр_транзакциями
18. Закройте диаграмму
Постановка проблемы
Для определения атрибутов классов был проанализирован поток событий. В результате к классу Заказ диаграммы Классов были добавлены атрибуты Номер заказа и Имя клиента. Так как в одном заказе можно указать большое количество товаров и у каждого из них имеются свои собственные данные и поведение, было решено моделировать товары как самостоятельные классы, а не как атрибуты класса Заказ.
Этапы выполнения упражнения
Настройка
1.В меню модели выберите пункт Тооls > Options (Инструменты >Параметры).
2.Перейдите на вкладку Diagram.
3. Убедитесь, что флажок Show visibility (Показать видимость) установлен.
4. Убедитесь, что флажок Show stereotyps (Показать стереотипы) установлен.
5. Убедитесь, что флажок Show operation signatures (Показать сигнатуры операций) установлен.
6. Убедитесь, что флажки Show all attributes (Показать все атрибуты) и Show all operations (Показать вое операции) установлены.
7.Убедитесь, что флажки Suppress attributes (Подавить атрибуты) и Suppress operations (Подавить операции) сброшены.
8. Перейдите на вкладку Notation (Нотация).
9. Убедитесь, что флажок Visibility as icons (Отображать пиктограммы) сброшен.
Добавление нового класса
1. Найдите в браузере диаграмму Классов варианта использования "Ввести новый заказ".
2. Дважды щелкнув мышью на диаграмме,откройте ее.
3. Нажмите кнопку С1аss панели инструментов.
4. Щелкните мышью внутри диаграммы, чтобыпоместить туда новый класс.
5. Назовите егоПозиц_заказа.
6. Назначьте этому классу стереотипEntity.
7. В браузере перетащите класс в пакет Сущности.
Добавление атрибутов
1. Щелкните правой кнопкой мыши на классе Заказ.
2. В открывшемся меню выберите пункт New Attribute (Создать атрибут),
3. Введите новый атрибут:
OrderNumber : Integer
4. Нажмите клавишу Enter
5. Введите следующий атрибут:
CustomerName : String.
6. Повторив шаги 4 и 5, добавьте атрибуты:
OrderDate : Date
OrderFillDate : Date
Если тип атрибута не появляется в выпадающем списке, то введите его от руки и он далее будет появляться.
7. Щелкните правой кнопкой мыши наклассеПозиц_заказа.
8. В открывшемся меню выберитепункт New Attribute (Создать атрибут).
9. Введите новый атрибут:
ItemID : Integer.
10. НажмитеклавишуEnter.
11. Введите следующий атрибут:
ItemDescription : String.
Добавление операций к классуПозиц_заказа
1. Щелкнитеправой кнопкой мыши на классе Позиц_заказа.
2. В открывшемсяменю выберите пункт New Opration (Создать операцию).
3. Введите новуюоперацию:
Создать()
4. Нажмитеклавишу Enter.
5. Введите следующуюоперацию:
Взять_информацию()
6. Нажмитеклавишу Enter.
7. Введите операцию:
Дать_информацию()
Создать() : Воо1еаn
4. Отредактируйте операцию Взять_информацию:
Взять_информацию (OrderNum : Integer, Customer : String, OrderDate : Date, FillDate : Date) : Boolean
5. Отредактируйте операцию Дать_информацию;
Дать_информацию(): String
Подробное описание операций
1.Используя браузер или диаграмму Классов, введите следующие сигнатуры операций класса Заказ_деталей:
Открыть() : Boolean
Сохранить заказ() : Boolean
2.Используя браузер или диаграмму Классов, введите сигнатуру операций классаВыбор_заказа:
Создать() :Воо1еаn
3. Используя браузер или диаграмму Классов,введите сигнатуру операций класса Упр_заказами:
Сохранить заказ(OrderID : Integer) :Воо1еаn
4. Используя браузер или диаграмму Классов, введите сигнатуры операций класса Упр_транзакциями:
Сохранить заказ(OrderID : Integer) : Boolean
Сохранить информацию() : Integer
Лабораторная 8. Описание связей между классами
В этом упражнении определяются связи между классами, участвующими в варианте использования "Ввести новый заказ".
Постановка задачи
Чтобы найти связи, были просмотрены диаграммы Последовательности. Все взаимодействующие там классы нуждались в определении соответствующих связей на диаграммах Классов. После обнаружения связи были добавлены на диаграммы классов.
Добавление связей
Добавим связи к классам, принимающим участие в варианте использования "Ввести новый заказ".
Этапы выполнения упражнения
Настройка
1. Найдите в браузере диаграмму Классов "Ввод нового заказа",
2.Дважды щелкнув на диаграмме, откройте ее.
3. Проверьте, имеется ли в панели инструментов диаграммы кнопка Unidirectional Association (Однонаправленная ассоциация). Если ее нет, продолжите настройку, выполнив шаги 4 и 5. Если есть, приступайте к выполнению самого упражнения.
4.Щелкните правой кнопкой мыши на панели инструментов диаграммы и в открывшемся меню выберите пункт Customize(Настроить),
5. Добавьтена панель кнопку Creates A Unidirectional Association (Создать однонаправленную ассоциацию).
Добавление ассоциаций
1. Нажмите кнопку Unidirectional Association панели инструментов.
2. Проведите ассоциацию от класса выбор_заказа к классу заказ_деталей.
3. Повторите шаги 1 и 2, создав ассоциации:
• От класса заказ_деталей к классу упр_заказами
•От класса упр_заказами к классу Заказ
• Откласса упр_заказами к классу упр_транзакциями
• От класса упр_транзакциями к классу Заказ
•От класса упр_транзакциями к классу Позиц_заказа
•От класса Заказ к классу Позиц_заказа
4. Щелкните правой кнопкой мыши на однонаправленной ассоциации между классами выбор_заказа и заказ_деталей класса выбор_заказа.
5. В открывшемся меню выберите пункт Multiplicity > Zero or One (Множественность >- Нуль или один),
6. Щелкните правой кнопкой мыши на другом конце однонаправленной ассоциации.
7. В открывшемся меню выберите пункт Multiplicity > Zero or One (Множественность > Нуль или один),
8. Повторите шаги 4—7, добавив на диаграмму значения множественности для остальных ассоциаций, как показано на рис. 10
Рис. 10 Ассоциации сценария "Ввести новый заказ"
Добавление связей
1. Нажмитекнопку Connection (Связь) панели инструментов.
2. Щелкните мышью на процессоре "Сервер базы данных".
3. Проведите линию связи к процессору "Сервер приложения".
4. Повторив шаги 1 — 3, добавьте следующиесвязи;
- От процессора "Сервер приложения" к процессору "Клиентская рабочая станция №1"
-От процессора "Сервер приложения" к процессору "Клиентская рабочая станция №2"
-От процессора "Сервер приложения" к устройству "Принтер"
Добавление процессов
1. Щелкните правой кнопкой мыши на процессоре "Сервер приложения" в браузере.
2. В открывшемся меню выберите пункт New > Process (Создать > Процесс),
3.Введите имя процесса —OrderServerExe.
4. Повторив шаги 1 —- 3, добавьте процессы:
-ПроцессOrderclientExeна процессоре "Клиентская рабочая станция №1"
- ПроцессATMClientExe на процессоре "Клиентская рабочая станция №2"
Заключение.
В результате выполнения лабораторных работ обучающийся должен понять последовательность работ при проектировании информационной системы и освоить программную среду Rational Rose. Начинать надо с Use Case диаграммы, остальные диаграммы должны служить декомпозицией вариантов использования первой диаграммы. Логические и физические разделы модели Rose с помощью кодогенерации преобразуются в программный код Delphi. Изменения в модели Rose, путем нажатия нескольких кнопок , сразу соответствующим образом изменяют программный код. Тем самым проиллюстрировано основная идея CASE технологий- автоматизированная поддержка информационной системы на всех этапах ее жизненного цикла.
Рекомендуемая литература
1 У.Боггс, М. Богс UML и Rational Rose. Из-во «ЛОРИ», 2000 г., 580 с
2. М. Фаулер, К. Скотт UML в кратком изложении. Применение стандартного языка объектного моделирования: Пер. с англ. – М.: Мир, 1999.- 191 с.,с ил.
Приложение А. Таблица законов кодогенерации из Rose в Delphi
Элемент модели: Category
Наименование св-ва | Описание |
ClassDiagram | The name of diagram to add classes to when reverse engineering. Defaults to "Overview". If "", then no diagram is created. |
Элемент модели: Class
Наименование св-ва | Описание |
Kind | One of "", "class" (default), "interface", "dispinterface", "object". The class stereotype is also set to "Interface" if the kind is "interface" or "dispinterface". |
Элемент модели: ProcedureType
Наименование св-ва | Описание |
<<Stereotype>> | Delphi Procedure Types are modelled in Rose as classes with a stereotype "ProcType" |
ProcedureType_ofObject | True or False (default), true if procedure type references a method of an instance object. |
Элемент модели: Component
Наименование св-ва | Описание |
ComponentKind | One of "unit", "library", "program", or "package". Library or program components describe as projects, package components are ignored (their referenced units are in the RDL view anyway). |
Элемент модели: Attribute
Наименование св-ва | Описание |
Published | True or False (default). If the attribute is public and published is true, then the attribute gets generated to code in a published visibility section. |
Элемент модели: Role
Наименование св-ва | Описание |
Published | True or False (default). If the role is public and published is true, then the role gets generated to code in a published visibility section. |
Array_Range | If not "" (default), then the role is generated to code as an array with the specified range. If "", then the role's cardinality is used to determine it the role is an array. |
Элемент модели: Operation
Наименование св-ва | Описание |
Published | True or False (default). If the operation is public and published is true, then the operation gets generated to code in a published visibility section. |
Operation_Abstract | True or False (default). If true, then the operation is generated to code with an "abstract" directive. |
Operation_Binding | One of "" (default), "virtual", "dynamic", "override", "reintroduce". If not "", then the operation is generated to code with the specified binding. |
Operation_CallingConvention | One of "" (default), "register", "pascal", "cdecl", "stdcall", "safecall". If not "", then the operation is generated to code with the specified calling convention. |
Operation_Message | "" (default) or a message expression. If not "", then the operation is generated to code with a "message" directive having the specified value. |
Operation_Overload | True or False (default). If true, then the operation is generated to code with a "overload" directive. |
Operation_Kind | The kind of the operation. One of "procedure" (default), "function", "constructor", "destructor", "class procedure", "class function". |
Элемент модели: Property
Наименование св-ва | Описание |
<<stereotype>> | Delphi properties are modelled in rose as operations with a stereotype of "Property". |
Published | True or False (default). If the property is public and published is true, then the property gets generated to code in a published visibility section. |
Property_Index | "" (default) or index expression. If not "", then the property is generated to code with a "index" specifier having the specified value. |
Property_Read | "" (default) or read expression. If not "", then the property is generated to code with a "read" specifier having the specified value. |
Property_ReadOnly | True or False (default). If true,then the property is generated to code with a "readonly" specifier. . |
Property_Write | "" (default) or write expression. If not "", then the property is generated to code with a "write" specifier having the specified value. |
Property_WriteOnly | True or False (default). If true,then the property is generated to code with a "writeonly" specifier. |
Property_Stored | "" (default) or storage expression. If not "", then the property is generated to code with a "stored" specifier having the specified value. |
Property_DefaultSpecifier | One of "" (default), "nodefault", or "default". If not "", then the property is generated to code with a default value specifier. If "default", the value is obtained from the Property_DefaultValue model property. |
Property_DefaultValue | "" (default) or constant expression. The value used for the "default" specifier. |
Property_Implements | "" (default) or implements expression. If not "", then the property is generated to code with a "implements" specifier having the specified value. |
Property_IsDefaultProperty | True or False (default). If true, then the property is generated to code with a "default" property directive. Only relevant for array properties. |
Элемент модели: Parameter
Наименование св-ва | Описание |
Mode | One of "" (default), "const", "var", "out". If not "", then the parameter is generated to code with the specified mode. |
Приложение Б. Модели кодогенерации при настройке по типу Default
Type SampleClass1 = class (BaseClass, SampleInterface) {...} end; | |||
type SampleClass2 = class private AnAttribute : Integer; ARole : SupplierClass1; Public procedure AnOperation (arg : Integer); property AProperty : Integer index 2 read AnAttribute write AnOperation; end; | Property specifiers are stored in the code generation properties of the associated rose operation. | ||
type SampleClass3 = class private ArrayRole1 : array of SupplierClass2; ArrayRole2 : array [1..10] of SupplierClass5; ArrayRole3 : array [SampleRange] of SupplierClass3; ArrayRole4 : TItems; end; | ArrayRole3 range 'SampleRange' is stored in the Array_Range code gen property. To specify your own collection type, instead of using arrays, add a ':' and the collection type to the role name. | ||
type SampleRecord = record attr1 : Integer; attr2 : Real; end; | |||
type SampleEnum = ( value1, value2, value3 ); | |||
type ProcedureTypeSample = function( arg : Integer ) : Integer; | A procedure type maps to a Rose class, with a ProcType stereotype, and a single operation 'signature' which represents the procedure type signature | ||
type SampleRange = 1..10; | A subrange is represented as a Rose class with 'Range' stereotype, and 2 attributes named Low and High. The initial value of these attributes are the low and high values of the range | ||
type TOldType = class end; type SampleTypeId1 = TOldType; type SampleTypeId2 = Integer; | A type id is represented as a Rose class with a 'TypeId' stereotype. If the type being renamed is a standard delphi type (such as Integer) an attribute is used to model this type. Otherwise, an inheritance relationship is used. | ||
type SampleClassRef = class of TObject; type SamplePointer = ^TOtherType; type SampleFile = file of Integer; type SampleArray = array of array of Integer; | Delphi pointer types, class references, array types, set types, and file types are represented as Rose classes with stereotypes. If the delphi type references another user-defined type, this is shown with a dependency. If the delphi type references a basic delphi type (Integer) or is complex (i.e. nested arrays) the reference is modeled with an attribute. | ||
Unit SampleUnit; interface type SampleClass1 = class {…} end; implementation end; | A unit maps to a component and a category. Its member classes are the component’s assigned classes. | ||
Приложение В Результаты кодогенерации проекта в Delphi.
Модуль NewProect.dpr (Корневая папка)
program NewProject;
uses
OrderClientExe in 'OrderClientExe.pas',
OrderServerExe in 'OrderServerExe.pas',
OrderDetail_ in 'Baundary\OrderDetail_.pas',
OrderOptions_ in 'Baundary\OrderOptions_.pas',
TransactionMgr_ in 'Control\TransactionMgr_.pas',
OrderMgr_ in 'Control\OrderMgr_.pas',
Order_ in 'Entity\Order_.pas',
OrderItem_ in 'Entity\OrderItem_.pas';
begin
end.
Модуль OrderDetail_.pas (Папка Baundary)
unit OrderDetail;
interface
uses
OrderMgr;
var theOderMgr : OderMgr;
procedure Open;
procedure SubmitinfoXX;
procedure Save;
implementation
procedure Open;
begin
end;
procedure SubmitinfoXX;
begin
end;
Модуль OrderOptions_.pas (Папка Baundary)
unit OrderOptions_;
interface
uses
OrderDetail_;
type
OderOptions = class;
OderOptions = class
public
theOrderDetail : OrderDetail;
procedure Create;
end;
implementation
procedure OderOptions.Create;
begin
end;
end.
Модуль OrderMgr_.pas (Папка Control)
unit OrderMgr;
interface
uses
Order,
TransactionMgr;
type
OderMgr = class;
OderMgr = class
public
theOrderCollection : array of Order;
theTransactionMgr : TransactionMgr;
procedure SaveOrder;
end;
implementation
procedure OderMgr.SaveOrder;
begin
end;
end.
Модуль TransactionMgr _.pas (Папка Control)
unit TransactionMgr;
interface
uses
Order,
OrderItem;
var theOrderCollection : array of Order;
var theOrderItemCollection : array of OrderItem;
procedure SaveOrder;
procedure CommitXX;
implementation
procedure SaveOrder;
begin
end;
procedure CommitXX;
begin
end;
end.
Модуль Order_.pas (Папка Entity)
unit Order_;
interface
uses
OrderItem_;
type
Order = class;
Order = class
public
theOrderItemCollection : array of OrderItem;
procedure Create;
procedure SetInfo;
procedure GetInfo;
end;
implementation
procedure Order.Create;
begin
end;
procedure Order.SetInfo;
begin
end;
procedure Order.GetInfo;
begin
end;
end.
Модуль OrderItem_.pas (Папка Entity)
unit OrderItem_;
interface
type
OrderItem = class;
OrderItem = class
public
procedure GetInfo;
procedure Create;
procedure SetInfo;
end;
implementation
procedure OrderItem.GetInfo;
begin
end;
procedure OrderItem.Create;
begin
end;
procedure OrderItem.SetInfo;
begin
end;
end.
Модуль OrderClientExe.pas (Корневая папка)
unit OrderClientExe;
interface
implementation
end.
Модуль OrderServerExe.pas (Корневая папка)
unit OrderServerExe;
interface
implementation
end.
Постановка задачи (описание предметной области).
Магазин осуществляет продажу товаров клиенту путем оформления документов «Заказ». Директор магазина - Антон, принял решение автоматизировать документооборот продаж товара и пригласил для выполнения работ программиста Павла. Поговорив с Антоном, в соответствие с концепцией жизненного цикла (ЖЦ) программы Павел приступил к описанию бизнес процессов, сопровождающих продажу товара. Взяв за основу язык UML, он начал с построения контекстной диаграммы процессов- Use Case diagram. Диаграмма должна ответить на вопрос - «что должно делаться в системе и кто участник этих процессов».
Лабораторная работа 1. Создание диаграммы вариантов использования и действующих лиц.
Окончательный вид диаграммы показан на рис. 1.
Рис. 1 Диаграмма вариантов использования задачи о заказе товара.
Этапы выполнения упражнения.
1. Дважды щелкнув мышью на Главной диаграмме Вариантов Использования (Main) в браузере, откройте ее.
2.С помощью кнопки Use Case (Вариант использования) панели инструментов поместите на диаграмму новый вариант использования. Назовите его "Ввести новый заказ".
3. Повторив этапы 2 и 3, поместите на диаграмму остальные варианты использования:
Изменить существующий заказ
Напечатать инвентарную опись
Обновить инвентарную опись
Оформить заказ
Отклонить заказ
Выполнить поставку заказа
4. С помощью кнопки Actor (Действующее лицо) панели инструментов поместите на диаграмму новое действующее лицо.
5. Назовите его "Продавец".
6. Повторив шаги 4 и 5, поместите на диаграмму остальных действующих лиц:
Управляющий магазином
Клерк магазина
Бухгалтерская система
7. Создание абстрактного варианта использования (не требующего дальнейшей декомпозиции).
Щелкните правой кнопкой мыши на варианте использования "Отклонить заказ" на диаграмме.
В открывшемся меню выберите пункт Open Specification (Открыть спецификацию).
Установите флажок Abstract (Абстрактный), чтобы сделать этот вариант использования абстрактным.
Добавление ассоциаций
1. С помощью кнопки Unidirectional Association (Однонаправленная ассоциация) панели инструменте нарисуйте ассоциацию между действующим лицом Продавец и вариантом использования "Ввести заказ".
2. Повторив шаг 1, поместите на диаграмму остальные ассоциации, согласно рис. 1.
Добавление связи расширения
С помощью кнопки Generalization (Обобщение) панели инструментов нарисуйте связь между вариантом использования "Отклонить заказ" и вариантом использования "Оформить заказ". Стрелка должна быть направлена от первого варианта использования ко второму. Связь расширения означает, что вариант использования "Отклонить заказ" при необходимости дополняет функциональные возможности варианта использования "Оформить заказ".
Щелкните правой кнопкой мыши на новой связи между вариантами использования "Отклонить заказ" и "Оформить заказ".
В открывшемся меню выберите пункт Open Specification (Открыть спецификацию).
В раскрывающемся списке стереотипов введите слово extends (расширение), затем нажмите ОК.
Надпись «extends» появится на линии данной связи.
Добавление описаний к вариантам использования
Выделите в браузере вариант использования "Ввести новый заказ".
В окне документации введите следующее описание: " Этот вариант использования дает клиенту возможность ввести новый заказ в систему".
С помощью окна документации добавьте описания ко всем остальным вариантам использования.