Názory k článku
Objektově orientované programování v Lua
lua vs python
celé vláknoRe: lua vs python
celé vláknoRe: lua vs python
celé vláknoLua Vs Python
Re: lua vs python
celé vláknoPořád čekám na ty objekty
celé vláknoRe: Pořád čekám na ty objekty
celé vláknoRe: Pořád čekám na ty objekty
celé vláknoRe: Pořád čekám na ty objekty
celé vlákno1) zapouzdreni
2) dedicnost
3) polymorfismus
tak to samozrejme jde v Lua udelat, jak je v clanku asi na dvou mistech napsano, pomoci tabulek a metatabulek. Resp. ten polymorfismus mame diky dynamickemu typovani zadarmo, takze zbyva "jen" zapouzdreni a dedicnost.
Na to, ze Lua vlastne neni vubec navrzena jako OOP jazyk, je docela zajimave, co vsechno zvladne, takovy miniaturni Lisp :-)))
Re: Pořád čekám na ty objekty
celé vláknoK objektovému programování je zapotřebí:
1) předávání zpráv jako konstrukce jazyka,
2) místní ukládání stavu výpočetního procesu, ukrytí tohoto stavu před zbytkem programu a jeho ochrana před jakýmkoli jiným přístupem než 1), a nakonec
3) extrémně pozdní vazba všeho, co pozdně vázat lze.
To je kanonická definice přímo z úst tvůrce OOP. Jestli tvůrce C++ za vlastnosti objektů považoval "zapouzdření, dědičnost a polymorfismus", tak to asi budou vlastnosti programování a la C++. Co zrovna dědičnost dělá v definici OOP a la C++, to jsem skutečně nikdy nepochopil.
Re: Pořád čekám na ty objekty
celé vláknoRe: Pořád čekám na ty objekty
celé vláknoRe: Pořád čekám na ty objekty
celé vláknoKonstrukce c1.print má k objektům o hodně blíže, protože za běhu se bude vyhledávat metoda "print" v asociativním poli (=polymorfizmus). Tudíž lze mít kontejner s complexními čísly a stringy a volat pro všechny položky kontejneru x.print bez ohledu na typ objektu. (Předpokládáto definici objektu string s metodou print )
Radikální fandové OOP by Vám, ale potvrdili, že k naplnění skutečného OOP je potřeba aby systém uměl poslat libovolnou zprávu (volání funkce) objektu a ten jí uměl zpracovat. Například pošlete zprávu xyz objektu kontejneru ( kontejner.xyz ). Kontejner se podívá zda všechny objekty jsou schopny odpovědět na tyto zprávu a pokud ano pak jim tuto zprávu postupně přepošle. Ačkoliv kontejner nemá nadefinovanou funkci xyz a nikdy o ní neslyšel, přesto je schopen toto volání zpracovat. Pokud Vás zajímá, který jazyk toto umí podívejte se na ObjectiveC Ruby nebo Lisp (CLOS). Lua toto asi nikdy mít nebude. Leda že by se každé volání funkce nějak opisovalo. Např methodcall(objekt,"metoda",parametry,...).
Re: Pořád čekám na ty objekty
celé vláknoad prvni dva odstavce - to si ukazeme priste, v dnesni casti serialu uz na to nebylo misto, v Lua to lze resit pres asociativni pole a s malou pomoci metatabulek.
ad treti odstavec - podle me by to taktez slo v Lua implementovat. Napadlo me zmenit metametodu __index tak, aby nevracela primo asociativni pole (jak tomu bude v pripade odstavcu 1 a 2), ale misto toho si zjistila, zda ten klic (=nazev metody/zpravy) skutecne existuje a zda je typu funkce (nikoli atribut) a podle toho se zachovala. Je to vyhodnocovane v runtime, tj. stejne jako ve zminovanych jazycich, ale musel bych si to odzkouset.
Re: Pořád čekám na ty objekty
celé vláknoPíšete, že pokud mne zajímá, který jazyk "to" umí, ať se podívám třeba na ObjC nebo LISP. Jenže - umí "co" přesně? Přísně vzato, to, co popisujete (tedy to, co tvrdí "radikální fandové OOP"), právě CLOS neumí. Jenže to, co tvrdí radikální fandové, je minimálně o jednu úroveň abstrakce níž, než kde se dá OOP začít teoreticky budovat a rozhodně to není jediná větev, po které se dá při postupné konkretizaci směrem k praktické realizaci z té vyšší úrovně sestoupit.
Re: Pořád čekám na ty objekty
celé vláknoRe: Pořád čekám na ty objekty
celé vlákno> Praktických pohledů na OOP je vícero a žádný bych „nekanonizoval“.
Opravdu zabavne aneb „to ja prisel s terminem objektove orientovane programovani a musim rict ze jsem tim nemel na mysli C++“ (Alan Kay)
Ta „kanonicka“ definice oop je taktez z jeho ust, doporucuju si od nej neco precist, dost dobre vysvetluje _proc_ zrovna tyhle vlastnosti jsou tak dulezite pro to, co nazval OOP (aneb co budou jazyky ktere je nenaplnuji pravdepodobne postradat).
RE: Objektově orientované programování v Lua
celé vláknoA možná i velmi zajmavý ;-))))

