量子编程法(001):一种新的编程模式

本节目录

    量子编程法的由来

    量子编程法的定义

    量子的数据结构

    举例说明

    运行一个“Hello world”程序

 

量子编程法的由来

现在的软件产品对用户体验的要求越来越高,人机界面越来越多,由此造成软件前端开发越来越复杂。

在前端开发过程中,需要清楚的了解人机界面的各个控件之间是如何通信的。

目前控件之间的通信一般有两种。要么直接引用控件对象以调用其方法,要么向控件对象发送消息以响应某种请求。前者要知道所引用控件对象的位置,该控件对象有可能又嵌套在另一个控件对象或窗口对象之中,寻找控件就象大海捞针。后者需要了解控件对象之间收发的各类消息及其传递路径,有时搞得人晕头转向。

那么,能不能研究出一种方法,将对象结构简化一点,收发消息单一一点,消息传递过程透明一点呢?

为此本人研究出一种量子编程法,对此进行一些初步探讨,希望更有效的进行程序开发。

 

量子编程法的定义

量子编程法不是一种编程语言,只是一种编程的方法或模式,可以应用于如何编程语言中。

量子编程法的定义:量子编程法就是在编程时将通常所涉及的对象都拆分成一个个很小的对象,我把这种对象称为“量子”。所有的编程工作都是面向量子进行。

量子的定义:一个量子只包含一个变量和一个过程。量子也可以只有一个变量,而没有过程(对应于传统的变量),或者只有一个过程而没有变量(对应于传统的过程)。

量子中的变量就是量子的属性,可以是任何类型,如整数、字符串、窗口或其他对象。所以量子也可以包含很复杂的结构(这样看来,它并不“小”),你只要将它看成一个基本操作单元就可以了。

量子中的过程就是量子执行的动作,可以对其属性进行操作,也可以做其他事情。

量子还必须包含一个"确认函数",以确认本量子是有效的。(这个以后再说,本节先不考虑确认问题)

量子必须具有向其他量子发送消息的功能。

在程序执行过程中,量子之间通过发送消息来运行。消息只有一种,收到消息的量子则执行它自身的动作作为响应。一个量子可以向其他多个量子发送消息,也可以接收多个量子发来的消息。

量子系统的运行过程是这样的:程序启动运行时,量子系统的各个量子都已生成(公共的)。如果外界发生了一个事件(如点击按钮),一般都有一个该事件的处理子程序(这个事件处理子程序不属于量子系统,是软件开发系统提供的预设功能,在此与量子系统对接)。而在量子系统中,也要设计一个处理这个事件的量子。因此,在该事件的处理子程序中,设置一条执行语句,向处理这个事件的量子发送消息。量子一旦收到消息,就执行它的唯一动作。如果还需要按顺序执行其他动作,则向下一个相应的量子发送消息,下一个量子再执行它的唯一动作,再向下一个量子发送消息,……,直到这个事件响应完毕。

在量子的消息传递过程中,相关的量子之间就形成了一条链,称之为“驱动链”。

 

量子的数据结构

根据量子的定义,量子的数据结构如下:

量子类型Type:
    变量Value:任意类型
    动作Action():过程
    发消息SendMsg(Next As 量子类型Type):过程,带一个接收消息的量子作为参数

动作Action()的定义如下:

Action()
{
	// 执行动作的代码
	……
	// 发消息到下一个量子(可以发给多个量子)
	SendMsg(Next1)
	SendMsg(Next2)
	……
	SendMsg(NextN)
}

发消息的动作包含在Action()中。

 

举例说明

下面从逻辑上举个例子来说明量子系统是如何运行的。假设我打开了一个对话框,对话框中有一个静态文本控件和一个按钮控件。当我点击按钮时,文本控件显示指定变量中的字符串。

为了实现这一功能,我们可以设计如下3个量子:

文本控件量子Label:
    变量Value:文本控件对象(由软件开发系统预定义,在量子初始化时关联)
    动作Action:将字符串量子String的变量在本量子的变量中显示出来
    发消息到:(无)

字符串量子String:
    变量Value:要显示的字符串
    动作Action:(无)
    发消息到:(无)

处理按钮事件量子Click:
    变量Value:(无)
    动作Action:(无)
    发消息到:文本控件量子Label

与外部系统的对接处:按钮点击事件的处理子程序。

当点击按钮时,量子系统的事件处理过程如下:

点击按钮——》系统调用“按钮点击事件处理子程序”——》在“按钮点击事件处理子程序”中,发消息到量子Click ——》量子Click收到消息后执行它的动作Action(这里无动作)——》量子Click发消息到量子Label——》量子Label收到消息后执行它的动作Action(在Label.Value中显示String.Value)

注意到量子Click的成员,既无变量也无动作,并不是不符合量子的定义,因为发消息也是量子动作的一部分。在这里量子Click起到了消息传递的作用。

 

运行一个“Hello world”程序

下面用量子编程法实际编程并运行一个“Hello world”程序。

量子编程法可以用于任何编程语言,由于这里介绍的是一种编程方法,不想对各种编程语言的细节涉及太多,因此采用简单易用的Excel中的VBA来编写这个程序。

首先,在VBA的编辑器中插入一个用户窗体UserForm,作为程序运行时要打开的对话框,将窗体名称改为frm001。在窗体中插入一个标签控件,采用缺省名Label1。插入一个按钮控件,采用缺省名CommandButton1,按钮上的文字改为“点击”。如下图所示:

然后进行量子设计。

在设计量子时,先采用Excel表,将每个量子及其各部分列出来,如下图所示,每一行代表一个量子:

与外部系统的接口是InitQtmSys和Click这两个量子。外部系统在处理打开对话框的命令时向InitQtmSys发消息。在处理对话框中的按钮CommandButton1的点击事件时向Click发消息。

下面开始编码。

要如何采用量子的数据类型呢?最自然的想法是将量子类型设计成类,将量子作为对象使用。但由于量子的组成极为简单,量子的动作过程又各不相同,因此在本例中,为了降低代码的复杂性,采用一种简单的方法。就是将量子打散,将所有量子中的变量部分集中起来,作为全局变量。将所有量子中的动作过程集中起来,作为全局过程。发送消息也是直接调用相应的过程。

编码时先创建一个模块“示例001”,将与量子系统有关的变量声明和过程定义都放到这个模块中。其中变量名与量子名相同,动作过程名在所属的量子名前加“Q”以避免重名。编写的代码如下:

模块名:示例001

Private Form As Variant       '量子Form的变量:主窗口
Private Label As Variant       '量子Label的变量:显示Str的控件
Private Str As Variant         '量子Str的变量:字符串

Public Sub QInitQtmSys()    '量子InitQtmSys动作
    '执行动作
    ‘量子变量的初始化
    Set Form = frm001			‘量子Form的变量 = 对话框对象frm001
    Set Label = frm001.Label1		‘量子Label的变量 = 对话框中的Label1标签对象
    Str = "Hello world!"

    '发送消息
    Qform			'直接调用量子Form的动作过程
End Sub

Public Sub QForm()    '量子Form动作
    '执行动作
    Form.Show

    '发送消息
    '(无)

End Sub

Public Sub QLabel()    '量子Label动作
    '执行动作
    Label.Caption = Str

    '发送消息
    '(无)

End Sub

Public Sub QClick()    '量子Click动作
    '执行动作
    '(无)

    '发送消息
    QLabel
End Sub

Public Sub QStr()    '量子Str动作
    '执行动作
    '(无)

    '发送消息
    '(无)

End Sub

这样一来,量子系统的运行,实际上就是在传统的变量和过程之间运行。但是在观念上,你还是要把它看成是按照量子的逻辑在运行。

为了运行这个程序,在Excel的表单中加入一个按钮,将按钮的显示文字改为“运行”,在它的点击事件处理子程序中给量子InitQtmSys发送消息。如下所示:

Private Sub CommandButton1_Click()
    示例001.QInitQtmSys
End Sub

这里我们将向量子发送消息处理成直接调用该量子的动作过程。

同样在对话框的按钮的点击事件处理子程序中给量子Click发送消息。如下所示:

Private Sub CommandButton1_Click()
    示例001.QClick
End Sub

现在,所有的编码都已完成。可以运行程序了。在Excel表单中点击“运行”按钮,就打开了对话框。再点击对话框中的“点击”按钮,就会在对话框中的标签控件上显示字符串“Hello world”。如下图所示:

本节到此结束,下节将进一步介绍量子编程法。

下一节:量子编程法(002):量子的确认

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值