什么是x++? x++是微軟ERP所使用的內(nèi)部編程語言,和C系列的語言語法很相似,微軟Dynamics AX內(nèi)嵌的開發(fā)語言X++,下面是有關(guān)的一些介紹 原文地址:http://url.csai.cn/user1/16236/archives/2006/10476.html X++語言特性 X++是Axapta MorphX的開發(fā)語言,它也是一種面向?qū)ο蟮拈_發(fā)語言。由于Axapta是一套ERP平臺,使得用X++進行ERP業(yè)務(wù)的二次開發(fā)變得非常簡單。與其它面向?qū)ο蟮恼Z言不同,X++具有一些自己的特性。 1、 Class Variables X++的類級別變量都是protected型的,也就是說,無法從類的外部訪問這些變量。在子類中可以訪問父類的類級別變量。如果非要從外部訪問類級別變量,可以使用parm類型的方法來實現(xiàn),這種方法在系統(tǒng)中被廣泛使用。例如,在某個類的classDeclaration中定義了一個int類型的類級別變量value,那么就可以在該類中定義如下的方法來實現(xiàn)對value的修改與訪問: int parmMyValue (int _value = value) { value = _value; return value; } 2、 類的靜態(tài)成員變量 與其它面向?qū)ο箝_發(fā)語言不同,無法在X++中定義類的靜態(tài)成員變量,但可以在X++的類中定義靜態(tài)方法。要想在類的靜態(tài)方法中訪問類級別變量,只能夠通過parm類型的方法和實例傳遞策略來實現(xiàn),例如某個類的定義如下: 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; } 那么可以使用下面的方法來調(diào)用類的靜態(tài)方法和實例方法: static void Job1(Args _args) { StaticTest tester = new StaticTest(); ; tester.parmMyValue(123); tester.instanceMethod(); StaticTest::StaticMethod(tester); pause; } 3、 多態(tài) 多態(tài)是一個面向?qū)ο蟮母拍?,它的具體形式是函數(shù)重載(overload),這和函數(shù)重寫(override)是兩個完全不同的概念。X++具備override,但不支持overload。也就是說,無法在一個類里面定義多個名稱相同但參數(shù)列表不同的函數(shù)。X++支持一種退化的overload,就是函數(shù)的默認參數(shù)。系統(tǒng)中很多類的成員方法都有類似下面的定義: void myFunction (int a, int b, boolean c = false); 那么在調(diào)用該方法的時候,第三個參數(shù)可以不指定,在這種情況下,c的值會使用默認值(false) 4、 成員可見性 嚴格地說,X++并不完全遵守面向?qū)ο蟮乃枷搿T诿嫦驅(qū)ο笏枷胫?,類的所有成員在默認情況下都是私有的,除非設(shè)計師使用public關(guān)鍵字將其定義為公有。這樣做是為了達到“嚴格封裝類的信息,只向外發(fā)布需要的信息”這一目的(注:C++中當(dāng)使用struct定義類時,情況正好相反,因為它需要與C語言兼容),也是遵循面向?qū)ο蠡舅枷氲囊粋€重要體現(xiàn)。然而,X++在默認情況下,類級別變量的可見性都是protected的(如上所述),而方法的可見性都是public的。因此,單純從面向?qū)ο蟮慕嵌热タ疾靀++語言可以發(fā)現(xiàn),X++的定義并不規(guī)范。當(dāng)然,這也是由于X++本身的應(yīng)用特性所決定的,因為它是一種ERP二次開發(fā)語言。比如為了方便起見, Table型變量的所有字段都是public可見的。 5、 平臺開發(fā) X++支持Axapta ERP平臺開發(fā),不支持OS級別的平臺開發(fā)。例如X++雖然有線程模型,但其主要作用是分離UI和Domain logic,使得在進行業(yè)務(wù)處理的時候不會造成UI的凍結(jié)。典型的例子就是Axapta AOT的“Find”對話框,它會在Find的過程中及時更新用戶界面信息。此外,雖然X++提供Windows API、DLL、COM等的編程接口,但要實現(xiàn)OS底層的處理仍然不是一件容易的事情。假設(shè)需要為Windows開發(fā)一套實時的內(nèi)存管理系統(tǒng),X++絕對不是最好的選擇。 6、 模式應(yīng)用 面向?qū)ο笏枷氲木柙谟谀J綉?yīng)用。X++的語言特性決定了其模式應(yīng)用也會與其它面向?qū)ο笳Z言產(chǎn)生偏差。例如,由于無法定義類的靜態(tài)成員變量,要在X++中實現(xiàn)單身(Singleton)模式,只能通過使用infolog.globalCache方法來保存類的實例。工廠(Factory)模式在X++中使用的非常廣泛,比如SalesFormLetter類的construct方法本身就是一個工廠方法,X++也提供了一個classFactory以生成對應(yīng)的類的實例。在模式應(yīng)用上,X++可以處理大多數(shù)靜態(tài)模式,而對于并發(fā)與網(wǎng)絡(luò)化對象模式,X++不需要處理,也無法處理。 |
|