
- •Тема 5.2. Теоретические основы объектно-ориентированного программирования
- •5.2.1. Основные определения
- •5.2.2. Объектно-ориентированная декомпозиция и объектно-ориентированные модели
- •5.2.3. Объектная модель и ее составные части
- •5.2.4. Средства uml для моделирования классов и их отношений
- •5.2.4.1. Введение в uml
- •5.2.4.2. Статическое представление системы в диаграммах классов
- •5.2.4.3. Визуализация класса
- •5.2.4.4. Уровни представления
- •5.2.4.5. Идентификация классов
- •5.2.4.6. Отношения
- •5.2.4.7. Наследование и обобщение
- •5.2.4.7. Абстрактные классы
- •5.2.4.8. Агрегация и композиция
- •5.2.4.9. Ассоциации
- •5.2.4.10. Классы ассоциаций
- •5.2.4.11 Кратность
- •5.2.4.13. Интерфейс и реализация
- •5.2.4.14. Области видимости
- •5.2.4.15. Зависимости
- •5.2.5. Визуализация существующего кода.
- •Практическое руководство. Поиск кода с помощью обозревателя архитектуры
- •Открытие обозревателя архитектуры
- •Обозреватель архитектуры: домены, представления, узлы, типы узлов и типы ссылок
- •Поиск исходного кода в решении Visual Studio
- •Представление классов в обозревателе архитектуры
- •Поиск кода в решении
- •Поиск скомпилированного кода
- •5.2.6. Visual Studio 2010 - uml моделирования проектов
5.2.4.13. Интерфейс и реализация
Интерфейс – это описание поведения объектов, в котором не указывается их реализация и состояние. Интерфейс описывает операции, но не атрибуты и не имеет исходящих ассоциаций. Интерфейс может быть реализован одним или несколькими классами или компонентами, причем каждый класс или компонент должен программно реализовывать операции данного интерфейса.
После создания нескольких классов можно обнаружить, что они не связаны с отдельным родителем, но их поведение может характеризоваться некоторыми одинаковыми операциями с одинаковыми сигнатурами. Можно запрограммировать эти операции для одного из классов и повторно использовать этот код для других. Можно также разработать набор операций для классов в одной системе и повторно использовать их для классов другой системы.
В любом случае, можно выделить набор повторно используемых операций. Это осуществляют с помощью специальной конструкции UML – интерфейса, представляющего собой набор операций, которые задают некоторые аспекты поведения класса и представляют его для других классов.
Рассмотрим пример, проясняющий концепцию интерфейса. Клавиатура, которая используется для обмена информацией с компьютером, является повторно используемым интерфейсом. Ее операции нажатия клавиш позаимствованы от печатающей машинки. Размещение клавиш точно соответствует прототипу, но главное – из одной системы в другую перенесена операция нажатия клавиши. Другие операции интерфейса – переключение регистра, фиксация регистра прописных букв и табуляция – тоже перенесены с печатающей машинки. Конечно, клавиатура компьютера обеспечивает выполнение и других операций: на ней имеются управляющие клавиши и др. Следовательно, интерфейс может задавать некий базовый набор операций класса, но не обязательно исчерпывающий.
Изображение интерфейса аналогично изображению класса – он тоже представляется прямоугольником. Отличие состоит в том, что интерфейс как набор операций не имеет атрибутов. В то же время, из изображения класса можно исключать атрибуты. Как же безошибочно отличить интерфейс от класса, у которого просто не показаны атрибуты? Во-первых, можно использовать конструкцию стереотипа и поместить надпись «интерфейс» над именем интерфейса. Во-вторых, имя любого интерфейса можно начинать с буквы «I». Существует еще один способ представления класса и интерфейса – с помощью небольшого кружочка, соединенного линией с классом, как показано на рис. 5.2-32.
Клавиатура
-О ПечатнаяМашинка
Рис. 5.2-32. Клавиатура реализует интерфейс печатной машинки.
Класс может реализовывать несколько интерфейсов, а интерфейс, в свою очередь, может быть реализован несколькими классами.
Клавиатура компьютера частично «реализует» поведение пишущей машинки. Соответственно, взаимосвязь между классом и интерфейсом называется реализацией. Она изображается пунктирной линией с полым треугольником, примыкающим к интерфейсу и указывающим на него. Такой вид графическою представления взят специально для того, чтобы подчеркнуть сходство между отношениями реализации и наследованием. Между ними есть только одно отличие: реализация представляется пунктирной линией, а наследование – сплошной. На рис. 5.2-33 показано изображение отношения реализации между интерфейсом «ПечатнаяМашинка» и классом «Клавиатура».
Рис. 5.2-33. Отношение реализации между интерфейсом и классом
Реализация (realization) связывает один элемент модели (например, класс) с другим элементом (например, интерфейсом), который дает спецификацию его поведения, но не структуру и не реализацию, в программном коде. Реализующий элемент должен, по крайней мере, поддерживать (путем наследования или напрямую) все операции, имеющиеся у реализуемого элемента. Реализация, как правило, используется с такими элементами спецификации, как интерфейсы, однако ее можно связать и с конкретным элементом и модели, чтобы показать, что его спецификация (но не программная реализация) нуждается в дополнительной поддержке. Например, отношение реализации можно использовать, чтобы показать связь между оптимизированной версией класса и более простой, но менее эффективной его версией.
Обобщение, и реализация служат для связи общих описаний с более детализированными. Обобщение связывает два элемента одного семантического уровня (например, одного уровня абстракции), причем эти элементы, как правило, находятся в пределах одной модели. Реализация же связывает элементы, находящиеся на разных семантических уровнях (например, аналитический класс и класс проектирования или интерфейс и класс) и, зачастую, в различных моделях. На разных стадиях разработки может существовать две или более полных иерархии классов, чьи элементы связаны отношениями реализации. Эти иерархии могут даже отличаться по форме, так как реализующие классы могут иметь свои собственные реализационные зависимости, не относящиеся к классам.
Таким образом, наследование можно рассматривать как взаимосвязь между родителем и ребенком. Родитель передает физические атрибуты (цвет глаз, цвет волос и т.д.) ребенку, поведение которого тоже совпадает с родительским. Реализация напоминает взаимосвязь учителя и ученика: учитель не передает физические атрибуты ученику, но ученик перенимает поведение и образ действий от учителя.