面向对象的程序设计方法是九十年代以来最重要的软件设计方法。汽车排放测试系统是基于底盘测功机、排放分析仪、数据采集卡等外围硬件设备,依照国家排放法规和生产研究的要求完成各类汽车排放试验数据采集和处理的计算机系统。由于系统要同外围设备交互,试验项目多且用户要求复杂,采用传统的基于功能分解的软件设计方法使得软件开发及调试十分困难,软件的可靠性差,并且随着硬件设备的变化、试验项目增加以及用户要求的变化,很难在原有系统上进行扩充。面向对象方法按照人们正常的思维习惯建立问题域模型,软件设计自然地表现问题域求解方法,抽象数据类型、数据封装以及继承等特点使得软件体系结构稳定、可重用性好、便于维护和扩充,可大大提高软件的开发效率。
1 汽车排放测试系统的硬件结构及软件需求
汽车排放测试系统总体结构如图1所示。输入信号中,大气压、干温、湿温、催化器前后温度及压力等信号来自于传感器,车速、距离脉冲来自于转鼓试验台,司机开始信号来自于遥控器。信号调理单元将这些信号转换成计算机接口能够接收的标准信号,主计算机通过A/D、DI/O接口卡对这些信号进行采集。主计算机通过GPIB接口卡与定容采样装置和排放分析仪通讯,读取数据并且按照试验流程控制这些设备。主计算机通过一块图形加速卡控制司机助显示器的工况曲线显示。软件需求如下:
(1)依照排放法规和生产研究的要求能够实现CVS试验、模态试验、催化器转化效率试验的流程控制。试验过程中系统要完成初始参数设定、数据采集、设备控制、显示监测界面等任务,并将测量结果写入磁盘文件。
(2)按照用户要求实现试验数据表格和曲线的打印输出,包括CVS结果表格、模态试验按工况和循环统计结果表格、排放污染物浓度曲线、催化器前后温度及压力曲线、催化器前后污染物浓度曲线等。
(3)试验开始前对采集卡、排放分析仪等硬件设备进行检查,若设备不正常则提示用户并停止试验。
(4)A/D输入通道可进行标定。
2 面向对象分析
抽象数据类型是面向对象程序设计的中心概念之一,一个面向对象软件系统的结构框架及高层设计最终表现为一系列类、它们的定义和对象。类是一个抽象的数据类型,它的定义包括一组属性数据和在属性数据上的一组操作,通过类的界面对外提供服务,对象是类的实例,对应于问题域中的实体。面向对象分析过程标识问题域中的实体,确定这些实体之间的关系,这一阶段产生描述系统功能和问题域基本特征的综合文档。汽车排放测试系统中的对象如图2所示。
“排放分析仪”对象封装了分析仪的操作;“I/O接口卡”封装了A/D接口卡和DI/O接口卡的输入及输出操作;“司机助”对象实现司机助显示器工况曲线的显示;“测试设备”对象封装了排放测试系统中的硬件设备操作。为“排放试验”对象提供服务;“排放试验”对象封装了试验流程,将测量结果存入磁盘文件;“数据文件”对象读取文件,实现数据表格及曲线的打印输出。
排放测试系统的硬件设备可能选用不同类型的分析仪,如HORIBA公司的MEXA_9000或AVL公司的CEB_x00,也可能选用不同类型的I/O接口卡,如中泰公司的PC_6313或研华公司的PCL_812,根据用户的要求也可能增加新的试验项目。在面向对象方法中,继承是使用现存类作为基础建立新类的技术,新类复用现存类的定义,并且可增加新的属性及操作。对象间通过消息进行通讯,消息是对操作的实际调用,其中“发送者”向“接收者”发送一个消息,以实现某些处理功能。排放测试系统中对象之间的关系如图3所示。
图中三角形表示整体与部分结构,半圆形表示一般与特殊结构,实线箭头表示消息连接。“测试设备”对象由“排放分析仪”、“数据采集卡”和“司机助”三个对象组成,“排放分析仪”、“数据采集卡”、“试验”和“数据文件”作为基类可派生出不同的子类,“试验”对象向“测试设备”对象发送消息实现数据采集、分析仪控制和司机助显示等功能。
由对象关系图可以看到,面向对象技术将软件结构建立在与问题域中实体对应的对象上,软件的功能分散到对象中间,由于对象相对稳定,软件的修改主要集中于封装在对象内部的属性和操作上而不影响软件的体系结构。这种修改的局部化保持了软件结构的稳定性,减少了软件修改的工作量和难度。
3 高层设计
面向对象分析过程标识的对象以及它们之间的关系构成了问题域模型,高层设计阶段开发系统的结构,构造应用软件的总体模型。对象封装了问题域内特定的的功能实现,并通过界面对外提供服务。而应用程序相当于一个驱动模块,负责建立类的实例(对象),接收用户输入并发送消息给对象实现功能调用。汽车排放测试系统的应用程序结构如图4所示。系统划分为三个处理功能:系统维护、排放试验和数据处理。“系统维护”功能包括分析仪总精度检查和通道标定,“排放试验”按照用户选定的试验类别完成试验流程,“数据处理”功能根据用户载入的数据文件完成打印输出。用户选择某一功能时,应用程序发送消息给相应的对象,图4中箭头表示消息的发送。
4 面向对象方法的特点分析
(1)传统的结构化程序设计是以“过程”和“操作”为中心构造系统的,是面向处理的体系结构。而“过程”和“操作”是不稳定的,若基础硬件、用户需求、编程环境(编译器和操作系统)改变,处理的体系结构可能也需要改变,系统的移植或升级需要花费很大代价。面向对象的程序设计对问题域进行模型化,以“对象”和“数据结构”为中心,软件的体系结构相对稳定,思维成果的可重用性较好。
(2)封装和数据隐藏是面向对象程序设计的基本要素。把数据和与之相关的过程捆绑在一起定义为一个整体(即对象),操纵数据的过程和函数的作用域和可视性被限制在代码局部区域内,改变数据结构或算法仅局限于实现这个类的代码区域内而不会引起系统的变化,这对程序维护提供了方便。
(3)类的抽象特性提供了模块化的体系结构,类的界面指明它所提供的服务,类的使用者无需关心这些服务的实现细节。将一些经过测试的类存储于类库中,在建立新的应用软件时只需在类库中找到所需要的类或通过继承复用现存类以满足问题域的改变,这使得面向对象设计的可重用性得以提高。
作者按照软件工程标准,用面向对象技术完成了汽车排放测试系统软件的设计,并在Win98下采用美国NI公司的图形化编程语言LabVIEW实现。这套系统已在上海泛亚汽车技术中心投入使用,系统的开发周期短、可靠性好、便于维护,充分体现了面向对象程序设计的优点。