在可复用的智能虚拟控件的设计过程中,除了需要从库中检索和匹配智能虚拟控件外,智能虚拟控件的替换技术也十分重要,智能虚拟控件的替换体现了组装。从智能虚拟控件库中选择的智能虚拟控件,首先需要进行鉴别以确定是否符合要求,之后还要考察智能虚拟控件的可替换性,即智能虚拟控件能否插入到指定的位置或替换指定位置的原有智能虚拟控件。这里主要讨论基于接口和规格描述的智能虚拟控件替换问题。
1.可替换性
智能虚拟控件的可替换性是指一个智能虚拟控件用另一个智能虚拟控件代替,同时又不影响系统可观测到的行为。主要从以下几个方面考察智能虚拟控件的可替换性:
1)智能虚拟控件的接口:其中包括智能虚拟控件的类型、操作名、参数、返回值等,主要考察智能虚拟控件的静态特性。
2)接口的约束:关于智能虚拟控件接口集合的约束,如操作的执行次序。
3)智能虚拟控件的行为:主要描述智能虚拟控件的动态行为。智能虚拟控件的行为比接口更进一步考察了它的可替换性,例如:分别实现整数“+”和整数“-”的两个智能虚拟控件具有相同的接口,但有相反的行为,这种情况下智能虚拟控件是不能被替换。
2.替换方法
根据智能虚拟控件替换时的匹配程度,可以将智能虚拟控件的替换方法分成以下几类:
1)一致性(Exact-Pre-Post)替换:也称为完全匹配替换,是指当两个智能虚拟控件的接口及行为完全匹配时,可以用其中一个替换另一个。
2)可插入式(Plug-in)替换:是指当两个智能虚拟控件的接口匹配,且一个智能虚拟控件A的行为蕴涵另一个智能虚拟控件B的行为时,可以用B替换A的一种方法。
3)卫式插入(Guarded-Plug-in)替换:是指当一个智能虚拟控件与另一个智能虚拟控件产生的效应相同时,用其中一个智能虚拟控件替换另一个智能虚拟控件的方法。这是一种比插入式替换较弱的替换方法,具体地讲,就是当智能虚拟控件的接口一致,同时被替换智能虚拟控件的行为与替换智能虚拟控件的行为效应相同时的一种替换法。
3.替换描述函数
用接口(Port)描述与智能虚拟控件接口相关的信息,用特征(Spectification)来描述与智能虚拟控件行为(Behavior)相关的信息。则智能虚拟控件可表示为
C=∑(Cport,Cspec)
其中,Cport表示智能虚拟控件某个接口信息;Cspec表示与接口Cport相应的智能虚拟控件行为。
给定两个智能虚拟控件C=∑(Cport,Cspec)和C′=∑(C′port,C′spec),则智能虚拟控件C′替换智能虚拟控件C可表示为
Substitute:Component,Component→Bool
Substitute(C,C′)=∑[CF(Cport,C′port)∧CF(Cspec,C′spec)]
其中,CF是进行匹配度检查的BOOL函数,可表示为
CF:Component,Component→Bool
不同的替换类型中CF的含义定义也不同,下面分别介绍。
(1)一致性替换 当智能虚拟控件接口用操作名、参数类型、参数个数、返回类型来描述时,接口的“一致性”检查CF函数可表示为:
CF(Cport,C′port)=(Coperator=C′operator)∧(Cparanum=C′paranum)∧(Cparatype=C′Paratype)∧(Creturntype=C′returntype)
当用前置条件Pre和后置条件Post表示智能虚拟控件C的某个行为约束时,有(www.xing528.com)
Cpre→Cpost
定义智能虚拟控件的行为“一致性”检查CF函数为
CF(Cspec,C′spec)=(Cpre⇔C′pre)∧(Cpost⇔C′post)
当智能虚拟控件的特征一致,而接口不一致,针对这一问题David Garlan提出了一些解决办法,如开发一个软件外壳对智能虚拟控件进行包装,以适应原智能虚拟控件的接口约束等。
(2)可插入式替换 与“一致性”替换的接口匹配函数类似,可插入替换的接口匹配函数CF表示为
CF(Cport,C′port)=(Coperator=C′operator)∧(Cparanum=C′paranum)∧(Cparatype=C′paratype)∧(Creturntype=C′returntype)
分别用Cfunc和C′func表示智能虚拟控件C和C′的函数集合,用前置条件Pre和后置条件post来表示对智能虚拟控件中某个行为的约束时,有
CF(Cspec,S′spec)=∀F∈Cfunc∃F′∈C′func(Fpre⇒F′pre)∧(F′post⇒Fpost)
可由智能虚拟控件中的一个函数来说明这种匹配的可替换性,如图9-3所示。
关于可插入替换的形式化证明,Zaremski等人做了这方面的研究。
下面举例说明可插入替换的应用。假设智能虚拟控件库中存在两个智能虚拟控件:Component Stack和Compo-nent Queue,分别说明如下:
图9-3 函数的可替换性
假设现在我们需求一个智能虚拟控件L,有关L的描述如下:
在检查可替换性时,智能虚拟控件库中有两个函数Push及EntQ与L之间是符合可插入式匹配的。函数Push与EntQ除了函数名及变量名不同外,其他都是一致的。
(3)卫式插入替换 有时,后置条件的成立与否还取决于前置条件,例如,对Stack智能虚拟控件,其中的pop函数引用的ButLast在栈为空时是没有定义(无意义)的。在卫式插入替换中,增加对了后置条件的约束:F′pre∧F′post⇒Fpost。具体描述如下:
在卫式插入替换中,接口的匹配函数可表示为
CF(CΣport,C′Σport)=∀Cport:[(Coperator=C′operator)∧(Cparanum=C′paranum)∧(Cparatype=C′paratype)∧(Creturntype=C′returntype)]
当分别用Cfunc和C′func表示部件C和C′的函数集合,用前置条件pre和后置条件post来表示对智能虚拟控件中某个行为的约束时,规格匹配函数CF定义为
CF(Cspec,S′spec)=∀F∈Cfunc∃F′∈C′func(Fpre⇒F′pre)∧(F′pre∧F′post⇒Fpost)
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。