分享

X++语言

 Hermanli 2011-03-24

什么是x++?

x++是微软ERP所使用的内部编程语言,和C系列的语言语法很相似,微软Dynamics AX内嵌的开发语言X++,下面是有关的一些介绍

原文地址:http://url.csai.cn/user1/16236/archives/2006/10476.html

X++语言特性

X++是Axapta MorphX的开发语言,它也是一种面向对象的开发语言。由于Axapta是一套ERP平台,使得用X++进行ERP业务的二次开发变得非常简单。与其它面向对象的语言不同,X++具有一些自己的特性。

1、 Class Variables

X++的类级别变量都是protected型的,也就是说,无法从类的外部访问这些变量。在子类中可以访问父类的类级别变量。如果非要从外部访问类级别变量,可以使用parm类型的方法来实现,这种方法在系统中被广泛使用。例如,在某个类的classDeclaration中定义了一个int类型的类级别变量value,那么就可以在该类中定义如下的方法来实现对value的修改与访问:

int parmMyValue (int _value = value)

{

value = _value;

return value;

}

2、 类的静态成员变量

与其它面向对象开发语言不同,无法在X++中定义类的静态成员变量,但可以在X++的类中定义静态方法。要想在类的静态方法中访问类级别变量,只能够通过parm类型的方法和实例传递策略来实现,例如某个类的定义如下:

class StaticTest

{

int value;

}

static void StaticMethod(StaticTest _tester)

{

if (_tester)

{

// 使用实例传递策略来访问类级别变量

print _tester.parmMyValue();

}

}

int parmMyValue(int _value = value)

{

value = _value;

return value;

}

void instanceMethod()

{

print value;

}

那么可以使用下面的方法来调用类的静态方法和实例方法:

static void Job1(Args _args)

{

StaticTest tester = new StaticTest();

;

tester.parmMyValue(123);

tester.instanceMethod();

StaticTest::StaticMethod(tester);

pause;

}

3、 多态

多态是一个面向对象的概念,它的具体形式是函数重载(overload),这和函数重写(override)是两个完全不同的概念。X++具备override,但不支持overload。也就是说,无法在一个类里面定义多个名称相同但参数列表不同的函数。X++支持一种退化的overload,就是函数的默认参数。系统中很多类的成员方法都有类似下面的定义:

void myFunction (int a, int b, boolean c = false);

那么在调用该方法的时候,第三个参数可以不指定,在这种情况下,c的值会使用默认值(false)

4、 成员可见性

严格地说,X++并不完全遵守面向对象的思想。在面向对象思想中,类的所有成员在默认情况下都是私有的,除非设计师使用public关键字将其定义为公有。这样做是为了达到“严格封装类的信息,只向外发布需要的信息”这一目的(注:C++中当使用struct定义类时,情况正好相反,因为它需要与C语言兼容),也是遵循面向对象基本思想的一个重要体现。然而,X++在默认情况下,类级别变量的可见性都是protected的(如上所述),而方法的可见性都是public的。因此,单纯从面向对象的角度去考察X++语言可以发现,X++的定义并不规范。当然,这也是由于X++本身的应用特性所决定的,因为它是一种ERP二次开发语言。比如为了方便起见, Table型变量的所有字段都是public可见的。

5、 平台开发

X++支持Axapta ERP平台开发,不支持OS级别的平台开发。例如X++虽然有线程模型,但其主要作用是分离UI和Domain logic,使得在进行业务处理的时候不会造成UI的冻结。典型的例子就是Axapta AOT的“Find”对话框,它会在Find的过程中及时更新用户界面信息。此外,虽然X++提供Windows API、DLL、COM等的编程接口,但要实现OS底层的处理仍然不是一件容易的事情。假设需要为Windows开发一套实时的内存管理系统,X++绝对不是最好的选择。

6、 模式应用

面向对象思想的精髓在于模式应用。X++的语言特性决定了其模式应用也会与其它面向对象语言产生偏差。例如,由于无法定义类的静态成员变量,要在X++中实现单身(Singleton)模式,只能通过使用infolog.globalCache方法来保存类的实例。工厂(Factory)模式在X++中使用的非常广泛,比如SalesFormLetter类的construct方法本身就是一个工厂方法,X++也提供了一个classFactory以生成对应的类的实例。在模式应用上,X++可以处理大多数静态模式,而对于并发与网络化对象模式,X++不需要处理,也无法处理。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多