电子海图软件可重用设计

2019-12-23 09:28郭鹃
电脑知识与技术 2019年31期

郭鹃

摘要:电子海图软件是航海安全的基础支撑软件,广泛运行于嵌入式系统、Windows、Linux等多种操作系统中。该文针对电子海图软件在多操作系统平台下开展可重用设计,对电子海图软件进行分层架构设计,有效支撑电子海图软件基础层、功能层、操作系统适配层系统解耦,实现了电子海图软件功能构件集、基础软件构件集清晰划分,对减少产品部署周期、控制成本都有着重要的意义,在实践中取得预期的效果,解决了电子海图软件在多个操作系统平台下软件可重用设计的问题。

关键词:可重用设计;分层架构;电子海图

中图分类号:TP31 文献标识码:A

文章编号:1009-3044(2019)31-0061-03

电子海图显示与信息系统(以下简称电子海图软件)是信息化技术在航海领域的重要应用,电子海图可大幅提高船员的工作效率,同时提高航海的安全性。传统的电子海图软件开发模式根据需求通过特定的平台进行开发,根据用户需求可选择Windows操作系统、Linux系统、嵌入式VxWorks系统等等,这种开发模式针对单个操作系统平台特点进行开发,构件可重用性有较大的提升空间。因此从软件工程化角度出发,在设计阶段对电子海图软件做好可重用设计,聚焦于构建电子海图软件构件集,通过软件分层架构设计提高电子海图软件可重用性,实现电子海图软件在多个操作系统平台应用中的高效应用。

可重用设计在软件设计里涉及需求分析、软件设计、配置项管理等各部分。本文设定需求清晰,仅探讨如何在电子海图软件构架设计这个层面实现可重用的软件。

1整体架构设计

电子海图软件属于特定领域的软件,非常适合按照软件工程进行分层架构以及功能构件化行设计,采用标准的框架结构可提升软件架构高效演进,减少软件重构带来的成本以及开发周期的风险。

好的软件架构可提升软件的可重用性,相比于一般的商業软件,电子海图面向航行安全,具有可靠性要求高、复杂性高等特点。首先将电子海图软件分解为与目标平台无关的主体部分以及目标平台相关的适配部分,电子海图主体部分主要体现软件的核心功能㈣,比如电子海图的漫游、缩放等应用操作以及字体绘制、要素绘制、坐标转换算法,根据功能的不同范围,再具体划分为海图功能层和基础绘制层。

电子海图软件与操作系统关联的部分也就是操作系统适配层主要集中在数据文件读取、文件管理、显示输出、人机交互等部分。电子海图软件利用分层架构进行显示和数据分离的设计,会大大减少电子海图软件与操作系统底层耦合。

根据以上对电子海图软件的特点分析,电子海图软件基本组成分为基础绘制部分、海图功能部分、符号库及海图数据部分等三个部分组成,可以将它们根据交互方式区别定位于不同的抽象层次,具体分为以下几个层次:海图功能层、基础绘制层、数据层、操作系统适配层,具体如图1所示:

2开发语言以及编译规则

2.1开发语言

首先需要确定电子海图开发语言,电子海图软件的主要工作是数据处理以及图形绘制,这两项对数据处理速度以及图形绘制的速度都有较高的要求,Java等解释性语言受限于各种硬件运算速度,尤其在嵌入式操作系统支持并不完善,而标准c++语言本身具备很高的可移植性,利用其提供的模板类、数据流等实现符号库解析、数据读取等核心功能,因此选用C/C++语言。

2.2操作系统字节序

电子海图运行在X86和PowerPC硬件体系结构上时,字节序也不一样。因此在这两个不同体系结构上进行电子海图数据转换需要满足字节序的问题。为了尽可能减少由于数据结构差异带来的额外处理工作,通过在数据定制软件,将电子海图数据转换为统一、高效的内部数据组织方式,也就是通常所说的SENC。

2.3编译规则

电子海图软件主要工作是数据处理以及图形绘制,因此在数据处理部分,特别是对海图元数据以及海图要素绘制结构体定义时,默认情况下编译器往往按照32位也就是4字节进行对齐,导致最终的结构体大小为4字节的倍数,所以根据一定的编程规范在编译时要选择紧凑字节数,在Windows操作系统下通过条件编译参数或者IDE进行设置,其他系统例如VxWorks系统以及Linux系统通过设定packed编译参数设置,结构体定义清晰化有利整个软件可重用设计。此外,定义清晰的变量也有利于软件可重用设计。

3海图功能层及基础层构件化设计

海图功能层完成初始化、海图刷新显示、漫游、缩放等功能。不管是海图漫游,还是海图开窗放大、海图缩放等功能接口都是根据目标的区域传递位置参数,通过经纬度坐标和屏幕坐标的换算关系,最终根据区域对海图进行绘制。因此根据这个设定,可以将海图和人机交互相关的接口高度抽象化,对电子海图代码进行分解,提取功能构件,从而提高软件的可重用性。

海图基础层则与电子海图数据相关的投影变换、字体绘制以及点、线、面各种海图要素绘制完成调用图形中间件提供的点、线、面封装接口,因此也可以将基础层各种绘制功能以及拼接绘制等接口抽象为基础构件。

功能层和基础层执行流程如下图所示:

下面以漫游功能为例,电子海图软件功能层和基础层以及操作系统适配层的接口函数如何进行层次上的划分。

4操作系统适配层设计

4.1数据以及内存管理

电子海图软件需要进行海图数据索引以及数据读取,因此在不同的操作系统下面对文件存放目录都有不同的规定,比如Windows通过盘符来表示,Linux文件存放路径采用“/”根目录符号表示,存放路径可以通过正则表达式进行解析,通过匹配和遍历进行海图数据存放路径解析。并且在不同系统下对系统调用也有不同的表达方式,比如Windows对文件的读取会有不同定义函数,比如说fopen等函数在不同操作系统下工作都有一定差异性,在跨平台设计过程尤其需要注意到。如果要提高软件可重用性,减少修改软件的次数,就必须在设计阶段考虑文件系统的兼容性。

另外,电子海图的数据读取以及绘制都要使用到大量内存,并且底层电子海图绘制位图在应用时经常要实现一定可重人性,尽量保留较少的全局变量,也可以通过类似堆栈的方式来实现全局变量保存。

4.2图形中间件设计

图形中间件把电子海图基础层软件和操作系统隔离开来,这样就使得电子海图系统的图形绘制与所在系统无关,向上它能够屏蔽多种平台系统对图形设备接口描述的差异,为图形功能层提供统一图形设备操作方法,向下则针对不同的嵌入式平台,实现各种具体的可视化输出功能。从而大大提高了系统的可移植性。图形中间件封装不同操作系统对图形图像绘制和字体显示接口,能提供画笔、画刷、文本属性设置以满足特殊绘制效果,向上提供平台无关的绘制接口,以解决电子海图软件可重用设计的实际需求。

电子海图软件所绘制的要素主要包括点、线、面,不同平台对于填充有不同的调用方式。从可重用角度出发,需要对不同系统的函数接口进行平台无关性的封装。电子海图软件需要绘制大量的海图要素,使用的图形函数主要有以下类型:画线函数、多边形填充函数、绘图属性函数、字体函数。其中画线函数的功能是进行海岸线、等深线等线状要素的绘制,填充函数的功能是用指定的颜色来填充陆地、岛屿等面状要素,绘图属性函数是用来设置如画笔的颜色,画刷的颜色等,字体函数是在指定的区域进行海图字体绘制等等。

不同操作系统提供的图形绘制函数库均有一定差异性,比如VxWorks的图形驱动包为WindML,Windows操作系统提供GDI应用编程接口,Linux則提供XWindows调用方式,因此设计在操作系统适配层采用高度定制化、与操作系统无关的图形编程接口,屏蔽操作系统差异性对电子海图软件的影响,能够最大化地提升海图基础层以及海图功能层可重用性。

4.3字体差异性接口差异

电子海图软件中需要使用很多字体,对普通字体显示需要进行旋转等各类操作,VxWorks等嵌入式操作系统未提供相关中文字体,这时就需要使用点阵汉字解决电子海图显示过程的字体显示。Linux操作系统如果没有合适字体也需要进行点阵字体读取,Windows操作系统通常使用系统提供的字体函数进行直接调用。

5结束语

本文探讨了利用操作系统适配层一>海图软件基础层一>海图软件功能层的层次模型实现电子海图可重用性的软件工程化方法,以基础上的漫游功能为例说明了功能层构件化的设计方法,以海图漫游构件为例说明了可复用构件的设计方法,并利用已开发的海图构件实现了海图漫游、缩放、开窗放大等人机交互接口开发,核心代码重用率超过95%,和传统开发方法相比,提升较大。

作者在有限的时间内完成了VxWorks、Windows、Linux、So-laris等多个平台下的电子海图软件开发应用,也得益于清晰分层架构设计,从软件概要设计就利用软件重用的软件工程化方法,将会有利于提高软件的可重用性,减少产品的开发和测试周期。并能很好地保证产品的可靠性。本文所述的分层架构设计也可应用在其他功能较为复杂的软件进行可重用设计,在设计阶段使用分层架构进行设计时考虑到各个平台不同差异性,软件研发成本都可以得到不同程度的降低。