OpenU.Ru
Отношение между спецификацией и ее программной реализацией; указание на то,
что поведение наследуется без структуры.
См. interface.
Семантика
Спецификация описывает поведение или структуру чего-либо, по не указывает на
реализацию этого поведения в программном коде. Реализация в программном коде
описывает подробности эффективной реализации поведения на компьютере. Отношение,
существующее между элементом, определяющим поведение, и элементом, который предоставляет
программную реализацию, называется отношением реализации. Существует много способов
реализовать заданную спецификацию. Кроме того, элемент может реализовывать сразу
несколько спецификаций. Следовательно, реализация - это отношение типа "многие-ко-многим".
В отношении реализации клиент должен поддерживать все поведение поставщика,
однако при этом структура и программная реализация этих элементов могут отличаться.
Например, классификатор-
должен поддерживать операции классификатора-поставщика, а также все конечные
автоматы, которые определяют его внешнее поведение. При этом все его атрибуты,
ассоциации, методы и те конечные автоматы, которые определяют программную реализацию,
для клиента несущественны. Обратите внимание, что клиент в действительности
не наследует операции поставщика. Он должен объявить их самостоятельно или унаследовать
от своего предка таким образом, чтобы в него были включены все операции поставщика.
Другими словами, в отношении реализации поставщик указывает на те операции,
которые должны присутствовать в клиенте, но ответственность за их наличие лежит
на самом клиенте.
Некоторые виды элементов, например интерфейсы и варианты использования, предназначены
именно для спецификации поведения и не содержат никакой информации относительно
программной реализации. Прочие виды элементов (например, классы) служат для
реализации поведения в программном коде. Они несут в себе информацию относительно
программной-реализации, однако их можно использовать и более абстрактным образом
- в качестве спецификаторов. Как правило, отношение реализации связывает два
элемента - элемент спецификации (вариант использования или интерфейс) и элемент
программной реализации (кооперацию или класс). Впрочем, элемент программной
реализации, такой как класс, можно использовать и для определения спецификации
и помещать его на ту сторону отношения реализации, которая к ней относится.
В этом случае на клиента влияют только те части класса-поставщика, которые относятся
к спецификации. Все, что относится к программной реализации, для отношения реализации
несущественно. Если говорить более точно, то реализация представляет собой отношение
между двумя элементами, при котором части одного элемента, специфицирующие внешнее
поведение, ограничивают программную реализацию другого. Это отношение можно
считать наследованием спецификации поведения, при котором не наследуется структура
или программная реализация (и при котором существует необходимость, чтобы клиент
объявлял свои операции сам).
Если специфицирующим элементом является абстрактный класс, у которого нет ни
атрибутов, ни ассоциаций, а есть только абстрактные операции, то любые специализации
такого абстрактного класса будут его реализовывать (поскольку у такого элемента
кроме спецификации нечего наследовать).
Элемент, отвечающий за программную реализацию, должен поддерживать все поведение,
которое есть у специфицированного элемента. Например, в классе должны содержаться
все операции интерфейсов, которые он реализует, причем их семантика должна согласовываться
со всеми необходимыми для интерфейсов спецификациями. Клacc может служить для
реализации дополнительных операций в программном коде, а программная реализация
операций может служить и другим целям, при условии, что не нарушены спецификации
операций интерфейсов.
Нотация
Отношение реализации обозначаются в виде пунктирной стрелки с треугольным не закрашенным наконечником, который располагается у элемента, предоставляющего спецификацию. Хвост стрелки находится у элемента, который предоставляет программную реализацию (рис. 153).
Обсуждение
Теперь рассмотрим еще один важный момент - реализацию варианта использования
при помощи кооперации (рис. 154). Вариант использования специфицирует внешне
видимую функциональность и последовательности поведения, но не предоставляет
программную реализацию. Кооперация описывает объекты, которые реализуют поведение
варианта использования в программном коде, и то, каким способом они для этого
взаимодействуют между собой. Как правило, одна кооперация служит для программной
реализации одного варианта использования, однако ее можно реализовать при помощи
коопераций более низкого уровня, каждая из которых делает часть, общей работы.
Объекты и классы, которые используются для программной реализации кооперации,
обычно кроме этого представлены и в других кооперациях. Каждый класс в кооперации
уделяет часть своей функциональности реализуемому (в программном коде) варианту
использования. Таким образом, в конечном итоге вариант использования реализуется
в программном коде по частям, посредством нескольких классов.
Рис. 154. Реализация варианта использования при помощи кооперации