Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование, страница 33
Описание файла
PDF-файл из архива "Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование", который расположен в категории "". Всё это находится в предмете "объектно-ориентированный анализ и проектирование" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 33 страницы из PDF
Например, в языке программирования 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Область действия – экземплярОбласть действия – классАтрибуты По умолчанию область действия Для атрибутов может быть опреатрибутов – экземпляр.делена область действия класс.Каждый объект класса получа Каждый объект класса испольет собственную копию атрибу зует одну и ту же единственнуютов, область действия которых – копию атрибутов класса.экземпляр.Следовательно, значения атри Следовательно, значения атрибутов экземпляра могут быть бутов класса во всех объектахразными в каждом объекте.одинаковые.Операции По умолчанию область действия Для операций может быть опреопераций – экземпляр.делена область действия – класс.Каждый вызов операции экзем Вызов операции класса не касапляра касается конкретного эк ется конкретного экземпляраземпляра класса.класса.
Операции уровня классаможно рассматривать как применяемые к самому классу.Невозможно вызвать операциюэкземпляра, не имея в распоряжении экземпляра класса. Безусловно, это означает, что нельзя использовать операции, область действия которых – экземпляр, для создания объектовэтого класса: никогда не получится создать первый объект.Инициировать операции классаможно, даже не имея экземпляра класса; это идеально подходит для операций создания объектов.7.7. Создание и уничтожение объектовКонструкторы – это специальные операции, создающие новые объекты.Область их действия – класс.172Глава 7.
Объекты и классыКонструкторы – это специальные операции, создающие новые экземпляры классов. Эти операции должны иметь область действия – класс.Если бы они были уровня экземпляра, не было бы возможности создать первый экземпляр класса.Конструкторы – забота проектирования. Обычно их не показываютна аналитических моделях.В разных языках программирования действуют разные стандартыименования конструкторов. Абсолютно универсальный подход – называть конструктор просто create(…) (создать). Это делает понятнымназначение данной операции.
Однако языки Java, C# и C++ требуют,чтобы имя конструктора совпадало с именем класса.У класса может быть несколько конструкторов с одинаковыми именами, но с разным набором параметров. Конструктор без параметров называют применяемым по умолчанию конструктором (default con+structor).
Параметры конструктора можно использовать для инициализации значений атрибутов в момент создания объекта.На рис.7.16 показан простой пример класса BankAccount (банковскийсчет). При каждом создании объекта BankAccount в качестве параметрав его конструктор должно передаваться значение типа String. Эта строка используется для задания атрибута accountNumber (номер счета) (например, значение “XYZ001002”). Тот факт, что конструктору класса BankAccount необходим параметр, говорит о том, что создать объект BankAccount, не определив этот параметр, нельзя.