Открытая коллекция знаний

OpenU.Ru

Справочник UML. Объектно-ориентированное проектирование.

class (класс)

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

Семантика

Класс это поименованное описание структуры данных и поведения некоего множества объектов. Класс используют для объявления переменных. Объект, который является значением переменной, должен иметь класс, совместимый с классом, объявленным в переменной. Иными словами, это должен быть либо тот же самый класс, либо его потомок. Кроме этого, класс используется для создания экземпляров объектов. Результатом операции создания будет новый экземпляр данного класса.
Созданный объект является прямым экземпляром данного класса к опосредованным - предков этого класса. Для каждого атрибута у объекта есть слот, в котором содержится его значение. Объект принимает все операции и сигналы своего класса и может появляться в связях ассоциаций, задействующих свой класс или предки этого класса.
Для некоторых классов невозможно создавать прямые экземпляры. Такие классы используются, чтобы описать общую структуру его потомков. Они называются абстрактными классами. Класс, у которого существуют прямые экземпляры, называется конкретным.
Класс можно также рассматривать как глобальный объект. При этом все атрибуты с областью действия в масштабе класса будут являться атрибутами какого-то неявного объекта. Такие атрибуты имеют глобальную область действия. Каждый из них имеет единственное значение во всей системе. Операция с областью действия в масштабе класса применяется не к объекту, а ко всему классу. Наиболее часто операции такого рода используются при создании экземпляров класса.
В языке UML класс представляет собой вид классификатора. Классификаторами могут быть различные элементы, но наиболее полное выражение понятия "классификатор" представлено в классе.

Структура

У класса есть имя, а также список операций, методов и атрибутов. Он может участвовать в отношениях ассоциации, обобщения, зависимости и ограничения. Класс объявляют внутри пространства имен (пакета или другого класса). Внутри своего пространства имен класс обладает различными свойствами, например множественностью и видимостью. Кроме этих, у него могут быть еще и другие свойства, в зависимости от того, является ли он абстрактным или активным. Для класса может быть задан конечный автомат, описывающий его поведение, иными словами, каким образом класс реагирует на получение событий. Класс может объявлять множество событий (к которым могут относиться и исключения), которые он способен обрабатывать. Класс также может обеспечивать программную реализаций поведения, описанного (возможно, пустым) множеством интерфейсов. В интерфейсе перечисляется ряд операции, которые обязуется поддерживать класс, реализующий этот интерфейс.
У класса есть список атрибутов и список операций, каждый из которых образует внутри класса пространство имен. Наследуемые атрибуты и операции также появляются в соответствующих пространствах имен. Пространство имен для атрибутов включает в себя и псевдоатрибуты, например имена ролей ассоциаций, исходящих из класса, а также дискриминаторы для обобщений, содержащих этот класс или его предков. Каждое имя может быть объявлено в классе или его предках лишь один раз. В противном случае в системе будет возникать конфликтная ситуация и модель будет считаться плохо согласованной. Имена операций могут повторяться лишь тогда, когда они обозначают одну и ту же операцию. В противном случае в системе будет возникать конфликтная ситуация.
Класс также является пространством имен для объявлений вложенных классификаторов. Вложенные классификаторы не являются структурными частями экземпляра класса. Между объектами класса и объектами вложенных классов нет никаких отношений с точки зрения структуры данных. Вложенный класс представляет собой объявление какого-либо класса, который можно использовать с помощью методов внешнего класса. Классы, объявленные внутри другого класса, являются для него секретными. Вне этого класса к ним вообще нет доступа, за исключением тех случаев, когда их видимость явно оговорена. У объявлений вложенных классов нет визуальной нотации. Мы полагаем, что их можно делать доступными с помощью гиперссылок, которые устанавливает инструмент моделирования. Ссылки на вложенные имена оформляются с помощью имен путей (pathnames).

Нотация

Класс изображается в виде прямоугольника, образованного сплошной линией, разделенного на три горизонтальных раздела. В верхнем из них находится имя класса, а также другие свойства, которые применяются ко всему классу целиком. В среднем разделе содержится список атрибутов. В нижнем помещен список операций. При желании оба нижних раздела можно не указывать.
Использование. Классы объявляются на диаграммах классов, а используются как на них, так и на многих других диаграммах. В языке UML есть графическая нотация для объявления и использования классов, а также текстовая нотация для создания ссылок на описания прочих элементов модели. Объявление класса на диаграмме класса определяет все его содержание: атрибуты, операции и другие свойства. На прочих диаграммах определяются дополнительные отношения и приложения к классу.
На рис. 40 изображено стандартное объявление класса с указанием атрибутов и операций.

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

Рис. 41. Подробное объявление класса с указанием видимости
На рис. 42 вся внутренняя информация о классе скрыта. Однако при этом она никуда не исчезает и присутствует, по крайней мере, на одной из диаграмм.

Рис. 42.

Варианты представления

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

Рис. 43.
Рис. 43.

Дополнительные разделы. Для того чтобы показать прочие предопределенные или определяемые пользователем свойства модели, можно присоединить к символу класса дополнительные разделы. Это может понадобиться, чтобы указать бизнес-правила, ответственности, вариации, обрабатываемые сигналы, возникающие исключения и т. д.
В верхней части дополнительного раздела указывается его имя, причем писать его нужно шрифтом, который отличается от шрифта, использующегося для прочего содержимого этого раздела (рис. 44).
Имена стандартных разделов (для атрибутов и операций) указывать не нужно. Впрочем, в том случае, когда один из разделов скрыт, у другого можно для ясности указать имя. В основном разделы - это просто список из строк, каждая из которых представляет собой некоторое закодированное свойство класса. Обратите внимание, что в понятие "строка" входят также пиктограммы или вложенные документы (например, электронные таблицы или схемы). Возможно также использование и более сложных форматов, однако в языке UML они не определены. Если сущность дополнительного раздела можно определить по его содержимому, то его имя можно не указывать.

Рис. 44.
Рис. 44.
См. font usage; string.
Стереотип. Стереотип указывается в виде строки текста, взятой в угловые кавычки ("") над именем класса (рис. 45). Вместо строки текста в правый верхний угол этого же раздела можно поместить пиктограмму. Символ класса, в котором используется пиктограмма стереотипа, может быть вообще "свернут", так что видна, будет лишь сама пиктограмма и имя класса - внутри пиктограммы или под ней (рис. 170). Все прочие разделы класса скрыты.
См. stereotype.

Рис. 45.
Рис. 45.
Стилистические указания

  • Имя стереотипа набирается обычным шрифтом, заключается в угловые кавычки и располагается точно по центру, над именем класса.
  • Имя класса пишется жирным шрифтом с выравниваем по центру или по левому краю.
  • Атрибуты и операции записываются обычным шрифтом и выравниваются по левому краю.
  • Имена абстрактных классов и сигнатуры абстрактных операций записываются курсивом.
  • Раздел для атрибутов и операций лучше указывать только там, где они необходимы (по крайней мере, один раз во всех диаграммах системы) и скрывать во всех прочих случаях. Удобно, когда у класса есть свое исходное "местоположение", где и можно дать его полное описание. В прочих случаях достаточно минимального указания на класс.

Обсуждение

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

Стандартные элементы

implementationClass (класс реализации), type (тип).

Алфавитный указатель