Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uml Book (Rus).doc
Скачиваний:
15
Добавлен:
11.08.2019
Размер:
58.74 Mб
Скачать

Компоненты и интерфейсы

Интерфейс (см. главу 11) - это набор операций, которые описывают услуги, предоставляемые классом или компонентом. Существенным является отношение между компонентом и интерфейсом. Все популярные компонентные средства опе­рационных систем (такие как СОМ+, CORBA и Enterprise JavaBeans) использу­ют интерфейсы для «склеивания» различных компонентов.

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

Как видно из рис. 25.4, отношения между компонентом и его интерфейсами можно изобразить двумя способами. Первый, наиболее распространенный, состо­ит в том, что интерфейс рисуется в свернутой (elided) форме. Компонент, реализу­ющий интерфейс, присоединяется к нему с помощью отношения свернутой реа­лизации (см. главу 10). Во втором случае интерфейс рисуется в развернутом виде, возможно с раскрытием операций. Реализующий его компонент присоединяется

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

Интерфейс, реализуемый компонентом, называется экспортируемым интер­фейсом, (Export interface). Это означает, что компонент через данный интерфейс предоставляет ряд услуг другим компонентам. Компонент может экспортировать много интерфейсов. Интерфейс, которым компонент пользуется, называется им­портируемым (Import interface). Это означает, что компонент совместим с таким интерфейсом и зависит от него при выполнении своих функций. Компонент мо­жет импортировать различные интерфейсы, причем ему разрешается одновремен­но экспортировать и импортировать интерфейсы.

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

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

Заменяемость двоичного кода

Главная задача каждого компонентно-ориентированного средства в любой опе­рационной системе - обеспечить возможность сборки приложений из заменяемы ^

двоичных частей. Это означает, что вы можете создать систему из компонентов, а затем развивать ее, добавляя новые компоненты или заменяя старые, - без пере­компиляции. Именно интерфейсы позволяют достичь этого. Специфицируя интер­фейс, вы можете вставить в уже работающую систему любой компонент, который совместим с этим интерфейсом или предоставляет его. Систему можно расширять, подставляя компоненты, обеспечивающие новые услуги с помощью дополнитель­ных интерфейсов, а также компоненты, способные распознать и использовать эти новые интерфейсы. Такая семантика объясняет, что стоит за определением компо­нентов в UML. Компонент - это физическая заменяемая часть системы, которая совместима с одними интерфейсами и реализует другие.

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

Во-вторых, компонент заменяем. Вместо одного компонента можно подставить другой, если он совместим с тем же набором интерфейсов. Обычно механизм до­бавления или замены компонента с целью формирования исполняемой системы прозрачен для пользователя и обеспечивается либо объектными моделями (таки­ми, как СОМ+ или Enterprise JavaBeans), которые часто совсем не требуют внеш­него вмешательства, либо инструментальными средствами, автоматизирующими этот механизм.

В-третьих, компонент - это часть системы (см. главу 31). Компонент редко выступает в отрыве от остальных: обычно он работает совместно с другими ком­понентами и, стало быть, встраивается в архитектурный или технологический контекст, для которого предназначен. Компонент является логически и физичес­ки способным к сцеплению, то есть представляет собой значимый структурный и/или поведенческий фрагмент некоторой большей системы. Компонент можно повторно использовать в различных системах. Таким образом, компоненты пред­ставляют собой фундаментальные строительные блоки, из которых собираются системы. Это определение рекурсивно - система, рассматриваемая на одном уров­не абстракции, может быть всего лишь компонентом на более высоком уровне,

В-четвертых, как упоминалось выше, компонент совместим с одним набором интерфейсов и реализует другой набор.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]