Лекционные материалы (1158642), страница 5
Текст из файла (страница 5)
На языке 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: ^Цель.Событие(Аргументы)Здесь Цель – это объект, получающий событие, Событие – этопосылаемое сообщение, а Аргументы являются параметрами посылаемогосообщения.Деятельность может также выполняться в результате полученияобъектом некоторого события. Например, объект account может быть33в состоянии Открыто. При получении некоторого события выполняетсяопределенная деятельность.Переходом (Transition) называется перемещение из одного состоянияв другое. Совокупность переходов диаграммы показывает, как объектможет перемещаться между своими состояниями. На диаграмме всепереходы изображают в виде стрелки, начинающейся на первоначальномсостоянии и заканчивающейся последующим.Переходы могут быть рефлексивными.
Объект может перейти в то жесостояние, в котором он в настоящий момент находится. Рефлексивныепереходы изображают в виде стрелки, начинающейся и завершающейсяна одном и том же состоянии.У перехода существует несколько спецификаций. Они включаютсобытия, аргументы, ограждающие условия, действия и посылаемыесобытия. Рассмотрим каждое из них в контексте примера АТМ.СобытияСобытие (event) – это то, что вызывает переход из одного состоянияв другое. В нашем примере событие «Клиент требует закрыть» вызываетпереход счета из открытого в закрытое состояние.
Событие размещаютна диаграмме вдоль линии перехода.На диаграмме для отображения события можно использовать как имяоперации, так и обычную фразу. В нашем примере события описаныобычными фразами. Если вы хотите использовать операции, то событие«Клиент требует закрыть» можно было бы назвать RequestClosure().У событий могут быть аргументы. Так, событие «Сделать вклад»,вызывающее переход счета из состояния «Превышен счет» в состояние«Открыт», может иметь аргумент Amount (Количество), описывающийсумму депозита.Большинство переходов должны иметь события, так как именно они,прежде всего, заставляют переход осуществиться. Тем не менее, бываюти автоматические переходы, не имеющие событий. При этом объект самперемещается из одного состояния в другое со скоростью, позволяющейосуществиться входным действиям, деятельности и выходным действиям.34Ограждающие условияОграждающие условия (guard conditions) определяют, когда переходможет, а когда не может осуществиться.
В нашем примере событие«Сделать вклад» переведет счет из состояния «Превышение счета»в состояние «Открыт», но только если баланс будет больше нуля.В противном случае переход не осуществится.Ограждающие условия изображают на диаграмме вдоль линииперехода после имени события, заключая их в квадратные скобки.Ограждающие условия задавать необязательно. Однако еслисуществует несколько автоматических переходов из состояния,необходимо определить для них взаимно исключающие ограждающиеусловия. Это поможет читателю диаграммы понять, какой путь переходабудет автоматически выбран.ДействиеДействием (action), как уже говорилось, является непрерываемоеповедение, осуществляющееся как часть перехода.