ActorFrameWork系列教程来到了第二期,大家还记得什么是对象什么是类吗?还没有学习过第一期或者忘记了的同学们,请看往期教程回顾学习一下吧!
一、为什么要用到抽象消息和接口?
一般情况下,我们在启动界面使用“启动根操作者”启动根操作者,然后在根操作者和其他操作者的适当位置用“启动嵌套操作者”来启动其他操作者。就好比一个用户登录程序,其根操作者即为Controller,用以控制整体程序的逻辑,它的嵌套操作者可分为:用户操作界面的VIEW;登录判断模块、用户管理模块等Model。这就是所谓的MVC框架,MVC框架的更多内容在后续给大家详细讲解。上一期我们学会了在同一个操作者中进行消息的传输和接收,但在嵌套操作者之间是怎么互相传消息的呢?对于一个嵌套于跟操作者之下的嵌套操作者,要如何传消息给根操作者呢?用俗话说,就是小兵要怎么一层层地把前线战报传给将军呢?接下来本文以Nest Actor表示嵌套操作者,是被调用的关系。以Root Actor为根操作者,是调用的关系。由于面向对象需要降低耦合性,那么基于类的操作者也需要考虑如何降低耦合性。当Nest Actor给Root Actor发送消息时,需要调用Root Actor的消息类的Send ***.vi,这就导致了Nest Actor依赖于Root Actor。为了解除这种依赖关系,我们需要对Root Actor和Nest Actor解耦。这时候我们就需要用到抽象消息或者接口来进行Nest Actor对Root Actor的消息传输。前面我们得知了嵌套操作者传送消息的方式是抽象消息,那么接下来,小编将手把手教你如何在LavVIEW中创建抽象消息。1. 创建Actor
创建两个Actor,分别命名为Root Actor和Nest Actor。2. 创建抽象消息
在项目资源管理器中右键Nest Actor.lvclass → Actor Framework → Create Abstract Message for Caller,输入消息名称为New Data,放置一个字符串控件,命名为String Data,点击Create Message。这时Nest Actor.lvclass的属性中将新增一个New Data Msg类,用来指定由哪个消息来执行。为这个New Data Msg类创建写入的方法。
3. 为Root Actor创建一个静态方法
为Root Actor创建一个静态方法作为消息执行方法,命名为Update Data.vi。并在前面板放置字符串控件,命名为String Data,并配置接线端。在程序框图中将String Data连接到单按钮对话框。
4. 继承抽象消息
在项目资源管理器中右键Update Data.vi → Actor Framework → Create Child of Abstract Message,选择Nest Actor的New Data Msg.lvclassx消息类。
5. 重写Root的Actor Core
为Root Actor重写Actor Core.vi。在Actor Core.vi中将Root Actor的Update Data Msg.lvclass写入Nest Actor.lvclass的属性中,并通过Launch Nested Actor.vi启用为Root Actor的嵌套操作者。6. 发送抽象消息
为Nest Actor创建一个静态方法Write New String Data.vi发送String Data,如下图所示,将Hello以New Data类型的抽象消息传送给调用方。
7. 重写Nest Actor的 Actor Core
重写Nest Actor的 Actor Core.vi调用Write New String Data.vi。
8. Launch根操作者
创建一个Launch.vi启用Root Actor。启动Launch后,可以看见弹窗“Hello”。此时一个包含着信息“Hello”的抽象消息就从Nest Actor传送给了它的调用方Root Actor。
LabVIEW2020以上版本支持利用接口在嵌套操作者之间传送消息,接口的使用方法比抽象消息要简单得多。接下来LabVIEW版本足够的小伙伴们,我们一起来尝试创建接口吧!
1. 创建Actor
创建两个Actor,分别命名为Root Actor和Nest Actor。在Nest Actor创建一个接口,命名为Nest Msg Interface.lvclass。
为Nest Msg Interface.lvclass创建一个动态方法New Data.vi,前面板添加字符串控件String Data,并为该方法创建一个消息。
设置Root Actor.lvclass继承接口Nest Msg Interface.lvclass,并重写New Data.vi。
Root Actor.lvclass重写Nest Msg Interface.lvclass的New Data.vi方法。
6. 重写Root Actor的Actor Core为Root Actor重写Actor Core.vi。在Actor Core.vi中通过Launch Nested Actor.vi启用Nest Actor为Root Actor的嵌套操作者。
7. 重写Nest Actor的Actor Core为Nest Actor创建一个静态方法Write New String Data.vi发送String Data,并重写 Actor Core.vi调用Write New String Data.vi。
创建一个Launch.vi启用Root Actor。
我们可以看到Hello的弹窗也出现了,通过接口也可以实现嵌套操作者向调用方传送消息。
怎么样,接口的使用方法是不是比抽象消息方便呢?而且改变接口的方法只需要修改Root Actor的重写方法就可以了,而不是像抽象消息那样需要把消息删除后重新创建消息。
以上就是如何在LabVIEW中为Actor Framework创建抽象消息和接口的方法,如果想要进一步了解抽象的类和对象是如何通过Actor Framework来实现的话,敬请期待接下来关于Actor Framework的一系列技术分享。下一期我们将分享Actor Framework的同步回复消息。
对Actor Framework感兴趣的工程师们,欢迎持续关注、留言和点赞,也可以私信小编各位的技术困惑和技术需求,以获取参加免费线下培训和技术交流的机会哦。