舒毅,粟福嵩,杨书
(广西科技大学第一附属医院 信息科,广西 柳州 545002)
摘要:构件化软件开发是实现软件标准化生产和流水化作业的前提条件。基于构件化的软件开发设计思想与建筑工程或机械工程的设计思想颇为相似,但在实际的软件开发中,软件可视化的构件设计思想没有建筑工程和机械工程领域的可视化设计这样规范。如果将可视化的工程设计原则应用到构件化的软件开发设计中,将对软件开发工作大有益处。
中图分类号:TP311.11文献标识码:ADOI: 10.19358/j.issn.1674-7720.2016.24.008
引用格式:舒毅,粟福嵩,杨书. 构件化软件开发可视化设计研究[J].微型机与应用,2016,35(24):25-29.
0引言
构件化软件开发设计[1]思想已被提出相当长一段时间,它与机械工程设计思想颇为相似,即通过零部件的生产装配实现一个预期的生产系统。构件化设计通过构件复用(Reuse)和感知互动(Perception Interactive)的特性使得软件生产的效率和产品质量大大提高,构件化设计最终要实现的目标是让软件能够像硬件一样可以组装,像硬件一样可以实现流水线作业。
在构件化的软件设计中,把一个软件系统视为由N个构件组装而成的。每个构件是由若干模块组成的,每个模块又由代码行或函数组成。构件与构件之间以约定的接口进行拼接。如此,一个软件系统的开发设计工作可以分解为系统构件的开发设计。而软件构件的开发设计采用图形化的方法,一方面使系统的搭建更加方便和快捷;另一方面使得软件开发设计更加直观,便于开发团队的协同工作,有利于实现软件开发流水线作业。
因此构件化软件开发可视化设计、标准化定义、层次化划分是真正让软件系统能够像实体工程那样做到开工之前详分析、生产加工有依据、质量评估有标准、维护改造心中有数的有效方法。
1构件可视化设计的形成
基于构件的软件系统开发中,构件与软件系统的关系就如同一台机器与其零部件之间的关系。一台机器在生产和加工之前,小到一颗螺丝,大到一个部件,每一步都有可视化的标准和依据。同理,软件系统生产在开始着手代码编写之前,也有必要将构件的标准和依据与系统集成模型用可视化的方式呈现出来。
多年以来无论是系统图还是流程图[2]都是以图1所示的方式呈现,如果从系统轮廓的角度来看,图1也是可以满足开发要求的,但是要将其上升至工程的视角,则还存在许多改进之处。
图1是某培训中心管理信息系统的数据流图。第一,图形的可读性差,版面设计凌乱,方向忽左忽右,忽上忽下。第二,文字标注不合理,如:圆圈内的文字都表示的某一个处理的动作,可是命名却是以该动作的结果描述。第三,图形缺少层次感,缺少可以剖开的断面,如果是更为复杂的流程图,难以在一张图纸上描述所有的内容。第四,圆圈代表了一个个的构件,对于构件的特征没有很好的描述,没有进行有效的分类,使得构件的利用率降低。第五,从图中无法体现出该项目的规模和项目的控制点,不利于图1某培训中心管理信息系统的数据流图软件开发项目的组织生产。下面针对图1的问题进行构件可视化的改造。
1.1格式化数据流图
将图1中所有圆圈的数据加工体抽象成一个类似管道多通的数据转换构件,并对构件的功能结构、层级关系、构件代码进行标准化的描述。这样做目的是,(1)对数据构件的复用提供一个通用的命名规则;(2)便于数据构件分类,利于归档检索;(3)通过名字将功能和功能的说明分开,明确数据的动态和静态属性;(4)将数据流向标识转化成数据构件输入和输出元素。让图形更简洁,层次更清晰。
1.2构件编码格式
确定图2所示的构件编码格式。
图2构件编码格式对构件编码,除了可以通过构件直观地识别构件类型外,还可以让构件易于自动化检索,易于比对构件之间的相似度,利于代码的复用。
构件的编码事实上还需考虑诸如操作系统、开发环境、输入/输出的数据类型、B/S或C/S架构等一系列的开发和应用环境因素。通过编码的作用使得多个构件形成一本构件字典。再通过构件字典,使得软件生产企业能够像工程装配一样在短时间内高效生产出软件产品。
1.3创建构件明细表
建立表1所示的构件明细表。
2举例
将某培训中心管理信息系统的数据流图格式化后的形态如图3所示。
对格式化后的流程图分析如下:
第一,将图1中的数据流的方向统一,强制性规定数据传输方向只允许由左至右或者由上至下的方向,使得整个数据流程图的可读性大大增强。第二,图形的层次感增强,条理清晰。第三,利于团队协同工作,既有利于项目合理分工,也有利于软件审计工作开展。第四,利用层次关系可以形成断面,这样对于在一张图纸上无法描述所有流程和功能的情况,通过设置适当的断面,利用图纸索引可将其分开绘制。第五,图中适当的说明也可补充图形无法表述的内容。第六,通过图号、构件号将零散的构件有机地连成一体,形成一套完整的软件项目概要设计档案。
2.1构件创建实例
构件(Component)从外观形态上看就是一个具有输入或者输出功能的独立的生产部件。不管是Microsoft公司所描述的COM,还是Sun公司所描述的JavaBean以及OMG组织所提到的CORBA,其目的和作用都是封装和复用。
构件设计与整个系统开发和使用环境息息相关,上述三家公司在构件的运行机制和构造技术上各有不同。COM构件定义了客户与构件之间互操作的标准,是一种以组件为发布单元的对象模型,这种模型使得各个软件组件可以用一种统一的方式进行交互。JavaBean是一种Java语言写成的可重用组件[3],作为一个特殊的Java类,使用Java语言书写并且遵守JavaBean API规范。开发者可以用JavaBean构造器中的工具对其直接进行可视化操作。JavaBean有3个接口面,可以独立进行开发,包含可以调用的方法、提供的可读写的属性及向外部发送或从外部接收的事件。公共对象请求代理体系结构或通用对象请求代理体系结构(Common Object Request Broker Architecture,CORBA)是由OMG组织制订的一种标准的面向对象的应用程序体系规范,它包含对象请求代理ORB、对象服务、公共设施、域接口和应用接口这几部分,其核心是对象请求代理ORB。
以JavaBean的构件创建方法为例,在表1中任选一个构件0102010301,其代码设计如下:
//创建JavaBean图3将某培训中心管理信息系统的关联图格式化后的形态表1构件明细表LayerCodeFunctionNameInput_dataOutput_data10102010301收集信息两进一出三通电子邮件、信函事务信息20202040601分类事务两进四出六通事务信息、学费查询请求、报名请求、
学费、注销请求30301030401处理注销一进三出四通注销请求课程、注销通知单、学生30301020302处理学费一进两出三通学费收据、收费30301010203处理查询一进一出直通查询请求回答信息40402030501处理报名两进三出五通报名请求、收费注册单、课程、学生50501010201产生收费单一进一出直通注册单收费单60603030601复审单据三进三出六通注销通知单、
收据、收费单收据、入学通知单、
注销通知单
Package cn.lyyfy.stuinfo;
Public class CollectInformation
{
Private String email;
Private String letter;
Public CollectInformation()
{
}
Public void setEmail (String email)
{
this.email =email;
}
Public void setLetter (Stringletter)
{
this.letter = letter;
}
Public String getEmail()
{
return this.email;
}
Public String getLetter()
{
return this.letter;
}
Public String outTransactionInformation()
{
return transactioninformation;
}
}
2.2构件的联结与集成的可视化设计
以JavaBean构件为例代码如下:
<!-- 声明JavaBean对象 -->
<jsp:useBean id=”collinfo”
scope=”page”class=”n.lyyfy.stuinfo. ollectInformation”/>
<!-- 设置对象属性 -->
<jsp:setProperty name=”collinfo”
property=”email”value=”610623429@qq.com”/>
<jsp:setProperty name=”collinfo”
property=”letter” value=”广科大一附院”/>
<!-- 获取对象属性 -->
<jsp:getProperty name=" collinfo " property="email" />
<jsp:getProperty name=" collinfo " property="letter" />
<!-- 获取事务信息 -->
<%=collinfo.outTransactionInformation()%>
通过上述构件可视化的演变,最终封装了一个图4所示的边界清楚、功能明确的构件。从图4中的可视化构件实体可以推演出,每一个构件都是在数据的输入和输出之间图40102010301号构件可视化代码演变进行了必要的生产加工,构件之间的区别体现在输入和输出之间端口数量上和具体数据加工环节的区别,但是在构件的实现框架和内部逻辑关系具有极高的相似性。由此可见,构件可视化设计的好处,一是在软件工程从概要设计到详细设计之间的过渡越来越直观、具体;二是构件和构件之间的边界越来越清晰;三是构件的可视化设计可以映射到构件代码的设计,直至映射到项目工程的实现;四是利用构件组成的一般性特点将封装[4]的可视化构件有序地进行编目可以形成一本可视化的构件工程图纸。
3构件可视化设计与传统的UML规范图形的关系
统一建模语言(Unified Modeling Language,UML)又称标准建模语言,是一个支持模型化软件系统开发的图形化语言。UML从考虑系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、部署图9种图。这些图从不同的侧面对系统进行描述。系统模型[5]的这些不同侧面综合成一致的整体,便于系统的分析和构造。
在此讨论的构件可视化设计使用了简化、合并和细化的方法,将UML所含的图重新梳理,再配合工程图纸的设计思想,使构件的可视化设计能够自上而下、层层递进地完成程序的设计。
以一个UML的状态图(图5)为例,此图看似很清楚、详细地阐明了对象之间的关系,但是实质上这几个图之间有很多的重复和相似的元素。从本研究的观点看来,只要把握住数据的流向就能把握住程序的灵魂。因此从图6可以看出,借助工程图形的设计原则(层次、美观、布局合理、易读)可使状态图效果得到改进。
再看UML的构件图(图7),其表现了构件之间数据的传递关系。从本文研究的观点来看,将构件明细表例(表1)、构件编码例(图2)、关联图(图3)这几部分与概要设计阶段的系统图和详细设计阶段的代码编写联系起来进行可视化设计,将会使系统构件图(图7)更加具有代码设计阶段的参考性和软件测试阶段的针对性。
4结束语
面向构件软件设计技术还在不断地产生新的技术和方法,以工程的眼光从可视化的视角将纷繁复杂的软件系统直观、简单地呈现出来,无疑对抽象的软件开发提供了一个流水化、实体型的设计模式。可以设想,软件开发人员尤其是系统分析人员,在用了本文讨论的构件可视化的设计方法之后,将使系统的分析和交流变得十分轻松和方便。但是,事物都具有双面性,构件可视化设计必然也会带来新的工作负荷,如协调平衡软件开发的模式,有针对性地选择开发场景等,让构件可视化成为软件开发的一把利器。
参考文献
[1] 张海藩,吕云翔.软件工程[M].北京:人民邮电出版社,2013.
[2] 毋国庆,梁正平,袁梦霆,等.软件需求工程[M] 北京:机械工业出版社, 2008.
[3] 文艺,袁道华,李晓娟,等,面向对象的构件化软件开发[J].计算机应用研究,2002,19(8):40 42.
[4]毛澄映,卢炎生.构件软件测试技术研究进展[J].计算机研究与发展,2006,43(8):137 1382.
[5] 夏苑,张为群.一种基于CBSE的嵌入式实时软件建模方法图7某图书管理系统构件图
研究[J].计算机科学,2005,32(8):213 215.