动态模型入门

    动态模型是一个动态的面向对象的方法,所以动态模型的入门可以从面向对象的方法开始。

1.基本概念

1.1.类的作用

    我们认为在面向对象中类的作用一般是用于描述对象,即类能够说明对象有哪些属性和行为等。在面向对象的编程里类还可以用来示例化对象,比如在Java中"User zhangsan = new User();"就是用User类来实例化zhangsan这个对象,在这里实例化也可以理解为用类来创建对象。

    上面关于类的两个作用需要牢记,因为这也是动态模型的基本方法。

1.2.事物

    由于对象和类是一对概念,但是在动态模型中的基本元素是模型,那么模型应该称为对象还是类呢?我们觉得都不合适,用事物来称呼它最合适。在动态模型编程中我们用模型表示任何东西,而任何东西我们都可以称为事物,所以模型代表的就是事物,我们用事物这个词作为基本概念的起点。

    因此在动态模型中模型、事物和事物模型通常指的都是一个东西。

2.创建作为类的事物模型

    使用面向对象的方法,我们首先要创建可以用做类的事物模型。

2.1.类的作用是描述

    我们知道类的作用可以描述对象,它能够说明对象有哪些属性和行为,所以在类模型里应该能够反映以上要点。

2.2.类模型示例

    下面是一个可以作为类的模型的示例代码。

<!-- 用元事物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>

    在这段示意代码中我们可以看到类的基本要素:

  • 行为定义
  • 属性定义(属性和子事物)

2.2.元事物的作用

    在上面示例中使用来元事物来创建可以用做类的事物模型,那么元事物又是什么呢?元事物其实就是类事物模型的定义,它也是模型。

<thing name="thing">
    <attribute name="name"></attribute>
    <attribute name="extends"></attribute>
    <thing name="attribute">
        <attribute name="name"></attribute>
    </thing>
    <thing extends="_root"></thing>
</thing>

    上面是一个最简单的元事物,它的含义是:

  • 事物模型有名字,即有name属性
  • 事物模型有属性子节点,即attribute子节点,这样可以用属性子节点定义具体对象的属性
  • 事物模型有事物子节点,即thing子节点,这样可以用事物子节点定义具体对象的对象属性
  • 事物模型可以有继承,这样节点<thing extends="_root"/>就继承了根节点,这样它就和根节点逻辑上一样了,也可以包含上述属性,这说明父节点和子节点是一样的。

    需要说明的是上面没有定义行为节点,这是因为行为节点也是一种子节点,所以包含在子事物的定义中。

2.3.MetaDescriptor3

    上面的元事物是最简单的元事物,直接用它来定义类事物很不方便,在XWorker编程中最常用的元事物是xworker.lang.MetaDescriptor3。

    为什么存在多个元事物呢?这是因为元事物可以作为自己的类,因此可以通过它自己来定义自己,从而让自己的描述能力越来越强,比如MetaDescriptor3可以满足我们日常的要求。

3.用类模型来创建对象模型

    有了可以作为类的模型,那么我们就可以用它来创建对象模型了。

3.1.对象模型示例

<Shell name="HelloWorld"  text="Hello World" RESIZE="true" width="400"
        height="300" label="SWTHelloWorld" descriptors="xworker.swt.widgets.Shell">
</Shell>

    上面是一个HelloWorld示例,它是最终可执行的程序,它是使用上面的类模型来创建的。如果想了解对象模型是怎么被执行的,可以参看动态模型编程的原理

3.2.编辑模型的方法

    动态模型编程本身没有规定模型的编辑方法,一般我们可以手工编辑XML,也可以用编辑器编辑。在XWorker中编程我们建议使用XWorker自带的编辑器。

3.2.1.直接编辑模型

    模型可以简单的理解为XML,使用XML格式存储的模型可以手工编写。

3.2.2.在XWorker用事物管理器编辑

    在XWorker中最常用的编辑模型的方法是用事物管理器,事物管理器是一个通用的模型编辑器,它通过模型的描述者动态生成界面来编辑模型。

    如何使用编辑器编辑模型请参看编辑器的文档

4.运行模型

4.1.在Java代码中使用模型

    XWorker是用Java编写的,可以先看看一个模型是如何在Java中运行的。

4.1.1.初始化World

    World对象是管理事物的容器,在使用前需要初始化它。

import org.xmeta.World;

//World是单态的
World world = World.getInstance();

//初始化,参数是文件路径
world.init(".");

    World初始化时的路径(path)说明,路径通常是存放事物的一个目录,它也是一个工作目录,如果有脚本或需要运行时编译类等都会放到这个目录下。

    一般可以用当前目录来初始化,或指定一个工作目录。

4.1.2.获取模型

    World对象初始化后,就可以通过它来获取具体的事物了。

import org.xmeta.Thing;

Thing helloWorld = world.getThing("HelloWorld");

    world.getThing()的参数是事物的路径。

4.1.3.运行模型

    模型可以当对象来使用,它也有自己的行为,通过doAction(name)方法来执行,参数是行为的名词。

helloWorld.doAction("run");
4.1.4.在Java代码中使用模型的完整代码
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();
		}
	}
}
4.2.在XWorker中运行模型

    XWorker本来就是模型运行的结果,所以模型也可以在XWorker中直接运行。

4.3.在系统中使用模型

    如果系统中哥已经安装和配置好了XWorker,那么一个模型也可以在操作系统下独立运行,比如到模型的所在目录执行以下命令:

dml HelloWorld

Copyright ©  2007-2014 XWorker.org  版权所有

沪ICP备08000575号