Já jen - všímáte si, že diskuze jde přesně tím směrem, co jsem popsal? Dokonce už je tu i javaman, který nám udělal kázání o lopatách co pracují za polovinu.
Už si skoro říkám, jestli by to nestálo za napsání článku, který by se pak vždycky jen odkazoval, protože teď se to bude vše znova opakovat. Pokolikáté už za poslední půlrok? Potřetí?
http://forum.root.cz/index.php?topic=12988.0Jsem vychazel z wiki:
Metaobjects are examples of the computer science concept of reflection, where a system has access (usually at run time) to its internal structure.
...
A metaobject protocol (MOP) provides the vocabulary to access and manipulate the structure and behavior of objects.
To tedy dost pusobi jako reflexe ci prace s bytekodem, pokud to mam vztahnout k Java svetu. Ale je to asi jedno, me neslo o ty metaobjekty ani metaobjektovy protokol, ale o to inovativni jmeno: __*__, ktere bych nikdy neoznacil za hezke - coz uznavam je asi subjektivni a pravdepodobne o zvyku.
Reflexe nepracuje s bytekódem, ale přímo s objekty, které můžou zkoumat svojí vlastní strukturu, třídy, chain dědičnosti a různě jí upravovat. Někdy to může ušetřit kód pomocí pokročilé magie, jindy tě to může střelit do nohy.
Sice jsem odkazoval jen slovo „metaobjektového“ (protože to spousta lidí nezná), ale důležitý je celý zbytek té věty, hlavně to „protokolu“. V pythonu magické metody vytvářejí standardizovaný protokol pro komunikaci s objekty definující často používané akce. Dalo by se říct, že je to takové rozhraní pro standardní funkcionalitu, které podporuje sám jazyk. Třeba
__str__() se zavolá při konverzi na string a
__repr__() při „zobrazení“ objektu v konzoli atd..
Jestli to nebude tím, že jsou daleko schopnější než ty v Pythonu. Takže mi chceš říct, že jednoduché věci jako dekorátor v Pythonu neumí?
Proč vůbec diskutuješ o věcech, kterým od pohledu nechápeš?
V Javě ani Pythonu by se k atributům objektu z vnějšku přistupovat nemělo. A to ani prostřednictvím getterů/setterů. Mělo by se pracovat přímo s objektem, tedy volat jeho metody, které data uvnitř objektu zpracovávají jak pro vstup, tak i pro výstup.
V pythonu je to imho jedno, protože podporuje properties. Ve chvíli, kdy potřebuješ přístup omezit či nějak transformovat, můžeš tak učinit přes property, či přes deskriptory.
Osobně mi snaha omezovat přístup a myslet si, že tím zlepšuji bezpečnost (nebo co vlastně?) jako nesmysl. Je stejně absurdní, jako snaha některých výrobců omezovat co můžu dělat s mobilem který si koupím a co už ne. Když prostě budu chtít znásilnit nějaký objekt a vlézt si do něj, tak to udělám ať už v javě, nebo kdekoliv jinde, i kdybych to měl dělat scannováním a živou úpravou
/dev/mem.
V Javě se zase "this" schizofrenně někdy píše a někdy ne. Přitom se to chová stejně. To ti přijde normální?
To proto, že java nemá žádnou vnitřní logiku, ani krásu. Celé to tak je, prostě proto že to tak někdo chtěl (navíc někde v C++, nebo ještě hlouběji v historii), nikoliv proto, že by to dávalo vnitřní smysl. Neroste to z žádného silnějšího vnitřního konceptu, jako některé jiné jazyky (smalltalk, lisp, do jisté míry i python, který vše staví na dictech).