Моделирование логической структуры системы.pps

advertisement
8. Моделирование логической
структуры системы
8.1. Диаграмма классов
• Диаграмма классов служит для
моделирования классов и отношений
между ними.
Элементы диаграммы классов
– Class – класс.
– Association – отношение ассоциации
между классами.
– Dependency – отношение зависимости
между классами.
Графическое обозначение
элементов
class Class diagram
Отношение
ассоциации
Класс с именем
Class1
Class1
Отношение
зависимости
Class3
Class2
Графическое обозначение
класса
• В общем случае графическое
обозначение класса содержит
три прямоугольных области,
в которых отображаются:
– имя класса (обязательно);
– атрибуты класса (может
отсутствовать);
– операции класса (может
отсутствовать).
Имя класса
Атрибуты
Методы
Синтаксис описания атрибута
•
visibility name : type-expression [ multiplicity ordering ] = initial-value { property-string }
•
где
–
visibility – область видимости атрибута; может принимать одно из следующих
значений:
•
•
•
•
–
–
–
–
name – имя атрибута;
type – тип атрибута;
initial-value – начальное значение атрибута;
multiplicity – количество значений, которые может содержать атрибут, задается в виде:
•
–
lower_bound..upper_bound
ordering –используется когда атрибут хранит более одного значения и обозначает
упорядоченность этих значений, может принимать одно из значений:
•
•
–
+ : public visibility – видим вне класса;
- : private visibility – не видим вне класса;
# : protected visibility – видим вне класса только друзьями класса;
~ : package visibility – видим внутри пакета;
unordered – неупорядочено (по умолчанию);
ordered – упорядочено;
property-string – свойства значений или другими словами ограничения на значения
атрибута.
Синтаксис описания операции
•
•
visibility name ( parameter-list ) : return-type-expression { property-string }
где
–
visibility – область видимости операции; может принимать одно из следующих
значений:
•
•
•
•
–
–
name – имя операции;
parameter-list – список формальных параметров операции, каждый параметр задается
в виде:
•
•
+ : public visibility – видима вне класса;
- : private visibility – не видима вне класса;
# : protected visibility – видима вне класса только друзьями класса;
~ : package visibility – видима внутри пакета;
kind name : type-expression = default-value
где
–
–
–
kind – обозначает вид параметра может быть опущен или принимать одно из следующих значений:
» in – входной, значение по умолчанию;
» out – выходной;
» inout – входной и выходной (модифицируемый);
return-type-expression – тип возвращаемого методом значения или списка значений,
если опущен, то операция не возвращает значения;
property-string – свойства операции или другими словами ограничения на операцию.
8.2. Стереотипы классов
• Стереотипы классов используются для
того, чтобы разбить классы на
категории.
• В UML предопределены некоторые
стереотипы классов. Эти стереотипы
классов имеют в UML специальные
графические обозначения.
Интерфейс
• Interface – интерфейс,
это абстрактный класс,
все методы которого
являются чисто
виртуальными
функциями.
• Графическое обозначение
интерфейса:
class Class...
Interface
Граничный класс
• Boundary class –
граничный класс,
это класс, который
находится на
границе системы с
её окружением.
• Графическое
обозначение
граничного класса:
class Class diagram
BoundaryClass
Использование граничного
класса
• Предполагается, что в системе должен быть,
по крайней мере, один граничный класс
между актером и вариантом использования, с
которым связан этот актер.
• Граничный класс позволяет актеру
взаимодействовать с системой.
• Как правило, такой граничный класс носит
имя актера, которому он позволяет
взаимодействовать с системой.
Класс сущность
• Entity class – класс
сущность, это
класс, содержащий
информацию,
которая требует
хранения в
постоянной памяти.
• Графическое
обозначение класса
сущности:
class Class diagram
EntityClass
Контроллер
• Control class –
контроллер,
управляющий класс,
это класс, который
управляет работой
других классов.
• Графическое
обозначение
контроллера
class Class diagram
ControlClass
Использование контроллера
• Обычно для каждого варианта
использования существует один
управляющий класс.
Другие стереотипы
• Стереотип <<type>> показывает, что
класс не имеет реализации.
• Стереотип <<implementationClass>>
показывает, что класс является
реализацией некоторого типа.
8.3. Стереотипы отношения
ассоциации
• Для отношения ассоциации в UML
предопределены следующие
стереотипы:
– обобщение (generalization);
– агрегация (aggregation);
– композиция (composition);
Отношение обобщения
• Отношение
обобщения
моделирует
отношение “is-a”
между классами.
• Графически
обозначение
обобщения:
class Generalization
Base
Deriv ed
Отношение агрегации
• Отношение агрегации определяет отношение
«целое-часть», т. е. показывает, что объекты
одного класса принадлежат (являются частями)
объектам другого класса.
• Такое отношение также называется «слабой
агрегацией».
• Графическое обозначение агрегации:
class Aggregation
Целое
Whole
Часть
Part
Отношение композиции
• Отношение композиции – это отношение
агрегации, при котором время существования
объектов одного класса зависит от времени
существования другого класса.
• Такое отношение также называется «сильной
агрегацией».
• Графическое обозначение композиции:
class Composition
Whole
Part
Отношение принадлежности
пространству имен
• Если один класс определен внутри
другого класса, т.е. является
вложенным, то для обозначения этого
используется отношение ассоциации,
которое называется
«принадлежность пространству
имен» и имеет стереотип «namespaceownedElement».
• Графическое обозначение отношения
принадлежности пространству имен:
class Namespace-ow ned Element
Объявленный клас с
DeclaringClass
Вложенный клас с
NestedClass
8.4. Стереотипы отношения
зависимости
– <<access>> – показывает, что один пакет имеет доступ к
открытым элементам другого пакета;
– <<bind>> – показывает связь параметров шаблона с
действительными типами для создания не
параметризованного класса;
– <<derive>> - показывает вычислительную зависимость
одного элемента от другого;
– <<import>> - показывает, что один пакет имеет доступ к
открытым элементам другого пакета и может помещать
имена этих элементов в свое пространство имен;
– <<refine>> - показывает, что один элемент является
улучшением другого элемента;
– <<trace>> - показывает, что один элемент отслеживает
другой элемент в различных смыслах этого слова;
– <<use>> - показывает, что один элемент использует другой
элемент в различных смыслах этого слова.
Использование стереотипа
<<use>>
• На уровне классов стереотип <<use>>
отношения зависимости обычно
показывает следующие виды
зависимости:
– операции одного класса используют другой
класс как тип своих параметров или тип
возвращаемого значения;
– при реализации операций одного класса
используются объекты другого класса.
Использование стереотипа
<<realize>>
• Для связи класса-типа, или
интерфейса, или пакета с его
реализацией используется отношение
зависимости, которое имеет стереотип
<<realize>>.
• Графическое
обозначение
зависимости со
стереотипом
<<realize>>:
class Realize Type
«type»
Class
«implementationClass»
Realization
• Графическое
обозначение
зависимости
типа
<<realize>>,
когда она
отмечает
реализацию
интерфейса:
class Realize Interface
Interface
Realization
8.5. Концептуальная модель
системы
• Концепция – это множество типов,
удовлетворяющих определенным
требованиям.
• Тип, принадлежащий концепции,
называется моделью концепции.
• Отсюда следует, что концепцию можно
определить через произвольный тип,
принадлежащий этой концепции.
Концептуальный класс
• Концептуальный класс (conceptual
class, analysis class) – это класс,
который является абстрактным
представлением (моделью) концепции.
• Концептуальные классы описывается
только свойствами объектов, входящих
в этот класс.
Концептуальная модель системы
• Концептуальная модель системы (domain
model, conceptual model, domain object model,
analysis object model) описывает концепции из
прикладной области системы и отношения
между ними.
• Все концепции, которые включаются в
концептуальную модель, должны быть
определенные в глоссарии системы.
• Концепции описываются концептуальными
классами, для описания отношений между
концепциями используются отношение
ассоциации без стереотипов.
Использование отношения
ассоциации
• Отношение ассоциации в
концептуальной модели может иметь
следующие спецификации:
– имя;
– направление;
– роли;
– количество экземпляров роли (multiplicity).
Определение концептуальных
классов
• Для определения концептуальных
классов используются два
дополняющих друг друга подхода:
– анализ текстового описания прикладной
области (документы, сценарии, глоссарий
и другие материалы) и определение
ключевых понятий для кандидатов в
концептуальные классы;
– использование списка концептуальных
классов, разбитых по категориям.
Категории концептуальных
классов
–
–
–
–
–
–
–
–
–
–
–
–
роли актеров, например, доктор;
события, например, получение сообщения;
транзакции;
физические объекты;
контейнеры;
элементы контейнеров;
другие системы;
организации, например, отдел;
спецификации;
местоположения;
процессы;
политики;
• и т. д.
Ассоциации между
концептуальными классами
• Для определения ассоциаций между
концептуальными классами используются те же
подходы, что и для определения концептуальных
классов.
• Ассоциации между концептуальными классами могут
быть разбиты по следующим категориям:
–
–
–
–
–
отношение включения друг в друга;
отношение взаимного расположения в пространстве;
отношение взаимного нахождения во времени;
отношение взаимодействия;
отношение использования;
• и т. д.
Пример концептуальной модели
class Концептуальная модель
GoodsList
Выбор товара
+
numberOfGoods: int
Подсчет стоимости заказа
Client
Order
Оформление заказа
+
price: double
Определение суммы оплаты
Payment
Оплата заказа
+
amount: double
GoodsItem
Содержит
+
+
description: string
price: double
8.6. Логическая модель системы
• Логическая модель системы описывает логическую
структуру системы при помощи классов и отношений
между ними.
• Для построения логической модели системы
используются диаграммы классов (class diagram).
• Логическая модель системы строится в два этапа:
– сначала строится концептуальная модель (domain model)
системы;
– затем на базе концептуальной модели строится полная
логическая модель, которая представляет собой детально
проработанную диаграмму классов.
• Разработка логической модели системы
после построения концептуальной
модели включает следующие этапы:
– определение функциональности
концептуальных классов и связей между
ними;
– детализация концептуальных классов;
– спецификация исполнения вариантов
использования посредством
функциональных классов;
– доработка (refine) концептуальных классов
в модели классов системы (design classes).
Пример логической модели
системы
class Заказ товаров
GoodsItem
GoodsList
Выбор товара
«create»
UnregisteredClient
+
+
+
+
+
-
numberOfGoods: int
+
+
+
+
+
+
GoodsList()
~GoodsList()
includeGoods(GoodsItem) : bool
excludeGoods(GoodsItem) : bool
getPrice() : double
getNextItem(GoodsItem*) : bool
UnregisteredClient()
~UnregisteredClient()
chooseGoods(int) : void
formOrder(GoodsList) : Order
payOrder(Order) : void
-
description: string
price: double
+
+
+
+
+
+
GoodsItem(string, double)
~GoodsItem()
setPrice(double) : void
getPrice() : double
setDescription(String) : void
getDescription() : String
Подс чет с тоимос ти заказа
«use»
Order
«interface»
Client
+
+
+
Оформление заказа
chooseGoods(GoodsStore) : GoodsList
formOrder(GoodsList) : Order
payOrder(Order) : Payment
«create»
-
clientProfile: String
ptrGoodsList: GoodsList*
price: double
+
+
+
+
Order(String, GoodsList, double)
~Order()
addPrice(double) : void
getOrder(String*, double*) : void
Определение с уммы оплаты
RegisteredClient
-
profile: String
+
+
+
+
+
+
RegisteredClient(string)
~RegisteredClient()
chooseGoods(int) : void
formOrder(GoodsList) : Order
payOrder(Order) : void
sendMessage(string) : void
«use»
Payment
Оплата товара
«create»
-
amount: double
paymentTransferData: String
+
+
+
Payment(double)
~Payment()
setTransfer(String) : void
GoodsStore
-
goodsItemTable: GoodsItem [1..n]
+
+
+
chooseGoods(int) : GoodsItem
includeGoods(GoodsItem) : bool
excludeGoods(int) : bool
Download