Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема-05-02испр.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
797.95 Кб
Скачать

5.2.4.13. Интерфейс и реализация

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

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

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

Рассмотрим пример, проясняющий концепцию интерфейса. Клавиатура, которая использует­ся для обмена информацией с компьютером, является повторно используемым интерфейсом. Ее операции нажатия клавиш позаимствованы от печатающей машинки. Размещение клавиш точно соответствует прототипу, но главное – из одной системы в другую перенесена операция нажатия клавиши. Другие операции интерфейса – переключение регистра, фиксация регистра прописных букв и табуляция – тоже перенесены с печатающей машинки. Конечно, клавиатура компьютера обеспечивает выполнение и других операций: на ней имеются управляющие клавиши и др. Следо­вательно, интерфейс может задавать некий базовый набор операций класса, но не обязательно ис­черпывающий.

Изображение интерфейса аналогично изображению класса – он тоже представляется прямо­угольником. Отличие состоит в том, что интерфейс как набор операций не имеет атрибутов. В то же время, из изображения класса можно исключать атрибуты. Как же безошибочно отличить ин­терфейс от класса, у которого просто не показаны атрибуты? Во-первых, можно использовать кон­струкцию стереотипа и поместить надпись «интерфейс» над именем интерфейса. Во-вторых, имя любого интерфейса можно начинать с буквы «I». Существует еще один способ представления класса и интерфейса – с помощью небольшого кружочка, соединенного линией с классом, как по­казано на рис. 5.2-32.

Клавиатура

-О ПечатнаяМашинка

Рис. 5.2-32. Клавиатура реализует интерфейс печатной машинки.

Класс может реализовывать несколько интерфейсов, а интерфейс, в свою очередь, может быть реализован несколькими классами.

Клавиатура компьютера частично «реализует» поведение пишущей машинки. Соответствен­но, взаимосвязь между классом и интерфейсом называется реализацией. Она изображается пунк­тирной линией с полым треугольником, примыкающим к интерфейсу и указывающим на него. Та­кой вид графическою представления взят специально для того, чтобы подчеркнуть сходство меж­ду отношениями реализации и наследованием. Между ними есть только одно отличие: реализация представляется пунктирной линией, а наследование – сплошной. На рис. 5.2-33 показано изображе­ние отношения реализации между интерфейсом «ПечатнаяМашинка» и классом «Клавиатура».

Рис. 5.2-33. Отношение реализации между интерфейсом и классом

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

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

Таким образом, наследование можно рассматривать как взаимосвязь между родителем и ре­бенком. Родитель передает физические атрибуты (цвет глаз, цвет волос и т.д.) ребенку, поведение которого тоже совпадает с родительским. Реализация напоминает взаимосвязь учителя и ученика: учитель не передает физические атрибуты ученику, но ученик перенимает поведение и образ дей­ствий от учителя.