zoukankan      html  css  js  c++  java
  • 初学Dynamics AX > X++

    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++不需要处理,也无法处理。

  • 相关阅读:
    面向对象之魔术方法
    装饰器和单例模式练习
    装饰器练习
    扩展数据类型练习
    Vlan的 tag 和 untagged
    【转】OSI 七层模型和TCP/IP模型及对应协议(详解)
    性能测试的相关概念和指标。
    Python接口自动化之数据驱动
    Python接口自动化之登录接口测试
    Python接口自动化之unittest单元测试
  • 原文地址:https://www.cnblogs.com/Fandyx/p/2761604.html
Copyright © 2011-2022 走看看