我初学 LabVIEW 面向对象编程(OOP)时犯的四个错误(漫谈labview面向对象)
面向对象编程(OOP)是一项功能强大的编程技术,使用得当时能够让我们的程序实现更好的模块化封装、代码高内聚、低耦合,并让程序易于扩展,便于维护,从而大大提升开发效率和降低维护成本。
LabVIEW于2006年的LabVIEW 8.2版本开始推出面向对象编程范型,在LabVIEW 历次版本发布中,不断迭代,逐渐更新,并在LabVIEW 2020版本中推出接口(Interface)最新功能,使得LabVIEW的面向对象编程功能日趋完善。
但是,强大的编程武器需要经过艰苦的学习才能掌握,特别是没有人指点的自学,更是难上加难!今天我就和大家说道说道:我刚开始学LabVIEW面向对象编程时犯得四个错误。
首先,是类爆炸的问题
就是偏好把什么都当成了类,造成了过多的、不必要的类,典型的一个不必要的类,就是除了设置Setter和获取Getter方法外,就没有其它特别需要处理的方法,这就是犯了”把数据类型直接当作了类“的错误。
实际上,类是数据类型和功能单元方法的联合体,更应该强调功能方法的作用,数据类型是作为方法内部实现计算和暂存状态的数据容器。另外,从功能方法上划分上,需要更加聚焦,适当的归并聚集一下,从而降低琐碎的小类的数量。
其次,抽象的本质含义理解不透彻
LabVIEW中的类(lvclass),包括LabVIEW 2020版本引入的接口(Inteface)概念,都是用来抽象和封装相关编程里的单元元素概念的。而单元元素概念,有时候是和现实物理实体概念映射是一致的,这时候就比较好抽象编程。
在入门级别的面向对象编程图书中,为了小白好理解和降低认知门槛,也是多是使用这些生活中的实际物体和伴随场景(诸如:汽车、手机)来举例示范说明类封装。但是,该方式也让初学者忽视了面向对象编程中的类抽象封装,多数还是针对纯编程元素的概念。如测试文件数据的保存、数据库服务器的操作、界面显示单元等等。针对这些编程概念的合理抽象封装,可以更好的实现对具体变化支持,也是针对抽象编程本质,从而实现面向对象编程中的开闭(OCP)原则效果。
第三、在设计模式上误入歧途
初学者在了解面向对象编程的抽象、封装、继承和多态编程基础知识后,不可避免的就会接触到面向对象设计模式(Design Pattern),我自己也在设计模式认知和学习过程上反复过好多回。
初学者最容易犯的一个错误就把面向对象的设计模式读死,以为了解一下概念,学习一下范例,就可以在设计模式中轻松的应用起来。实则不然,设计模式本质是针对某个特殊的开发场景,使用面向对象编程技术给出的建议固定套路设计方案,而这种设计方案在程序开发整体中是片段化、可组合的,并且其核心内涵就是SOLID设计原则。
我个人的的建议:就是快速大致的了解一下相关简易的设计模式(策略、适配器、工厂等)概念后,不要刻意在自己的程序中去采用设计模式,而是应该更加注重SOLID设计原则的应用,在实施设计原则设计过程中,不断的迭代重构更新程序,不知不觉中,你就会发现自己的程序较为符合SOLID设计原则时,或多或少都已经实现了若干个设计模式。
等入了设计模式的门后,再有意识地强化学习一下难度大的设计模式(桥接、访问者、命令者、状态),再结合一下LabVIEW的经典框架(Actor Framework )的源码阅读,掌握具体的设计模式在应用程序中的开发应用。
最后,与众不同的LabVIEW面向对象实现
LabVIEW的面向对象,从严格意义上讲,是完全符合经典的面向对象编程概念的,特别是后期的消息驱动的操作者框架(Actor Framework)。但是为了符合LabVIEW的图形数据流、天然多线程的编程特质,LabVIEW的类定义实现为传值(By-Value)拷贝传递的方式。
传值方式和其它主流的面向对象文本编程语言(如Java、C 、C#)传引用有着显著的不同。另外,为了兼容性LabVIEW 开发者的使用习惯,在一些概念术语上并没有约定成俗的遵循常规套路。
但是LabVIEW的面向对象编程技能的培训与教育,又完全离不开其它文本编程语言的各种经典内容。因此,LabVIEW的面向对象主设计师、编程大神Stephen Loftus-Mercer特意写了两篇关于LabVIEW面向对象编程的设计决策技术白皮书,让从其它语言OO知识过渡过来的开发者,深入理解这之间的差异性,从而更好的适配LabVIEW编程语言。
对这两篇技术白皮书感兴趣的同学请移步至知乎进行搜寻查看。
另外,我把自己摸索学习LVOOP编程过程,写成了一系列的学习文章,这就是《LabVIEW面向对象编程_初窥门槛》系列编程文章的由来,如果感兴趣,可以去看看我的知乎个人主页中置顶汇总文章的第五章节的具体链接指向。
最后,希望大家都能够在学习LabVIEW面向对象编程道路上少走弯路,快速成长!