为了能够提高程序的复用性,我们准备用Actor Framework框架,来演示其满足了这个需求(本章及后面的内容,需要有OOP的基础知识)。

首先,简述一下ActorFramework的运行过程:

在QDSM里面,每个队列通过不同指令,执行相应的处理过程。消息存储在消息队列数据中,通过队列消息句柄进行传递。

在ActorFramework中,在有需求的时候,运行相应方法的异步进程。Actors 接收到消息,基于消息的内容发送任务。

看下官方资料中解释的数据和执行的关系:

(1)数据存储在对象中。(2)方法是对已定义数据执行的操作。(3)一个类定义了一组数据,在数据的基础上执行相应的方法。(4)对象是类的特定实例。

下面我们演示一下ActorFramework的运行。在此声明一下,对于ActorFramework框架中涉及到的函数名称,在本系列之后的文章中,尽量以英文名称表述。一是框架的很多资料都是英文的,利于学习统一。二是在NI的官方文档中,也表述过Actor就是计算机行业里面的一个源词汇,如果用中文翻译,感觉有时候表述不到位。

另外actor这个词汇,是在计算机科学中早就存在的通用原语。我们来看下维基百科的定义:

——————————————————————————————————————

From Wikipedia:

The actor model in computer science is a mathematical model of concurrent computation that treats "actors" as the universal primitives of concurrent computation: in response to a message that it receives, an actor can make local decisions, create more actors, send more messages, and determine how to respond to the next message received.

The Actor model adopts the philosophy that everything is an actor. This is similar to the everything is an object philosophy used by some object-oriented programming languages.

“ 计算机科学中的actor模型是一个并发计算的数学模型,它将actors视为并发计算的通用原语:actor可以做出本地决策,来作为其接收到的消息的响应,创建更多actors,发送更多消息,并确定如何响应接收到的下一条消息。
Actor模型采用的哲学是一切都是Actor。这与一些面向对象编程语言应用的“任何事物都是一个对象”的哲学类似。 ”

————————————————————————————————————

在这里吐槽一下,很多资料,尤其是专业性强的技术资料,还是Google靠谱。那个熊掌公司,一搜索基本上全是广告和SEO优化后的网站,翻个3、5页找不到资料很正常。它只能算是一个赚钱的公司,不是一个有社会道德感的公司。

上述内容是我学习资料后,搜集的一部分内容,感觉对理解本系列文章有些帮助。

一、下面开始内容解析:

1.打开一个Launch Root Actor.vi(根操作者)。

2.打开后,里面调用了一个Launch Actor Core.vi(启动操作者核心)

3.打开Launch Actor Core.vi,可以看到程序使用了Start Asynchronous Call( 开始异步调用),当程序运行时,函数Actor.vi静态引用作为VI的引用端。

4.打开静态调用的Actor.vi,查看Actor.vi

5.查看Actor Core.vi,key 可以看到Actor Core.vi本质上就是一个队列结构,但是他是按照面向对象设计原则进行封装的,这种模式在文本语言中也叫作命令模式。

现在,我们来展示一下一个QDSM架构编写的计算加减的功能,然后用OOP重新编写一下。

说明一下:—————————————————————————————————————

原文作者只是展示了大致结构,并没有编写运行程序。为了更好地进行展示,我编写用于示例的程序,方便完整的功能展示。此示例程序不代表Tom的编程水平。

二、程序比对

1.首先,编写一个QDSM架构的计算器,做的加、减计算进行演示。

2.然后,我们创建类,来进行替换队列中的状态处理程序。UML类图如下所示:

3.根据uml文件,新建3个类:Counter、Standard、Complex(这个可以不建,主要用来展示功能扩展的便捷性),编写Counter的动态分配函数,initialise、Add、Substract、Result、Stop。编写MessageData类用于存放自定义数据。

4.按照一个类处理一个队列的逻辑关系,将QDSM架构转为OOP架构。整个程序架构简洁了一些,各个功能间也实现了关系降耦。如果新建一个类似功能函数,仅仅需要重新做一个类即可实现,如下图画圆圈的地方,可以很快捷增加新功能,而不更改整体架构。

5.运行一下,看看结果和QDSM一样。Success!

6.将OOP程序和ActorFramework里面的Actor core.vi进行比对,发现两者基本一致,所以,在将QDSM架构用OOP重构时,已经有了ActorFramework的雏形。

综上,通过将架构替换编程,可以看到刚刚开始编写时,面向过程和面向对象所花费的时间基本相同,但是在中大型程序中,面向对象的优势就开始明显了。

————————————————————————————————————————————————————————————————————————————————————————————

原创码字不易,如有收获,希望关注、点赞和喜欢。

AF(操作者框架)系列(2)-在Actor框架中派生Actor核心(命令模式)的更多相关文章

  1. Android 开发 框架系列 Google的ORM框架 Room

    目录 简介 导入工程 使用流程概况 一个简单的小Demo 深入学习 @Entity使用 自定义表名 tableName  自定义字段名@ColumnInfo 主键 @PrimaryKey 索引 @In ...

  2. ABP框架系列之二:(Entity Framework Core-实体核心框架)

    Introduction(介绍) Abp.EntityFrameworkCore nuget package is used to integrate to Entity Framework (EF) ...

  3. Tomcat系列(10)——Tomcat主要设计模式5种(外观,责任链,观察者,模板方法,命令模式)

    核心部分 外观模式: RequestFacade应用门面模式(facade)来封装HttpServletRequest. 观察者模式: 事件监听机制,控制组件生命周期的 Lifecycle .Serv ...

  4. 如何实现一个php框架系列文章【5】安全处理输入

    所有的外部输入参数都应该检查合法性. 未正确处理输入数据将可能导致sql注入等漏洞. 框架提供系列函数来取$_REQUEST中的值 requestInt requestString requestFl ...

  5. Quartz.NET开源作业调度框架系列

    Quartz.NET是一个被广泛使用的开源作业调度框架 , 由于是用C#语言创建,可方便的用于winform和asp.net应用程序中.Quartz.NET提供了巨大的灵活性但又兼具简单性.开发人员可 ...

  6. 老周的ABP框架系列教程 -》 一、框架理论初步学习

    老周的ABP框架系列教程 -- 一.框架理论初步学习   1. ABP框架的来源与作用简介 1.1  简介 1.1.1       ABP框架全称为"ASP.NET Boilerplate ...

  7. Google C++测试框架系列:入门

    Google C++测试框架系列:入门 原始链接:V1_6_Primer 注 GTest或者Google Test: Google的C++测试框架. Test Fixtures: 这个词实在找不到对应 ...

  8. Spring框架系列之AOP思想

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.AOP概述 (1).什么是 AOP AOP 为 Aspect Oriented Progra ...

  9. SpringMVC 框架系列之初识与入门实例

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.SpringMVC 概述 (1). MVC:Model-View-Control Contr ...

随机推荐

  1. git 多人协同开发

    一.允许他人操作程序(两种方式) 1.添加合作者 2.创建组织 二.分支 每个开发者创建一个属于他们的dev分支 三.合并规则 1.一起合并(代码会出现冲突) 2.尽量缩短合并的周期

  2. 从0开发3D引擎(九):实现最小的3D程序-“绘制三角形”

    目录 上一篇博文 运行测试截图 需求分析 目标 特性 头脑风暴 确定需求 总体设计 具体实现 新建Engine3D项目 实现上下文 实现_init 实现"获得WebGL上下文" 实 ...

  3. python条件与循环-条件

    1.条件和循环 主要讨论:if.while.for以及相关的搭配else.elif.break.continue和pass语句. 1.1 if语句 if语句由三部分组成:关键字本身.用于判断结果真假的 ...

  4. 机器学习环境配置系列二之cuDNN

    1.下载cuDNN 前往: NVIDIA cuDNN home page. 进入下载 勾选Nvidia的协议复选框(流氓的选择,不勾选不能下载) 选择与安装的cuda版本一致的cudnn进行下载. 2 ...

  5. jade 网上看到一个不错的demo 分享 一下 链接

    http://download.csdn.net/detail/sarah1992/9347903 启动的时候 先启动 http://localhost:8080/ 在 node chat 启动 ht ...

  6. 浅显易懂的前端知识点(二)——HTTP协议基础

    HTTP 协议的初印象: 是基于 TCP/IP 协议的应用层协议,不涉及数据包的传输,主要规定了客户端和服务器之间的通信格式,默认使用 80 端口. 1 HTTP 协议 0.9 版(1991 年) 是 ...

  7. 配置虚拟环境(virtualenv+virtualenvwrapper)

    安装virtualenv pip3 install virtualenv 安装virtualenvwrapper pip install virtualenvwrapper # Linux使用该条 p ...

  8. Python中__init__的用法和理解

    在Python中定义类经常会用到__init__函数(方法),首先需要理解的是,两个下划线开头的函数是声明该属性为私有,不能在类的外部被使用或访问.而__init__函数(方法)支持带参数类的初始化, ...

  9. java获取本地IP地址集合包括虚拟机的ip

    public static ArrayList<String> getLocalIpAddr() { ArrayList<String> ipList = new ArrayL ...

  10. 推荐一本书学习springcloud书籍的SpringCloud微服务全栈技术与案例解析

    整本书还算是挺详细的,基本大部分轮子都讲到了,唯一不足就是版本比较旧,而且springcloud 版本现在迭代这么快 很多内容其实高版本中完全没有了,得自己敲代码多采坑 前面基本章节其实可以大致略过一 ...