Статическое моделирование

advertisement
Статическое моделирование
На этапе статического моделирования рассматриваются структурные аспекты задачи
путем моделирования классов реального мира. Статическая модель описывает статическую
структуру системы, изменение которой менее вероятно, чем изменение функций системы.
В статической модели определяются классы объектов системы, их атрибуты операции и
отношения между классами.
Статические модели изображаются на диаграммах. Многие из приведенных в этой главе
примеров иллюстрируют сущностные классы, которые насыщены данными и имеют стереотип
«сущность».
Ассоциации между классами
Ассоциация определяет статическое структурное отношение между двумя или более
классами. Например, Служащий Работает-в Отделе. Здесь Служащий и Отдел - классы, а
Работает-в - ассоциация.
Связь (link) - это соединение между экземплярами объектов, она является
экземпляром ассоциации между классами. Например, Джейн Работает-в Производственном
Отделе - это связь между Джейн (экземпляром класса Служащий) и Производственным
Отделом (экземпляром класса Отдел). Связь между двумя объектами может существовать
тогда и только тогда, когда между их классами существует ассоциация.
На диаграммах классов имена ассоциаций обычно читаются слева направо и сверху
вниз. Ассоциации по природе своей двунаправленны. Имя ассоциации читается в прямом
направлении: Служащий Работает-в Отделе. В обратном направлении эта ассоциация
выглядит так: Отдел Имеет Служащих. Ассоциации часто являются бинарными, то есть
представляют отношение между двумя классами.
Однако встречаются также унарные (класса с самим собой) и тернарные
(трехсторонние) ассоциации, а также ассоциации более высокого порядка.
Изображение ассоциаций на диаграммах классов
На диаграммах классов ассоциация изображается в виде линии, соединяющей
прямоугольника классов. Рядом с линией записывается имя ассоциации. Так, рис. 1 приведен
пример ассоциации Компания Имеет Президента. На диаграммах с большим числом классов
они обычно расположены друг относительно друга по-разному.
1
Кратность ассоциаций
Кратность ассоциации определяет, сколько экземпляров одного класса может быть
соотнесено с одним экземпляром другого класса. Возможны следующие кратности:
 ассоциация один-к-одному. В случае такой ассоциации объект одного класса связан
ровно с одним объектом другого класса. Например, в ассоциации Компания Имеет
Президента у конкретной компании есть только один президент, и наоборот, президент
возглавляет только одну компанию. Так, у компании Microsoft есть президент Стив Балмер.
Нотация, применяемая в статической модели для ассоциаций один-к-одному, показана на рис.
1;
1
 ассоциация один-ко-многим. В этом случае имеется ассоциация один-к-одному в
одном направлении и ассоциация один-ко-многим - в другом. Например, в ассоциации
Банк Управляет Счетом один банк управляет МНОГими счетами, но каждый счет управляется
только одним банком. Нотация для изображения ассоциаций один-ко-многим показана на рис.
2;
 ассоциации с заданной кратностью. В таком случае для ассоциации задается
конкретное числовое значение кратности. Например, в случае ассоциации Автомобиль Имеет
Дверь у одного автомобиля может быть две или четыре двери (обозначается в виде 2,4), но не
одна, не три и не пять дверей. В противоположном направлении ассоциация имеет тип один-кодному, то есть дверь принадлежит ровно одной машине. Отметим, что решение о том сколько
дверей должно быть у машины, принимает компания-изготовитель другая компания может
сделать иначе. Нотация для ассоциаций с заданной кратностью показана на рис. 3;
 необязательная ассоциация. В этом случае объект одного класса может не быть
связанным с объектом другого класса. Например, в ассоциации Клиент Владеет Дебетовой
Картой клиент сам решает, приобретать ему дебетовую карту или нет. Необязательная (с
кратностью один или нуль) ассоциация показана на рис. 4. Возможна также ассоциация типа
«нуль, один или много». Например, в случае ассоциации Клиент Владеет Кредитной Картой
у клиента может вовсе не быть кредитной карты, он может обладать одной или несколькими
такими картами (рис. 5);
2
3

ассоциация многие-ко-многим. В этом случае ассоциация в каждом
направлении имеет тип один-ко-многим. Например, ассоциация Курс Посещается
студентами имеет тип один-ко-многим, поскольку на курс может записаться много
студентов. Но и тип ассоциации в обратном направлении Студент Посещает Курс также
один-ко-многим, так как студент может записаться на несколько курсов. Это показано на
рис. 6.
4
5
6
2
Другие ассоциации
Тернарной называется трехсторонняя ассоциация между классами, например
между классами Покупатель, Продавец и Агент. Смысл ассоциации состоит в том, что
Покупатель договаривается о цене с Продавцом при посредничестве Агента (рис. 7).
Тернарная ассоциация изображается в виде ромба, соединяющего все три класса.
Ассоциации высоких порядков между четырьмя и более классами встречаются редко.
Унарная ассоциация, которую еще называют самоассоциацией, - это ассоциация
между двумя объектами одного и того же класса. Примеры: Человек есть-ребенок
Человека, Человек состоит-в-браке с Человеком и Служащий – есть начальник
Служащего.
Атрибуты связи
В сложных ассоциациях между двумя и более классами связь может иметь
атрибуты. Чаще всего так бывает с ассоциациями многие-ко-многим, когда атрибут нельзя
отнести ни к какому классу, а только к самой ассоциации. Рассмотрим, в частности,
ассоциацию многие-ко-многим между классами Проект и Работник:
7
Проект Включает Работников
Работник Участвует-в Проекте
В проекте может быть занято много работников, и каждый работник способен
участвовать в нескольких проектах.
Атрибут Отработано Часов не относится ни к Проекту, ни к Работнику. Это
атрибут ассоциации между классами Проект и Работник, так как он обозначает
количество часов, отработанных конкретным человеком по конкретному проекту (рис. 8).
8
Классы-ассоциации
Альтернативой использованию атрибутов связи служит класс-ассоциация. Так
называется класс, который моделирует ассоциацию между двумя или более классами. Как
правило, эта концепция оказывается полезной для ассоциаций многие-ко-многим.
Атрибутами класса-ассоциации являются атрибуты ассоциации.
3
Класс-ассоциация предпочтительнее атрибутов связи, так как он поднимает
сложные ассоциации с собственными атрибутами на уровень класса. Кроме того, в
большинстве СУБД класс-ассоциация легко моделируется как отношение в базе данных.
В предыдущем примере вместо атрибутов связи допустимо было использовать
класс-ассоциацию, атрибутами которого стали бы атрибуты связи. На рис. 9 показан
класс-ассоциация Часы для ассоциации многие-ко-многим между классами Проект и
Работник.
9
Иерархии композиции и агрегирования
И иерархия композиции, и иерархия агрегирования предназначены для описания
класса, составленного из других классов. Композиция и агрегирование - это частные
случаи ситуации, в которой классы сильно связаны отношением целое/часть. В обоих
случаях отношение между частями и целым выражается фразой «является частью».
Композиция - более сильная форма агрегирования, а агрегирование сильнее, чем
ассоциация. Иными словами, композиция описывает более тесную связь между частями и
целым, чем агрегирование. Она является также отношением между экземплярами. Это
означает, что объекты-части создаются, живут и уничтожаются вместе с объектом-целым.
Объект-часть может принадлежать только одному целому.
Составной класс часто подразумевает физическое отношение между целым и
частями. Так, в примерах статических моделей и лифт, и банкомат являются составными
классами. Дверь, мотор, кнопки и лампочки лифта можно промоделировать как части
составного объекта «лифт». Следовательно, составной класс Лифт Одержит четыре части:
Кнопка Лифта, Лампочка Лифта, Мотор и Дверь. Каждый объект класса Лифт состоит из
одного объекта Мотор, одного объекта Дверь, n объектов Кнопка Лифта и n объектов
Лампочка Лифта. Поэтому на рис. 10 составной класс Лифт связан ассоциацией один-кодному с классами Мотор и Дверь и ассоциациями один-ко-многим с классами Кнопка
Лифта и Лампочка Лифта.
10
Иерархия агрегирования - это более слабая форма отношения целое/часть При
агрегировании экземпляры-части разрешается добавлять и исключать из экземплярацелого (агрегата). Поэтому агрегрирование чаще используется для моделирования
концептуальных, а не физических классов. Кроме того, часть может принадлежать сразу
нескольким агрегатам. В качестве примера иерархии агрегирования рассмотрим Колледж
4
(рис. 11), частями которого являются Администрация, несколько Факультетов и несколько
Исследовательских Центров. Иногда создаются новые факультеты или ликвидируются
старые, а иногда несколько факультетов объединяются. Исследовательские центры также
допустимо создавать, удалять и объединять.
И при композиции, и при агрегировании атрибуты распространяются от целого к
части. Это означает, что конкретный лифт определяет также и конкретные дверь и мотор,
являющиеся его частями. Однако для точной идентификации кнопки или лампочки нужен
также дополнительный атрибут - Этаж.
11
Иерархия обобщения/специализации
Некоторые классы похожи, но не идентичны. У них есть общие и специфические
атрибуты. В иерархии обобщения/специализации общие атрибуты выносятся в
обобщенный класс, который называется суперклассом (а также родительским классом или
классом-предком). Специфические атрибуты остаются свойствами специализированного
класса, который носит имя подкласса (порожденный класс, класс-потомок). Между
подклассом и суперклассом существует отношение ЯВЛЯЕТСЯ.
Каждый подкласс наследует свойства суперкласса, но затем расширяет их удобным
для себя способом. Свойствами класса считаются его атрибуты и операции. При
наследовании подклассу разрешается модифицировать суперкласс. Подкласс наследует
атрибуты и операции от суперкласса, но может добавить новые атрибуты и операции, а
также переопределить существующие операции. Любой подкласс способен, в свою
очередь, стать суперклассом, порождающим еще более специализированные подклассы.
В качестве примера рассмотрим банковские счета на рис. 12. У чекового и
сберегательного счета есть ряд общих атрибутов и некоторые специфические. Атрибуты,
общие для счета любого вида, – омер Счета и баланс - становятся атрибутами суперкласса
Счет. Атрибуты, существующие только у сберегательного счета, например процентные
Начисления (по чековым счетам проценты не начисляются), переносятся в подкласс
Сберегательный Счет. Атрибуты, существующие только у чекового счета, в частности
сумма Последнего Вклада, становятся атрибутами класса Чековый Счет.
Сберегательный Счет ЯВЛЯЕТСЯ Счетом
Чековый Счет ЯВЛЯЕТСЯ Счетом
Дискриминант - это атрибут, показывающий, какое свойство объекта
абстрагировано отношением обобщения. Например, для иерархии счетов дискриминантом
будет тип Счета, именно он отличает Сберегательный Счет от Чекового Счета (рис. 13).
5
12
13
Ограничения
Ограничение (constraint) задает условие, которое должно быть выполнено
[Rumbaugh, Booch, and Jacobson 1999]. Ограничение выражается в произвольной
словесной форме. UML также включает язык описания ограничений Object Constraint
Language (OCL) [Warner and Kleppe 1999], использование которого, впрочем,
факультативно.
Один из видов ограничений - ограничения на атрибуты. Так, в примере с банком
можно потребовать, чтобы баланс счета никогда не был отрицательным. Это выражается в
виде ограничения на атрибут баланс класса Счет: [баланс > 0. На диаграмме классов
ограничение на атрибут показывается рядом с соответствующим классом (рис. 14).
Другой вид ограничений - ограничение на связь. Обычно объекты со стороны
«многие» не упорядочены. Но в некоторых случаях предметная область предполагает
наличие порядка между объектами, и данное требование желательно отразить в модели.
Рассмотрим, к примеру, такую ассоциацию один-ко-многим:
Счет Модифицирован Транзакцией Банкомата
В подобной ассоциации транзакции упорядочены по времени, и, значит,
ограничение легко выразить в виде {упорядочены по времени}. Такое ограничение можно
изобразить на диаграмме классов, как показано на рис. 15.
14
15
6
Download