
- •Практика 8. Работа с классами
- •Практика 9. Операции над классами.
- •Практика 10. Типы классов.
- •Практика 11. Возможности классов.
- •Практика 12. Работа с атрибутами.
- •Практика 13. Работа с операциями.
- •Практика 14. Связи
- •Практика 15. Поведение объекта.
- •Практика 16. Представление компонентов.
- •Практика 17. Представление размещения.
Практика 13. Работа с операциями.
Операцией называется связанное с классом поведение. Операция состоит из трех частей: имени, параметров и типа возвращаемого значения. Параметры — это аргументы, получаемые операцией на входе". Тип возвращаемого значения относится к результату действия операции.
На диаграмме Классов можно показывать как имена операций, так и их параметры и типы возвращаемого значения.
На некоторых диаграммах полезно показывать полную сигнатуру операций. Если же нужно упростить диаграмму, лучше оставить только имена.
В языке UML операции имеют следующую нотацию:
Имя операции (аргумент : тип данных аргумента!!, аргумент2 : тип данных аргумента2,...): тип возвращаемого значения
Операции определяют ответственности классов. При идентификации операций и анализе классов имеете в виду следующее:
Относитесь с подозрением к любому классу, имеющему только одну или две операции. Возможно, класс написан совершенно правильно, но его следует объединить с каким-нибудь другим классом.
С величайшим подозрением относитесь к классу без операций. Как правило, класс инкапсулирует не только данные, но и поведение. Класс без поведения лучше моделировать как один или несколько атрибутов.
С осторожностью относитесь к классу со слишком большим числом операций. Набор ответственностей класса должен быть управляем. Если класс очень большой, им будет трудно управлять. В такой ситуации лучше разделить класс на два меньших.
Операции реализации
Операции реализации (implementor operations) реализуют некоторую бизнес-функциональность. Такие операции можно найти, исследуя диаграммы Взаимодействия. Диаграммы этого типа фокусируются на бизнес-функциональности, и каждое сообщение диаграммы скорее всего можно соотнести с операцией реализации.
Необходимо, чтобы каждую операцию^ реализации можно было проследить до соответствующего требования. Это достигается на различных этапах моделирования. Операция выводится из сообщения на диаграмме Взаимодействия, сообщения выделяются из подробного описания потока событий, который создается на основе варианта использования, а последний — на основе требований. Возможность проследить всю эту цепочку гарантирует, что каждое требование будет воплощено в коде, а каждый фрагмент кода реализует какое-то требование.
Операции управления
Операции управления (manager operations) управляют созданием и разрушением объектов. В эту категорию попадают конструкторы и деструкторы классов вручную создавать конструкторы и деструкторы классов.
Операции доступа
Атрибуты обычно бывают закрытыми или защищенными. Тем не менее другие классы иногда должны
просматривать или изменять их значения. Для этого предназначены операции доступа (access operations).
Пусть, например, у нас имеется атрибут 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).
Укажите возвращаемый класс в раскрывающемся списке или введите свой тип
Назначение стереотипа для операции
Как и в случае других элементов модели, для классификации операций создаются их стереотипы. Как упоминалось ранее, существуют четыре наиболее распространенных стереотипа операций:
Implementor (Реализация) Операции, реализующие некоторую бизнес-логику.
Manager (Управляющая) Конструкторы, деструкторы и операции управления памятью.
Access (Доступ) Операции, позволяющие другим классам просматривать или редактировать атрибуты данного класса. Как правило, такие операции называют GetCHMH атрибута> или SetCHMH атрибутах
Helper (Вспомогательная) Закрытые или защищенные операции, которые используются классом, но не видны другим классам.
Назначение операциям стереотипов не требуется для генерации кода. Тем не менее они облегчают понимание модели. Кроме того, они помогают убедиться в том, что ни одна операция не была пропущена.
Для назначения стереотипа операции:
Щелкните правой кнопкой мыши на операции в браузере.
Откройте окно спецификации класса этой операции (или стандартное окно спецификации в Rose 98i).
В соответствующем раскрывающемся списке укажите стереотип или введите новый
Задание видимости операций
Как уже упоминалось выше, видимость показывает, каким образом данные и поведение инкапсулируются в класс. Для операций допустимы четыре значения этого параметра (их визуальное представление на диаграмме указано в таблице 6.2).
Public (Общая) Операция доступна всем остальным классам. Любой класс может запросить ее выполнение.
Private (Закрытая) Операция не доступна ни одному другому классу.
Protected (Защищенная) Доступ к операции разрешен только для самого класса и его потомков.
Package or Implementation (Пакетная) Операция доступна только классам данного пакета.
В то время как атрибуты обычно бывают закрытыми или защищенными, операции могут быть общими, закрытыми, защищенными или пакетными. Принимая решение по поводу видимости операции, подумайте, какие классы должны знать о ней.
Добавление аргументов к операции
Аргументы, или параметры, операции — это получаемые ею входные данные. Например, операция Add может принимать два аргумента, X и Y, и складывать их.
Для каждого аргумента должны быть заданы имя и тип данных.
Определение протокола операции
Протокол операции описывает, какие операции и в каком порядке может выполнять клиент над объектом. Например, если операцию А нельзя запускать до завершения операции Б, это можно отметить в поле протокола операции А.
Определение уточнений операции
Поле Qualification (Уточнение) позволяет идентифицировать любые уточнения операции, связанные с конкретным языком программирования. Все, что вы здесь введете, войдет в генерируемый код в качестве комментария, но на сам код не повлияет.
Для ввода уточнения операции:
Откройте окно спецификации операции (или стандартное окно спецификации в Rose 98i).
Перейдите на вкладку Detail (Подробно).
Введите уточнения в поле Qualification.
Определение размера операции
В поле Size можно указать предполагаемый объем памяти, требуемой операции во время ее выполне ния. Эта информация войдет в качестве комментария в генерируемый код.
Для указания размера операции:
Откройте окно спецификации операции (или стандартное окно спецификации в Rose 98i).
Перейдите на вкладку Detail (Подробно).
Введите размер в поле Size.
Задание времени выполнении операции
Время операции — это предполагаемое время, требуемое для выполнения операции. Указываемая ин: формация войдет в сгенерированный код в качестве комментария.
Для задания времени операции:
Откройте окно спецификации операции (или стандартное окно спецификации в Rose 98i).
Перейдите на вкладку Detail (Подробно).
Введите время в поле Time.
Задание параллелизма операции
Значение переключателя Concurrency (Параллелизм) определяет поведение операции при наличии нескольких потоков управления. Возможны три значения этого параметра:
Sequential (Последовательная) Предполагается, что операция будет выполняться правильна при наличии только одного потока управления. Выполнение операции должно завершиться перед тем, как начнется выполнение другой операции.
Guarded (Охраняемая) Предполагается, что операция будет выполняться правильно в нескольких потоках управления, но только если взаимодействие классов гарантирует взаимное исключение выполняемых операций.
Synchronous (Синхронная) Предполагается, что операция будет правильно выполняться при: наличии нескольких потоков. После обращения операция будет выполняться в одном потоке управления вплоть до своего завершения.
Другие операции могут в то же самое время выполняться в других потоках. Класс должен сам позаботиться о решении проблем взаимных исключений, так что взаимодействие с другими классами не требуется.
Сведения о параллелизме операции появятся в сгенерированном коде в качестве комментариев.
Для задания параллелизма операции:
Откройте окно спецификации операции (или стандартное окно спецификации в Rose 98i).
Перейдите на вкладку Detail (Подробно).
Установите переключатель Concurrency (Параллелизм) в требуемое значение.
Задание предусловий операции
Предусловия — это такие условия, которые должны быть выполнены перед запуском операции. Любые предусловия операции можно ввести на вкладке Preconditions (Предусловия) окна спецификации: операции
Предусловия не влияют на генерируемый код, но появляются в нем в качестве комментариев. Если какая-либо диаграмма Взаимодействия иллюстрирует эти условия, можно ввести ее имя в нижней части вкладки предусловий.
Для задания предусловий операции:
Откройте окно спецификации операции (или стандартное окно спецификации в Rose 98i).
Перейдите на вкладку Preconditions.
Введите предусловия в поле Preconditions
Определение постусловий операции
Постусловиями называются такие условия, которые должны всегда выполняться после завершения работы операции. Постусловия задаются на вкладке Postconditions (Постусловия) окна спецификации операции
3
Для указания постусловий операции:
Откройте окно спецификации операции (или стандартное окно спецификации в Rose 98i).
Перейдите на вкладку Postconditions.
Введите постусловия в поле Postconditions.
Определение семантики операции
В поле Semantics (Семантика) окна спецификации операции можно описать, что будет делать операция. Для передачи логики используется псевдокод или обыкновенное описание. Все, что вы введете в этом поле, появится в готовом коде в виде комментария. Если какая-либо диаграмма Взаимодействия иллюстрирует семантику операции, можно ввести имя диаграммы в нижней части вкладки.
Для описания семантики операции:
Откройте окно спецификации операции (или стандартное окно спецификации в Rose 98i).
Перейдите на вкладку Semantics (Семантика).
В поле Semantics введите семантику операции
Изображение атрибутов и операций на диаграммах Классов
Видимость атрибутов и операций может принимать одно из следующих значений: общая, закрытая, защищенная и пакетная. Первые три представляют на языке UML символами и соответственно. У пакетной видимости обозначения нет.
При изображении видимости атрибутов и операций можно использовать также собственную нотацию Rose. Нотации Rose и UML для показа параметров видимости представлены в таблице