11.6.3 语义

构件

构件代表了系统中的一个模块化部分,它封装了内容。在它的环境中,它的表现形态(manifestation)是可替换的。

构件是一个自包含的单元,它封装了一组分类符的状态和行为。在系统中,构件通过它的提供和需求接口规定了它提供给它的客户以及它需要从其它的构件或服务得到的服务的一个正式契约。

构件是一个可替换单元,可以在设计时或运行时通过基于接口的兼容性提供了等价功能的一个构件来替换它。只要环境与构件的提供和需求接口完全兼容,它就可以与环境进行交互。类似的,系统可以通过增加新的增加了新功能的构件类型来得到扩展。大块的系统功能可以通过复用和组装构件来实现。

构件的建模时贯穿开发声明周期始终的,并且随后被精化到部署和运行期。一个构件可以被一个或多个制品来表示,反过来,该制品可以被部署到它的执行环境中。部署规约可以定义构件执行的参数值(参见第19章 部署)。

构件的需求和提供接口考虑到了(allow for)结构化特征(例如属性和关联端)和行为特征(例如操作和Receptions)的规约。一个构件可能直接实现一个提供接口,或者它的实现分类符实现该接口,或者它们可能是被继承的。需求和提供接口可以(可选的)通过端口来组织;这使得可以对命名的提供和需求接口集进行定义,这通常(并不总是)在运行时完成的。

通过它的公共可见的属性和操作,构件有一个外部视图(或者说是“黑盒”视图)。可选的,可以向接口、端口,以及构件自身附加一个类似协议状态机的行为,通过把操作调用序列上的动态约束显式化来更加精确的定义它的外部视图。

一个系统或其它环境下构件之间的连接可以使用构件图中构件上的相兼容的简单端口之间的依赖,或者是由插座和棒棒糖所代表的使用(Usages)和匹配的接口实现(InterfaceRealization)之间的依赖来结构化的进行定义。在使用和匹配的接口实现之间,或者是相兼容的简单接口之间创建一个连接依赖意味着可能还有其它的信息,例如性能需求、传输绑定,或者其它策略。这些额外信息可以通过stereotypes在profile中进行描绘。

构件还有一个通过其私有的属性和实现分类符所表示的内部视图(或者“白盒”视图)。这个视图展示了外部的行为在内部是如何被实现的。外部视图上的依赖为内部视图中可能发生什么提供了一个便捷的概览;它们并不规定必须发生什么。可以使用类似交互和活动那样更为详细的行为规约来详述外部行为向内部行为的映射。

构件中组装连接器的执行期语义是请求(信号和操作调用)穿过连接器的实例。来自或去向多个不同角色的多个连接器,或者n(n>2)元连接器的执行语义指示了引起或者处理该请求的实例将会在运行期来决定。

有一些标准的UML stereotypes可以应用到构件上。例如,«Subsystem»可以建模大型构件,«Specification»和«Realization»可以建模具有不同规约和实现定义的构件,其中一个规约可以有多个实现(参见Standard Profiles)。

一个构件可以被一组分类符所实现。此种情况下,构件拥有一组指向这些分类符的ComponentRealizations(构件实现)。

对于所有参与到或涉及到它的定义的模型元素,构件就像包一样,它们必须被构件所拥有或显式地引入。通常实现构件的分类符被构件所拥有。

isDirectlyInstantiated属性规定了应用到构件上的实例化的种类。如果为假,该构件被实例化为一个可访问的对象。如果为真,构件是在设计时被定义的,但在运行时由该构件规定的对象不存在,也就是说,通过构件的实现分类符或部分的实例化,构件是被间接实例化的。

results matching ""

    No results matching ""