На этом шаге рассмотрим понятие реализации в UML.
Реализация – это семантическая связь между классификаторами, один из которых специфицирует некий контракт, а другой обязуется его выполнять. Изображается пунктирной линией с большой незакрашенной стрелкой, указывающей на классификатор, который специфицирует контракт.
Реализация существенно отличается от связей зависимости, обобщения и ассоциации, а потому трактуется как отдельный тип связи. Семантически она являет собой нечто среднее между зависимостью и обобщением, и ее нотация представляет собой сочетание нотаций зависимости и обобщения. Реализацию используют в двух случаях: в контексте интерфейсов и в контексте коопераций.
В основном вы будете применять реализацию для описания связи между интерфейсом и классом (или же компонентом, который предоставляет операцию либо сервис для него). Интерфейс – это набор операций, используемых для спецификации сервиса класса или компонента. Таким образом, интерфейс описывает контракт, который класс или компонент обязаны исполнять. Интерфейс может быть реализован многими такими классами или компонентами, и напротив, класс или компонент может реализовывать множество интерфейсов.
Интерфейсы позволяют вам отделить спецификацию контракта (то есть сам интерфейс) от его реализации классом или компонентом. Более того, интерфейсы связывают логическую и физическую части архитектуры системы. Например, как показано на рис. 1, класс AccountBusinessRules (БизнесПравилаБанковскогоСчета) в системе ввода заказов в представлении дизайна системы может реализовывать такой интерфейс, как IruleAgent (IАгентПравила). Тот же самый интерфейс может быть реализован компонентом (в данном случае – acctrule.dll) в представлении реализации системы.
Рис.1. Реализация интерфейса
Отметим, что вы можете представить реализацию двумя способами: в канонической форме (применяя стереотип interface и пунктирную линию с большой незакрашенной стрелкой) или в сокращенной форме (используя нотацию "леденца" (lollipop notation) для предоставляемого интерфейса).
Реализацию следует применять также для изображения связи между вариантом использования и кооперацией, которая его реализует (см. рис. 2). В этом случае почти всегда рисуется пунктирная линия со стрелкой.
Рис.2. Реализация варианта использования
Когда класс или компонент реализует интерфейс, это означает, что клиенты могут полагаться на данный класс/компонент в том, что он позаботится о поведении, специфицированном в интерфейсе. То есть класс или компонент реализует все операции интерфейса, будет отвечать на все его сигналы и во всем следовать протоколу, установленному интерфейсом для клиентов, которые используют эти операции или посылают эти сигналы.
На следующем шаге рассмотрим типичные приемы моделирования систем связи в UML.