Джим Арлоу, Айла Нейштадт - UML 2 и Унифицированный процесс. Практический объектно-ориентированный анализ и проектирование (1037782), страница 32
Текст из файла (страница 32)
Расширенный синтаксис атрибутаПодобно любому другому элементу моделирования UML, семантикуатрибутов можно расширять, указывая перед ними стереотипы илизадавая после них помеченные значения, например«стереотип» атрибут { метка1 = значение1, метка2 = значение2, … }В помеченных значениях можно хранить любую информацию. Например, иногда они используются для хранения информации о версии,как показано здесь:address { addedBy="Jim Arlow", dateAdded="20MAR2004" }В этом примере записано, что Джим Арлоу (Jim Arlow) добавил атрибут address (адрес) в некоторый класс 20 марта 2004 года.7.5.3. Ячейка операцийОперации – это функции, закрепленные за определенным классом.По сути, они обладают всеми характеристиками функций:• имя• список параметров• возвращаемый типСигнатура операции включает имя, тип всех ее параметров и возвращаемый тип.Сочетание имени операции, типов всех ее параметров и возвращаемоготипа образует сигнатуру операции (рис.
7.10). Сигнатура каждой опесигнатура операциивидимость имя( направление имяПараметра : типПараметра = значениеПоУмолчанию, ... ) : возвращаемыйТипсписок параметровРис. 7.10. Сигнатура операции166Глава 7. Объекты и классырации класса должна быть уникальной, поскольку именно сигнатураидентифицирует операцию. Когда объект получает сообщение, его сигнатура сравнивается с сигнатурами операций, определенных в классеобъекта.
Если обнаруживается соответствие, инициируется запрашиваемая операция объекта.Разные языки программирования немного поразному определяют,что должно составлять сигнатуру операции. Например, в С++ и Javaвозвращаемый тип игнорируется. Это означает, что две операции класса, отличающиеся только возвращаемыми типами, будут рассматриваться как одна и та же операция и генерировать ошибку компилятора/интерпретатора.
В Smalltalk, языке со слабым контролем типов,все параметры и возвращаемый тип имеют тип Object, и поэтому сигнатуру составляет только имя операции.Имена операций записываются в стиле lowerCamelCase. В качествеимен используются глаголы или глагольные группы. Необходимо избегать применения в именах специальных символом и сокращений.Каждый параметр операции имеет форму, показанную на рис. 7.11.В операции может быть от нуля до нескольких параметров.направление имяПараметра : типПараметра = значениеПоУмолчаниюРис. 7.11. Синтаксис параметров операцииИмена параметров записываются в стиле lowerCamelCase и обычно являются именем существительным или именной группой, посколькуобозначают чтото, что передается в операцию. Каждый параметр имеет определенный тип, который является классом или примитивнымтипом.Направление и применяемое по умолчанию значение параметра рассматриваются в следующих двух разделах.7.5.3.1.
Направление параметраДля параметров операции может быть задано направление:операция( in p1:Integer, inout p2:Integer, out p3:Integer, return p4:Integer, returnp5:Integer )Если направление не указано, по умолчанию оно принимает значениеin (в). Семантика направления параметра приведена в табл. 7.6.Семантика значений in, inout (виз) и out (из) довольно проста, а вотreturn (возвратить) возможно потребует большего внимания.Обычно ожидается, что функция возвращает один объект, как показано ниже:maximumValue = max( a, b )minimumValue = min( a, b )1677.5.
Нотация классов в UMLгде a, b, maximumValue (максимальное значение) и minimumValue (минимальное значение) – целые числа. Обычный синтаксис операции поддерживает именно эту ситуацию: каждая операция обычно имееттолько одно возвращаемое значение. Как мы видели, в UML такие«обычные» операции можно смоделировать следующим образом:maximumValue( a:Integer, b:Integer ) : IntegerТаблица 7.6ПараметрСемантикаin p1:IntegerПрименяется по умолчанию.Операция использует p1 как входной параметр.Значение p1 какимто образом используется операцией.Операция не изменяет p1.inout p2:IntegerОперация принимает p2 как параметр ввода/вывода.Значение p2 какимто образом используется операцией.и принимает выходное значение операции.Операция может изменять p2.out p3:IntegerОперация использует p3 как выходной параметр.Параметр служит хранилищем для выходного значенияоперации.Операция может изменять p3.return p4:IntegerОперация использует p4 как возвращаемый параметр.Операция возвращает p4 как одно из своих возвращаемыхзначений.return p5:IntegerОперация использует p5 как возвращаемый параметр.Операция возвращает p5 как одно из своих возвращаемыхзначений.Однако в некоторых языках операции могут возвращать более одногозначения.
Например, в языке программирования Python можно былобы написать:maximumValue, minimumValue = maxMin( a, b )где maxMin( a, b ) возвращает два значения – максимальное и минимальное. В UML это можно смоделировать следующим образом:maxMin( in a: Integer, in b:Integer, return maxValue:Integer, return minValue:Integer )Как видим, направление return параметра позволяет моделировать ситуации, когда операция возвращает более одного значения.Возвращаемые параметры могут быть перечислены и после имени операции:maxMin( in a: Integer, in b:Integer ) : Integer, Integer168Глава 7.
Объекты и классыВ данном случае применение ключевого слова return было бы плохимстилем, поскольку возвращаемые параметры и так явно выделены.На самом деле направления параметров являются вопросом проектирования, поэтому обычно во время анализа о них не заботятся (еслитолько не используется OCL).Направления параметров имеют большое значение при проектировании, особенно если речь идет о генерации кода.
Генераторы кода будутпроецировать направления параметров UML в конкретную семантикупередачи параметров в целевом языке программирования.7.5.3.2. Значения параметров по умолчаниюДля параметра операции может быть задано значение, применяемое поумолчанию. Если при вызове операции параметру не присваивается значение, используется значение по умолчанию.На рис. 7.12 показано, как задаются применяемые по умолчанию значения. Здесь в классе Canvas имеется две операции: drawCircle(...) (нарисовать круг) и drawSquare(...) (нарисовать квадрат), отрисовывающие наэкране круг и квадрат соответственно.
Для параметра origin (начало отсчета) задается значение по умолчанию Point(0,0). Если при вызове этихопераций данный параметр будет опущен, фигуры будут отрисованына экране относительно точки {0,0}.На самом деле применяемые по умолчанию значения являются вопросом проектирования; во время анализа они используются редко.7.5.3.3. Расширенный синтаксис операцииСемантику операций можно расширить, предваряя их стереотипамии дополняя помеченными значениями.«стереотип» операция(…) { метка1 = значение1, метка2 = значение2, … }Можно также ввести помеченные значения в параметры операций, номы ни разу не сталкивались с ситуацией, когда это было бы полезно.7.5.3.4. Операции запросаВ каждой операции есть свойство isQuery.
Если в инструменте моделирования этому свойству присвоено значение true, операция являетсяоперацией запроса. Это означает, что она не имеет побочных эффектови не меняет состояние объекта, в котором вызывается. Операция, возCanvasdrawCircle( origin: Point = Point( 0, 0 ), radius : Integer )drawSquare( origin: Point = Point( 0, 0 ), size : Dimension )Рис. 7.12. Задание параметров по умолчанию1697.5. Нотация классов в UMLBankAccountbalance : doubleоперация запроса(isQuery = true)getBalance() : doubleвозвращает значениеатрибута balanceимя атрибута начинаетсяс большой буквыРис. 7.13. Именование операций запросавращающая значение атрибута, называется операцией запроса.
Ее свойству isQuery должно быть присвоено значение true.По умолчанию isQuery имеет значение false. Обычно isQuery задается припроектировании. Однако если в UMLмоделях применяется OCL (см.главу 25), важно обозначить операции запроса, потому что выраженияOCL не могут менять состояния системы и поэтому могут использоватьтолько операции запроса. Если задано isQuery, компиляторы OCL могут проверять, какие операции (допустимые или нет) вызывают OCLвыражения.Более или менее универсальный способ наименования операций запроса – ставить приставку get перед именем того, что вы запрашиваете.
Пример приведен на рис. 7.13.7.5.4. Синтаксис стереотипа классаСтереотипы могут отображаться поразному (рис. 7.14). Однако большинство разработчиков моделей используют имя, заключенное в кавычки («имя cтереотипа»), или пиктограмму. Другие варианты не такшироко используются, и инструментальные средства моделированиячасто налагают ограничения.Стереотипы также могут быть ассоциированы с цветами или текстурами, но это очень плохая практика. У некоторых читателей, имеющихпроблемы со зрением или не различающих цвета, могут возникнутьсложности с пониманием таких диаграмм. Кроме того, чаще всего диаграммы распечатываются в чернобелом варианте.предпочтительное«entity»Ticket«entity»TicketпиктограммастереотиппредпочтительноеTicketTicketРис. 7.14. Варианты отображения стереотипов170Глава 7. Объекты и классы7.6.
Область действияАтрибуты и операции, область действия которых – экземпляр, принадлежат или выполняются определенным объектом.До сих пор мы видели, что у объектов есть собственные копии атрибутов, определенных в их классе. Таким образом, атрибуты разных объектов могут принимать разные значения. Аналогично все операции,рассмотренные до сих пор, выполняются определенными объектами.Это обычная ситуация. Говорят, что эти атрибуты и операции имеютобласть действия – экземпляр.Атрибуты и операции, область действия которых – класс, принадлежатили выполняются во всех объектах данного класса.Однако иногда нужно определить атрибуты, которые имеют единственное, общее для всех объектов класса значение.
И нужны операции (какоперации создания объектов), не относящиеся ни к одному конкретному экземпляру класса. Говорят, что такие атрибуты и операции имеютобласть действия – класс. Свойства, область действия которых –класс, обеспечивают набор глобальных характеристик объектов класса.7.6.1. Область действия – класси область действия – экземплярОбозначение атрибутов и операций с областями действия класс и экземпляр показано на рис. 7.15. Семантика таких атрибутов и операций приведена в табл.
7.7.7.6.2. Область действия определяет возможность доступаВозможность доступа операции к другому свойству класса определяется областью действия операции и областью действия свойства, к которому пытаются получить доступ.Операции, область действия которых – экземпляр, могут организовывать доступ к другим атрибутам и операциям с такой же областью дейBankAccount!accountNumber : String!count : int = 0область действия –класс (подчеркнуто)+create( accNumber : String )+getAccountNumber : String!incrementCount()+decrementCount()+getCount() : intобласть действия –экземплярРис. 7.15. Атрибуты и операции с областями действия класс и экземпляр1717.7.
Создание и уничтожение объектовствия, а также ко всем атрибутам и операциям, область действия которых – класс.Операции, область действия которых – класс, могут организовыватьдоступ только к атрибутам и операциям, имеющим область действия –класс. Операции уровня класса не имеют доступа к операциям уровняэкземпляра, потому что:• возможно, еще не создано ни одного экземпляра класса;• даже если экземпляры класса существуют, неизвестно, какой изних использовать.Таблица 7.7Область действия – экземплярОбласть действия – классАтрибуты По умолчанию область действия Для атрибутов может быть опреатрибутов – экземпляр.делена область действия класс.Каждый объект класса получа Каждый объект класса испольет собственную копию атрибу зует одну и ту же единственнуютов, область действия которых – копию атрибутов класса.экземпляр.Следовательно, значения атри Следовательно, значения атрибутов экземпляра могут быть бутов класса во всех объектахразными в каждом объекте.одинаковые.Операции По умолчанию область действия Для операций может быть опреопераций – экземпляр.делена область действия – класс.Каждый вызов операции экзем Вызов операции класса не касапляра касается конкретного эк ется конкретного экземпляраземпляра класса.класса.