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

Резюме

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

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

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

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

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

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

Глава 8. Изучение наследования

Наследование

Наследованием (inheritance) называется такое отношение между классами, когда один класс использует часть структуры и/или поведения другого или нескольких классов. При наследовании создается иерархия абстракций, в которой подкласс (subclass) наследуется от одного или нескольких суперклассов (superclass). Наследование также называют иерархией типа «такой же, как» (is-a) или «такого вида, как» (kind-of). Подкласс наследует все атрибуты, операции и отношения, определенные в каждом его суперклассе. Значит, все атрибуты и операции, определенные на верхнем уровне иерархии, будут унаследованы классами на более низких ее уровнях. В подкласс могут быть добавлены дополнительные атрибуты и операции, применяемые только на данном уровне иерархии. Подкласс может содержать собственную реализацию унаследованной операции. Так как отношение наследования не является отношением между различными объектами, оно не имеет названия, не использует названия ролей и к нему не применяется понятие мощности.

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

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

Существует два способа определения наследования — обобщение и специализация. В любых разрабатываемых системах обычно используются оба метода.

Обобщение

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

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

Например, класс студент имеет атрибут номер студента, а класс преподаватель — номер преподавателя. Если номера одинакового формата (например, четырехзначные числа), можно создать общий атрибут номер пользователя, заменяющий атрибуты номер студента и номер преподавателя. Если форматы отличаются, такие атрибуты должны храниться отдельно.

Специализация

С помощью специализации (specialization) создаются подклассы, которые уточняют суперкласс — добавляют структуру и поведение. Такой метод наследования применяется, когда уже существует определенный класс. Подкласс создается, чтобы адаптировать поведение существующего класса. Например, в систему регистрации допускается добавить функцию, посредством которой почетные граждане обеспечивались бы бесплатными курсами. Новый подкласс почетный гражданин (SeniorCitizen) может быть добавлен в иерархию класса пользователь (Regist-rationUser) для хранения данных, относящихся к почетным гражданам.

В подклассе операции могут быть перекрыты (overridden). Однако подкласс не должен ограничивать операции, определенные в его суперклассах, то есть не должен урезать их структуру и поведение.

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

1. Откройте диаграмму классов, на которой будет изображена иерархия наследования.

2. Щелкните по кнопке Class (Класс) на панели инструментов, а затем по диаграмме, чтобы поместить на нее класс.

3. Введите имя класса. Класс также может быть создан в браузере и перемещен на диаграмму.

4. Щелкните по кнопке Generalization (Обобщение) на панели инструментов.

5. Щелкните по подклассу и проведите линию связи к суперклассу.

6. Повторите последнее действие для других подклассов.

Отношение наследования показано на рис. 8.1.

Рис. 8.1. Отношение наследования

Дерево наследования

Основу для специализации (то есть цель создания подкласса) в отношении наследования называют дискриминатором (discriminator). Дискриминатор, как правило, наделен конечным набором значений и подклассов, которые создаются для каждого значения.

Например, одним из дискриминаторов для класса предмет (Course) является место обучения. Классы очный предмет (OnCampusCourse) и заочный предмет (OffSiteCourse) могут стать подклассами для класса предмет, созданными на основе этого дискриминатора. Отношения наследования для всех подклассов, полученных от одного дискриминатора, представляются в виде дерева. Другим подклассом класса предмет может стать класс обязательный предмет. Этот подкласс не будет частью дерева наследования, так как он принадлежит другому дискриминатору — типу предмета. Следует внимательно подходить к вопросу определения нескольких дискриминаторов для одного класса. Например, что произойдет, если обязательный предмет тоже очный? Является ли это примером множественного наследования? Не нужно ли здесь применить агрегацию? В ходе анализа и проектирования ответы на эти вопросы постепенно позволят получить законченную структуру модели.

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

1. Откройте диаграмму классов, на которой будет изображена иерархия наследования.

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

3. Введите имя класса. Класс также может быть создан в браузере и перемещен на диаграмму.

4. Щелкните по кнопке Generalization на панели инструментов.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату