面向对象

1.基本概念

1.1.对象

    在动态模型编程里规定模型就是对象,每一个模型都是对象。

1.2.动作

    动态模型编程规定每一个模型都是可执行的,它们可以转化为动作来执行。

1.3.对象的属性

    一个模型的属性和子节点是这个模型对象的属性。

<?xml version="1.0" encoding="utf-8"?>
  
<Shell name="HelloWorld" descriptors="xworker.swt.widgets.Shell" text="Hello World" width="640"
     height="480">
    <FillLayout name="FillLayout"></FillLayout>
    <Browser name="Browser" url="http://www.x-meta.org"></Browser>
</Shell>

    比如在上面的模型代码中,<Shell .../>、<FillLayout .../>和<Browser .../>是三个不同的对象,其中对象<Shell .../>包含name、descriptors、text、height、height和<FillLayout .../>、<Browser .../>等属性。

1.4.对象的行为

     由于动作定义了任何模型都是可执行的,所有我们把一个模型的某些特殊子节点当作它的行为。

<?xml version="1.0" encoding="utf-8"?>
 
<Person name="Tom" descriptors="_local.test.oo.Person" age="40">
    <actions descriptors="xworker.lang.MetaThing/@actions">
        <GroovyAction name="hello" code="println &quot;Hello World!&quot;;"></GroovyAction>
    </actions>
</Person>

    动态模型规定一个模型的第一个标签名为actions的子节点中的子节点是模型对象的行为定义,所以在上面的模型代码<Person name="Tom" .../>这个对象模型有一个名为hello的行为,它是使用GroovyAction(Groovy脚本)编写的。

1.5.对象的类

    模型的描述者可以作为模型对象的类。

<thing name="Person"/>
<Person name="Tom" descriptors="Person"/>

    比如在上面的模型代码中,<thing name="Person"/>是<Person name="Tom" descriptors="Person"/>的类,它们的关系是通过descriptors属性指定的。

2.面向对象

    动态模型编程中的面向对象的完整定义如下。

2.1.继承

     在动态模型里,一个对象可以继承除自身之外的任何对象,一个对象可以继承任意多个对象。如果一个对象A继承了对象B,那么对象A继承对象B的行为,但不继承对象B的属性和子节点。

<thing name="Person" extends="Animal"/>

    继承使用extends属性来表示,比如上面的XML里Person继承了Animal。

2.2.类

    在动态模型里使用描述者这个概念代替了类的概念,并且一个对象可以有任意个描述者,一个对象的描述者还可以是自己。如果对象B是对象A的描述,那么对象A继承对象B的行为,并且通常对象B是对象A的结构定义。

    在动态模型里描述者的作用是描述一个对象是什么、有哪些属性和行为等。

2.3.类的继承

    在动态模型里继承只继承行为而并不继承属性和子节点等,但如果继承是类之间的继承,那么在逻辑上可以继承类的定义,比如属性、子节点和行为的定义。

    比如Tom是Person,而Person继承了Animal,如果Animal定义了skin属性,Person定义了language属性,那么Tom就有skin和language两个属性,即属性的定义是可以继承的。

 

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

沪ICP备08000575号