OpenU.Ru
Если употребляется как прилагательное (типовой): объявленный классификатор,
значение которого может содержать значение атрибута,
параметра или переменной. Действительное значение
должно быть экземпляром типа или одного из его потомков.
Если употребляется как существительное (тип): стереотип
класса, предназначенный для определения множества экземпляров (например, объектов)
и операций, которые применимы к этим объектам. Тип не может включать в себя
методов.
См. для сравнения interface, implementation
class.
Тип и класс реализации
Для класса может быть задан стереотип тина или класса реализации (впрочем, у
класса может и не быть таких стереотипов). Тип служит для определения области
применения объектов, а также операций, применимых к этим объектам (при этом
не затрагивается вопрос программной реализации объектов или операций). Тип не
может включать в себя методы, однако он может предоставлять спецификации поведения
для операции. Кроме того, тип может содержать атрибуты и ассоциации,
которые требуются для определения повеления операций. Атрибуты и ассоциации
типа не определяют программную реализацию его объектов.
Класс реализации определяет физическую структуру данных и методы объектов в
таком виде, как это принято в традиционных языках программирования, например
C++ или Smalltalk. Говорят, что класс реализации реализует тип, если все операции
входят в этот класс как тип с соответствующим типу поведением. Он может служить
для реализации нескольких типов, а несколько классов реализации могут реализовывать
один и тот же тип. Атрибуты и ассоциации класса реализации не должны совпадать
с атрибутами и типами того типа, который его реализует. Класс реализации может
предоставлять методы, для своих операций исходя из своих физических атрибутов
и ассоциаций, а также может объявлять дополнительные операции, которых нет ни
в одном типе.
Объект должен являться экземпляром не более одного класса реализации, который
определяет физическую реализацию этого объекта. При этом объект может быть экземпляром
сразу нескольких типов. Если объект представляет собой класс реализации, то
этот класс должен реализовывать все тины, чьим экземпляром является данный объект.
Если в модели разрешена динамическая классификация, то за время своей жизни
объект может, как терять, так и приобретать различные типы. Тип, который используется
подобным образом, характеризует изменяющуюся роль, которую объект может сначала
принять на себя, а потом оставить.
Несмотря на отличия в использовании типов и классов реализации, они имеют одну
и ту же внутреннюю структуру, поэтому их можно моделировать как стереотипы классов.
И те, и другие полностью поддерживают обобщение, принцип подстановочности, а
также наследование атрибутов, ассоциации и операции. При этом типы могут специализировать
только тины, а классы реализации могут специализировать только классы реализации.
Типы и классы реализации может связывать исключительно отношение реализации.
Нотация
Простой класс изображается безо всяких ключевых слов. У типа есть ключевое
слово "type", а у класса реализации - "implementation class".
Пример вы найдете на рис. 185.
Если программная реализация типа осуществляется с помощью класса реализации,
то это моделируется при помощи отношения реализации, которое изображается в
виде пунктирной линии с наконечником и виде большого не закрашенного треугольника
("пунктирная стрелка обобщения" или "зависимость с большим не
закрашенным треугольным наконечником"). Такой символ указывает на то, что
наследуются операции, но не структура - атрибуты и ассоциации. Отношение реализации
можно использовать между любыми двумя классификаторами, один из которых поддерживает
операции другого. Однако чаще всего это отношение служит для реализации типа
при помощи класса реализации.
Рис. 185. Нотация дли типов и классов реализации
Обсуждение
И тип, и класс реализации представляют собой некие ограниченные концепции,
предназначенные для обычных языков программирования, например C++ и Smalltalk.
Концепция класса, принятая в языке UML, может быть использована и более непосредственным
образом. UML поддерживает множественную и динамическую классификации, что сводит
на нет необходимость различать типы и классы
реализации. Впрочем, различать их полезно при проектировании программного
кода для традиционных языков.