面向构件范文(精选6篇)
面向构件 第1篇
随着基于构件的软件开发不断发展以及互联网的快速普及,出现了网构软件、主动服务、网页服务等许多新的软件形态与服务方式。这些新的软件应用方式依赖于高效的构件库系统提供丰富准确的构件资源。如今,构件库中构件的规模正急剧扩大,面对新的应用,对构件库系统的构件检索技术提出了更高的要求,如何在规模庞大的构件库中快速高效的找到所需构件仍是一个亟待解决的问题。
为了提高构件检索的速度,钟鸣[1]应用带权倒排索引取得了很好的效果,但是这种完全倒排索引会使查全率大幅降低。Awny Alnusair [2]、唐彬[3]等应用领域本体改善检索效果,使查全率和查准率保持在较好水平,但是由于本体建立以及推理规则的复杂性,在大规模构件库中检索速度不能得到很好的保证并且应用代价过高。本文提出一种基于功能倒排索引与改进VSM相似度的构件检索方法,在提高检索速度的同时保证了较好的检索效果。
1 基于功能倒排索引与改进VSM相似度的构件检索过程
刻面分类是目前构件分类表示方法中应用最为广泛的一种方法,本文的检索方法也是基于刻面分类表示的。综合考虑了Web Services等上层应用的需求,将构件属性划分为了基本信息、应用环境、功能、服务质量四个刻面以及若干子刻面。刻面与术语之间具有层次关系,因此常用刻面树进行表示。XML是一种可扩展的半结构化语言,非常适合用来表示树形结构,并且为以后支持新应用提供了强大的扩展能力,因此本文使用XML文档对构件刻面树进行描述。
构件描述文档是由构件的发布者对构件进行描述的说明性文档,包含构件的全部原始信息,是进行刻面分类的基础。对构件的描述文档进行全文检索可以有效地减少构件刻面分类时由于主观因素对检索产生的影响。本文将构件的描述文档作为子节点一并保存在构件的XML文档中,便于检索时对构件描述文档进行处理。
1.1 功能倒排索引
倒排索引能够显著提高检索效率,但是完全倒排索引只能进行刻面术语的完全匹配,对于构件信息不全或是人工原因导致的刻面分类失误等问题无法得到很好的解决,导致构件检索查全率不高。在构件检索时所要得到的构件必须在功能上满足检索要求,因此本文提出部分倒排索引,只对功能刻面下的术语进行倒排索引,这样用户检索时可以快速把无法在功能上满足需求的构件排除,能够大幅提高检索速度。对其他刻面不做处理,这样保留了足够多的候选构件,为在进一步的检索处理中提高查全率提供了保证。
功能倒排索引以功能刻面术语为索引项,以包含该术语的构件集合为索引队列。索引队列中的构件按ID升序排列。功能倒排索引结构如图1所示。
1.2 检索过程
检索过程如图2所示。
(1) 用户输入检索需求
用户在检索时使用自然语言对构件需求进行描述,灵活方便,也不需要额外的学习成本,可以有效提高检索效率,便于用户上手与使用。
(2) 对检索语句进行中文分词和语义扩展
由于用户的复用需求在很多情况下都是不完整和不精确的,因此在对输入的检索语句进行分词后,需要查询语义库,根据泛化关系、同义关系、互斥关系等规则对分词结果进行语义扩展,得到检索关键字。通过语义扩展能够得到用户检索需求中的隐含语义,有效提高查全率和查准率。
(3) 对检索关键字中的功能术语进行提取
对照功能刻面术语集,将检索关键字中的功能术语提取出来,为下一步按倒排索引表求交集做准备。
(4) 对提取出的功能术语在倒排表中求交集
由提取的功能术语查找功能倒排索引表,找出同时满足所有功能的构件作为待检索构件集。例如,检索关键字中有“打印”和“文件转换”两个功能术语,首先找到对应的倒排表(见图1):文件转换{1,17,45,77,}、打印{1,33,45,60,},然后取交集{1,45,}作为初步满足要求的待检索构件集。为了提高求交集合并效率设计了尝试跨步优化算法,将在第2节进行详细说明。
(5) 进行相似度计算
使用改进的VSM相似度算法对检索关键字与求交集得到的待检索构件集进行相似度计算,并返回结果。相似度公式的推导将在第3节中详细说明。
2 功能倒排表求交集优化策略
2.1 尝试跨步优化机制
索引队列求交集的实质就是不断的进行两个有序队列的求交合并,初始时任选两个索引队列合并,之后每次将一个索引队列与前次求交的结果队列进行合并,直至得到最终交集。对于大规模构件库来说,功能倒排表中针对单个术语的倒排表可能非常庞大,而在求交集的过程中每次合并后产生的结果队列却越来越小,因此参与合并的两个队列的长度差距会变的非常大。如果每次都逐个遍历两个队列中的元素则会产生许多不必要的比较,本文在研究跳跃表的基础上提出了一种尝试跨步求交集优化算法,可以有效提高合并效率,并推导出使比较次数期望最小的跨步值α。
检索时对索引队列只进行求取交集操作,没有插入删除等操作,因此索引队列读入内存后用数组进行保存,这样在求交集的时候可以快速定位且没有使用指针带来的额外空间开销。数组中保存的是按升序排列的构件ID号。使用尝试跨步机制时,对较短的队列逐个平移遍历,而对较长的队列尝试以步长α进行跨步遍历。所谓跨步就是指一次跨越多个节点。设队列a为较短的队列,b为较长的队列。i、j分别为队列a、b中当前比较位置,当在b中尝试以α跨步后分为四种状况:
(1) a[i]>b[j+α]时尝试成功,令j=j+α,并继续以步长α在b中向后尝试。
(2) a[i]=b[j+α]时命中,将a[i]存入交集结果队列,令i=i+1,j=j+α+1,并继续以步长α在b中向后尝试。
(3) a[i]<b[j+α]时尝试失败,当α>1时,令步长α=α/2后重新进行尝试;当α=1时,令i=i+1,并将α恢复初始步长在b中向后尝试。
(4) j+α越界时,当α>1时,按(3)处理;当α=1时,合并结束。
图3给出了应用尝试跨步机制的一个具体实例。从图中可以看出在未采用优化机制的时候一共需要进行11次构件ID比较,而采用尝试跨步机制并且跨步值为4的时候仅需要进行5次比较即可。
2.2 尝试跨步优化机制
在尝试跨步机制中,初始步长是优化效果的关键,初始步长如果取值过大则会频繁减小步长进行尝试,如果取值过小则无法有效的提高效率。最佳的初始步长应该使总比较次数的期望最小,为了找到最佳初始步长α,我们进行了如下推导:
假设求交合并的两个队列a与b的长度分别为n1、n2,并且n1n2;尝试跨步初始步长为α;求交合并结束时队列b停止在第m个元素上,显然有1mn2;由于队列a中每一个元素都要参加比较,因此每一个元素都会有一个尝试跨步过程(跨步α直接命中时尝试的比较次数为0),第j个元素在一个步长α中的位置为τj,尝试过程中的比较次数为λj,其中1jn1,1τjα,0λjlog(α+1);合并过程中总的比较次数为ψ。
由以上假设,计算总比较次数的期望E(ψ):
由n1个节点将n2个元素的队列b划分成n1+1个区域,设第k个区域中的元素数为εk则
由于第j个元素在一个步长α中位置是服从均匀分布的,故:
E(λj)等于一个跨步中每一个元素的平均比较次数:
将式(2)至式(4)代入式(1)整理得:
对该式求导并计算驻点,解得唯一正根
3 相似度公式的推导
在待检索构件与检索关键字进行匹配时,结合构件检索的特点对VSM余弦相似度公式进行化简,并加入刻面权重与命中个数两个因子,使相似度计算结果更符合构件检索需求,提高查准率。
将检索关键字与构件描述文档都看作由词的权重组成的向量,分别为查询向量Vq和构件文档向量Vd,由VSM夹角余弦公式[4]得:
其中tf()代表词频,idf()代表反比文档频率,n为Vq与Vd所包含词的总数。
根据构件检索的以下特点对式(6)进行化简:
(1) 令Tq为检索关键字集合,Td为描述文档中词的集合,则点积中的项只有ti∈Tq∩Td时有非零值,又Tq一般较小,因此实际计算中只对ti∈Tq的项进行计算,既有效减小了不必要项的计算又可以避免求交集的代价。
(2) 查询语句中很少出现相同的词,因此可以假设tf(ti,q)=1。
(3) idf表示一个词在多少文档中出现过,因而有idf(ti,q)=idf(ti,d)=idf(ti)。使用公式
化简后的相似度公式为:
针对构件检索特点,加入以下两个参数对式(7)进行改进:
FacetBoost(t): t命中时追加的刻面权重。如果命中的词t是某个刻面的术语,为了提高与其他词的区分度,对t追加额外的权重。根据检索需求,命中不同刻面中的术语追加不同的权重。例如对功能和服务质量有较高的要求则应对功能与服务质量刻面中的术语设置较高的权重。该参数可以根据检索要求由用户自行设置。综合考虑一般的检索需求并经过多次试验,本文在实验中将权重设置为:功能刻面术语=1.5,服务质量刻面术语=1.4,应用环境刻面术语=1.3,基本信息刻面术语=1.2,非刻面术语=1。
Hits: 检索关键字中词的命中比率。检索关键字中命中的词越多就会使相似度得分越高。使用Hits=nh/nq进行计算,其中nh为检索关键字命中的个数,nq是检索关键字的总数。
最终得到相似度计算公式如下:
4 实验分析
4.1 实验说明
实验中使用的原型构件库采用刻面分类表示方案,使用XML文档对构件描述进行存储。构件库中的构件信息采集自上海构件库[5]中的开源构件,种类涉及系统安全、数据库、程序开发、网络与通信、Web应用等15个大类,100多个小类共2547个构件。
分别参照相关文献[1,3,4,6]的思想实现了完全倒排索引、领域本体方法、XML的刻面树匹配方法以及描述文档全文检索这几种常用构件检索方法,对本文提出方法的有效性进行对比验证。各组方法针对原型构件库进行检索,使用相同的软硬件平台,硬件平台为:Intel Pentium T4200,2GDDR2内存,320G硬盘;软件平台为:Windows Vista,Myeclipse7.0,jdk1.6.0-17。为使测试结果尽可能客观、更具有对比性,各组方法在分词、语义扩展时使用相同的模块,分词工具使用IKAnalyzer3.2.5stable,首次分词时需要加载分词词典,大约800毫秒~900毫秒都算在检索时间中。
对检索效果的评测采用查准率、查全率、F-measure和检索时间四个指标。查准率与查全率的计算公式分别为P=nr/nq和R=nr/Nr,其中nr为检索结果中符合检索要求的构件数,nq为检索结果总数,Nr为构件库中符合检索要求的构件数。F-measure是对查全率与查准率的综合评价,如果仅一项指标较高并不能有较高的F-measure值,只有当查准率、查全率同时较高时才能使F-measure值较高。F-measure使用公式2PR/(P+R)进行计算。检索时间使用狭义检索时间,指从用户输入检索语句到检索系统给出结果的时间。
实验分为5个组,每组7人,分别使用完全倒排索引[1]、XML刻面树匹配[6]、领域本体[3]、全文检索[4]以及本文的方法,在构件库中进行30次构件检索。每项评测指标都采用各组测试的平均值表示。实验一共进行两次,第一次是在有2547个构件的原型构件库中进行测试;第二次为了测试各种检索方法对构件库规模扩大的适应性,对构件库进行更大规模的模拟,将原型构件库中的构件进行随机抽取,并重复入库,构建模拟构件库。随机抽取可以使构件种类分布尽量均匀,达到模拟的效果。模拟构件库中构件数量为10188个,规模为原来的4倍。同时,第二次实验中加入了未使用跨步尝试机制时本文检索方法的检索时间,对尝试跨步机制的有效性进行了进一步的验证。
4.2 实验结果及分析
各检索方法在相同查询条件下检索效果如图4所示。
由图中可见参与对比测试的五种方法中,完全倒排索引拥有最高的查准率,但是由于不能进行部分匹配,查全率很低;全文检索有着最高的查全率,但是查准率很低。本文提出的方法在查全率与查准率上均有较好的表现。刻面树匹配与领域本体方法虽然也拥有较好的检索效果,但是在原型构件库与模拟构件库中的平均检索时间(见表1)中可以看出这两种方法的检索时间较长,而本文方法的检索时间与最快的完全倒排索引十分接近。
从表中可以看出全文检索、刻面树匹配、领域本体方法的检索时间在构件库规模增加时基本上呈线性增长,而本文的方法随构件库规模增长小于对数级别。另外从表中也可以看出本文引入的尝试跨步优化策略使检索速度有了4%的提升,当构件库规模增大时更是提升了9%,由此进一步证明了采用尝试跨步机制的有效性。
实验结果表明本文提出的检索方法并没有因为应用功能倒排索引排除了部分构件而明显降低查全率,但是检索时间却得到明显降低,并且由于结合构件刻面检索特点对VSM相似度算法进行了改进,查准率也保持在较高水平。
5 结 语
随着各种新型构件应用的不断发展以及构件库规模快速增长,对构件的检索性能有了更高的要求。本文提出了一种基于功能倒排索引与改进VSM相似度的构件检索方法,该方法使用功能倒排索引快速排除不相关构件,结合尝试跨步优化机制可以使检索速度获得大幅提高。同时,针对构件检索特点对VSM相似度公式进行了改进,使检索查准率得到了很好的保证。实验证明本文的方法有着相对较优的综合检索效果,并且随着构件库规模的扩大检索时间的增加小于对数级,非常适合大规模构件库的检索应用。本文的后续工作将研究如何进一步的提高检索效率,并重点研究在异构跨库环境下提高检索效率的方法。
参考文献
[1]钟鸣.支持主动服务的构件统一描述与检索方法研究[D].北京:清华大学,2010.
[2]Awny Alnusair,Tian Zhao.Component Search and Reuse:An Ontolo-gy-based Approach[C].Las Vegas:The IEEE International Confer-ence on Information Reuse and Integration,2010:258-261.
[3]唐彬.基于本体的构件检索研究[D].上海:复旦大学,2007.
[4]Salton G.Developments in automatic text retrieval.Science[J].Sci-ence,1991,253(5023):974-979.
[5]上海构件库[DB/OL].[2011-04-05].http://www.sstc.org.cn/
面向构件框架的研究与设计 第2篇
基于构件软件开发的主要思想是使用现存的构件来建构软件系统。在软件复用方面,传统的开发方法最多只能做到代码复用,面向对象技术促进了软件复用,但也只是实现了类和类继承的复用,对于整个系统来说,还存在很大的缺口,不能做到核心功能的复用。面向构件的开发是软件复用领域的研究热点,被视为软件工业化生产的必由之路。
2 构件技术概要
2.1 构件的定义
什么是构件(component)?“软件构件是一种组装单元,它具有规范的接口规约和显式的语境依赖。软件构件可以被独立部署并由第三方任意地组装。”[1]它的基本理念是把软件开发过程中会重复用到的部分封装起来,等到有新的同样的需求时再调用。被封装的对象类、类树、一些功能模块、(framework)、软件构架(或体系结构Architectural)、文档、分析件、设计模式(Pattern)等都可视为构件。
2.2 面向构件技术
构件技术(如CORBA、COM、JavaBean),关注的是构件的描述方法、调用方法和运行体系,业界用得比较多的是“基于构件的软件开发(CBSD)”。而这里的面向构件的软件开发是指在软件开发中,以构件为中心组织整个开发过程,从分析、设计、开发、测试、发布和管理,一直到维护,整个软件生命周期中的每个阶段都统一以构件为基本单位进行工作。
面向构件的软件开发,使得开发人员能够通过拖拉式的图形化编程方式快速地实现面向构件的系统的设计、开发、组装和调试。整个开发工作屏蔽了技术细节,使得开发工作像“搭积木”一样利用构件库中的每个构件的映射实现编程,从而实现了业务和技术的分离[3]。
2.3 面向构件与面向对象的比较
面向构件的软件开发(CBD),吸收包括面向对象技术在内的众多传统方法和技术的优点。因此,面向构件技术与面向对象技术即紧密相关,又有区别。首先,在概念层面上,对象描述客观世界实体,构件提供客观世界服务;其次,在复用策略上,对象是通过继承实现复用,而构件是通过合成实现复用;再次,在技术手段上,构件通过对象技术而实现,对象按规定经过适当的接口包装之后成为构件,一个构件通常是多个对象的集合体。最后,从抽象程度来看,面向对象技术己达到了类级重用(代码级),它以类为封装的单位,构件将抽象的程度提到一个更高层次,它是对一组类的组合进行封装,并代表完成一个或多个功能的特定服务,也为用户提供了多个接口。
2.4 面向构件的软件生产模式及其优点
面向构件的软件体系,使得用户的需求改变可以直接通过构件装配式的图形化设计思路得以体现,使得软件架构师和程序员跳出传统开发模式的局限,是代码式软件体系的颠覆和革新,使得软件生产有了一全新的模式,如下图1所示。
面向构件开发能够屏蔽技术实现细节、提高软件的质量和稳定性、得化软件开发流程、提高开发的灵活性、降低大型系统的复杂度和维护难度等优点。目前,CBD主要被用来帮助控制大型系统开发的复杂度和风险,在开发的构造和部署阶段中提供一种以架构为中心和以重用为中心的方法。
3 框架的设计与实现
3.1 设计思想
为降低大型系统的复杂度,软件系统的架构经历了对问题空间分解,垂直分割、横向切割,横切竖割相结合的发展过程。面向构件的思想,就是把复杂业务进行横切竖割的分解,再用一个个的不同粒度的构件“编织”整个架构,它可以把精力全部放在业务功能上而不必操心太多技术细节。[3]
本系统采用多层次的构件体系,在实现上,利用现有成熟的技术支撑,在eclipse平台上,结合开源技术如Hibernate、Spring、Struts等,以插件的方式实现框架功能。系统框架如图2所示。
3.2 具体设计与实现
本平台使用主流的开源框架Hibernate实现O-R实体映射;再通过对Hibernate的封装,实现与低层数据库无关的通用数据库操作构件。另外,本框架采用现行主流框架Spring来实现事务管理。
这里的运算构件层主要用是带静态的方法的Java类来实现,以XML文件描述其接口和参数,对业务逻辑提供接口调用,给应用开发人员提供图形化组装。
业务构件层,主要由业务引擎和业务构件组成,实现对应用逻辑的处理过程。对上层提供规范的接口以被调用,对下层,调用运算构件,以流程化的方式使之构件粒度较大的业务构件。
展现构件层,是连接用户界面与业务处理的中间层次。由展现引擎和展现逻辑流程组成。对于应用展现引擎接受服务请求,调用业务构件层的业务构件计算处理,再返回给用户界面。
页面层主要提供对应用系统的用户界面支持。由于在展现引擎返回给页面之前,采用Struts动态Bean对XML数据进行转换封装,使得JSP页面即可支持JSTL表达式语言,同时支持Struts标签。在整个架构中,从运算构件层到展现层,各层的引擎都将数据规范为XML格式,放在XML总线中,通过XML的DOM方式,封装了应用的各个数据区构件。
最后,图形界面用Eclipse的GMF技术结合基于模板引擎的代码生成技术做成Eclipse插件来实现。用户在拖拉(组装)构件,使之成为业务流程,GMF在后台则生成对应的XML描述配置文件,系统通过对xml配置文件的解析封装,用模板引擎成生业务流程的java文件并编译。
4 框架的设计和实现的优点
在吸取经典的三层体系结构优点,使得构件粒度更加细化,软件开发更为有效。平台在软件开发周期的每一阶段,都以构件为核心,具有统传构件技术的优点。
本架构实现了应用系统和代码的分离,程现给应用开发人员的是图形化构件和规范的接口,使得应用逻辑易于调整以适应需求的变化;而业务数据则通过XML总线方式独立于应用逻辑,使应用系统的具有良好的数据扩展能力。Struts+Spring+Hibernate的整合开发,是现行J2EE开发为程序员所喜爱的开发方式,基于这些开源框架的开发人员成熟性和稳定性。
由于对问题空间的有效分割,框架具有清晰的分层结构,在实现上又吸取了主流开源框架的优点,使得整个框架具有良好的可扩展性。
5 总结
本文文阐述了构件技术的基本概念和面向构件的软件生产模式,接着对面多层次的架构进行研究设计并结合主流的开源框架在eclipse开台上以插件的形式实现,最后,用实现的面向构件开发平台,来组装企业应用的合同管理系统。
被视为解决软件危机的构件技术将促进软件产业的变革。专业化的构件生产将成为独立的产业而存在,软件系统的开发将由软件系统集成商通过购买商用构件,集成组装而成。目前国内外越来越多的软件系统采用面向构件的技术进行开发,围绕构件的生产、管理和组装将形成具有相当规模的构件市场和构件开发工具市场。随着构件应用的推广和深入,对构件组装技术、构件构架技术、分析设计构件的描述和复用、特定领域软件构架、构件库部署等问题的研究也会不断深入发展。总之,面向构件的软件工厂正日趋成熟,其应用前景十分广泛。
摘要:面向构件软件开发的主要思想是使用现存的构件来建构软件系统,是提高软件开发效率和质量的有效途径,可复用的构件在软件复用技术中作用重大。该文首先阐述了构件的概念和面向构件技术优点,研究并设计了一种面向构件的架构,接着结合现行主流的开源框架,以eclilpse插件的方式给予实现和检验;最后,对面向构件技术的发展进行了展望。
关键词:软件复用,构件,面向构件
参考文献
[1]Szyperski C,Gruntz D,Murer S.构件化软件——超越面向对象编程[M].2版.王千祥,译.北京:电子工业出版社,2004.
[2]黎娅.基于构件的软件复用技术应用研究[D].重庆大学,2008.
[3]Mili H,Mili F,Mili A.Reusing software:Issues and research directions[J].IEEE Trans Software Engineering,1995,21(6):528-562.
[4]Whittle B.Models and languages for component description and reuse[J].ACM SIGSOFT SoftwareEngineering Notes,1995,20(2):76-89.
[5]刘伟.基于观测模型的构件化软件集成测试方法研究[D].中国优秀硕士学位论文全文数据库,2007.
[6]户军茹.嵌入式软件关联测试方法的研究[D].中国优秀硕士学位论文全文数据库,2007.
[7]杨芙清,梅宏,李克勤.软件复用与软件构件技术[J].电子学报,1999(2):68-75.
面向领域的软件构件库系统初步研究 第3篇
1 软件构件库系统简介
软件构件库系统是软件复用的中介和核心, 是可重用构件的集合, 构件库系统负责存储和管理大量的构件, 其主要功能有:构件的选取、构件的验证、构件的分类和表述、构件入库存储、构件库的检索以及构件库系统的管理与维护等。具体来说, 构件库系统一方面需要为构件库系统使用者提供检索服务, 另一方面还要为软件开发人员在开发过程中方便获取和检索构件提供支持, 可见, 构件库系统在构件开发者与构件使用者之间起到了桥梁的作用, 如图1所示。
2 当前软件构件库系统存在的问题
当前世界范围内可用的软件构件库数量极为有限, 这些构件库系统中都提供了固定构件分类模式和检索机制, 在一段时间内取得了不错的成果, 然而随着构件数量的不断增加, 这些构件库系统在使用过程中检索和获取的困难就越来越大, 同时也不利于构件的管理和维护。具体表现在以下几个方面:
2.1 构件检索难度大
由于构件的数量越来越多, 在用户输入关键词进行检索时, 很可能检索条件不具备唯一性, 从而出现多个满足检索条件的构件, 给用户的使用带来了一定的麻烦, 用户要想在短时间内快速准确地在众多构件中选取所需构件, 很大程度上需要依赖用户对构件的复用经验和用户自身对构件的主观理解和判断, 因此检索和复用的效率极为低下。
另外, 当前软件构件库系统是通过刻面属性、关键词、关系等表达所需构件的特征以进行构件的检索。然而, 访问构件库的用户具有不同的层次, 对构件刻面的理解会有差异。而且刻面分类模式对于面向多个异质领域的构件库来说, 很难用有限的刻面数量来描述众多领域的软件构件。
2.2 构件库系统操作过程存在缺陷
当前软件构件库系统广泛采用的技术是关系数据库技术, 具体来说就是首先对构件的刻面信息和关键属性进行技术性的提取, 然后将这些信息存储到关系数据库中, 用户要想获得相应的构件, 就可通过关系数据库进行相应的操作。这样的操作过程存在着其固有的缺陷, 即构件库系统没有向用户提供有效的辅助决策工具, 使得用户在使用过程中没有科学的参考, 导致构件复用的效率和质量大大降低。
3 建立面向领域的软件构件库系统的相关策略
3.1 面向领域的软件构件库系统使用
根据上述问题, 本文提出在采用刻面分类策略的基础上, 充分结合多种分类策略的模式来建立软件构件库, 同时可采用文件数据库、XML数据库、关系数据库相结合的技术来存储构件, 具体为:软件构件首先存储于文件系统中, 而后通过XML技术对构件进行描述, 最后用关系数据库来存储关键信息。这样, 用户在使用软件构件库系统提取构件时, 即可在原来的基础上结合文档内容和XML作为辅助决策手段, 为用户提供定量的数据, 增强决策的客观性, 从而提高构件的复用效率和质量。
3.2 面向领域的软件构件库系统的建立
最大限度地促进构件复用是建立构件库系统的最终目的。构件库中的构件可通过两种方式得到:一是自行设计和制造, 二是向商业性软件机构购买。在构件库系统中, 通过对构件合理的分类和描述后将其存储在构件库中, 构件的使用者通过检索系统获取所需的构件。在构件库系统的建立过程中, 建立科学的检索机制是促进构件库高质量使用的重要一步。为减轻构件库系统使用者的工作量, 使其在有限的时间内实现对所需构件的快速获取, 构件库应当为使用者提供多样化的检索途径, 并使查询界面尽可能友好。在面向领域的软件构件库系统中, 可采用的检索方式有很多, 最常见的有刻面分类检索和关键字检索等, 其中刻面分类检索方式的检索结果较为精确, 检索效率很高, 但同时也相对更加复杂, 其对使用者的要求也较高, 比如要具备一定的行业经验、熟悉行业的专业术语等。而关键字检索操作较为简单, 检索速度较快, 更容易上手, 但同时检索结果也不够精确, 容易给使用者带来较大的工作量。有鉴于此, 在实际工作中, 可采用以刻面分类检索为主、关键字检索等为辅助的检索方式, 以此为基础建立检索机制, 一方面使得专业人士可以快速、准确地检索、获取所需构件, 另一方面也给使用者提供更多的检索选择, 在一些不易采用刻面检索的场合使用关键字检索。
另外, 构件库系统中还包括有体系管理工具、构件管理工具和反馈工具等辅助性工具。其中体系管理工具主要功能是对构件进行分类管理和维护, 包括选择刻面和对术语空间的动态维护;构件管理工具的主要功能是验证构件的合法性, 将不合格或者不需要的构件去除, 使构件库不断更新;反馈工具主要是建立在使用者和构件管理者之间供二者交流的机制, 构件开发和管理者可根据用户的使用体会和建议不断完善构件库, 有利于构件库系统的不断升级, 使其发挥应有的作用。
结束语
构件库系统对于构件的分类、组织、存储和检索均具有十分重要的作用, 当前有限的构件库系统在使用过程中存在着检索效率低、辅助决策不足等缺陷, 因此在建立构件库系统时应当充分考虑这些问题, 以使构件库系统为用户提供更好的服务。
参考文献
[1]彭博, 王普, 李亚芬.面向Web领域的构件库系统的设计与实现[J].现代电子技术, 2009, 32 (20) :116-122.
[2]陈平平, 谭定英, 曾艳.面向领域的软件构件技术研究[J].现代计算机 (专业版) , 2007 (3) :15-17.
面向构件的系统开发及其形式化 第4篇
在不同上下文中,软件构件有不同含义,例如功能模块、类、对象或一组相关函数;另外的定义还包括标准类库、框架、CASE模型,以及任何可重用的软件制品等。通常,构件应具有这几个方面的特性,即:有用性,构件必须提供有用的功能;可用性,构件必须易于理解和使用;所需质量,构件能保证服务质量;适应性,构件应易于通过参数化等方式在不同语境中进行配置;可移植性,构件应能在不同硬件运行平台和软件环境中进行工作。
根据应用的范围,构件可分为三类,即基本通用构件,如数据结构、界面元素等;领域共性构件,仅在该应用软件所属领域内经常出现的构件;应用专有构件,仅在该应用软件中出现的特定构件,此类构件不可复用。可复用构件指前两者,通常情况下构件指可复用构件。
现在最常用的构件标准有三种:①对象管理组织OMG制定的公共对象请求代理体系结构CORBA,它是一套分布式对象技术标准,涉及接口、注册、数据库、通信和出错处理等方面的问题;②微软公司开发制定的COM/COM+;③SUN公司提出的基于Java的构件模型EJB/Java Bean,它采用纯Java编写,独立于平台,具有良好的互操作性。
形式化方法是一种用于规范、设计和验证计算机系统的基于数学的方法,包括各种语言、技术和工具等。形式化方法可以分为形式规范和形式验证两大类,形式规范包括各种基于数学的表示法、规范语言以及对应的工具;形式验证包括各种模型检查器、定理证明器以及证明和验证的方法等。形式规范使用规范语言来描述系统,这种规范语言具有严格数学定义的语法和语义,使用形式化的规格说明语言描述系统及其性能,可以帮助开发人员获得对所描述系统的深刻理解,有助于发现需求中隐含的不一致性、二义性、不完整性,在早期发现设计中的错误和缺陷。近年来,人们研制出多种形式化语言和半形式化的语言用以对系统的状态和行为进行描述和验证,如LOTOS、E-LOTOS、CSP、Petri网、Larch、Clear、OBJ、过程描述语言PDL、Z语言、B语言、VDM、统一建模型语言UML。形式验证使用严格的数学方法来推理验证产品或设计是否符合其全部或部分规范,它要求产品的规范和实现均需要有严格的形式描述,目前形式验证主要有两种方法:模型检验和定理证明。
1 软件构件的形式化
典型的构件形式化描述方法有代数规格说明方法、多形式体系方法和多层次规格说明方法。代数规格说明S = (T,F,A)描述可复用构件的核心思想是,通过类型T的函数集F描述构件的功能,T的元素作为F中函数的输入输出集,公理集A描述了函数的功能。它的语义允许一些类型可见,一些不可见。对代数规格说明可进行三个方面的扩充:增加操作、参数化、附加接口描述。所以可以从不同的抽象层次和不同的角度来描述构件。多形式体系方法是从多个角度来描述构件。多层次规格说明方法允许每个高层规格说明对低层规格说明施加一些约束。在垂直方向,设计实例的规格说明必须继承父对象的规格说明;在水平方向,设计实例的规格说明可以继承设计框架的规格说明,设计框架的规格说明必须继承领域模型的规格说明,这种方法可以提供不同抽象层次的规格说明,适用于大型构件的复用。
一般来说,一个构件由需求、设计知识、代码片段或检测计划组成,可以实施封装和数据隐藏,是基本的可重用单元。用户定义类型的构件,其行为可由形式化规格说明进行描述如下[1]:
在method部分的规格说明定义了这个构件的动态行为,其余部分描述的均是构件的静态特征。一个方法的规格说明格式如下:
method method-name ((Var:DomainSort)*) Var:RangeSort
requires:Pre-conditions
ensures:Post-conditions
其中requires描述的是方法的前置条件,ensures描述的是方法的后置条件。若一个方法没有一个精确的requires子句,其缺省值是true。
文献[2]提出了一种形式化的方法对软件构件集成行为进行描述,将构件接口作为线程进行研究,并将构件接口分为触发器和响应器,介绍了如何从线程的角度对同步、异步并行以及异步互斥情况下表达构件交互语义等。该方法克服了在构件集成过程中,构件接口交互语义难以描述的问题,能够更加直观、清楚、完整地描述接口交互的语义和系统集成的静态与动态特性。文献[3]根据AND-CASE环境提出了一个构件表示模型,采用综合刻面表示方法,把刻面方法和规格说明的方法结合起来,以兼顾刻面方法的灵活易用性和规格说明方法的规范性。根据构件表示模型框架内建层次词典,将分类进程半自动进行,使其适用于各种类型的构件库,并为具有不同技术水平的用户提供不同的搜索等级。该文在可复用构件表示模型中把软件构件看成一个四元组C=<CN,CP,CI,CS>,其中C表示构件,CN为构件名称,是构件的标识符;CP是描述构件重要特征的属性集合;CI={Operation|Operation=<Operation-Name,Description>},Operation-Name是操作名,Description是对操作的描述;CS是对构件功能进行描述的形式化规格说明,描述构件的动态行为特征,规格说明语言可以采用谓词逻辑的形式。
Resolve是一个较有影响的构件描述语言,用基于方法的数学模型表达构件的形式化规格说明。它给出构件的类型、操作所满足的前置和后置条件、实现、构件模型和表示法的对应关系。Resolve用数学模型描述构件的接口需求、接口需求与一个可能的实现间的关系,适合于可重用构件的设计。文献[4]详细介绍了构件属性模型、构件描述方法、构件描述语言、构件的BNF表示法、构件的操作原语。近来,由于XML的逐渐成熟与广泛应用,出现了利用XML来描述构件的研究,并发表了一些成果,如IBM的Bean Markup Language(BML)(http://www.alphaworks.ibm.com/formula/bml,1999)、加利福尼亚大学欧文分校(University of California,Irvine,UCI)的C2体系xADL(http://ftp.ics.uci.edu/,2002)等。利用XML技术,可以大大提高构件描述语言的开放性与可扩展性。
2 典型的面向构件的软件开发
面向构件的软件开发的理论建立在软件工程、软件复用和分布式计算等基础之上,已经成为新一代的软件开发方法,是通过组装现有构件的方式来建造新系统,可见基于构件技术的新系统是容易理解和演化的。典型的面向构件的软件开发过程如图1所示。
软部件经设计阶段后,由程序员实现,编译器进行编译,以二进制代码的形式存放于可重用软部件库,通过封装,自成一体,支持相应的功能,并最终成为某应用程序的组成部分。
WREN是C.Luer等提出一种基于构件的开发环境[5],它是用JAVA语言编写的,支持JAVA语言开发的构件和用JAVA语言来描述构件的组装,不但将JAVA作为编程语言,也将JAVA作为构件描述语言。由北京大学主持、研制的集成环境“青鸟III系统”对构件获取、构件制作、构件组装进行了系统而深入的研究[6],提出了基于体系结构的构件组装技术和相应的体系结构描述语言ABC(Architecture Based Composition)/ADL。Michihiro Matsumoto等从研究构件连接子的可靠性出发,设计了支持高度可靠的基于构件的软件开发工具[7]。其提高可靠性的方法是自动验证求精后的需求规约和自动生成连接子。该工具以体系树为基于构件的软件体系结构,用行为规约投影来表示原始需求规约和精化后的描述构件关联的规约,并根据精化后的规约中的连接子部分和原构件连接子之间的对应自动生成新的连接子。John Penix提出了一种构件自动自适应和集成的框架Rebound[8]。由于其核心思想是通过构件规约及应用需求规约的匹配来选择构件的自适应策略,因而被称为“基于理解的复用”。
3 基于形式化方法的面向构件的软件开发
集软件重用、分布式对象计算、企业级应用开发等技术为一体的基于构件的软件开发以软件构架为组装蓝图,以可重用软构件为组装模块,支持组装式软件的重用,将大大提高软件生产效率和软件质量。
然而,现有的构件模型往往没有形式化的规格说明。非形式化的描述可以帮助了解构件的接口是怎样的,但是它不能描述构件的功能是什么(虽然可以用自然语言来描述,但自然语言有其模糊性,而且也不利于构件检索与组装的自动化)。描述的接口只有各个函数的特征标识,没有规定接口的语义。也就是说,某个构件即使在语法上实现了某接口,也不能保证在语义上实现了该接口,这是因为完全不相关的函数也可以使用相同的函数特征标识,所以,必须在构件模型中引入新的方法来进行描述。形式化方法是以数理逻辑、代数、自动机、图论、集合论等数学理论为基础构造程序设计语言、技术及工具来规范和验证系统的方法,可以用来描述构件的语义和软件的开发。而且,形式语言可以交由计算机自动处理,可利用相应的软件工具对规格说明进行分析、查错、验证以及求精变换,便于对规格说明的各种性质进行推理或证明。
因此,将形式化方法应用于基于构件的软件开发,能更有效地提高软件开发的效率,改善软件的质量,降低软件的维护成本。图2是本文根据典型的面向构件的开发流程和基于形式化方法开发软件的特点提出的一个基于形式化方法的面向构件的系统开发模型。
当存在大量构件时,要获得所需的构件,必须对其进行检索。形式化规格说明方法依赖于其语言的表达能力,具有较高的查准率,能适应大型构件库的构件组织和检索要求。在形式化的方法中,可把构件C表述成以下的二元组[9]:
C=(CS,CODE)
其中CS为软部件的规约;CODE为软部件的程序代码。对于规约CS可进一步划分为语法、语义两部分:
CS=(∑,A)
其中:∑为标记集合;A为公理集合。在检索过程中,先进行语法检查,再进行语义检查,判断是不是所需的构件,这种方法克服了非形式化方法不够精确的缺点。文献[10]用谓词逻辑的形式给出了构件的匹配、易修改性和检索效率等概念的形式化描述。文献[1]提出了基于构件重用的社会化软件工程模式。
形式化方法和工程界的常规方法相比有明显的区别,它们的开发原则不同。形式化方法希望能直接构造出尽可能正确的系统,而常规方法主要是通过测试来发现系统的错误。
4 讨论与总结
基于构件的软件开发模式已经成功地应用于软件开发活动中,采用构件技术进行软件开发可以减少程序的代码量,提高软件开发效率,并且随着构件重用度的提高,可以减少开发软件的成本。用形式方法开发软件可提高软件系统的正确性和可靠性,进而增强软件开发的可维护性。将形式化方法应用于基于构件的软件开发,是解决系统开发难点的一个可行方案。鉴于构件技术和形式化方法的特点,提出以下建议和研究方向:
(1) 实施构件标准化,包括构件模型的标准化和构件库的标准化。
(2) 建立对构件质量有效的评价模型,以及针对构件质量模型的可操作的度量方法。
(3) 构件组装和组装推导是基于构件的软件开发的关键技术,寻求提高构件组装的抽象级别和粒度的方法。
(4) 软件开发受到各种因素的制约,且形式化方法也有自身的弱点(如易读性比非形式化方法差),在基于构件技术开发软件时,应根据实际情况适当地、适时地应用形式化方法。
本文根据典型的面向构件的开发流程和基于形式化方法开发软件的特点,提出了一个基于形式化方法的面向构件的系统开发模型。
参考文献
[1]王淑红,袁兆山.基于排序形式化规格说明的软构件匹配[J].合肥工业大学学报:自然科学版,2000,23(4):477-481.
[2]李阳,吴朝晖.一种形式化构件集成语义的研究[J].浙江大学学报:工学版,2004,38(2):135-140.
[3]袁兆山,王淑红.可复用构件表示模型研究[J].计算机应用,2001,21(1):1-3.
[4]罗铁祥,徐正权.异质可复用构件属性模型[J].中南民族学院学报:自然科学版,2000,19(3):28-33.
[5]Luer C,Rosenblum D S.Wren—An Environment for Component BasedDevelopment[A].On the Foundations of Software engineering[C].Joint8th European Software Engineering Conference and 9th ACMSig-soft intl.Symp.,Vienna,2001.
[6]杨芙清,梅宏,李克勤,等.支持构件复用的青鸟III型系统概述[J].计算机科学,1999,26(5):50-55.
[7]Michihiro Matsumoto,Kokichi Futatsugi.The Support Tool for HighlyReliable Component-based Software Development[A].Proceedings ofthe Seventh Asia-Pacific Software Engineering Conference(APSEC0'0)[C],IEEE,2000,172-179.
[8]John Penix.Deductive Synthesis of Event-based Software Architectures[A].14th IEEE International Conference on Automated Software Engi-neering[C],Cocoa Beach,Florida,USA,IEEE,1999.
[9]屈延文.形式语义学基础与形式说明[M].北京:科学出版社,1989.
[10]郑建丹.基于组件的逐步求精程序设计方法[D].北京:中国科学院软件所,2001.
面向集成的图形构件的研究与实现 第5篇
关键词:FusionCharts,OperaMasks Studio,基于构件的软件开发,图形构件
0 引言
软件复用是解决软件危机,提高软件生产效率和质量的现实可行的途径[1]。软件复用的主要思想就是将软件看成是由不同功能部分的“组件”所组成的有机体,这样软件的每部分功能就可以被单独开发,并且可以借鉴原先同类功能的组件以及为以后类似功能的组件开发提供模板。软件构件主要是指可复用软件构件,即:可以多个系统所复用的、具有相对独立功能的系统构成成分[2]。因此,构件制作是软件复用的基础,只有存在大量的可复用构件,才有可能实现系统化的复用。构件制作的最终目的是提供有一定功能的构件。而为了使构件能够够复用,必须保证构件的使用者能够获得相应的功能[3]。在这种背景下,各式功能构件诞生,应用于程序开发、文件处理、Web应用、多媒体、网络通信等多个领域。
基于构件的软件开发CBSD技术的思想在于,从第三方市场购买、定制构件或者从成熟的构件库中提取已有构件来解决应用软件的开发问题。现今,与传统的软件开发方法不同的是,从“面向代码”转向了“面向集成”,从更高的角度定义了软件开发过程[4]。能够对功能性的片段加以复用,是选择基于构件的开发方法的重要原因之一。
本文将对当前流行图形软件FusionCharts的图形包进行研究,分析其功能模块,实现原理,选用OperaMasks Studio开发平台,采用CBSD的开发方法,调用FusionCharts图形资源,开发出自己的图形构件,通过实验证明了该图形构件的可用性,并对设计出的图形构件包进行了集成改进,提高了复用率,便于添加新的图形构件。
1 图形软件研究
1.1 图形软件
FusionCharts是业界流行的图形软件,是一个跨平台、跨浏览器的flash图表组件解决方案,其中动画效果用的是Adobe Flash 8制作的flash,FusionCharts能够被ASP.NET、ASP、PHP、JSP、ColdFusion、Ruby on Rails、简单HTML页面甚至PPT调用。不需要知道任何关于flash编程的知识,只需要知道你所用的编程语言就可以了[5]。FusionCharts使用XML作为其数据接口,充分利用流体美丽的Flash创建紧凑、交互式和绚丽的图表。用户可以很方便地使用FusionCharts,而且FusionCharts的图形构件高度集成,为开发图形构件提供的参考模板。
1.2 框架分析
FusionCharts软件包的结构如下:
Charts文件夹swf文件(用于创建图形)
所有的图形资源文件即swf文件都放在Charts文件夹下。如果需要在Web应用里创建图形,那么就把这些swf文件都拷到应用下面。如果想扩充图表类型,那么将制作好的swf文件拷到此目录下。
Code文件夹示例代码
帮助文档中提供了一些可以直接使用的例子,其源代码放于此处,可以直接复制粘贴和运行。
Contens文件夹帮助文档
可以直接点击FusionCharts里面的index.html来访问。
ExportHandlers文件夹服务器端导出工具类
可以将FusionCharts保存成PDF或图片形式。
JSClass文件夹JavaScript文件
FusionCharts JavaScript文件能够帮你用一种友好的方式把图形嵌入到html页面。
Gallery文件夹图形示例
提供了当前版本的所有图形模板示例。也可通过帮助文档菜单中的Sample Charts来访问。
SourceCode文件夹图形源码
对源码license用户开放的图形源码,所有的.as文件都在此文件夹下。如果是拥有企业license用户,SourceCode文件夹下包含所有的.fla文件。
Tools文件夹XML可视化生成工具
提供了可视化XML生成工具,使用户能够方便生成所需的XML数据文件。
通过分析发现,整个软件包中,Chars、Code、ExportHandlers、JSClass用于应用程序开发。Contents和Gallery用于使用文档。Tools是一个图形页面生成工具,而SourseCode则实现了向flash动画传递xml数据的功能。
FusionCharts的工作流程如图1所示。
2 图形构件开发
2.1 开发平台
OperaMasks Studio是架构在Eclipse基础上的“轻量级”开发平台,有良好的工具支持以及应用服务器的紧密集成,提供了领先的JavaEE Web开发环境,包括可视化的界面设计,对Spring、Hibernate等主流开源框架要有良好的支持。
在OperaMasks Studio下开发构件,需要如下几个步骤[6]:
(1)定义构件Base类
OperaMasks Studio为用户提供便捷,只需设计保存好构件的Base类,便会自动生成构件类,这个类继承构件Base类,里面的一些getter/setter方法都会自动生成,用户不需要修改任何代码。
(2)定义Tag类
这个类也会由OperaMasks Studio自动生成。
(3)准备一些js、css、图片资源
渲染构件时会使用到这些外部资源,在资源描述符中进行配置js和css的别名和资源位置。
(4)定义渲染器类
覆写该类中的渲染方法。
(5)在xml中配置该构件
配置命名空间、tag名、tag名与构件类对应信息、构件与渲染器对应信息等,这此配置全部由OperaMasks Studio自动生成。
(6)导出成jar包
在其他工程或服务器中使用这个jar包。
2.2 Column2D图形构件开发过程
熟悉OperaMasks Studio构件开发步骤后,现在开始开发图形构件,先选择具有代表性的2D柱状图形。
(1)创建工程项目
这里要开发一个构件,故选择OperaMasks Studio下的构件工程,配置tablib.xml,此外,为工程配置构建路径,在“库”标签中添加外部jar,加入javaee.jar和jaxb-api.jar。
(2)添加一个构件
打开构件工程中下的xml配置文件,添加Column2D tag,输入标签明细发布,OperaMasks Studio会自动生成下面三个类:AjaxColumn2DRender.java,UIColumn2D.java,UIColumn2DBase.java。
(3)设计构件的Base类,生成构件类
通过一段实例代码来分析一下怎样设计Base类,例如要创造一个简单的2D柱状图形用来显示每月销售额情况。可以用以下html页面嵌入图形:
分析上述代码,要定义一个Column2D图表,需要Column2D.swf图形模板。而定义一个Column2D构件需要一些属性,如div_id、chart_id、width、height、registerWithJS、bgcolor、scaleMode、lang、dataURL。另外还需要提供一些属性来设置div样式(比如加边框、水平对齐等),因此再加两个属性style和styleClass。
经上考虑,设计构件的Base类如下:
双击打开构件Base类UIColumn2Dbase,在类中添加上述属性。修改完成保存该类,Operamasks Studio会自动生成对应的构件类UIColumn2D.java,里面的内容不需要再修改。
(4)准备资源
这个图形构件需要两个资源Column2D.swf和FusionCharts.js,把它们放在META-INFresource目录下。
接下来为在“资源描述符”中选择“JS”,添加FusionCharts.js资源,这里需为FusionCharts.js起一个资源名,配置文件存放路径。
(5)写渲染器类
图形构件需要一个渲染器类,就是自动生成的AjaxColumn2 DRender.java文件,它继承自AjaxRendererBase,需要覆盖AjaxRendererBase的一些方法实现渲染。参照前面的html页面实现过程,首先在head中引入了FusionCharts.js文件,可以在getDependedJSPackages()方法中添加返回FusionCharts.js,这里使用FusionCharts.js的资源名。
其次的html代码<div id="chartdiv">在encodeHtmlBegin()中实现,获得构件id,并且输出一个div,如果构件设置了style或styleClass属性,也渲染到这个div上。</div>放在encodeHtmlEnd ()中,输出一个</div>。
最后是一段JavaScript代码,代码中有一个jsvar变量FusionCharts_1,一般jsvar在初始化时声明,在encodeInitScriptBegin()中声明这个变量。其他的JavaScript代码放在encodeResourceBegin()和encodeResourceEnd()中渲染都可以,根据构件的不同,渲染不同的swf文件名。
分析完后,覆写上述方法,具体代码不一一给出。
(6)打包成jar文件
现在整个工程已经全部完成,只需打包生成jar文件即可使用。
2.3 Column2D图形构件使用
经过上述工作,已经开发出一个图形构件,现在就来测试一下这个构件的运行效果如何。
创建一个带Web模块的工程项目将jar包拷入WEB-INF/lib目录下,同时编写一个Column2D.xhtml图形嵌入页面,提供月销售额XML数据、部署项目,运行结果如图2所示。
至此,已经成功开发出一个Column2D图形构件,此构件调用了FusionCharts中的图表模板Column2D.swf以及FusionCharts.js,能够达到使用FusionCharts一样的效果。
3 图形构件的改进
3.1 改进点分析
上述开发的Column2D图形构件已经能够实现FusionCharts的图形效果。如果想继续开发其他的图形构件,比如说Area2D、Column3D,毕竟FusionCharts提供了不少图形模板,还有组合图形,而且今后也可能针对特定领域设计新的图形。同样需要Area2D.swf、Column3D.swf等等图形资源以及FusionCharts.js和data.xml文件。沿着Column2D的开发轨迹,先要定义构件的Base类,而这个类的设计其实是一模一样的,那么就可以设计出一个公共的Base类,让Column2D、Area2D、Column3D等等构件的Base类都继承自这个类。这样可以省去定义每个构件Base类的麻烦,对于图形属性的修改可以直接在其中进行,便于统一管理和扩展。
再来分析一下data.xml,需要XML文件提供数据源,但是现在一般需要可以显示动态数据的图表构件,即能够显示内存XML数据,而且实际使用时应感觉不到XML的存在。
OperaMasks SDK提供了很多这样的构件,只需要定义一个dataProvider,从中返回一个对象或对象集合,dataProvider取数的构件均采用Delegate二次取数方式。
下一步是对渲染器的改进。自然会想到建立一个公共渲染类让所有图形构件的渲染器类继承自这个公共类,并在其中提供图形的swf路径。这样的修改使得对一个图形构件的改动不会影响到其他的构件。
3.2 改进实施
公共Base类属性设计基本不变,去掉protected String dataURL;改为dataProvider的属性声明:private FusionChartDataProvider dataProvider;因为dataProvider不需要保存在视图树中,也就不需要出现在构件类的saveState()/restoreState()方法中,所以在Base类中直接定义getDataProvider()/setDataProvider()方法。
将公共类取名UIAbstractFusionChart,其他的图形构件的Base类就继承自这个类。这些Base类的构件类会由OperaMasks Studio自动生成。
在设计公共渲染器类之前,先定义一个dataProviderFusionChartDataProvider,在此类中定义getChart()方法,该方法返回一个Chart类型的对象,即所需要的XML数据。其中需要导入一个Chart类,该类是根据FusionCharts官方提供的data.xml的.xsd文件用JAXB(JavaTM Architecture for XML Binding)映射生成的Java类。
接下来定义公共渲染器类,先将相应图形构件的资源文件swf放入META-INF中,把原来构件的dataURL属性渲染js改为二次取数方式:
可以看到,构件的dataUrl中包含ViewDelegate.VIEW_DEL-EGATE_REQUEST,是二次取数Delegate方式,它是ViewDelegate接口的实现,实现该接口的delegate()方法,从二次取数url中取出DELEGATE_PARAM参数,参数结果是组件的id,调用dataProvider的getChart()方法开始取数,最后将取出的数据转换为XML输出,从而达到了二次取数和使用内存XML文件的目的,将它单独实现于FusionChartDelegate.java中。
为了实现二次取数,还需要在META-INF下新建一个文件进行配置,文件名为viewdelegate.cfg,其内容为定义Delegate的FusionChartDelegate的完全限定名,这样OperaMasks就知道二次取数时要使用这个Delegate,而不使用其他Delegate。
公共渲染类中必须提供图形渲染的swf路径,定义如下抽象方法:
protected abstract String getSwfURL();
这里公共渲染器类是抽象的,因为只有抽象类才能有抽象方法。不同的图形构件的渲染类继承这个类,实现这个抽象方法,返回相应的swf文件。
至此,构件改进工作完成。同样打包jar文件放进WEB-INF/lib目录下进行测试。
3.3 改进效果
选择区域2D图来展示上面的每月销售额情况。由于改进了数据源方式,相应的编写一个LiteBean来提供数据。在图形嵌入页面Area.xhtml中,指定dataProvider:
dataProvider="#{Area2DBean.chartDataProvider}"
在相应的LiteBean中,导入之前定义的FusionChartDataProvider,利用getChart()给出数据源。
部署项目,运行Area2D.xhtml,结果如图3所示。
改进后,运行效果仍就与使用FusionCharts一致,但是整个图形构件包的设计更为合理,提高了复用率与集成性,便于开发新的图形构件。
4 结语
本文分析了当前流行的图形软件FusionChars的框架结构,在了解其图形实现原理的基础上,在OperaMasks Studio平台上,使用CBSD方法开发出自己的图形构件,并对构件的使用效果进行了测试与改进。
目前,只针对几个典型的图形进行了构件开发,还未涉及一些复杂的图表类型,可进一步深入研究。另外,针对市场上某些特殊的图形需求,可以拓展图表类型,改进后的构件设计也适合将来在新的领域开发集成图形构件包。
参考文献
[1]杨芙清,梅宏,李克勤.软件复用与软件构件技术[J],电子学报, 1999,27(2):68-75.
[2]杨芙清,王千祥,梅宏,等.基于复用的软件生产技术[J].中国科学,2001,31(4):363-371.
[3]黄罡,张路,周明辉,等,构件化软件设计与实现[M].北京:清华大学出版社,2008.
[4]浅谈基于构件的软件开发[EB/OL].(2009-11-10).[2012-6-19]. http://srn.ssc.stn.sh.cn/ShowTopic/760.
[5]FusionCharts Free详细使用手册[EB/OL].http://www.docin.com/ P-47316927.html.
面向构件 第6篇
针对上述情况,本文提出了一种基于扩展的MVVM模式的面向服务软构件模型[2]。在SaaS系统的Web前端增加了一个用以容纳SOC(ServiceOriented Computing)的业务逻辑处理模块的软构件平台,并设计了相应的构件动态挂接的接口,同时支持用户将有效的业务逻辑处理构件作为一种服务构件发布至云平台中,以供平台中的其他用户使用。因此该模型一方面有效增加了SaaS系统前端业务处理模块的可扩展性,同时也增加了个性化业务数据分析处理构件的可复用性。
1相关研究
在以往的分布式计算环境中有很多学者对软构件的机制和操作进行了深入的研究。
常志明[3]等从软件体系结构的角度上提出了一种多Agent系统中软构件的动态绑定机制。设计了通用的多Agent系统模型,并建立了Caste与Agent之间的动态绑定机制,并对建立在其上操作的形式化语义给出了完整的描述。但是并没有对资源的调度问题进行详细讨论。而云计算环境中将一切服务(资源服务、计算服务等)都进行了量化,因而无法直接将该模型应用至云环境。本文作者在文献1中对标准MVVM模式进行扩展(如图1),在Web端增加商业逻辑处理模块,并在此模块中部署SOC(Service-Oriented Computing)[4]环境,设计一个针对SaaS系统的SOC模型,用以支撑对资源服务质量评估的业务逻辑处理[2]。但是没有对Web前端的软构件动态加载平台进行详细地描述。
2 设计思想及模型描述
本文所描述的模型主要解决两个问题,一个是构建Web前端的软构件平台,以支持个性化数据分析处理业务构件的动态加载,并完成SOC任务;另一个是如何将行之有效的数据分析处理软构件发布至云平台中,以备其他用户使用。
2.1 模型逻辑架构
扩展MVVM模式下的软构件模型逻辑架构主要分为两部分(如图2所示)。
(1) 服务器端:主要包括资源中心、核心代理模块、服务发布模块以及软构件列表;
(2) Web前端:包括软构件平台、服务执行模块、运行时环境模块(虚拟机)、用户接口以及本地数据缓存。
2.2 面向服务软构件模型基本思想
在云平台的服务器端建立核心代理模块(如图2),通过该模块对整个SaaS系统的各类服务及资源进行统一的管理和调度,主要描述对动态加载的针对业务的软构件的管理以及对平台底层数据资源的调度。在Web前端的Model层设计了软构件平台,针对不同地理区块的数据特点,支持行业专家设计个性化的数据分析处理方法构件,通过虚拟机将此构件动态地挂接至软构件平台,并将数据分析处理任务对应的数据缓存至本地,采用新构件执行数据分析处理任务,最后将结果发送至Server端,并将有效的构件通过Server端的软构件代理发布至软构件列表。
2.3 软构件动态加载方案
基于扩展MVVM模式的面向服务软构件模型在实现利用动态加载软构件进行海量数据分析处理大体需要六个步骤,如图3所示。
(1) 行业专家依据Web前端软构件动态加载接口的定义,创建针对不同地理区块的个性化数据分析处理方法;
(2) 从Server端获取编译所依赖的运行时环境(虚拟机),并调用编译模块将业务方法动态生成个性化业务处理构件;
(3) 利用反射机制将新构件动态挂接至本地软构件平台,以备做数据分析处理时调用;
(4) 通过SaaS系统Server端核心代理的资源服务代理取得具体的数据分析处理任务,并将任务对应的数据缓存至本地;
(5) 执行数据分析处理任务,采用新加载的数据分析处理构件对本地缓存的相应数据资源完成SOC任务;
(6) 将任务对应的数据分析处理结果上传至Server,并将该软构件通过Server端的数据分析处理软构件Agent发布至Server端的Soft-Component列表以供其他用户使用。
3 核心Agent及软构件平台设计
3.1 核心Agent设计
Resources Service Agent(资源服务代理):资源服务是云计算的核心服务之一,而资源服务代理是对SaaS资源服务调度的核心。 其功能是根据数据分析处理任务要求将任务分成各个子任务,并为每个子任务配置相应的数据资源,然后依据任务将资源调度至相应的网络节点的缓存中。当节点完成处理任务后,再将数据分析处理结果保存至云存储中。
Data Analysis & Processing Soft-Component Agent(数据分析处理软构件代理):负责对SaaS系统发布的所有数据分析处理构件进行统一的管理,响应从网络节点发送过来的构件服务请求,并负责对构件进行相应的调度。
3.2 软构件动态加载接口设计
实现软构件动态加载的基础是定义构件加载的接口,利用反射机制将编译后的构件加载至平台。图4描述了经简化抽象后的软构件平台的UML类关系示意图。数据分析处理方法动态加载接口中定义了 “方法对应参数”、“数据源”、“结果范围”和“处理类型”四个输入参数,返回的结果存放在结果集ResultsStruct中。新的构件通过动态编译加载至软构件平台,在Web前端采用新构件执行数据分析处理时,通过构件反射类的实例利用反射机制将新构件模块动态加载,参与到SOC任务中。
3.3动态构件加载及数据分析处理任务调度核心算法
输入:数据分析处理任务列表List T;处理方法构件实例pm;软构件列表List scl;
输出:Ti采用动态加载的处理方法构件在SaaS系统进行处理分析后所得到的结果。
具体算法流程参见图5。
4 结论
本文提出的基于扩展MVVM模式的软构件模型已经在实际SaaS系统中得到应用,利用反射机制动态加载个性化数据分析处理方法的软构件平台满足了用户的要求,有效地提高了SaaS系统Web前端功能的可扩展性;通过Sever端的软构件Agent提高了软构件的可复用性。但是云计算环境中在Web前端将业务构件动态接入SaaS系统是当前处于探索阶段的研究课题。在实际应用中发现还存在一些尚未解决的问题,如SOC业务组件接口与资源服务接口之间的动态协调调度一致性问题;对于已发布的SOC业务构件的有效性进行合理评估的问题等,这些都是我们下一步将要研究的内容。
摘要:在面向石油行业的SaaS系统上进行海量数据分析处理时,需要针对不同的地区地理信息特点动态地采用相应的数据分析处理方法。设计了一种基于扩展MVVM模式的面向服务软构件模型,该模型在Web前端增加容纳SOC(Service-Orien-ted Computing)的业务逻辑处理模块的软构件平台,并允许用户动态添加个性化业务逻辑处理模块,以便支撑对石油行业数据的各种不同业务数据逻辑处理需求。该模型使得用户在以Web的方式享受云服务的同时,可以动态在SaaS系统上添加符合预定义接口标准的个性化处理模块。实验证明,该模型可以有效地提高SaaS系统的Web前端可扩展性,同时提高了数据分析处理的质量。
关键词:软构件模型,扩展MVVM模式,海量数据处理
参考文献
[1]陈明,李猛坤,张强.一种基于扩展MVVM模式的SaaS面向服务计算模型.微电子学与计算机,2010;27(8):27—30
[2] Hand E.Head in the clouds.Nature,2007;Oct(449):963
[3]常志明,毛新军,王戟,等.多Agent系统中软构件的动态绑定机制及其操作语义.计算机研究与发展,2007;44(5):806—814