配件的作用是通过接口将声明的组件连接起来,或者实现自己提供的接口。如果连接端点包括参数化接口实例,那么连接不同,语句会有什么不同么?根据操作符的两个端点是否包括参数化接口,可以分成下面两种情况。
第一种情况:两个端点都包括参数化接口。
在这种情况下,虽然两个端点都包含了参数化接口,但是对应连接语句的写法与两端都不包括参数化接口的写法一致。
例3.27:
在组件ActiveMessageC和组件CC2420ActiveMessageC的规范中都申明了提供参数化接口AMSend。在组件ActiveMessageC的实现代码中输出组件CC2420ActiveMessageC的参数化接口AMSend的连接语句如上所示。在连接语句中不需要附加索引。
第二种情况:一个端点中包括参数化接口。
这种情况下,配件中的连接语句写法有所变化,在参数化接口中要填充确定的参数(索引)。这里仍然以组件ActiveMessageC为例来介绍。在正常情况下,最上层的应用并不直接连接组件ActiveMessageC,而是使用组件AMSenderC和组件AMReceiver,这些组件提供了简单的接口。这些提供简单接口的组件最后一定会连接到具有参数化接口的ActiveMessageC上。为了将焦点聚集到组件ActiveMessageC上,我们尝试跨越中间的组件组织关系,考虑有一个AM层的测试应用TestAMent。该应用直接使用组件ActiveMessageC。TestAMAppC是顶层应用配件,连接模块TestAMC的接口Send(Receive)到组件ActiveMessageC的接口参数为240的参数化接口AMSend(Receive)上,如例3.29行(4)、行(5)语句所示。
例3.28:(www.xing528.com)
1)TestAMAppC配件
2)TestAMC模块
模块TestAMC负责收发包;配件TestAMAppC把TestAMC模块和MainC组件连接起来,该配件表明当TestAMC调用AMSend.send()时,它调用ActiveMessageC中编号为240的ActiveMessageC.AMSend命令(发送分组的网络协议号为240)。类似的,下层组件收到协议类型为240的分组时,也会将该分组交给TestAMC。由于这些常量在配件中指定,因此不受限于模块。从模块的角度看,这些常量甚至不存在。也就是说从TestAMC的角度看,下面两行语句是等价的。
它们的不同之处在于后面一行使用了参数化接口,参数实际上是接口中函数的一个参数。当调用send()时,参数就是传递给它的编号并且在通知sendDone时也必须指定这个常量。参数化接口存在两个关键点:
●当TestAMC调用send时自动填充了参数;
●当ActiveMessageC触发sendDone时,会自动地根据参数提交分组。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。