Звоните! 
 (926)274-88-54 
 Бесплатная доставка. 
 Бесплатная сборка. 
Ассортимент тканей

График работы:
Ежедневно. С 8-00 до 20-00.
Почта: soft_hous@mail.ru
Читальный зал -->  Диаграммы параллельных состояний 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [ 29 ] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Интерфейсы и абстрактные классы

В языках программирования используется единственная объектная конструкция - класс, который включает как интерфейс, так и реализацию. Если вы определяете подкласс, то он наследует и то, и другое. К сожалению, разработчики крайне редко используют интерфейс как отдельную конструкцию.

Интерфейс в чистом виде, как, например, в языке Java, представляет собой класс без каких-либо деталей реализации и поэтому содержит только определения операций, но не тела методов и не поля. Часто интерфейсы определяются на основе абстрактных классов. Такие классы могут предполагать некоторую реализацию, но в большинстве случаев они используются в основном для определения интерфейса. Дело заключается в том, что механизм подклассов или какой-либо другой механизм может обеспечить реализацию, однако клиенты никогда не должны видеть ее, а только интерфейс.

Типичным примером подобной ситуации является текстовый редактор, изображенный на рис. 6.10. Чтобы сделать редактор независимым от платформы, мы определяем независимый от платформы абстрактный класс Окно. Этот класс не содержит тел методов; он определяет только интерфейс для использования в текстовом редакторе. За-

Текстовый редактор

Window

{абстрактный}

вывестиНаПереднийПланО убратьНаЗаднийПланО

Зависимость

Окно Windows

ВывестиНаПереднийПланО убратьНаЗаонийПланО

Окно XII

ВывестиНаПереднийПланО убратьНаЗацнийПланО

Окно Мвс

вывестиНаПереднийП лан() убратьНаЗаонийПланО

Рис. 6.10. Окно как абстрактный класс



висимые от платформы подклассы могут использоваться как производные элементы.

Если вы определяете абстрактный класс или метод, то язык UML требует выделять его имя курсивом. Можно также (или вместо курсива) использовать ограничение {abstract} (абстрактный). На бумаге я обычно использую это ограничение, поскольку не умею писать курсивом. Однако я предпочитаю изящество курсива, если пользуюсь инструментальным средством для построения диаграмм.

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

На рис. 6.11 показаны классы ВходнойПоток, ВводДанных и Вход-нойПотокДанных (определяемые в стандартном пакете java.io). При этом ВходнойПоток является абстрактным классом, а ВводДанных -интерфейсом.

ВходнойПоток

интерфейс ВводДанных

Обобщение

ВходнойПотокДанных

ЗапросНаВвод

Зависимость

Реализация

Рис. 6.11. Интерфейсы и абстрактный класс: пример на языке Java

Предположим, некоторому классу-клиенту, скажем ЗапросНаВвод, требуется воспользоваться функциональностью класса ВводДанных. Класс ВходнойПотокДанных реализует интерфейсы как класса Ввод-Данных, так и класса ВходнойПоток, являясь при этом подклассом последнего.

Связь между классами ВходнойПотокДанных и ВводДанных представляет собой отношение реализации. Реализация сознательно изображается аналогично обобщению; она указывает, что один из классов реализует поведение, специфицированное в другом классе. Допускается ситуация, когда секция реализации одного класса реализует другой класс; это означает, что реализующий класс должен согласовывать свой интерфейс, но вовсе не должен использовать наследование.

В модели уровня спецификации отсутствует различие между реализацией и механизмом подтипов.



Ссылочные объекты и объекты-значения 103

Связь между классами ЗапросНаВвод и ВводДанных представляет собой отношение зависимости (dependency). В данной ситуации она показывает, что если изменится интерфейс класса ВводДанных, то класс ЗапросНаВвод также может измениться. Одна из целей разработки состоит в сведении к минимуму количества зависимостей, для того чтобы воздействие подобных изменений было минимальным. (Более подробно о зависимостях будет сказано в главе 7.)

Альтернативная и более компактная нотация изображена на рис. 6.12. Здесь интерфейсы представлены в форме маленьких кружков (называемых часто леденцами на палочках), которые соединены с реализующими их классами.

Интерфейс.

ВводЦанных П-<-

ВходнойПотокДанных

Зависимость

ЗапросНаВвод

ВходнойПоток О

Рис. 6.12. Графическая нотация для интерфейсов

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

Абстрактные классы и интерфейсы похожи, однако между ними существует различие. Как те, так и другие позволяют определить интерфейс и отложить его реализацию на более позднее время. Однако абстрактный класс позволяет дополнить реализацию некоторых методов, в то время как интерфейс вынуждает отложить определение всех методов.

Ссылочные объекты и объекты-значения

Одно из наиболее общих свойств объектов заключается в том, что они обладают индивидуальностью (identity). Это так, но все обстоит не столь просто, как может показаться. На практике индивидуальность важна для ссылочных объектов и не столь важна для объектов-значений.

Ссылочные объекты (reference objects) - это такие объекты, как Клиент. В данном случае индивидуальность очень важна, поскольку в ре-



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [ 29 ] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57



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



Звоните! Ежедневно!
 (926)274-88-54 
Продажа и изготовление мебели.


Копирование контента сайта запрещено.
Авторские права защищаются адвокатской коллегией г. Москвы
.