класса. Это может означать отсутствие целостности класса и необходимость его разделения. Предположим, что класс учебный курс (CourseOffering) имеет следующие атрибуты: номер курса (offerNumber), место занятий (location), время занятий (timeOfDay), факультет (department), количество курсов на факультете (numberOfferinglnDepartment). Он может быть осведомлен о своем факультете, но информация о количестве других курсов на факультете ему не нужна.
Лучшая модель получилась бы при использовании класса учебный курс, связанного с классом факультет (Department). Это подтверждает общее правило о том, что класс должен представлять одну сущность.
Сообщения на диаграммах взаимодействий обычно отображаются на соответствующие операции в классах-получателях. Однако в особых случаях сообщения не становятся операциями. Если класс- получатель является граничным классом, представляющим графический интерфейс пользователя (GUI), сообщения отражают требования к интерфейсу. Такие сообщения реализуются обычно в виде элементов управления (кнопок и т. п.) и не отражаются на операции, так как требуемое поведение уже заложено в стандартных элементах управления. Например, актер преподаватель должен ввести пароль, чтобы запустить сценарий добавление учебного курса (Add a Course Offering). Это представлено в виде сообщения, направляемого граничному классу параметры курса преподавателя (ProfessorCourseOptions). Оно никогда не станет операцией в интерфейсном классе, а, скорее, будет реализовано в виде поля ввода в окне программы. Сообщения, поступающие актерам и от актеров, также требуют отдельного рассмотрения. Если актер является человеком, сообщение отражает действия человека, следовательно, должно быть реализовано в виде фрагмента руководства пользователя, а не в виде операции. В сценарии добавление учебного курса актер преподаватель имеет определенный пароль для доступа к системе — это обязательное требование, которое должно быть отражено в руководстве. Когда актер является внешней системой, создается отдельный класс, реализующий протокол взаимодействия с внешней системой. В этом случае сообщения отображаются на операции данного класса.
Для названия операции следует использовать только термины класса, выполняющего операцию, а не класса, запрашивающего выполнение операции. Например, операция добавления студента к учебному курсу называется добавить студента (addStudent). Кроме того, имена операций не должны отражать способ их выполнения, потому что он может измениться. К примеру, объект учебный курс может иметь не более десяти прикрепленных студентов.
Вам, вероятно, потребуется выяснить, сколько студентов прикреплено к объекту учебный курс в данный момент. Это значение вычисляется при подсчете связей между объектами учебный курс и студент. Если операция называется посчитать число студентов (calculateNumberOfStudent), следовательно, нужно использовать метод подсчета. Однако через год реализация может измениться и информация о количестве студентов будет храниться, например, в файле. Поэтому лучше назвать операцию получить число студентов (getNumberOfStudent). Это название не указывает на способ реализации операции.
Для отображения сообщений на операции в программе Rational Rose:
1. Присвойте объекты соответствующим классам, если вы не сделали этого ранее.
2. Щелкните правой кнопкой мыши по стрелке, отображающей сообщение.
3. В появившемся контекстно-зависимом меню выберите команду New Operation (Новая операция) — увидите диалоговое окно Operation Specification (Параметры операции).
4. Введите в нем имя операции.
5. Щелкните по кнопке ОК, чтобы закрыть диалоговое окно.
Если необходимая операция для данного класса уже существует, ее не нужно создавать заново — просто выберите в списке операций класса.
Диаграмма последовательности действий с операциями показана на рис. 7.1.Операции создаются независимо от диаграмм взаимодействий, так как не все сценарии изображаются в виде диаграмм. Это справедливо для операций, являющихся вспомогательными для других операций. Например, класс предмет, перед тем как зарегистрировать преподавателя, должен проверить, имеет ли тот право читать указанный курс. Для этой цели как нельзя лучше подойдет вспомогательная операция проверить преподавателя (validateProfessor).
Чтобы создать операции в программе Rational Rose:
1. Щелкните правой кнопкой мыши по классу в окне браузера.
2. В появившемся контекстно-зависимом меню выберите команду New => Operation (Создать => Операция).
3. Введите имя новой операции.
Операции для класса предмет (Course) показаны на рис. 7.2.
Каждая операция должна быть описана в документации, чтобы человек, изучающий модель, мог легко понять ее назначение. Описание должно отражать функциональность операции, а также содержать комментарии о входных параметрах и возвращаемом результате, если они имеются. Входные и возвращаемые параметры составляют
Для описания операций в программе Rational Rose:
1. Щелкните в окне браузера по значку «+» слева от имени класса, чтобы раскрыть список его свойств.
2. Выберите нужную операцию, щелкнув по ней мышью.
3. Установите курсор в окне описания и введите описание операции.
Описание операции выбрать преподавателя (SetProfessor) класса предмет (Course) показано на рис. 7.3.
Сигнатура операции может обозначать отношение. Если класс, передаваемый как аргумент или возвращаемый операцией, является фундаментальным (fundamental) классом, как, например, строка (String), отношения обычно не выносятся на диаграмму. Для нефундаментальных классов отношения отражаются на одной или нескольких диаграммах. Например, входными параметрами для операции зарегистрировать преподавателя (setProfessor) в классе предмет (Course) являются классы преподаватель (Professor) и учебный курс (CourseOffering). Это значит, что существуют отношения:
? между классами предмет и преподаватель;
? между классами предмет и учебный курс.
Отношения, основанные на сигнатурах, изначально моделировались как ассоциации, но в ходе проектирования системы они могут быть пересмотрены и представлены как отношения зависимости (dependency relationships). (Об уточнении и изменении отношений говорится в главе 12.) Взаимосвязи между пакетами также могут быть пересмотрены, по мере того как в модель включаются отношения, основанные на сигнатурах операций. К примеру, мы добавили в систему отношение между классами предмет и преподаватель. Значит, между пакетами Объекты университета и Сведения о людях существует отношение зависимости.
Большинство атрибутов класса выявляется при анализе предметной области, системных требований и описаний потоков событий, а также при составлении описания класса. Кроме того, хорошим источником для определения атрибутов является сама предметная область. Например, в требованиях к системе указано, что информация о названии предмета, его описании и количестве учебных часов
содержится в каталоге учебных курсов на семестр. Из этого следует, что название, описание и