2022年10月05日,国庆长假的第五天,假期余额已不多啦!
学习软件框架,特别是学习与掌握难度大、复杂性高,且尚处在不断演进变化的LabVIEW操作者框架(Actor Framework),离不开关键的各类范例的研读、模仿转换和工程实用。
NI官方以及开发者社区,为LabVIEW操作者框架(Actor Framework)这个在LabVIEW图形化开发环境中,开发能力最为强大的多任务并发框架,提供了诸多项目快速模板和多种范例例程。
在这里,我将操作者框架的相关例程做一个统一梳理和汇总,方便各位小伙伴们在学习中按图索骥,从而少走弯路和节约时间。
LabVIEW操作者框架(Actor Framework)的范例按其出处来源分为下面几类:随系统所带的范例例程,NI官网社区论坛中的范例,讲解视频配套的范例,技术交流大会演讲范例附件、VIPM(VI Package Manager)中范例模板。
由于操作者框架的范例非常多,单用一篇文章的篇幅是肯定讲解不完的,因此我先按照上面的范例出处分类写一个系列文章。
本篇就是范例的第四篇,讲解一下官方操作者框架技术讨论论坛中的相关推荐例程。
前面的几篇系列文章内容连接分别为:
LabVIEW操作者框架(Actor Framework)范例集锦之一:系统自带范例
LabVIEW操作者框架(Actor Framework)范例集锦之二:视频范例
LabVIEW操作者框架(Actor Framework)范例集锦之三:网络搜索范例
NI的官方技术讨论论坛中有一个特别的兴趣小组就是关于操作者框架(Actor Framework)的主题讨论,讨论的主题涉及编程思想、概念质疑、源码改进、设计开发、应用问题、脚本工具、会议分享等诸多方面,是真正的名副其实的操作者框架的知识大本营,自然也少不了多国各路大神在其中共享优秀范例。
由于操作者框架(Actor Framework)技术论坛中的讨论内容,自身是按照时间序列进行的自然排序,为了更好的进行查找和便于学习,在本文中我简单的按照基础概念、设计模式、网络分布式以及工程实战四个维度进行分类汇总,这样大家学习起来,可以更加的有的放矢,由于篇幅内容过长了,网络论坛的内容分为上下两篇内容,上篇基础概念和设计模式的维度,下篇为网络分布式和工程实战的维度。
1. 基础概念篇
基础概念篇中的范例均是在开发各类多任务并发程序时,所需要掌握的操作者框架的基础知识内容,主要包括操作者系统、层级任务树、多种耦合方式(紧耦合、松耦合和零耦合),以及打包库包libp的发布技术等等内容。
1.1 简单的三操作者范例
这是一个2015年初较为早期的操作者框架的讲解范例,使用简单的一主两从的三操作者完成简单的加法和乘法算法委托,虽然很简单,但是该套范例却有着全网最为详实的的概念讲解和步骤细分操作,我一直自语自己是讲解LabVIEW编程知识最为“啰嗦”的开发者,但是和该套范例配套的PDF讲解内容比起来,那真是小巫见大巫,差了一大截呢!
在该范例配套PDF教程中,作者先从三操作者的范例概念讲起,再详细给出如何一步一步从零开始打造该范例程序。
其中在范例概念中给出了详细的概念设计图,关闭流程图、操作者和消息类的继承类图,以及消息传递的队列示意图图。清晰明了的概念图非常有助于初学者对开发一个简易操作者系统的学习认知。
此外,在该配套PDF教程中,由于操作者框架的自动消息方法制作器还没有发布,采用的还是纯手工打造的消息封装制作,也有助于初学者了解自动消息方法制作器在系统背后所做的具体脚本操作工作。
在该简易范例中,负责进行简单加法和乘法的计算的嵌套操作者,向其调用者主操作者发送消息使用的直接耦合的方式,为了演示零耦合的消息传递方式,即嵌套操作者向主调用操作者发送抽象消息予以解耦,并使得主从操作者都能更好的得到复用,作者又重新编写了一个全新的零耦合版本予以讲解。
1.2 Hands-On: Actor Framework
这是一个更早期的操作者简易系统的开发练习范例,是从LabVIEW系统自带的“反馈式冷凝器”范例中简化而来的小型范例,最早是作为NI Week 2012年度会议的动手参与练习的单元资料,后来也被作者justAcs(也是操作者框架的两位创始人之一)收录到官方的操作者培训课程当中作为动手的简易练习使用。
该套资料ZIP压缩包中有用以进行开发的脚手架范例起点,以及详细的手把手开发步骤说明PDF文档,也是一套初学者良好的培训资料。
1.3 Actor Framework from basic to PPL plugins 系列例程
这是由Stefan Lemmens开发一套系列的范例,从最基础的三操作者系统开始,在此基础上逐级演化,不断的增加新的知识点内容,从范例命名可以得出其要讲解演示的主要内容。
其中,主要的的知识点有:操作者系统简易组成、同步消息处理范式、嵌套子面板、父类插件松耦合消息、抽象消息、单元测试,以及发布程序的打包库(PPL)等内容。
并且在每个范例文档中都给出了详细的对象组成逻辑图,便于大家上手学习。
另外,由于PPL打包需要特别注意相互依赖关系和打包制作步骤,大神还为此特意另外开了一个相关讲解帖子说明,即PPL制作的相关必要流程PDF的讲解。
大叔特别推荐说明:
在多数操作者概念讲解中,对于消息耦合和同步回复消息的讲解,这套系列范例是演示的最为清晰的!多数讲解材料中一般讲一下嵌套操作者直接调用主调用操作者消息的紧耦合方式,马上跳到抽象消息的使用,而现在则是直接用接口替代抽象消息的方式。
但是对于松、紧、零三种消息的具体实现中的针对具体、针对操作者类类族和针对抽象消息,以及针对多继承抽象接口的技术概念层级变化,学习者往往难以直接跳跃。而这套范例得以充分的展示,非常有助于学习者理解面向对象编程的核心思想。
2. 设计模式篇
使用操作者框架(Actor Framework)开发的操作者类也是典型的面向对象编程范型中的类,只不过不是普通的被动类,是有着消息循环处理(MHL)的主动类,并且用消息间接调用取代了对象实例方法的直接调用。
因此,既然是面向对象自然也就少不了和绕不开面向对象编程的经典范式——设计模式,在操作者框架论坛中以范例的形式给出了若干操作者系统讲解的设计模式。
2.1 状态模式
状态模式的操作者系统的具体演示,也是社区大神justACS的范例作品,任何学习操作者框架的开发者都绕不开他开发的各种(消息制作、调试)辅助脚本工具和大量的范例例程。
如果一个操作者系统中某个操作者的状态行为逻辑较为复杂,就可以使用状态模式进行细化分解,将一组逻辑行为由某个状态负责承担,从而更好地体现关注点分离和独立变化的封装特性。
2.2 Event Source Actor Package
通常,默认的操作者组成系统是以自顶向下层级组成面向对象组合关系,层级分解的任务映射到各层调用操作者和其嵌套操作者当中,为此,操作者框架特别提供了嵌套操作者的层级管理自动关停机制。
但是在实际应用过程中,也有不同于层级组合应用的操作者系统,比较典型的就有观察者模式和中介者模式。其中观察者模式对应的操作者系统范例就是事件源操作库包程序(Event Source Actor Package)。
2.3 MVA
而另外一个典型的操作者个体多对多通信的方式就是中介者模式,也是有开发者贡献了其模板模式,并命名为MVA框架。
MVA框架代码开源共享到了Bitbucket的仓储代码库中,大家可以自行进行下载。
MVA框架代码的核心开发人员来源自美国的Composed Systems公司,在其官网技术产品展示页中对其框架进行了概要性的说明。
上述MVA框架的技术说明,描述的比较含糊抽象!而在另外的技术博客博主Samuel Taggart 的技术文章中对其解释和说明的更加清晰一些。
另外,多提一句,Composed Systems公司的主创人员的技术博客“LabVIEW Craft”也是干货满满,强烈推荐,不过需要你会kexue上网。
写完这篇文章,国庆节已经过去大半,LOL2022年总决赛,RNG也顺利出线了,范例集锦的系列文章还预计剩下三篇可以完成:最后三篇内容的题目分别是:
- 第五篇、官网论坛(下)
- 第六篇、VIPM范例
- 第七篇、范例总动员
再次感谢您的支持与鼓励,让我们在学习的道路上持续进步。