Материал: Лабораторные_Архитерктура ИС

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
background image

23

типа

сотрудников

 – 

с

почасовой

оплатой

и

на

окладе

Таким

образом

,

мы

получаем

два

других

класса

 HourlyEmp 

и

 SalariedEmp,

являющихся

потомками

класса

 Employee. 

Защищенный

атрибут

Address 

можно

просмотреть

или

изменить

из

классов

 Employee,

HourlyEmp 

и

 SalariedEmp, 

но

не

из

класса

 Company. 

Нотация

 UML

для

защищенного

атрибута

 – 

это

знак

 « # ».

Package or Implementation (

пакетный

).

Предполагает

что

данный

атрибут

является

общим

но

только

в

пределах

его

пакета

Допустим

,

что

атрибут

 Address 

имеет

пакетную

видимость

В

таком

случае

он

может

быть

изменен

из

класса

 Company, 

только

если

этот

класс

находится

в

том

же

пакете

Этот

тип

видимости

не

обозначается

никаким

специальным

значком

.

+Hire()
+Fire()
+Promote()
+Demote()
+Transfer()

-Employee ID : Integer = 0
#SSN : String
#Salary : float
+Address : String
+City : String
+State : String
+Zip Code : long
+Departament : String

Employee

Рис

1

.8. 

Видимость

атрибутов

В

общем

случае

атрибуты

рекомендуется

делать

закрытыми

или

защищенными

Это

позволяет

лучше

контролировать

сам

атрибут

и

код

.

С

помощью

закрытости

или

защищенности

удается

избежать

ситуации

,

когда

значение

атрибута

изменяется

всеми

классами

системы

Вместо

этого

логика

изменения

атрибута

будет

заключена

в

том

же

классе

,

что

и

сам

этот

атрибут

Задаваемые

параметры

видимости

повлияют

на

генерируемый

код

.

background image

24

1.5.5. 

Операции

Операции

реализуют

связанное

с

классом

поведение

Операция

включает

три

части

 – 

имя

параметры

и

тип

возвращаемого

значения

.

Параметры

 – 

это

аргументы

получаемые

операцией

  «

на

входе

». 

Тип

возвращаемого

значения

относится

к

результату

действия

операции

.

На

диаграмме

классов

можно

показывать

как

имена

операций

так

и

имена

операций

вместе

с

их

параметрами

и

типом

возвращаемого

значения

Чтобы

уменьшить

загруженность

диаграммы

полезно

бывает

на

некоторых

из

них

показывать

только

имена

операций

а

на

других

их

полную

сигнатуру

.

В

языке

 UML 

операции

имеют

следующую

нотацию

:

Имя

Операции

 (

аргумент1

 : 

тип

данных

аргумента1

аргумент

2 :

тип

данных

аргумента

2, ...) : 

тип

возвращаемого

значения

Следует

рассмотреть

четыре

различных

типа

операций

.

Операции

реализации

Операции

реализации

 (implementor operations) 

реализуют

некоторые

бизнес

-

функции

Такие

операции

можно

найти

исследуя

диаграммы

взаимодействия

Диаграммы

этого

типа

фокусируются

на

бизнес

-

функциях

и

каждое

сообщение

диаграммы

скорее

всего

можно

соотнести

с

операцией

реализации

.

Каждая

операция

реализации

должна

быть

легко

прослеживаема

до

соответствующего

требования

Это

достигается

на

различных

этапах

моделирования

Операция

выводится

из

сообщения

на

диаграмме

взаимодействия

сообщения

исходят

из

подробного

описания

потока

событий

который

создается

на

основе

варианта

использования

,

а

последний

 – 

на

основе

требований

Возможность

проследить

всю

эту

цепочку

позволяет

гарантировать

что

каждое

требование

будет

реализовано

в

коде

а

каждый

фрагмент

кода

реализует

какое

-

то

требование

.

Операции

управления

Операции

управления

 (manager operations) 

управляют

созданием

и

уничтожением

объектов

В

эту

категорию

попадают

конструкторы

и

деструкторы

классов

.

background image

25

Операции

доступа

Атрибуты

обычно

бывают

закрытыми

или

защищенными

Тем

не

менее

другие

классы

иногда

должны

просматривать

или

изменять

их

значения

Для

этого

существуют

операции

доступа

 (access operations).

Пусть

например

у

нас

имеется

атрибут

 Salary 

класса

 Employee. 

Мы

не

хотим

чтобы

все

остальные

классы

могли

изменять

этот

атрибут

.

Вместо

этого

к

классу

 Employee 

мы

добавляем

две

операции

доступа

  –

GetSalary 

и

 SetSalary. 

К

первой

из

них

являющейся

общей

могут

обращаться

и

другие

классы

Она

просто

получает

значение

атрибута

Salary 

и

возвращает

его

вызвавшему

ее

классу

Операция

 SetSalary 

также

является

общей

она

помогает

вызвавшему

ее

классу

установить

новое

значение

атрибута

 Salary. 

Эта

операция

может

содержать

любые

правила

и

условия

проверки

которые

необходимо

выполнить

чтобы

зарплата

могла

быть

изменена

.

Такой

подход

дает

возможность

безопасно

инкапсулировать

атрибуты

внутри

класса

защитив

их

от

других

классов

но

все

же

позволяет

осуществить

к

ним

контролируемый

доступ

Создание

операций

 Get 

и

 Set

(

получения

и

изменения

значения

для

каждого

атрибута

класса

является

стандартом

.

Вспомогательные

операции

Вспомогательными

 (helper operations) 

называются

такие

операции

класса

которые

необходимы

ему

для

выполнения

его

ответственностей

,

но

о

которых

другие

классы

не

должны

ничего

знать

Это

закрытые

и

защищенные

операции

класса

.

Чтобы

идентифицировать

операции

выполните

следующие

действия

:

1

.

Изучите

диаграммы

последовательности

и

кооперативные

диаграммы

Большая

часть

сообщений

на

этих

диаграммах

является

операциями

реализации

Рефлексивные

сообщения

будут

вспомогательными

операциями

.

2.

Рассмотрите

управляющие

операции

Может

потребоваться

добавить

конструкторы

и

деструкторы

.

3.

Рассмотрите

операции

доступа

Для

каждого

атрибута

класса

,

с

которым

должны

будут

работать

другие

классы

надо

создать

операции

 Get 

и

 Set.

background image

26

1.5.6. 

Связи

Связь

представляет

собой

семантическую

взаимосвязь

между

классами

Она

дает

классу

возможность

узнавать

об

атрибутах

операциях

и

связях

другого

класса

Иными

словами

чтобы

один

класс

мог

послать

сообщение

другому

на

диаграмме

последовательности

или

кооперативной

диаграмме

между

ними

должна

существовать

связь

.

Существуют

четыре

типа

связей

которые

могут

быть

установлены

между

классами

ассоциации

зависимости

агрегации

и

обобщения

.

Ассоциации

Ассоциация

 (association) – 

это

семантическая

связь

между

классами

.

Их

рисуют

на

диаграмме

классов

в

виде

обыкновенной

линии

.

NewClass

NewClass2

Рис

1

.9. 

Ассоциация

Ассоциации

могут

быть

двунаправленными

как

в

примере

или

однонаправленными

На

языке

 UML 

двунаправленные

ассоциации

рисуют

в

виде

простой

линии

без

стрелок

или

со

стрелками

с

обеих

ее

сторон

.

На

однонаправленной

ассоциации

изображают

только

одну

стрелку

,

показывающую

ее

направление

.

Направление

ассоциации

можно

определить

изучая

диаграммы

последовательности

и

кооперативные

диаграммы

Если

все

сообщения

на

них

отправляются

только

одним

классом

и

принимаются

только

другим

классом

но

не

наоборот

между

этими

классами

имеет

место

однонаправленная

связь

Если

хотя

бы

одно

сообщение

отправляется

в

обратную

сторону

ассоциация

должна

быть

двунаправленной

.

Ассоциации

могут

быть

рефлексивными

Рефлексивная

ассоциация

предполагает

что

один

экземпляр

класса

взаимодействует

с

другими

экземплярами

этого

же

класса

.

background image

27

Зависимости

Связи

зависимости

 (dependency) 

также

отражают

связь

между

классами

но

они

всегда

однонаправлены

и

показывают

что

один

класс

зависит

от

определений

сделанных

в

другом

Зависимости

изображают

в

виде

стрелки

проведенной

пунктирной

линией

.

NewClass

NewClass2

Рис

1

.

1

0. 

Зависимость

При

генерации

кода

для

этих

классов

к

ним

не

будут

добавляться

новые

атрибуты

Однако

будут

созданы

специфические

для

языка

операторы

необходимые

для

поддержки

связи

Например

на

языке

С

++

в

код

войдут

необходимые

операторы

 #include.

Агрегации

Агрегации

 (aggregations) 

представляют

собой

более

тесную

форму

ассоциации

Агрегация

 – 

это

связь

между

целым

и

его

частью

Например

,

у

вас

может

быть

класс

Автомобиль

а

также

классы

Двигатель

Покрышки

и

классы

для

других

частей

автомобиля

В

результате

объект

класса

Автомобиль

будет

состоять

из

объекта

класса

Двигатель

четырех

объектов

Покрышек

и

т

д

Агрегации

визуализируют

в

виде

линии

с

ромбиком

у

класса

являющегося

целым

:

Whole

Part

Рис

1

.

11

Агрегация

В

дополнение

к

простой

агрегации

 UML 

вводит

более

сильную

разновидность

агрегации

называемую

композицией

Согласно

Источник: https://files.student-it.ru/previewfile/15390