На этом шаге рассмотрим понятие заменяемости компонентов в UML.
Основное назначение каждого средства операционной системы, основанной на компонентах, – обеспечить сборку системы из бинарных заменяемых артефактов. Это значит, что вы можете проектировать систему, используя компоненты и затем реализуя их в виде артефактов. Вы можете даже развивать систему, добавляя новые компоненты и заменяя старые, но не перестраивая всю ее целиком.
Интерфейсы – ключевое средство, обеспечивающее такие возможности. В работающей системе допускается применение любых артефактов, которые реализуют компоненты, согласованные и предоставляющие нужный интерфейс. Расширение системы возможно за счет создания компонентов, предоставляющих новые сервисы через другие интерфейсы, которые прочие компоненты, в свою очередь, могут обнаружить и использовать. Эта семантика проясняет цели определения компонентов в UML. Компонент соответствует набору интерфейсов и обеспечивает его реализацию, что позволяет замещать его – как в логическом дизайне, так и в основанной на нем физической реализации.
Компонент замещаем – это значит, что его можно заменять другим компонентом, который соответствует тем же интерфейсам. Обычно механизм вставки и замены артефакта в исполнимой системе прозрачен для пользователя компонента и допускается объектными моделями (такими как COM+ и Enterprise Java Beans), которые требуют небольшой промежуточной трансформации, или осуществляется инструментами, автоматизирующими этот механизм.
Компонент – это часть системы – он редко используется сам по себе. Чаще он объединен с другими компонентами, то есть вовлечен в архитектурный или технологический контекст, где предполагается его использовать. Компонент логически и физически согласован и, таким образом, представляет структурный и/или поведенческий фрагмент более крупной системы. Во множестве систем он может быть использован повторно. Таким образом, компонент представляет собой фундаментальный строительный блок, на основе которого может быть спроектирована и составлена система. Это определение рекурсивно: то, что на одном уровне абстракции является системой, может быть компонентом на другом, более высоком уровне.
Наконец, компонент соответствует набору интерфейсов и обеспечивает его реализацию.
Вы можете организовать компоненты тем же способом, что и классы, – группируя их в пакеты.
Кроме того, допускается организация компонентов путем установления между ними связей зависимости, обобщения, ассоциации (включая агрегацию) и реализации. Одни компоненты могут быть построены из других.
На следующем шаге рассмотрим понятие порта в UML.