pátek 22. října 2010

Decisions Fall 2010

O virtuální konferenci Decisions jsem zde již několikrát psal, ale o Decisions Fall 2010 jsem se příliš nezajímal, protože jarní Decision Spring pro mě byla spíše zklamáním.

Nicméně program AX bloku (1.11.2011) nevypadá špatně (například Agilní vývoj softwaru v AX nebo Performance Monitoring), na záznamy se určitě podívám.

čtvrtek 21. října 2010

Dědění od třídy Object

Třída Object stojí na vrcholu hierarchie tříd a každá třída od ní je - přímo či nepřímo - odvozena. Tak to alespoň tvrdí Strom aplikační hierarchie, DictClass.extend() nebo MSDN.
Object definuje několik finálních metod (např. handle()) a čtyři překrytelné (equal(), toString(), wait() a xml()). Znamená to tedy, že každý objekt obsahuje tyto metody? Překvapivě… nikoli.

Zkuste si vytvořit novou třídu, zkonstruovat její instanci a zavolat její metodu toString(). Takový kód vůbec nejde zkompilovat! Pokud tuto instanci přiřadíte do proměnné typu Object, přiřazení je sice korektní a Object obsahuje metodu toString(), takže kompilace proběhne v pořádku, nicméně volání metody vyhodí runtime výjimku.
Object o = new MyClass();
o.toString(); //runtime chyba
Metodu toString() můžete ve své třídě sami naimplementovat a kód bude pochopitelně fungovat. Ale pozor - zde vytváříte nové metody, nepřekrýváte ty ze třídy Object. To má dva zřejmé efekty - zaprvé nemá smysl snažit se volat super() (to platí i pro konstruktor(!)) a za druhé můžete vytvořit metodu stejné signatury jako má některá z finálních metod třídy Object.

Chování, které byste asi očekávali od začátku, je nutné vynutit explicitním uvedením extends Object v classDeclaration vaší třídy. Pak můžete na jejích instancích volat všechny metody zděděné z Object, překrytelné metody se objeví v kontextové nabídce (viz obrázek), můžete volat jejich implementaci ve třídě Object pomocí super() a tak dále.


Řešení pomocí extends Object používají zřejmě veškeré systémové třídy (tzn. třídy v uvedené v System Documentation) a také některé třídy definované v X++, například RunBase.

Zajímavé je, že z pohledu Stromu aplikační hierarchie a DictClass tříd vypadají třídy s i bez extends Object zcela stejně. Popsané chování je také zcela v rozporu s MSDN dokumentací, která například říká: "Methods in the Object class can be called for any object.", tedy "Metody ve třídě Object mohou být volány pro libovolný objekt.".

Zajímavých dopadů by se našlo jistě více, mě napadají tyto:
  • Nelze vytvářet generickou funkcionalitu předpokládající, že všechny objekty v Axaptě mají určitou metodu (třeba equal()), protože to prostě není nijak zaručeno
  • Pokud není třída výslovně deklarována jako potomek Object, může implementovat i finální metody a ty budou zavolány (!!!). Takto lze například vracet libovolně zvolené číslo v handle() - a znamená to, že ani na finální metody třídy Object se nelze stoprocentně spolehnout.
Od této chvíle doporučuji v deklaraci třídy vždy výslovně uvádět extends Object.

čtvrtek 7. října 2010

Nová podoba community.dynamics.com

Právě před chvílí jsem se přihlásil na community.dynamics.com a nestačil jsem se divit. Celý web se totiž od včerejšího večera podstatně změnil a to nejen vizuálně, ale i po funkční stránce. Například fórum (schované pod položkou Ask The Community) už umí RSS. (Původně jsem tu psal, že není možné zobrazit náhled příspěvku, ale platí to jen pro plain text.)
Obecně mi přijde, že je stránka více zaplácaná spoustou "related" obsahu, a ve výsledku se na ní vejde méně informací (na výpisu příspěvků na fóru je to obvzlášť patrné), ale snad je to jen věc zvyku.

sobota 2. října 2010

Microsoft Newsgroups definitivně končí

Pokud navštěvujete Microsoftí Usenet pravidelně, jistě víte, že již dříve bylo oznámeno zrušení všech newsgroups a jejich nahrazení webovými fóry. Vzápětí opravdu zmizela řada skupin, ale ty týkající se Axapty se stále držely. Nicméně všechno jednou končí a v několika příštích dnech budou uzavřeny.

Náhradou jsou samozřejmě fóra na community.dynamics.com, která už jsou celkem zaběhlá, na druhou stranu bych tam uvítal členění na application/development, jak tomu je na Usenetu (kde je skupin naopak zbytečně moc, viz třeba localization). Obecně mi přijde přechod od léta vyvíjených klientů k nějakému nepříliš propracovanému webovému rozhraní jako ztráta, ale chápu, že už to byl pro Microsoft tak trochu relikt. Naštěstí jsem si už na komunitní fórum zvykl, ale chvilku mi to trvalo (asi tak rok :)).

K webovému fóru dám jeden tip - pod tlačítkem More options si můžete mimo jiné nastavit zobrazování jen nepřečtených vláken.