ТОП 10:

Определение статичного атрибута



При добавлении атрибута к классу каждый экземпляр класса получит свою собственную копию этого: атрибута. Рассмотрим, например, класс Employee. В процессе работы приложения мы можем создать: экземпляры трех сотрудников: Джона Доу, Билла Джонса и Джейн Смит. Каждый из этих объектов по­лучит свою собственную копию атрибута Salary.

Статичный атрибут (static) — это такой атрибут, который используется всеми экземплярами клас­са. Если бы атрибут Salary был статичным, он был бы общим для Джона, Билл и Джейн.

На языке UML статичный атрибут помечают символом $ в нашем примере Salary станет $Salary.

Сделать атрибут статичным можно следующим образом:

· Щелкните правой кнопкой мыши на атрибуте в браузере.

· В открывшемся меню выберите пункт Open Specification (Открыть спецификацию) или Open Standard Specification (Открыть стандартную спецификацию), если вы работаете с Rose 98i. По­явится окно спецификации атрибута класса.

· Перейдите на вкладку Detail (Подробно).

· Установите флажок Static, чтобы сделать атрибут статичным. Перед именем атрибута на диа­грамме Классов появится символ

Определение производного атрибута

Производным (derived) называется атрибут, созданный из одного или нескольких других атрибутов. На­пример, класс Rectangle (Прямоугольник) может иметь атрибуты Width (Ширина) и Height (Высота). У него также может быть атрибут Area (Площадь), вычисляемый как произведение ширины и высоты. Так как Area получается из этих двух атрибутов, он считается производным атрибутом.

В UML производные атрибуты помечают символом "/". В описанном примере атрибут Area следу­ет написать как /Area.

Сделать атрибут производным можно следующим образом:

· Щелкните правой кнопкой мыши на атрибуте в браузере.

· В открывшемся меню выберите пункт Open Specification (Открыть спецификацию) или Open

· Standard Specification (Открыть стандартную спецификацию), если вы работаете с Rose 98i. По­явится окно спецификации атрибута класса.

· Перейдите на вкладку Detail (Подробно).

· Установите флажок Derived (Производный). Перед именем атрибута на диаграмме

· Классов поя­вится символ "/".

Практика 13. Работа с операциями.

Операцией называется связанное с классом поведение. Операция состоит из трех частей: имени, пара­метров и типа возвращаемого значения. Параметры — это аргументы, получаемые операцией на вхо­де". Тип возвращаемого значения относится к результату действия операции.

На диаграмме Классов можно показывать как имена операций, так и их параметры и типы возвра­щаемого значения.

На некоторых диаграммах полезно показывать полную сигнатуру операций. Если же нужно упрос­тить диаграмму, лучше оставить только имена.

В языке UML операции имеют следующую нотацию:

Имя операции (аргумент : тип данных аргумента!!, аргумент2 : тип данных аргумента2,...): тип возвращаемого значения

Операции определяют ответственности классов. При идентификации операций и анализе классов имеете в виду следующее:

· Относитесь с подозрением к любому классу, имеющему только одну или две операции. Возмож­но, класс написан совершенно правильно, но его следует объединить с каким-нибудь другим классом.

· С величайшим подозрением относитесь к классу без операций. Как правило, класс инкапсули­рует не только данные, но и поведение. Класс без поведения лучше моделировать как один или несколько атрибутов.

· С осторожностью относитесь к классу со слишком большим числом операций. Набор ответст­венностей класса должен быть управляем. Если класс очень большой, им будет трудно управ­лять. В такой ситуации лучше разделить класс на два меньших.

Операции реализации

Операции реализации (implementor operations) реализуют некоторую бизнес-функциональность. Такие операции можно найти, исследуя диаграммы Взаимодействия. Диаграммы этого типа фокусируются на бизнес-функциональности, и каждое сообщение диаграммы скорее всего можно соотнести с опера­цией реализации.

Необходимо, чтобы каждую операцию^ реализации можно было проследить до соответствующего требования. Это достигается на различных этапах моделирования. Операция выводится из сообще­ния на диаграмме Взаимодействия, сообщения выделяются из подробного описания потока событий, который создается на основе варианта использования, а последний — на основе требований. Возмож­ность проследить всю эту цепочку гарантирует, что каждое требование будет воплощено в коде, а каждый фрагмент кода реализует какое-то требование.

Операции управления

Операции управления (manager operations) управляют созданием и разрушением объектов. В эту катего­рию попадают конструкторы и деструкторы классов вручную создавать конструкторы и деструкторы классов.

Операции доступа

Атрибуты обычно бывают закрытыми или защищенными. Тем не менее другие классы иногда должны

просматривать или изменять их значения. Для этого предназначены операции доступа (access operati­ons).

Пусть, например, у нас имеется атрибут Salary класса Employee. Нам бы не хотелось, чтобы другие классы могли изменять этот атрибут.

Но мы добавляем к классу Employee две операции доступа: GetSalary и SetSalary. К первой из них, являющейся общей, могут обращаться остальные классы. Она получает значение атрибута Salary и возвращает его вызвавшему ее классу. Операция SetSalary также является общей, она помогает вы­звавшему ее классу установить новое значение атрибута Salary. Эта операция может содержать любые правила и условия проверки, которые необходимо выполнить, прежде чем изменить атрибут.

Такой подход дает возможность безопасно инкапсулировать атрибуты внутри класса, защитив их от других классов, но все же позволяет осуществлять контролируемый доступ к ним.

Создание операций Get и Set (получения и изменения значения) для каждого атрибута класса явля­ется промышленным стандартом.

Как и в случае операций управления, операции доступа не нужно вводить вручную. При генерации кода Rose автоматически создаст операции Get и Set для каждого атрибута класса.

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

Вспомогательными (helper operations) называются такие операции класса, которые необходимы ему для выполнения его ответственностей, но о которых другие классы не должны ничего знать. Это за­крытые и защищенные операции класса.

Как и операции реализации, вспомогательные операции можно обнаружить на диаграммах После­довательности и Кооперативных диаграммах. Часто такие операции являются рефлексивными сооб­щениями.

Для идентификации операций выполните следующие действия:

· Изучите диаграммы Последовательности и Кооперативные диаграммы. Большая часть сообще­ний на этих диаграммах является операциями реализации. Рефлексивные сообщения будут вспомогательными операциями.

· Рассмотрите управляющие операции. Возможно, требуется добавить конструкторы и деструкто­ры. Повторим еще раз, что это необязательно — Rose может сделать это за вас при генерации кода.

· Рассмотрите операции доступа. Для каждого атрибута класса, с которым будут работать другие классы, необходимо создать операции Get и Set. Как и в случае управляющих операций, это нео­бязательно делать вручную — Rose может создать указанные операции автоматически.

Задание возвращаемого класса операции

Возвращаемым классом (return class) операции называется тип данных ее результата. Допустим, что у нас имеется операция Add, принимающая два параметра — строки X и Y. Операция преобразует стро­ки X и Y в значения типа integer, складывает их и возвращает целочисленный результат. Возвращае­мым классом операции Add будет integer.

При определении возвращаемого класса можно использовать либо встроенные типы языка про­граммирования (такие, как string, char или integer) либо определенные в вашей модели классы. Для задания возвращаемого класса операции:

· Щелкните правой кнопкой мыши на операции в браузере.

· Откройте окно спецификации класса этой операции (или стандартное окно спецификации в Rose 98i).

· Укажите возвращаемый класс в раскрывающемся списке или введите свой тип

 







Последнее изменение этой страницы: 2016-04-18; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.234.244.18 (0.007 с.)