我希望通过做这个题目时,重点对比此方法与“功能性全局变量”的区别,
深刻理解面向对象主要思想之一:“数据与方法要分开”的概念,自己体会为什么需要数据与方法分开。
另外,“功能性全局变量”与面向对象的“数据方法分开”思想背道而驰,后面不再会用到,准备和它说再见吧。
同时,对于没接触过LabVIEW 类结构的同学,可以通过此题目入门。
实践是检验真理的唯一标准,同学们一定要把手动起来。
类名称:02_Timer
功能说明:
创建一个02_Timer类,它是一个全局计时器,你可以设定倒计时时间或开始正计时,并在其他任何地方查询剩余时间和已用时间。(所有方法我只定义输入输出接口,具体程序代码大家自己写)
方法输入输出定义(LabVIEW里“方法”就是VI):
Init:初始化
Close:释放内存
Opration:计数器操作方法
其他要求:
用下面的Demo验证你的结果:
- 可以创建多个实例(就是你可以同时创建多个本类),Opration方法连接的对象不同,则代表对不同的计数器进行操作。(这个特性与功能性全局变量完全不同,想想如果你要建1000个计时器,功能性全局变量怎么弄?)
- 所有VI的重入方式使用“共享副本重入执行”(这很重要,也是实现要求1的必然,后面几乎所有VI都是这种重入方式。另,动态VI仅支持此重入方式,不支持“预先分配副本重入执行”。所以提前养成好习惯)。
- 全局数据同步,即只要连接对象是一个,不需要前后顺序连接类的连线也能访问数据。如下图所示读取计时器的VI并没有与启动计时器的VI顺序连接,但依然可以读出正确的数值。这个功能是需要专门设计的,你可以思考一下。(“全局性”是一个在面向对象思想之上的独立设计技巧,在使用LabVIEW自带VI时,也并不是所有模块都具备全局性,有些模块必须收尾依次相连使用;有些就可以只连接输入即可实现操作,例如串口。)
Demo:
运行结果:
项目视图:
同学们一定要动手试验,不要只看不做。请做完的同学将截图贴到评论里,后面会公布答案并讲解。