Сведения о языке UML (1183998), страница 5
Текст из файла (страница 5)
1.10. ЗависимостьПри генерации кода для этих классов к ним не будут добавлятьсяновые атрибуты. Однако, будут созданы специфические для языкаоператоры, необходимые для поддержки связи. Например, на языке С++в код войдут необходимые операторы #include.АгрегацииАгрегации (aggregations) представляют собой более тесную формуассоциации. Агрегация – это связь между целым и его частью. Например,у вас может быть класс Автомобиль, а также классы Двигатель, Покрышкии классы для других частей автомобиля. В результате объект классаАвтомобиль будет состоять из объекта класса Двигатель, четырех объектовПокрышек и т. д. Агрегации визуализируют в виде линии с ромбикому класса, являющегося целым:WholePartРис. 1.11.
АгрегацияВ дополнение к простой агрегации UML вводит более сильнуюразновидностьагрегации,называемуюкомпозицией.Согласно27композиции, объект-часть может принадлежать только единственномуцелому, и, кроме того, как правило, жизненный цикл частей совпадаетс циклом целого: они живут и умирают вместе с ним. Любое удалениецелого распространяется на его части.Такое каскадное удаление нередко рассматривается как частьопределения агрегации, однако оно всегда подразумевается в том случае,когда множественность роли составляет 1..1; например, если необходимоудалить Клиента, то это удаление должно распространиться и на Заказы(и, в свою очередь, на Строки заказа).ОбобщенияС помощью обобщений (generalization) показывают связинаследования между двумя классами.
Большинство объектноориентированных языков непосредственно поддерживают концепциюнаследования. Она позволяет одному классу наследовать все атрибуты,операции и связи другого. На языке UML связи наследования называютобобщениями и изображают в виде стрелок от класса-потомка к классупредку:Student(from Design Model)- name- address- studentID+ // get tuition()+ // add schedule()+ // delete schedule()FulltimeStudentParttimeStudent(from Design Model)(from Design Model)- gradDate- maxNumCoursesРис. 1.12.
Обобщение28Помимо наследуемых, каждый подкласс имеет свои собственныеуникальные атрибуты, операции и связи.МножественностьМножественность (multiplicity) показывает, сколько экземпляроводного класса взаимодействуют с помощью этой связи с однимэкземпляром другого класса в данный момент времени.Например,приразработкесистемырегистрациикурсовв университете можно определить классы Course (курс) и Student(студент). Между ними установлена связь: у курсов могут быть студенты,а у студентов – курсы. Вопросы, на который должен ответить параметрмножественности: «Сколько курсов студент может посещать в данныймомент? Сколько студентов может за раз посещать один курс?»Так как множественность дает ответ на оба эти вопроса, еёиндикаторы устанавливаются на обоих концах линии связи. В примеререгистрации курсов мы решили, что один студент может посещатьот нуля до четырех курсов, а один курс могут слушать от 10 до 20студентов. На диаграмме классов это можно изобразить, как показанона рис.
1.13.CourseStudent0..410..20Рис. 1.13. МножественностьВ языке UML приняты следующие нотации для обозначениямножественности:МножественностьЗначение0..*Ноль или больше1..*Один или больше0..1Ноль или один1..1 (сокращенная запись: 1)Ровно один29Имена связейСвязи можно уточнить с помощью имен связей или ролевых имен.Имя связи – это обычно глагол или глагольная фраза, описывающая, зачемона нужна. Например, между классом Person (человек) и классом Company(компания) может существовать ассоциация. Можно задать в связи с этимвопрос, является ли объект класса Person клиентом компании,её сотрудником или владельцем? Чтобы определить это, ассоциациюможно назвать «employs» (нанимает):CompanyEmploysPersonРис.
1.14. Имя связиИмена у связей определять не обязательно. Обычно это делают, еслипричина создания связи не очевидна. Имя показывают около линиисоответствующей связи.РолиРолевые имена применяют в связях ассоциации или агрегации вместоимен для описания того, зачем эти связи нужны. Возвращаясь к примерус классами Person и Company, можно сказать, что класс Person играет рольсотрудника класса Company. Ролевые имена – это обычно именасуществительные или основанные на них фразы, их показываютна диаграмме рядом с классом, играющим соответствующую роль.
Какправило, пользуются или ролевым именем, или именем связи,но не обоими сразу. Как и имена связей, ролевые имена не обязательны,их дают, только если цель связи не очевидна. Пример ролей приводитсяниже:Company+Employer+EmployeeРис. 1.15. Ролевые имена30Person1.6. Диаграммы состоянийДиаграммы состояний определяют все возможные состояния,в которых может находиться конкретный объект, а также процесс сменысостояний объекта в результате наступления некоторых событий.Существует много форм диаграмм состояний, незначительноотличающихся друг от друга семантикой. Наиболее распространеннаяформа, используемая в объектно-ориентированных методах, впервыеприменялась в методе ОМТ и впоследствии была адаптирована ГрадиБучем.На рис.
1.16 приводится пример диаграммы состоянийдля банковского счета. Из данной диаграммы видно, в каких состоянияхможет существовать счет. Можно также видеть процесс перехода счетаиз одного состояния в другое. Например, если клиент требует закрытьоткрытый счет, он переходит в состояние «Закрыт». Требование клиентаназывается событием (event), именно такие события и вызывают переходиз одного состояния в другое.Снятие денег[отрицательный баланс]Превышение кредитаОткрытКлиент требуетзакрыть счет /Сохранить датузакрытия счетаentry: Временно заморозить счетdo: Послать уведомление клиентуВклад денег[положительный exit: Разморозить счетбаланс]Закрытentry: Выдатькредитную картуПроверка баланса[отрицательный балансв течение более 30 дней]Рис. 1.16.
Диаграмма состояний для класса Account31Если клиент снимает деньги с открытого счета, он может перейтив состояние «Превышение кредита». Это происходит, только если баланспо этому счету меньше ноля, что отражено условием [отрицательныйбаланс] на нашей диаграмме. Заключенное в квадратных скобках условие(guard condition) определяет, когда может или не может произойти переходиз одного состояния в другое.На диаграмме имеются два специальных состояния – начальное (start)и конечное (stop). Начальное состояние выделено черной точкой, оносоответствует состоянию объекта, когда он только что был создан.Конечное состояние обозначается черной точкой в белом кружке, оносоответствует состоянию объекта непосредственно перед егоуничтожением. На диаграмме состояний может быть одно и только одноначальное состояние.
В то же время, может быть столько конечныхсостояний, сколько вам нужно, или их может не быть вообще. Когдаобъект находится в каком-то конкретном состоянии, могут выполнятьсяразличные процессы. В нашем примере при превышении кредита клиентупосылается соответствующее сообщение. Процессы, происходящие, когдаобъект находится в определенном состоянии, называются действиями(actions).С состоянием можно связывать данные пяти типов: деятельность,входное действие, выходное действие, событие и история состояния.Рассмотрим каждый из них в контексте диаграммы состояний для классаAccount системы ATM.ДеятельностьДеятельностью (activity) называется поведение, реализуемоеобъектом, пока он находится в данном состоянии. Например, когда счетнаходится в состоянии «Закрыт», происходит возврат кредитной карточкипользователю.
Деятельность – это прерываемое поведение. Оно можетвыполняться до своего завершения, пока объект находится в данномсостоянии, или может быть прервано переходом объекта в другоесостояние. Деятельность изображают внутри самого состояния, ей должнопредшествовать слово do (делать) и двоеточие.32Входное действиеВходным действием (entry action) называется поведение, котороевыполняется, когда объект переходит в данное состояние. В примере счетав банке, когда он переходит в состояние «Превышен счет», выполняетсядействие «Временно заморозить счет», независимо от того, откуда объектперешел в это состояние. Таким образом, данное действие осуществляетсяне после того, как объект перешел в это состояние, а, скорее, как частьэтого перехода.
В отличие от деятельности, входное действиерассматривается как непрерываемое.Входное действие также показывают внутри состояния, емупредшествует слово entry (вход) и двоеточие.Выходное действиеВыходное действие (exit action) подобно входному. Однако, оноосуществляется как составная часть процесса выхода из данногосостояния. В нашем примере при выходе объекта Account из состояния«Превышен счет», независимо от того, куда он переходит, выполняетсядействие «Разморозить счет».
Оно является частью процесса такогоперехода. Как и входное, выходное действие является непрерываемым.Выходное действие изображают внутри состояния, ему предшествуетслово exit (выход) и двоеточие.Поведение объекта во время деятельности, при входных и выходныхдействиях может включать отправку события другому объекту. Например,объект account (счет) может посылать событие объекту card reader(устройство чтения карты). В этом случае описанию деятельности,входного действия или выходного действия предшествует знак « ^ ».Соответствующая строка на диаграмме выглядит какDo: ^Цель.Событие(Аргументы)Здесь Цель – это объект, получающий событие, Событие – этопосылаемое сообщение, а Аргументы являются параметрами посылаемогосообщения.Деятельность может также выполняться в результате полученияобъектом некоторого события.