oop_class_pro_con #19
Replies: 5 comments 5 replies
-
| 类拖到后面板上时: | 
Beta Was this translation helpful? Give feedback.
-
| 子类加载了,父类也加载,倒是可以接受,比较反人类的是sibling的类也加载了,这个就很难受了。而且一个类树里,如果某个vi broken了,类树中其它类同名vi也会broken,这真是让人绝望了 | 
Beta Was this translation helpful? Give feedback.
-
| 只要保证提供给用胡的 API 不变,底层结构怎么更新都没事。 | 
Beta Was this translation helpful? Give feedback.
-
| "但一个夫类并不会知道他有多少个子类",最后一个标题,《LVClass 内存加载引发的类型转换问题》,倒数第2行。父类与夫类,老板用的是五笔打字吗?还 | 
Beta Was this translation helpful? Give feedback.
-
| 首先要感谢博主写的这本介绍LabVIEW编程的书并慷慨地把这本书分享到互联网上。我大概是用两年多前开始接触LabVIEW并尝试用LabVIEW编写自己的应用程序,这本书给了我很大的帮助,同时我也觉得有一本母语写的LabVIEW技术书籍是一种幸运。直到现在我也会在编程的时候偶尔打开这个网站,查漏补缺,常看常新。 当我在使用LVOOP来抽象复用我的仪器控制代码的时候,LVOOP的传值语义给我挖了不小的坑。因为在这之前我已经频繁地使用通知器,队列,以及DAQmx,所以我本能地以为当我在一个线程对实例成员数据进行操作之后,另一个线程的实例也会更新。后面我debug的时候才发线如果从实例分叉成两条线,值也会复制成两份。这个行为和普通编程语言有很大的不同,普通编程语言只要拿到实例的句柄就可以在任意位置改变实例的状态,但是LabVIEW显然不是这样。 如果要在LabVIEW的类里面实现引用语义,要么就是像LabVIEW示例里面推荐的那样,用一个单元素队列来存储和更新私有成员,要么是为私有数据套一层DVR,用in-place结构来读写私有数据,再或者把整个程序设计成actor框架,用队列消息来在不同线程之间传递数据。但是这些方法会导致代码非常啰嗦,程序的结构性开销严重膨胀。 后面我查看NI的论坛,发现很多人对LabVIEW的OOP也颇有微词。在复杂工程中,开发者几乎必然要借助 DVR、FGV 或 Actor 框架来恢复引用语义,这让很多代码结构显得笨重,以至于有数个LabVIEW第三方库用以实现传引用语义的OOP。虽然说LabVIEW这样设计的本意是为了安全考虑,但是对已经接触到LabVIEW类这个级别的开发者来说,竞态条件这些应该都已经十分清楚了,个人感觉LVOOP完全没有必要设计成传值语义,一不直观,二不简洁。不同的LabVIEW模块之间也缺乏一个一致的范式,一会像普通代码一样传值,另一会又像队列那样传引用。很想知道博主对于这个问题有什么看法,平时在LabVIEW编程的时候如何实现跨线程对同一个对象的操作,以后NI在这一点上面有没有可能做出一定的改进,还是会继续作为LabVIEW历史遗留问题的一部分? | 
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
类的优缺点
https://lv.qizhen.xyz/oop_class_pro_con
Beta Was this translation helpful? Give feedback.
All reactions