XWorker的编程方法称为动态模型编程,动态模型编程实际上也是一个面向对象的编程方法,它的核心想法是类也是对象,即任何一个类也是普通的对象。
把类看作对象是为了实现动态编程的方法,即在运行时可以添加和修改系统的功能。
在使用面向对象的方法实现的系统里,可以认为系统是由各种对象组成的,而各种对象提供了各种功能。
在面向对象的系统里,系统是由各种对象组成的,系统的功能是由各种对象体现的,因此动态构建系统也就是动态创建各种对象的方法。
在面向对象编程方法里对象可以通过类实例化出来,比如在Java中对象可以通过类来实例化,比如存在一个User类,那么具体的对象zhangsan就可以用下面的代码实例化。
//通过new User zhangsan = new User(); //通过类的instance()方法 User Zhangsan = (User) User.class.newInstance();
以上实例化对象的方法,尤其是通过类的newInstance()方法可以在系统运行时调用,对象也可以在系统运行时通过实例化的方法构建出来。
在动态模型编程中类也是对象,因此新的类也可以在系统运行时通过实例化的方法构建出来。有了新的类,就可以通过它在构建出新的对象。
当类可以动态构建出来时,就实现了动态构建系统的方法。因为类是功能的定义,如果类可以在运行时构建出来,那么对象也可以在运行时通过类构建出来,从而实现系统在运行时的功能的添加和修改。
在这里如要证明以上方法是有效的,那么就需要证明理论上任何一个类都可以在运行时构建出来。XWorker的动态模型编程方法是有效的,因为它找到了一个类的类,即找到了一个任何类的类的定义,从而任何类理论上在运行时都可以被构建出来。
这里讲述下XWorker的动态模型编程中的类的类是如何发现的,而发现过程其实也是证明过程。
在这里我们首先假设任何对象都可以用XML来表示。XWorker的动态模型编程方法中对象是模型,而模型是像XML这样的结构化的数据。
我们以最简单的方式重新定义XML的结构,在新的XML的结构里只描述XML的属性和节点的名字,即使用<node name="xxx"/>来表示节点名,使用<attribute name="xxx"/>来表示XML节点中的属性的名字。
如果我们使用3.2中的XML的结构定义,去计算任何一个XML(这里实际限定为只有节点和属性的XML)的结构,那么可以发现任意XML的结构的结构是唯一的。
比如下面的XML。
<Person name="zhangsan" age="40"> <Child name="xiaoming" age="10"/> </Person>
它的结构如下。
<node name="Person"> <attribute name="name"/> <attribute name="age"/> <node name="Child"> <attribute name="name"/> <attribute name="age"/> </node> </node>
再计算上面的结构的结构,如下。
<node name="node"> <attribute name="name"/> <node name="attribute"> <attribute name="name"/> </node> <node name="node"> <attribute name="name"/> <node name="attribute"> <attribute name="name"/> </node> </node> </node>
随意选择任意一个其它的XML,通过计算它的结构的结构,都可以发现结果类似于上面的最后的那个XML,它的每一层节点都是相同的,不同的XML结算出来的结果只是重复深度次数不同。
如果把上面的XML的结构的结构无穷迭代的计算下去,会得到一个每层节点都相同的,有无限层子节点的XML,我们可以把它作为任何一个XML的结构的结构,它也是唯一的。
XML的结构可以起到类的作用,在实际使用中也可以通过XML的结构来编辑出具体的XML实例来,所以以上方法实际上也找到了一个任意类的类。
Copyright © 2007-2014 XWorker.org 版权所有