该章目的是可以开发仪器类。
一、类的概述
一般来说类有三大特性,封装,继承和多态。
- 在实际项目中,最主要是继承和多态,要搞清楚这两者的概念和在LabVIEW中是怎样应用的。
- 在LabVIEW中,面向对象编程用到的就是LabVIEW的类,后缀是.lvclass。
以下以设备类的层级来说明,假设现在有三个类,分别是
①device:设备类
②serial_device:串口设备类
③network_device:网口设备类
串口设备类和网口设备类继承设备类,那么设备类是它们两个的父类,相对来说,它们两个是设备类的子类。
二、类的创建
①在创建了项目之后,就可以在项目中创建类:右键"我的电脑"→新建"类"
②此处新建一个device类,默认指定LabVIEW对象为父类
③点击确定后,完成创建
三、继承
类的继承表现为子类继承父类相关的数据成员和成员方法。
父类比较抽象,用于给子类提供成员方法,供子类实现。
子类在父类的基础下,进行扩展,添加新的属性和方法,子类的功能必定比父类更丰富,更具有特殊性。
比如说一个通用的设备,作为设备的父类(以下称为设备类),一般会有四个方法,分别是连接,读,写,断开,在LabVIEW中称之为"动态方法"
网口设备类继承这个设备类,可以具体实现网口的连接,读,写,断开,LabVIEW中称之为"重写"
测试仪器类继承网口设备类,需要实现读取测试仪数据这个VI,这个就是子类独有的方法,这个方法不需要这个类重写的,在LabVIEW中称之为"静态方法"。
子类可以重写父类的"动态方法"和使用父类的"静态方法",也可以使用父类的"数据成员"。
1.1、静态方法
静态方法可供子类直接调用
创建静态方法的步骤是:
右键对应的类,此处是device.class→新建→点击"基于静态分配模板的VI"
此处新建一个静态方法为"报警.vi"
程序框图如下:
1.2、动态方法
动态方法可以供子类重写,设备一般会有运行,这个每个子类的实现都不同。
创建动态方法的步骤是:
①右键对应的类,此处是device.class→新建→点击"基于动态分配模板的VI"
②名称改为"运行"
1.4、新建子类
1.4.1、新建时继承
新建一个串口设备类,名称为"serial_device.vi",指定继承父类"device"
1.4.2、设置继承
如果在新建一个类后,想重新设置继承关系,可以通过以下步骤:
①新建一个网口设备类"network_device",默认继承父类LabVIEW对象。
②右键"network_device"→点击"属性",弹窗
③选中"继承"→点击"修改父类"
④选中"device"→点击"继承所选类",则重新制定"device"为"network_device"的父类
1.4.3、子类调用父类的静态方法
新建"test.vi"
程序框图如下:
这里体现了子类可以直接使用父类的方法。
这里虽然调用的是"静态方法",但是实际无论是父类的"静态方法"还是"动态方法"都可以供子类调用
四、多态
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。
重写的VI体现了类的多态。
4.1、子类重写父类动态方法
子类可以使用父类的静态VI和动态VI。
不可以再新建一个与父类静态VI同名的VI,意思就是不能重写父类的静态VI。
可以重写父类的动态VI。
这里重写"运行.vi",以"serial_device"为例。
①右键"serial_device"→点击"新建"→点击"用于重写的VI"
②弹窗,就会显示所有能重写的VI,也就是所有父类的动态方法
③新建"运行.vi"后,程序框图修改为:
④同样步骤,“network_device"重写"运行.vi”,程序框图如下:
至此,“serial_device"和"network_device"类都有了"运行.vi”
⑤新建一个"test1.vi"
程序框图如下:
运行后,两次弹窗,第一次是"串口运行",第二次是"网口运行":
多态体现在:
- "serial_device"和"network_device"可以组成数组,这个数组是"device"数组
- “device"数组进入for循环后,第一次执行的是"serial_device"的"运行.vi”,第二次执行的是"network_device"的"运行.vi"