顺序图在软件工程实践中的演化作用分析
2011-09-29何锋
何 锋
(云南财经大学信息学院,云南昆明 650221)
顺序图在软件工程实践中的演化作用分析
何 锋
(云南财经大学信息学院,云南昆明 650221)
以苗圃管理系统的设计为例,从类图及其对应的程序代码引申出顺序图,再进一步演化出协作图、活动图、状态图和部署图,为软件工程设计的实践化方法提供了有效的途径,有利于设计工作的开展.
软件工程;苗圃管理系统;顺序图;演化式设计
软件工程包含了技术和管理 2个方面的内容,是管理与技术的紧密结合[1].其本身的特点决定了它不是完全可以从书本和课堂上学会,理解和实践是非常重要的.在实际的“动手做”和“真正练”中体会和掌握软件工程的设计思想,将当前软件企业的实际案例融入在基本原理的学习和设计之中,才能缩短与实际的软件工程实践的明显差距.
目前,使用的最广泛的软件工程方法学主要是传统方法学和面向对象方法学.传统方法学在分析和设计上主要用到了 E-R图、DFD图、IPO表和数据字典卡片;而面向对象方法学在分析和设计上主要采用的是 UML图.随着面向对象方法学在软件研发过程中的越来越深入人心,面向对象技术也就成为当前最好的软件开发技术,而由此也使得 UML图的作用也就越来越重要了.
1 顺序图概述
UML(Unified Modeling Language)是一种标准的图形化 (即可视化)建模语言,它可以为具有静态结构和动态行为的系统建立模型.它的重要性在于表示方法的标准化有效地促进了不同背景的人们的交流,有效地促进了软件分析、设计、编码和测试人员的相互理解[1].
UML由图和元模型组成.图是 UML的语法,而元模型给出图的含义,是 UML的语义.其中,UML的主要内容可以用 5类图 (共 9种图形)来定义[1],即:①用例图 (Use-Case Diagram);②静态图 (Static Diagram),包括:类图 (Class Diagram)和对象图 (ObjectDiagram);③行为图 (Behavior Diagram),包括:状态图 (State Diagram)和活动图 (ActivityDiagram);④交互图 (Interactive Diagram),包括:顺序图 (Sequence Diagram)和协作图 (Collaboration Diagram);⑤实现图 ( Implementation Diagram),包括:构件图(Component Diagram)和配置图 (Deployment Diagram).这里主要关注的是顺序图.
顺序图描述对象之间的动态交互关系,着重表现对象间消息传递的时间顺序.顺序图的纵向表示时间,横向表示不同的对象.浏览顺序图的方法是,由上至下 (按时间顺序)、从左到右地查看对象间交换的消息.
对象间的通信用对象生命线之间的水平消息线来表示,消息箭头的形状表示消息的类型 (同步、异步或简单).当收到消息时,接收对象立即开始执行活动,即对象被激活了.激活用对象生命线上的细长矩形框表示.消息通常用消息名和参数表来标识.消息还可以带有条件表达式,用以表示分支或决定是否发消息.如果用条件表达式表示分支,则会有若干个互斥的箭头,也就是说,在某一时刻尽可发送分支中的 1个消息.
在面向对象建模技术中,将建立起 3种模型:对象模型、动态模型和功能模型.其中的动态模型表示了瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列.而顺序图在其中就起着至关重要的作用,它将显示若干个对象之间的协作关系,强调对象之间发送消息的先后顺序,描述对象间的交互过程.同时,根据顺序图,我们还可以演化出状态图和活动图来.
顺序图在面向对象动态建模技术中占至关重要的作用,它着重表现对象间消息传递的时间顺序,这对软件项目的进度控制和里程碑管理起到很好的指导作用.本文以苗圃管理系统的设计为例,从类图及其对应的程序代码引申出顺序图,再进一步演化出协作图、活动图、状态图和部署图,这为软件工程设计的实践化方法提供了有效的途径,有利于设计工作的开展.
2 用于程序描述的顺序图
在苗圃管理系统的分析设计中,可以把参与者分为 3个大类:客户大类、苗圃员丁大类和苗木大类.其中,客户大类可分为:新客户和老客户;苗圃员丁大类又分为:普通员工类、主管员工类和系统管理员类;苗木大类可分为:乔灌木类、移栽大树类、扦插小苗类、树桩盆景类、竹类植物类、藤本植物类、草本花卉类、草皮草种类、造林苗类、新优果苗类和种籽种苗类等.为了讲解方便,这里主要关注苗木大类中的乔灌木类 (以银杏为例)、树桩盆景类 (以罗汉松为例)和造林苗类 (以马尾松为例).
在苗木类 (Seedlings)的设计中,应该有 2个可访问性为 private的数据成员 input和 seedlingsName,分别用于存储苗木的投入和苗木的名称,因为该私有成员仅供在 Seedlings类内部使用,所以受到严格的保护.Seedlings类的函数成员包括:构造函数 Seedlings和 3个方法 grow、harvest和 gain,他们是公有成员,可访问性为 public,可以被外部其他对象调用.Grow和 harvest方法实现了苗木生长和收获的操作.Gain方法则计算并返回培育苗木的收益(这里假设收益是投入的 2倍).
另外,还需要设计有 1个园丁类 (Gardener),它显示了园丁的工作是培育乔灌木中的银杏 (ginkgo)、树桩盆景中的罗汉松 (podocarpus)和造林苗中的马尾松 (pinus)等苗木.Plant和 gain方法是私有方法,说明它只能在 Gardener类中内部使用;work方法是公有的,它可以对外公开,它调用了私有的plant和 gain方法作为其工作的一部分.Gardener的gardenerName是私有的,该信息对外部是隐匿的,不能随意修改.所设计的园丁类 (Gardener)和苗木类(Seedlings)见图 1所示.
在设计过程中,一个苗圃管理系统程序虽然是由Gardener和 Seedlings这 2个类组成,但是却产生了gardener,ginkgo,podocarpus和 pinus 4个交互对象,因此苗圃管理系统程序是这 4个交互对象集合.他们的交互过程可以由UML顺序图来表示,见图2所示.
顺序图给出了一组对象之间发生的交互顺序,标出了涉及对象以及这些对象之间传递的消息类型.顺序图的水平轴表示不同的对象,垂直轴表示时间.顺序图用带标签的矩形表示对象,对象可以接受和发送消息.每个对象下方显示一个虚线标出的对象生命线,表示该对象的生存时间.生命线上包括有一些矩形的激活,表示对象某个交互动作的活动时间.对象与对象生命线之间的箭头表示对象间的消息发送.
在图2中,gardener对象向 ginkgo对象发送 1条 grow消息,则表示为从 gardener对象生命线指向ginkgo对象生命线的标记为 grow的箭头.这也可以理解成 gardener对象调用了 ginkgo对象的 grow方法,因为方法调用是对象间传递消息的机制.如果对象是与自身通信而发送消息,则箭头指向自己的生命线,例如 gardener对象发送给自己的 plant消息,即 gardener对象调用了自己的 plant方法.另外顺序图中还可以看出对象的依存关系.在图2中,gardener对象通过构造函数创建了 ginkgo对象,在图上表示为 ginkgo对象收到消息后被创建激活.最后,我们还注意到顺序图有一个 actor角色,该角色是系统外部的使用者,负责激活系统对象.在图中,该角色名为 main,即指启动程序的 main方法.
3 用于宏观描述的顺序图
我们除了把顺序图设计得很详细,让它与程序代码对应起来之外,还要把顺序图设计得很抽象,让它对苗圃管理系统中的一些典型的工作流程进行描述.有了这样的既宏观,又微观地设计顺序图之后,对开发后继设计过程的理解是相当有帮助的.
以客户订购苗木以例,其工作流程为:客户在浏览器上,进入相应的苗圃管理系统网站,浏览相关的苗木列表,选择所需的苗木,其订购信息就会通过网络传递到Web/App应用服务器,到 DBMS数据库服务器中进行存储,并把存储后的确认信息显示到客户所在的浏览器界面上.客户再通过手机等通讯工具提醒苗圃的管理人员,并把相应的款项划拨到苗圃的银行账号上.苗圃的管理人员收到这些信息后,对苗圃管理系统中的相关信息进行登记、编辑、统计、审核和确认,直到整个交易的完成.其所对应的顺序图见图3所示.
4 由顺序图演化出其它的UML图
顺序图在动态建模过程中意义重大,我们在描述 Gardener类的基础上建立了顺序图,描述了类实例的生命周期运行情况,由于顺序图和协作图是可以相互转化的,故可以很快地设计出相应的协作图来,见图4所示.协作图则描述了对象按照消息顺序进行的相互协作过程.协作图的重点是通过消息流的形式给出了对象之间的交互细节.在从顺序图中演化出状态图和活动图的过程中,对象与对象生命线之间的箭头 (即为对象间的消息)表示的是一个个的活动,从顺序图中当前所考虑的激活上射出的箭头线 (即消息),是这条激活上的对象达到某个状态时所做的行为.每一条消息就是一个活动或事件,由此,在 Gardener类的基础上再结合 Seedlings类,参照实际苗木的生长周期和培育工作流程,可以设计出活动图来,见图5所示.
由于 2个事件之间的间隔就是 1个状态,同一个对象对相同的事件有不同的响应,则对象所处的状态也不同,故也可以结合活动图,设计出状态图,见图6所示.
同样,结合图3所设计的比较宏观抽象的顺序图,也可以设计出部署图,见图7所示.由以上各种UML图的演化过程中,我们可以发现到这样的一些规则:在经过可行性论证和对用户的需求进行深入分析后,设计出系统的用例图和类图 /对象图后,将工作重点逐渐移向顺序图的设计上.随后,根据对象按照消息顺序进行的相互协作过程,将顺序图中的各个对象由时间关系映射到空间关系,建立起协作图来.再关注过程中各个对象的状态演变和各个状态切换之间的动作,设计出状态图和活动图来.最后,结合基于计算机系统的各种组成元素和Web工程设计的理念,构建出宏观意义上的顺序图和部署图来.
5 结语
总之,在软件系统的开发设计过程中,通过顺序图,逐步从抽象的 UML图到具体的代码实现,再由具体的代码演化出其它更高层次抽象的UML图来,达到了举一反三的演化效果,这有利于软件工程过程在执行过程中的前后连贯和融会贯通.
[1]张海藩.软件工程 [M].2版.北京:人民邮电出版社,2009.
[2]刘艺.Java程序设计大学教程[M].北京:机械工业出版社,2006.
[3]冀振燕.UML系统分析与设计教程 [M].北京:人民邮电出版社,2009.
[4]贲可荣,何智勇.软件工程—基于项目的面向对象研究方法[M].北京:机械工业出版社,2009.
[5]郑人杰,马素霞,殷人昆,等.软件工程概述 [M].北京:机械工业出版社,2010.
[6]何伟,赵昆.基于UML的超市移动商务系统分析与设计[J].云南民族大学学报:自然科学版,2009,18(4):372-374,382.
[7]吴波,郭素敏.工作流技术在软件测试中的应用 [J].云南民族大学学报:自然科学版,2009,18(2):169-172.
[8]陈江,陈建国,陆慧娟,等.UML时间顺序图的实时系统建模及验证[J].中国计量学院学报,2010,21(1):46-51.
[9]张敏辉,唐慧佳,杨剑.基于网络的采购系统的设计与实现[J].云南民族大学学报:自然科学版,2005,14(4):346-348.
[10]侯剑,李斌,潘文林.WEB网络考试系统实现技术研究[J].云南民族大学学报:自然科学版,2004,13(2):116-117,121.
[11]刘会然,潘文林.云南民族大学科技处经费管理系统设计[J].云南民族大学学报:自然科学版,2004,13(1):68-69,72.
[12]赵波,张玉琢,夏幼明.基于 UML的整体与部分关系的可视化表示研究 [J].云南师范大学学报:自然科学版,2007,27(5):25-29.
(责任编辑庄红林)
The Evolutionary Role of Sequence Diagram in Software Engineering Application
HE Feng
(Information College,Yunnan University of Finance and Economics,Kunming 650221,China)
This paper uses the nursery management system as a case study, and then goes through the class diagram and derives the corresponding code sequence diagram , collaboration diagram , activity diagram , state diagram and dep loyment p lan, which help s imp rove the software engineering app lication.
software engineering; nursery management system; sequence diagram; evolutionary designing
TP 311.5
A
1672-8513(2011)01-0058-05
10.3969/j.issn.1672-8513.2011.01.014
2010-09-25.
云南省自然科学基金 (2006F0047M).
何锋 (1973-),男 (白族),硕士,讲师.主要研究方向:软件工程与计算智能.