现在的位置: 首页 > 综合 > 正文

程序新世界

2013年10月17日 ⁄ 综合 ⁄ 共 1320字 ⁄ 字号 评论关闭

形形色色,种类繁杂的对象组成了这个千变万化的大千世界,每种对象有很多方法,各种状态。
世界运转过程就像一个状态机,对象生命周期里常常调用某方法,改变到另一个状态。

程序员常做的事情就是为对象定义方法,根据不同的条件转变到不同的状态。
但我们现在要做的事是:让对象按不同的条件执行不同的方法改变其状态。
因为对象改变状态必定是调用了方法,经典物理学告诉我们物体没有外力作用下是静止(匀速)的。
由此对于单个对象,我们抽象出这样一种机制:
object.PreSet(condition,method);    //预设置[条件/方法]对。
object.Run();                                         //对象依据当前的状态和所处环境调用合适的方法。

这个模拟状态机的模型可以在C#里实现(可能并不能轻易做到),得益于类和委托。
condition为一个委托,返回true/false,依据对象当前状态和所处环境,判断能否调用method方法。
                                              或者说condition是用来定义允许调用指定method方法的条件。
method为一个委托,(返回不详),在condition条件满足的情况下允许被调用,并做一些事情。
                                             可能会改变对象状态,改造环境,并递归调用object.run()继续调用合适的method方法。

编程的主要任务就是为创造的对象预先编写好一系列不同的方法,同时为调用指定的方法定义一些条件。
条件(condition)/方法(method)总是成对地在对象里被定义,意指满足某些条件(通常是状态)就允许调用该方法。
一次显示成员函数调用就相当于一次无条件method方法调用。在一次method调用之后,可以继续对象进程,或者什么也不做,让其停止,直到对象方法在另一个地方被调用。

如果深入一下,当我们编程时将[条件/方法]粒度足够细化后,发现这个模型能做的比想的更多:
1.我们可以为对象操作定义不同的权限,只需要实现condition函数实体。当用户右键点击对象时,我们可以得知他能不能调用删除方法,即有没有删除该对象的权限。而不必在调用删除过程时去判断用户是不是合法角色。

2.事实上对象不总是孤立的,或者说总是不孤立的,哲学书上说世界万物是普遍联系的。在这个程序新世界里我们可以把注意力集中在当前类的定义上,而不必关心所处环境和各种对象之间的千丝万缕的联系。

3.复用能力/扩展能力很强,可以灵活地适应工作流程需求变更。派生类可以继承基类的[条件/方法]定义,可以扩展新的方法,尤其适合权限定义。还可以方便地改变调用条件,例如:现在需要批准后才能打印,只需要重新指定打印条件即可,如:condition  = IsPass;

4.可以通过反射获取用户的权限列表,并引导用户可以做哪些操作,给出待做任务列表。整个软件系统的运转变成由条件定义来驱动,其实真实世界也是由无数的if...else...语句组成,这些条件语句使人工智能越来越聪明。

 

抱歉!评论已关闭.