APP下载

基于WPF的结构化建模工具设计与实现

2019-11-18王瑞平孙高飞

电子技术与软件工程 2019年18期
关键词:链表结构图源代码

文/王瑞平 孙高飞

1 概述

在当前软件开发技术中,软件开发方法主要有结构化开发方法和面向对象开发方法,其中结构化开发方法是采用模块化、自顶向下逐步细化的方法,方法简洁、易掌握,广泛应用于实时嵌入式系统、过程控制、科学与工程计算等领域。面向对象开发方法则主要以对象为核心,设计完善对象模型、功能模型和行为模型。相对面向对象设计方法,结构化设计方更加简单,容易掌握。

在结构化设计阶段,软件体系结构是对软件各个组成部分的总体设计,主要通过软件结构图或软件层次图表示。其中结构图中由模块、以及模块与模块之间的关系构成,其中模块在代码实现时可以是函数、过程等。层次图与结构图类似,主要由模块及模块之间的关系构成,相对结构图层次图更加简洁,结构图较为详细,但容易造成制图繁琐不易读。无论是结构图还是层次图都不能够直接转换为代码,由设计模型到源代码实现阶段有间隔。需要构建一种建模工具,实现模型图到代码转换,将大大缩减模型到实现的距离,提高工作效率。当前对软件建模进行研究主要集中在需求分析阶段的建模,由设计到实现研究较少。在由设计模型转换为代码框架实现的系统也大多在支持面向对象的设计方法,例如IBM Rational Rose支持由类图转换为面向对象程序设计语言的类代码框架,结构化设计到代码编写研究和实现较少。虽然现在开发的大部分交互性极强的大型软件系统多采用面向对象的程序语言实现,但对流程明显、科学计算要求高、交互少的小型软件项目采用结构化设计,结合面向对象语言实现也是非常方便快捷的。

为解决上述问题,设计一种建模工具软件,结合层次图和结构图改进设计模型元素,在模块中增加设置模块的接口信息,绘制简单的模型图,实现由模型图直接转换为源程序代码框架,并可以读写模型图,实现模型图的再编辑。软件设计者不仅能通过工具可视化创建软件模型图,对系统进行总体认识,模块之间关系层次分明,模块传递参数明了,而且能快速生成相应的函数或过程调用代码框架,将为后期代码准确实现提供基础。此建模工具不仅可以用于软件开发的系统结构建模,而且可以用于程序设计教学,提高教学质量。

图1:模型图示例

图2:结构化建模工具系统层次图

图3:结构化建模工具系统核心类图

2 结构化建模工具设计与实现

结构化建模工具系统从模型图设计、系统体系结构、核心类设计、系统实现等四个方面设计实现。

2.1 模型图设计

结构化建模工具中模型体系,吸收层次图和结构图的优点,在新模型中基本元素是模块,模块由矩形框表示,框内有模块名称、参数和返回值三类信息,通过设置模块属性,细节化模块的信息,方便转换代码。模块信息有内码和外码,其中外码显示模块信息,如汉字显示,方便用户阅读;内码信息(符合编程语言要求的标识符名称),用于转换源程序代码。模块之间连线采用无箭头的直线表示,表示位置在上层的模块调用位置在下层的模块。新模型图扩充了层次图的表示,同时也把结构图中的接口信息放入了矩形框内,这样的模型图简洁明了。模型图示例如图1所示。

2.2 系统体系结构

结构化建模工具系统根据需求可以分为四个模块,分别为模型图绘制模块、模块属性设置模块、模型到源代码转换模块、模型图读写模块。其中模型图绘制模块主要实现在可视化界面上通过拖放方式绘制模型图;模块属性设置模块主要实现界面上模块的属性详细设置,包括模块的名称代码、入口/出口参数、调用信息等;模型到源代码转换模块实现根据选择的程序设计语言生成源代码框架预览和源代码文件;模型图读写模块主要实现把模型图保存到文件,并可读取模型图文件,继续编辑模型图。结构化建模工具系统的软件层次图如图2所示。

图4:结构化建模工具主界面

图5:程序源代码预览

2.3 核心类设计

在结构化建模工具系统中,系统中以父模块类(FatherModule)为核心,派生有C函数模块类(CFuntionModule)、Python函数模块类(PythonFunctionModule)和存储模块类(SaveModule),其中SaveModule用于存储模型时转换JSON格式,参数类(Parameters)为模块中参数的类型。结构化建模工具系统核心类图如图3所示。

2.4 系统实现

结构化建模工具系统采用WPF(Windows Presentation Foundation,Windows呈现基础)技术实现。WPF是微软公司推出的基于DirectX和GPU加速来实现的图形界面显示技术,使用XAML描述界面,后台代码由C#语言实现,界面与代码实现分离,显示速度和效果优于Win Form技术。

2.4.1 模型图绘制模块

模型图绘制模块,首先选择转换目标语言,然后在绘图区绘制模型图。模块元素表示为具有名称的方框,包括模块名称、参数和返回值三项内容,模块与模块之间的关系为连线。在实现上通过链表存储当前模型图的模型信息,即在图形界面上添加或删除模型元素的同时,系统相应在链表中添加或删除模型元素对象。设计主界面如图4所示。

2.4.2 模块属性设置模块

模块属性设置模块,可以根据在图形界面上选择的模型元素设置模块的属性,包括模块的名称、代码、注释、参数名列表、参数代码列表、返回值列表、返回值代码列表等,也可以查看模块的子模块、父模块和当前模块的源代码预览等信息。设置属性完成后系统自动更新对应模型元素对象链表信息和界面上显示信息。

2.4.3 模型到代码转换模块

模型到代码转换模块,根据图形界面上的模型图对应的模型元素链表信息转换为相应程序源代码框架,提供给用户预览,并可以在计算机文件系统保存源代码文件。根据在模型图中模块的属性设置和调用关系就可以创建源代码框架,内容包括函数声明、函数定义及函数调用。支持的程序设计语言有C和Python,C和Python的模块对应都是函数,但语法格式不同。C语言是结构化程序设计语言,完全符合结构化设计的要求;Python虽然是面向对象程序设计语言,但可以采用函数式编程,把程序过程写成一系列的函数调用,通过函数调用提高封装级别,非常易用理解和使用,在如机器学习算法、网络爬虫等在小规模项目广泛使用。转换代码预览效果如图5所示。

2.4.4 模型图读写模块

根据图形界面上的模型元素对象链表信息,把链表中的模块对象转换为JSON格式保存至计算机文件系统。JSON(JavaScript Object Notation)能够以一种完全独立于编程语言的文本格式来存储和表示数据,非常方便数据对象的操作。在存储数据时,需要把对象的孩子链表和父亲链表对象信息转成字符串格式,其余属性信息直接转换存储即可。

模型图文件读取模块,读取计算机文件系统中已存在的模型文件,根据文件内容转换为对应模型元素对象链表,然后把模型元素对象链表中的元素在图形界面上创建相应的图形,实现模型图的再现,可以对模型图再编辑。

3 总结

结构化建模工具作为一种CASE工具,它不仅能构建系统体系模型,展现模型中模块组成和模块之间的接口,而且可把模型图转换成相应的程序代码框架,实现由模型到代码实现的无缝连接。该系统设计不仅能够应用于软件开发企业进行软件体系结构设计、方便代码开发工作分解,而且能够应用于学校软件设计类课程训练,帮助学生理解和掌握结构化设计。

猜你喜欢

链表结构图源代码
人工智能下复杂软件源代码缺陷精准校正
中国共产党第二十届中央组织结构图
基于TXL的源代码插桩技术研究
基于二进制链表的粗糙集属性约简
软件源代码非公知性司法鉴定方法探析
基于链表多分支路径树的云存储数据完整性验证机制
第十九届中共中央组织结构图
揭秘龙湖产品“源代码”
链表方式集中器抄表的设计