事物的继承关系

1.继承

1.1.继承的定义

    继承也是事物之间一种关系,在动态模型语言里,一个事物可以继承除自身外的其它任何事物,继承主要体现在行为的继承上,如果事物B继承了事物A,那么事物B则继承了事物A的行为,此时事物B就拥有了事物A的各种行为。

1.2.继承的作用

    事物之间的继承关系是一个辅助功能,使用继承可以方便的定义复杂的事物。

1.3.继承的实现方法

    继承是通过设置事物的extends属性来实现的,比如以下代码:

//事物A和B
Thing a = new Thing();
a.put("name", "A");
Thing b = new Thing();
b.put("name", "B");

//设置A继承B,b.getMetadata().getPath()是B在world中的路径
a.put("extends", b.getMetadata().getPath());

2. 示例

2.1 示例代码

    本示例的相关代码文件有:Animal.xer.xml、PersonExtendAnimal.xer.xml、PersonExtend.xer.xml和PersonExtendTest.java。在X-Meta引擎的源码中可以找到。

2.2 基类的定义,Animal.xer.xml

    Animal.xer.xml定义的代码如下。

<thing name="Animal">
    <actions name="actions" descriptors="actions">
        <JavaAction name="eat" useOuterJava="true"   descriptors="JavaAction" 
                methodName="animalEat"  outerClassName="org.xmeta.example.PersonExtendTest"/>
    </actions>
</thing>

2.3 继承类的定义,PersonExtendAnimal.xer.xml

    PersonExtendAnimal.xer.xml中定义了Person,代码如下。

<thing name="Person" extends="org.xmeta.example.Animal">    
    <actions name="actions" descriptors="actions">
        <JavaAction name="run" useOuterJava="true"   descriptors="JavaAction" 
                methodName="run"  outerClassName="org.xmeta.example.PersonWithActionTest"/>
    </actions>
</thing>

2.4 对象的定义,PersonExtend.xer.xml

    PersonExtend.xer.xml中定义了事物Tom,Tom的描述者是Person,代码如下。

<Person name="Tom" age="40" descriptors="org.xmeta.example.PersonExtendAnimal">
    <Child name="Smith" age="10"/>
</Person>

2.5 测试代码,PersonExtendTest.java

    PersonExtendTest.java是运行测试代码,具体如下。

package org.xmeta.example;

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

public class PersonExtendTest {
	public static void animalEat(ActionContext actionContext){
		Thing self = (Thing) actionContext.get("self");
		System.out.println(self.get("name") + " is eatting......");
	}
	
	public static void main(String args[]){
		//初始化World,World是获取事物的容器
		World world = World.getInstance();
		world.init(".");
		
		//获取PersonDescriptor.xer.xml定义的事物
		Thing person = world.getThing("org.xmeta.example.PersonExtend");		
		person.doAction("run");
		//eat是Person继承了Animal的方法
		person.doAction("eat");
	}
}

   在这里org.xmeta.example.PersonExtend是事物Tom,tom的run和eat行为都是有效的。

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

沪ICP备08000575号