Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по ТООМ.doc
Скачиваний:
298
Добавлен:
02.05.2014
Размер:
7.46 Mб
Скачать

3. Диаграммы классов

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

3.1. Определение объектов и классов предметной области

В соответствии с определением, данным в первом разделе, под объектом (object) в UML понимается некоторое абстрактное представление конкретного объекта предметной области. Объект– это некоторая сущность реального мира или концептуальная сущность. Объектом называется концепция, абстракция или вещь с четко определенными границами и значением для системы [4].

Каждый объект имеет состояние, поведение и индивидуальность. Состоянием (state) объекта называется одно из условий, в котором он может находиться. Состояние системы обычно меняется во времени и определяется набором свойств, называемых атрибутами. Поведение объекта определяет, как объект взаимодействует с другими объектами. Индивидуальность означает, что каждый объект уникален и отличается от других объектов. Моделируя свойства и поведение какого-либо объекта, мы абстрагируемся от некоторых конкретных деталей, сохраняя только самые важные (в контексте проектируемой информационной системы) характеристики объекта.

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

Важнейшая цель методологии объектно-ориентированного моделирования - дать рекомендации по нахождению классов, на основе которых строится программная система. «Хороший» класс представляет одну и только одну абстракцию, то есть должен отражать одну основную сущность. Названия классов выбираются в соответствии с понятиями предметной области. Существует прием идентификации понятий, который состоит в выделении существительных из текстовых описаний регламентирующих моделируемые процессы в предметной области и их выборе в качестве «кандидатов» на понятие или атрибут. К сожалению, этот метод не слишком эффективен, так как либо помогает выделить только очевидные сущности, либо привносит слишком много субъективного контекста и неопределенностей, свойственных естественным языкам.

Концептуальную модель следует создавать согласно принципам картографии:

  • Использовать применяемые на данной территории названия.

  • Исключать несущественные детали.

  • Не добавлять объекты, которые отсутствуют на данной территории.

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

Если операция или свойство объекта не отвечают целям системы, то они и не включаются в состав класса, хотя и могут представлять интерес для других целей. Понятие Человек может включать такие компоненты, как «рост» и «вес», но для информационной системы университета для описания класса Студент они не нужны.

Каждый класс может иметь атрибуты (свойства). Так, на рис. 3.* класс Студент имеет атрибуты фио,пол, дата рождения и др. .

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

Классы могут иметь взаимосвязи, называемые отношениями. В нотации UML имеются несколько типов отношений (см. табл. 3.1).

Отношение

Функция

Нотация

Ассоциация

(Association)

Описание связей между экземплярами классов

Зависимость

(Dependency)

Отношение, существующее между двумя элементами модели

Обобщение

(Generalization)

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

Реализация

(Realization)

Отношение между спецификацией и ее реализацией

Использование

(Usage)

Ситуация, когда для корректной работы одному элементу системы необходим другой элемент

“kind”

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

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

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

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