10.4 Interfaces

10.4.1 概要

Interfaces(接口)声明了一致的服务,通过InterfaceRealizations实现了该接口的行为分类符实现这些服务。

10.4.2 抽象语法

图10.7 Interfaces

10.4.3 语义

Interfaces

接口是一种分类符,它声明了一组公开的特征和组成一个一致服务的义务(或职责)。一个接口规定了一个契约;任意实现了该接口的分类符实例都应该履行这个契约。与接口相关的义务以约束(例如前置和后置条件)或协议规约的形式体现,它们可能对通过接口的交互施加次序约束。

接口不应被实例化。接口规约被一个行为分类符所实现,这意味着该行为分类符代表了一个遵循该接口规约的公共门面(facade)。

注意. 一个给定的行为分类符可以实现一个或多个接口并且一个接口可以被不同的行为分类符所实现。

接口对实现它们的行为分类符应该拥有的公共特征和义务进行分组刻画提供了一种手段。接口没有规定自己如何被实现,只是规定实现它的行为分类符应该支持什么。即,这样的行为分类符应该提供一个包括属性、操作,以及外部可见的遵循该接口的行为的公共门面。

注意. 如果接口声明了一个属性,着并不意味着实现它的行为分类符在它的实现中真的有这样一个属性,而只是对外部观察者看起来是那样。

行为分类符所实现的一组接口称为它的提供(provided)接口,它们代表了该分类符的实例提供给它们的客户的服务和义务。接口也可以被用于规定需求(required)接口,它们由行为分类符和相应的接口之间的一个使用(Usage)依赖来规定。需求接口规定了行为分类符为了向它的客户履行义务和执行它的功能所需要的服务。

接口拥有的属性(properties,包括关联端)意味着实现接口的行为分类符应该维护相应的熟悉的类型和multiplicity信息,并提供对此信息的有效检索和修改。

一个接口上声明的熟悉并不意味着在实现该接口的行为分类符中会有这么一个属性(例如,该属性可以被实现为等级的get和set操作)。接口还可能拥有约束,它们对实现接口的行为分类符的特征施加约束。

接口可能拥有一个规定了接口的操作和Receptions的事件序列以及前置/后置条件的ProtocolStateMachine(协议状态机)。实现了接口的行为分类符应该遵循该接口所拥有的协议状态机。

接口可以被参数化、绑定,以及用作模板参数。

行为分类符和接口之间的InterfaceRealization(接口实现)关系意味着该行为分类符通过支持该接口以及它的所有父接口所拥有的特征来遵循该接口规定的契约。对于行为特征,行为分类符将有与接口中定义的每个操作或Reception对应的一个操作或Reception。对于属性,行为分类符会提供对其 代表的状态进行维护的功能。这可以通过直接映射到行为分类符的一个属性来实现,还可以通过该行为分类符的状态机或一对支持该状态信息检索和修改的操作来实现。

10.4.4 表示法

接口可以使用带有«interface»关键字的分类符的缺省表示法来指示。

从一个行为分类符到一个接口的接口实现依赖可以把接口表示为一个圆或球,通常称为棒棒糖(lollipop),用接口的名称标注,并带有一条连接到行为分类符的实线。

从一个分类符到一个接口的使用依赖可以把接口表示为一个半圆或插座(socket),用接口的名称标注,附加一条连接到分类符的实线。

从行为分类符的一个泛化继承而来的接口在图中可以通过一个lollipop来表示。这些接口通过在它们的名称前加一个插入符号来指示。UML的早期版本允许在接口名称前加一个斜杠(“/”)来指示;该表示法是允许的,但不鼓励。

如果一个依赖是从一个使用转变为一个使用一个插座和一个lollipop的接口实现,那么依赖的箭头可以被显示为插座和lollipop的连接。

10.4.5 示例

从ProximitySensor到ISensor的接口实现依赖使用球(lollipop)图示来表示(图10.8)。

图10.8 ISensor is a provided Interface of ProximitySensor

图10.9展示了一个继承提供接口的lollipop图示。

图10.9 ISensor, a provided Interface of ProximitySensor, is shown as inherited by CapacitiveSensor

从TheftAlarm到ISensor的使用依赖使用插座图示来展示(图10.10)。

图10.10 ISensor is a required Interface of TheftAlarm

或者,当接口以矩形图示表示是,接口实现和使用依赖使用适当的依赖箭头来指示(图10.11)。箭头尾部的分类符实现或使用箭头头部的接口。

图10.11 Alternative notation for required and provided Interface

通常,两个或更多的接口会通过应用特定的依赖而相互耦合。此种场景下,每个接口代表了一个多方“协议”中的一个特定角色。这种协议角色耦合类型可以使用接口之间的关联来描述,如图10.12所示。这里展示了三个接口的规约,IAlarmISensorIBuzzerIAlarmISensor表示为参与了一个双边协议,意味着ISensor的任意实现必须维护所需的信息来实现theAlarm属性,类似的,对IAlarm和theSensor也一样。IBuzzer描述了一个必须可以被_IAlarm的实现者所访问的接口。

图10.12 A set of collaborating Interfaces

results matching ""

    No results matching ""