动态模型

1.理解动态模型

    动态模型是一种抽象的面向对象的编程方法,它使用模型来表示类、对象和行为等。其中模型是结构化的数据,可以使用XML和JSON等来表示。

1.1.万物皆对象

    动态模型的概念有点抽象,但其实是面向对象编程方法的理念“万物皆对象”的直白的解释,即任何东西都是对象,对象可以用模型来表示,模型是数据。

1.2.实现原理

    既然“万物皆对象”,那么对象是如何能够表示各种东西的呢?这取决于我们如何解释它。

    比如一个对象之所以可以作为类,是因为这个对象具有类的特征,即使用它可以描述一个对象的结构和行为。同样对象也可以作为行为,只要能把它变成可执行的。

2.面向对象

    虽然动态模型的概念有点抽象,但其实它是一个典型的面向对象的编程方法。编程一般也是先定义类,然后用类来实例化对象。

2.1.类

    使用模型表示类的示意代码。

<thing name="Person">
    <attribute name="name"/>
    <actions>
         <JavaAction name="sayHello"/>
    </actions>
    <thing name="Child" exends="Person"/>
</thing>

    如上面的示意代码,该XML是一个可以作为类的模型。

  • <thing name="Person">
    类的名字是Person。
      
  • <attribute name="name">
    Person有一个名字为name的属性。
      
  • <JavaAction name="sayHello">
    Person有一个名为sayHello的行为。约定第一个节点名为actions的节点下是行为的定义。
      
  • <thing name="child" extends="Person>
    Person可以有Child子节点,其中Child继承了Person,所以Child也有name属性和sayHello方法。

2.2.对象

    使用模型表示对象的示意代码。

<Person name="Zhagnsan" descriptors="Person">
    <Child name="Xiaoming"/>
</Person>
  • <Person name="Zhangsan" descritpors="Person">
    descritptors="Person"表明Zhangsan的类是Person。
      
  • <Child name="Xiaoming">
    Xiaoming是Zhangsan的子节点。

2.3.模型就是程序

    模型就是最终的程序。一般模型可以在编辑器中直接运行。如果把XWorker设置成系统全局的模型引擎,模型也可以在系统下直接运行。下面22秒的视频演示了创建和运行Zhangsan这个模型。

2.4.在代码使用模型

    也可以在代码中使用模型,如设置模型的属性和执行模型的行为等。

import org.xmeta.Thing;
import org.xmeta.World;
import org.xmeta.ActionContext;

//动态模型引擎实例
def world = world.getInstance();

//模型有唯一路径,可通过路径获取模型
def person = world.getThing("Person");

//通过类模型创建对象模型
def zhangsan = new Thing("Person");

//设置模型的属性
zhagnsan.put("name", "Zhangsan");

//执行模型的行为,ActionContext是执行的上下文
zhangsan.doAction("sayHello", new ActionContext());

3.FAQ

  • 动态模型是一种编程语言吗?
    把动态模型理解成后语言的一种编程方法可能更好。即动态模型是基于其它编程语言的,动态模型也不适合编写算法等基础功能,它适合在其它语言和已有的功能上继续编程。
       
  • 有哪些基础模型?
    动态模型本身只定义了一个基础模型(元模型),其它是对各种使用Java编写的功能的封装,所以基础模型一般是自定义的或他人编写的。如果使用XWorker,那么需要了解XWorker定义的模型。
       
  • 如何开始?
    动态模型的语法规则基本都体现在XWorker的模型编辑器上了,学会了如何在模型编辑器中创建、编辑和运行模型,也就基本掌握了动态模型的编程方法。
       

 

 

 

Copyright ©  2007-2019 XWorker.org  版权所有  沪ICP备08000575号