LabVIEW中的类

面向对象编程是现代编程语言的必备,现在在新版的LabVIEW中对面向对象也有了一定程度的支持,下面就对LabVIEW中的面向对象编程做一点简单的介绍。

面向对象中的对象是对问题的一个抽象,在面向对象编程中还有封装、接口、方法、继承、多态等概念。面向对象之所以流行是因为这种编程方式更接近人类的思考方式,而继承和多态等特性又会使程序的设计更加简单和灵活。这里不对面向对象做太多详细的介绍,只是说一下LabVIEW中面向对象的一些应用。

面向对象概念在LabVIEWE中的体现

  1. 封装,在LabVIEW中类的数据封装是通过一个自定义的控件实现的,与一般的自定义控件的区别是类的控件和类是绑定的,控件内部的所有变量都不能直接访问,必须通过相应的方法实现数据的访问,这个和JAVA的方式有点类似;
  2. 方法,方法是类中绑定的一些函数,可以实现对类数据的操作,方法是可以被继承和重写的;
  3. 继承,继承是类的一个非常重要的特性,可以极大的简化程序的设计,在LabVIEW中子类会继承父类中的数据的公开方法;
  4. 多态,多态是最能体现面向对象编程思想的一个特性,多态的含义是在程序运行时可以依据实际情况选择执行子类中的方法还是父类中的方法。

面向对象在LabVIEW中的一个具体应用

LabVIEW最为广泛的应用就是对仪器的控制了,假设现在有这样一个需求:需要设计一个测试系统,这个系统里面用到一个万用表,但是万用表的型号不确定,可能在多个厂商的万用表中选择,不同万用表在labVIEW中的控制是有差异的,另外在系统不接实际万用表的时候也可以正常运行其它功能。

在上述系统的实现就非常适合采用面向对象的实现方式,其本的实现方法可以定义一个虚拟的DMM类来表示一个万用表,这个类作为父类,实际的万用表通过继承父类万用表来实现实际的功能,父类中可以定义保存测量结果的变量,还可以定义常用的测量方法,比如定义一个测量电压的vi方法,在这个VI中可以什么都不做,作为一个虚拟的方法,子类通过重写这个方法,用实际与万用表交互的VI实现。不同的万用表只需要重写底层与实际硬件相关的VI就可以了,其它逻辑层面(比如数据的处理,保存等等)都可以在父类中实现,而不用在每种万用表中去实现。

在系统运行的时候可以根据需要选择万用表的型号(不同的子类)或动态初始化类的方法就可以实现不同底层硬件的切换,而不用一直去判断是哪种类型的万用表,LabVIEW自动会根据设定的子类去调用相应的方法(多态)。

LabVIEW类的几点说明

  • 类中的VI和普通的VI是有差异的,类中的VI只属于类,不能单独调用,类中的VI在类所在的工程初始化之后就全部调入内存,普通VI只有在调用或者打开的时候才会调入内存;
  • 如果类的VI有断线,那么类所有的VI都会出错,包括这个类的子类;
  • 类的VI一般会有固定的类的输入和输出(另外还有错误的输入和输出)端子,其实从这里可以看出LabVIEW中类的实现方法;

LabVIEW类实现方法浅谈

LabVIEW中类的实现和大多数的编程语言很相似,一般编程语言在类的实现中都会定义一个self(python)或者this(java),用来表示类,LabVIEW中类似,它是用一个自定义的控件实现对类变量的保存与管理的,这个控件作为类的连线出现在类的每个VI中,这个连线就相当于self或者this。类的方法实际就是一个绑定了一个可以直接操作类元素的VI,VI通过类的连线获取类自定义控件的变量的访问权限。


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

发表新评论