动态模型是一个动态的面向对象的方法,所以动态模型的入门可以从面向对象的方法开始。
我们认为在面向对象中类的作用一般是用于描述对象,即类能够说明对象有哪些属性和行为等。在面向对象的编程里类还可以用来示例化对象,比如在Java中"User zhangsan = new User();"就是用User类来实例化zhangsan这个对象,在这里实例化也可以理解为用类来创建对象。
上面关于类的两个作用需要牢记,因为这也是动态模型的基本方法。
由于对象和类是一对概念,但是在动态模型中的基本元素是模型,那么模型应该称为对象还是类呢?我们觉得都不合适,用事物来称呼它最合适。在动态模型编程中我们用模型表示任何东西,而任何东西我们都可以称为事物,所以模型代表的就是事物,我们用事物这个词作为基本概念的起点。
因此在动态模型中模型、事物和事物模型通常指的都是一个东西。
使用面向对象的方法,我们首先要创建可以用做类的事物模型。
我们知道类的作用可以描述对象,它能够说明对象有哪些属性和行为,所以在类模型里应该能够反映以上要点。
下面是一个可以作为类的模型的示例代码。
<!-- 用元事物MetaDescriptor3来创建类模型 --> <thing name="Shell" descriptors="xworker.lang.MetaDescriptor3" extends="xworker.swt.widgets.Composite" > <!-- 行为定义,第一个名为actions子节点作为行为定义 --> <actions name="scripts"> <!-- create和run两个方法,使用Java模型编写 --> <JavaAction name="create" descriptors="xworker.lang.actions.JavaAction" outerClassName="xworker.swt.widgets.ShellCreator" methodName="create"> </JavaAction> <JavaAction name="run" descriptors="xworker.lang.actions.JavaAction" outerClassName="xworker.swt.widgets.ShellCreator" methodName="run"> </JavaAction> ....... </actions> <!-- 属性定义 --> <attribute name="name" size="40" colspan="2" validateOnBlur="false" allowDecimals="false" allowNegative="false"></attribute> <attribute name="text" size="60" colspan="2" validateOnBlur="false" allowDecimals="false" allowNegative="false"></attribute> ....... <!-- 子事物(子节点)定义 --> <thing name="templates" descriptors="xworker.lang.MetaDescriptor3/@templates"></thing> </thing>
在这段示意代码中我们可以看到类的基本要素:
在上面示例中使用来元事物来创建可以用做类的事物模型,那么元事物又是什么呢?元事物其实就是类事物模型的定义,它也是模型。
<thing name="thing"> <attribute name="name"></attribute> <attribute name="extends"></attribute> <thing name="attribute"> <attribute name="name"></attribute> </thing> <thing extends="_root"></thing> </thing>
上面是一个最简单的元事物,它的含义是:
需要说明的是上面没有定义行为节点,这是因为行为节点也是一种子节点,所以包含在子事物的定义中。
上面的元事物是最简单的元事物,直接用它来定义类事物很不方便,在XWorker编程中最常用的元事物是xworker.lang.MetaDescriptor3。
为什么存在多个元事物呢?这是因为元事物可以作为自己的类,因此可以通过它自己来定义自己,从而让自己的描述能力越来越强,比如MetaDescriptor3可以满足我们日常的要求。
有了可以作为类的模型,那么我们就可以用它来创建对象模型了。
<Shell name="HelloWorld" text="Hello World" RESIZE="true" width="400" height="300" label="SWTHelloWorld" descriptors="xworker.swt.widgets.Shell"> </Shell>
上面是一个HelloWorld示例,它是最终可执行的程序,它是使用上面的类模型来创建的。如果想了解对象模型是怎么被执行的,可以参看动态模型编程的原理。
动态模型编程本身没有规定模型的编辑方法,一般我们可以手工编辑XML,也可以用编辑器编辑。在XWorker中编程我们建议使用XWorker自带的编辑器。
模型可以简单的理解为XML,使用XML格式存储的模型可以手工编写。
在XWorker中最常用的编辑模型的方法是用事物管理器,事物管理器是一个通用的模型编辑器,它通过模型的描述者动态生成界面来编辑模型。
如何使用编辑器编辑模型请参看编辑器的文档。
XWorker是用Java编写的,可以先看看一个模型是如何在Java中运行的。
World对象是管理事物的容器,在使用前需要初始化它。
import org.xmeta.World; //World是单态的 World world = World.getInstance(); //初始化,参数是文件路径 world.init(".");
World初始化时的路径(path)说明,路径通常是存放事物的一个目录,它也是一个工作目录,如果有脚本或需要运行时编译类等都会放到这个目录下。
一般可以用当前目录来初始化,或指定一个工作目录。
World对象初始化后,就可以通过它来获取具体的事物了。
import org.xmeta.Thing; Thing helloWorld = world.getThing("HelloWorld");
world.getThing()的参数是事物的路径。
模型可以当对象来使用,它也有自己的行为,通过doAction(name)方法来执行,参数是行为的名词。
helloWorld.doAction("run");
import org.xmeta.Thing; import org.xmeta.World; public class HelloWorld{ public static void main(String args[]){ try{ World world = World.getInstance(); world.init("."); Thing helloWorld = world.getThing("HelloWorld"); helloWorld.doAction("run"); }catch(Exception e){ e.printStackTrace(); } } }
XWorker本来就是模型运行的结果,所以模型也可以在XWorker中直接运行。
如果系统中哥已经安装和配置好了XWorker,那么一个模型也可以在操作系统下独立运行,比如到模型的所在目录执行以下命令:
dml HelloWorld
Copyright © 2007-2014 XWorker.org 版权所有