Глава 7. Добавление поведения и структуры

Глава 7. Добавление поведения и структуры

Представление поведения и структуры

Класс реализует ряд обязанностей, от которых зависит поведение его объектов. Обязанности исполняются с помощью определенных для класса операций. Необходимо, чтобы операция выполняла только одну задачу и выполняла ее хорошо. Например, класс учебный курс (CourseOffering) должен добавлять и исключать студента. Для этой цели используются две операции: одна добавляет студента, другая — исключает. За всеми экземплярами класса закреплены соответствующие операции.

Структура (structure) объекта описывается атрибутами класса. Каждый атрибут — это поле данных, содержащееся в объекте класса. Объект, созданный на основе класса, наделен значениями всех атрибутов класса. Например, класс предмет (course) имеет следующие атрибуты: название (name), описание (definition) и количество учебных часов (credit hours). Следовательно, каждый объект предмет будет содержать значения перечисленных атрибутов. Они могут повторяться, так как в университете существуют учебные предметы с одинаковым количеством академических часов.

При формировании имен атрибутов и операций используется определенный стиль, благодаря которому достигается единообразие в описании классов и становится удобно работать с моделью и кодом.

Если какой-либо объект класса не наделен атрибутами или операциями, проверьте определение класса. Это может означать отсутствие целостности класса и необходимость его разделения. Предположим, что класс учебный курс (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).

Рис. 7.1. Диаграмма последовательности действий с операциями

Чтобы создать операции в программе Rational Rose:

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

2. В появившемся контекстно-зависимом меню выберите команду New => Operation (Создать => Операция).

3. Введите имя новой операции.

Операции для класса предмет (Course) показаны на рис. 7.2.

Документирование операций

Каждая операция должна быть описана в документации, чтобы человек, изучающий модель, мог легко понять ее назначение. Описание должно отражать функциональность операции, а также содержать комментарии о входных параметрах и возвращаемом результате, если они имеются. Входные и возвращаемые параметры составляют сигнатуру операции (operation signature). Эта информация может отсутствовать на начальном этапе и добавляться на последующих стадиях жизненного цикла, когда будут собраны достаточные сведения о классе.

Рис. 7.2. Операции в списке браузера

Для описания операций в программе Rational Rose:

1. Щелкните в окне браузера по значку «+» слева от имени класса, чтобы раскрыть список его свойств.

2. Выберите нужную операцию, щелкнув по ней мышью.

3. Установите курсор в окне описания и введите описание операции.

Описание операции выбрать преподавателя (SetProfessor) класса предмет (Course) показано на рис. 7.3.

Рис. 7.3. Описание операции выбрать преподавателя

Отношения и сигнатуры операций

Сигнатура операции может обозначать отношение. Если класс, передаваемый как аргумент или возвращаемый операцией, является фундаментальным (fundamental) классом, как, например, строка (String), отношения обычно не выносятся на диаграмму. Для нефундаментальных классов отношения отражаются на одной или нескольких диаграммах. Например, входными параметрами для операции зарегистрировать преподавателя (setProfessor) в классе предмет (Course) являются классы преподаватель (Professor) и учебный курс (CourseOffering). Это значит, что существуют отношения:

? между классами предмет и преподаватель;

? между классами предмет и учебный курс.

Отношения, основанные на сигнатурах, изначально моделировались как ассоциации, но в ходе проектирования системы они могут быть пересмотрены и представлены как отношения зависимости (dependency relationships). (Об уточнении и изменении отношений говорится в главе 12.) Взаимосвязи между пакетами также могут быть пересмотрены, по мере того как в модель включаются отношения, основанные на сигнатурах операций. К примеру, мы добавили в систему отношение между классами предмет и преподаватель. Значит, между пакетами Объекты университета и Сведения о людях существует отношение зависимости.

Создание атрибутов

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

содержится в каталоге учебных курсов на семестр. Из этого следует, что название, описание и количество учебных часов — это атрибуты класса предмет. Последовательность создания атрибутов в программе Rational Rose:

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

2. В появившемся контекстно-зависимом меню выберите команду New => Attribute (Создать => Атрибут).

3. Введите имя нового атрибута.

Атрибуты для класса предмет (Course) показаны на рис. 7.4.

Рис. 7.4. Атрибуты в списке браузера

Документирование атрибутов

Определения атрибутов в документации должны быть краткими и четкими и содержать информацию о назначении атрибута, а не о его структуре. Приведу неудачный пример описания атрибута название класса предмет: «Символьная строка длиной до 15 знаков». Правильным будет следующий вариант: «Название учебного предмета, которое используется в университетских изданиях».

Для описания атрибутов в программе Rational Rose:

1. В окне браузера щелкните по значку «+» слева от имени класса, чтобы раскрыть список его свойств.

2. Выберите атрибут, щелкнув по нему мышью.

3. Установите курсор в окне описания и введите описание для атрибута класса.

Описание атрибута название (name) класса предмет (Course) показано на рис. 7.5.

Рис. 7.5. Описание атрибута название

Отображение атрибутов и операций

Атрибуты и операции можно показать на диаграмме классов. Чаще всего она создается именно для отражения структуры и поведения классов пакета. Отношения на эту диаграмму обычно не выносятся.

Последовательность создания диаграммы классов для отображения атрибутов и операций пакета:

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

2. В появившемся контекстно-зависимом меню выберите команду New => Class Diagram (Создать => Диаграмма классов). В список браузера будет добавлена диаграмма New Diagram.

3. Введите имя новой диаграммы.

Для добавления классов на диаграмму с помощью меню Query (Запрос):

1. Откройте диаграмму классов, дважды щелкнув по ней мышью в окне браузера.

2. Выберите команду меню Query => Add Classes (Запрос => Добавить классы).

3. Укажите нужный пакет.

4. Выберите классы с помощью мыши и щелкните по кнопке >>>>, чтобы добавить классы на диаграмму. Для размещения на диаграмме всех классов щелкните по кнопке АН >> (Все).

Последовательность фильтрации отношений в программе Rational Rose:

1. Откройте диаграмму, дважды щелкнув по ней мышью в окне браузера.

2. Выберите команду меню Query => Filter Relationships (Запрос => Фильтрация отношений).

3. Отметьте позицию None (Нет) переключателя Туре (Тип), чтобы скрыть все отношения на диаграмме.

4. Щелкните по кнопке ОК, чтобы закрыть диалоговое окно Relations (Отношения).

Чтобы отобразить определенные атрибуты или операции в программе Rational Rose:

1. Щелкните правой кнопкой мыши по классу в окне диаграммы.

2. В появившемся контекстно-зависимом меню выберите команду Options => Select Compartment Items (Настройки => Выбрать элементы секции).

3. С помощью мыши укажите атрибуты и операции, которые требуется отобразить на диаграмме.

4. Щелкните по кнопке >>>>.

5. Щелкните по кнопке ОК, чтобы закрыть диалоговое окно Edit Compartment (Настройка секции).

Для отображения всех атрибутов и операций в программе Rational Rose выполните следующие действия:

1. Щелкните правой кнопкой мыши по классу в окне диаграммы.

2. В появившемся контекстно-зависимом меню выберите команду Options => Show All Attributes (Настройки => Показать все атрибуты).

3. Снова вызовите контекстно-зависимое меню для класса и выберите команду Options => Show All Operations (Настройки => Показать все операции).

Атрибуты и операции класса будут всегда отображаться на диаграммах, если установить флажки Show All Attributes (Показать все атрибуты) и Show All Operations (Показать все операции) в диалоговом окне настройки параметров программы, вызываемом командой меню Tools => Options (Сервис => Параметры).

Чтобы отобразить стереотипы классов в программе Rational Rose:

1. Щелкните правой кнопкой мыши по классу в окне диаграммы.

2. В появившемся контекстно-зависимом меню выберите команду Options => Stereotype Display (Настройки => Отображение стереотипов), а затем в меню третьего уровня выберите один из вариантов отображения стереотипов: None

(Нет) — не выводить, Label (Название) — отображать названия в треугольных скобках, Icon (Значок) — отображать класс, используя значок стереотипа.

Диаграмма классов с названием «Атрибуты и операции» (Attributes and Operations) для пакета Объекты университета (UniversityArtifacts) показана на рис. 7.6. Для такого типа диаграмм я предпочитаю выводить стереотипы классов в виде названий.

Рис. 7.6. Отображение атрибутов и операций на диаграмме классов

Ассоциативные классы

Отношение может также иметь структуру и поведение. Это происходит в том случае, когда информация обращена к связи между объектами, а не к самому объекту.

Рассмотрим такой пример. Студент может посещать до четырех учебных курсов, а учебный курс может читаться нескольким студентам — от трех до десяти. Каждый студент получает оценку (grade) за учебный курс. Где должна храниться оценка? Она не принадлежит студенту, так как он наверняка получит различные оценки по разным предметам. Оценка не принадлежит и курсу, потому что студенты получат разные оценки за данный курс. Сведения об оценке принадлежат связи между студентом и учебным курсом. Они моделируются с помощью ассоциативного класса (association class), который ведет себя как и любой другой класс и также может иметь отношения. В нашем примере студент получает отчет об оценках (report card), куда включены связанные объекты оценка.

Для создания ассоциативных классов в программе Rational Rose:

1. Щелкните по кнопке Class (Класс) на панели инструментов.

2. Щелкните по диаграмме, чтобы поместить на нее класс.

3. Введите имя класса.

4. Добавьте необходимые атрибуты и операции для класса.

5. Щелкните по кнопке Association Class (Ассоциативный класс) на панели инструментов.

6. Щелкните по ассоциативному классу и проведите черту к линии связи между классами, соединяемыми ассоциативным классом.

7. Если требуется, добавьте дополнительные отношения к ассоциативному классу.

Ассоциативный класс оценка показан на рис. 7.7.

Рис. 7.7. Ассоциативный класс оценка

Резюме

Класс выполняет ряд обязанностей, от которых зависит поведение его объектов. Обязанности исполняются с помощью конкретных операций. Структура объекта описывается атрибутами класса.

Каждый атрибут — это поле данных, содержащееся в объекте класса. Объект, полученный на основе класса, наделен значениями всех атрибутов класса. Атрибуты и операции, определенные для класса, — это основные значимые и функциональные элементы в разрабатываемом приложении.

Сообщения на диаграммах взаимодействий обычно отображаются на соответствующие операции в классах-получателях. Однако в некоторых случаях сообщения не становятся операциями, например: сообщения, поступающие

к актеру-человеку и от него, и сообщения для классов, представляющих пользовательский интерфейс.

Многие атрибуты класса выявляются при анализе предметной области, системных требований и описании потоков событий, а также при составлении описания класса. Кроме того, хорошим источником для определения атрибутов является сама предметная область.

Отношение может также иметь структуру и поведение. Это происходит в том случае, когда информация обращена к связи между объектами, а не к самому объекту. Структура и поведение отношений моделируются посредством ассоциативных классов.

Данный текст является ознакомительным фрагментом.