Respondiendo a tu segunda pregunta, C# depende de esa [sarcasm on]maravilla[sarcarsm off] llamada .NET. Y .NET necesita de un Sistema operativo como Window$ o Linux para funcionar. Así que afortunadamente, no.
Lua no usa objetos, parece que usa objetos, pero en realidad
usa metatablas. No tiene herencia "pura" ni encapsulación y el poliformismo es
sólo una ilusión, ya que es el programador el que tiene que controlas el
número y tipo de parámetros de cada "método" (y pongo método entre
comillas porque no hay métodos, sino funciones).
Puedes ver aquí
el código una "clase" que hice para manejar ficheros INI. Fijate que
aunque se maneja como una clase, en la programación no se ha usado OOP.
En ese código verás que puedo emular una clase, pero no es un código
elegante como el que podrías hacer en
C++/FreePascal/Java/Python/(inserte su lenguaje favorito aquí)...
Como poder usar POO se puede, haciendo "chapuzas"
como hice yo, pero todo depende hasta dónde quieras llegar, si piensas
meter herencias o necesitas cosas avanzadas como clases friends o clases
virtuales por poner un ejemplo, llegar a implementarlo sino en algo
imposible, si se convertirá en una tarea que seguramente no te merezca
la pena.
Weno, abajo te he puesto yo un ejemplo de herencia, y funciona bastante fino, fijate que solo mapeo el index, con lo que recibir, recibiré de la clase original, pero al setear, setearé la del objeto, con lo que sí, emula perfectamente una herencia.
Para el polimorfismo, se podría hacer otra tabla que heredara de la clase padre, y de una subclase k sea, amos, el tipico ejemplo clase animal, subclase ave, subclase perro. tendrian la misma funcion mover, pero uno camina, y el otro vuela. así k kon un poco de conocimiente se podría imitar el polimorfismo.
animal ={ x=0, y=0}
ave ={ mover =function(self,tox,toy) self.x = tox; self.y = toy;end}
perro ={ mover =function(self,tox,toy) self.x = tox + 1; self.y = toy + 1;end}setmetatable(ave, {__index = animal});setmetatable(perro,{__index = animal});
ave.new =function(self,o) o = o or{};setmetatable(o,self); self.__index = self;return o;end
perro.new = ....... idem que anterior.
he visto tu code myconfig, está interesante, pero no lo creas como clase, para terminar de definirlo como clase, te faltaría lo que yo puse de bla:new(o) o = o or {}; setmetatable.... con lo que podrias crear objetos tipo myconfig, que heredaran los "metodos". Esto serviria por ejemplo si hicieras un io.open y lo dejaras abierto, asi tratarias los objetos por separado.
El numero y tipo de parametros, en lua, es opcional, solo que no recuerdo muy claramente como funcionaba, pero es del tipo así:
function suma(...)function minisuma(a,b)if(a and b)thenreturn a+b;elsereturn(a or0)endendlocal a,b,c,d,e,f,g,h,i,j,k = ...;return minisuma(a,b)+minisuma(c,d)+minisuma(e,f)+minisuma(g,h)+minisuma(i,j)+(k or0);end
Amos, un engorro, pero de ser posible, és posible. Para controlar el tipo, pues, if type(a) == "string"... tambien puedes cambiar el tipo de las clases con metatablas.
Si bien exactamente NO son clases, ni herencias, ni polimorfismo, ni metodos, ni funciones con parametros variables, al menos, se parecen lo suficiente, como para poder implementarlo de la misma manera casi.
Otra cosa que dices que me falta el "new", en realidad, no hay "new" porque no existe un método constructor, le puedes llamar new() o pepitoperez(), no me hacía falta llamarla new(), con poner un load() ya hace un efecto de new(). Que se llame new() puede ser un convenio que se use en Lua vaya usté a sabé, pero no hay constructores
De todas formas con polimorfismo, no me refiero a "lo típico" me refería más a algo como:
Mover(X, Y)
Mover(X, Y, Z)
Mover(otro_objeto) //Mueve a la misma posición del objeto
No la típica función, que se llama igual según el objeto (polimorfismo básico). Esta implementación de arriba es una pesadilla, ya que es el programador el que tiene que reescribir las funciones, porque para Lua, son la misma.
Lua es así de limitado y si alguien realmente quiere programar en POO con un lenguaje de script, que se pase a Python. Con Lua, le será posible, epro será sólo "una ilusión". E
intentar hacer algo 100% POO en Lua se convierte en algo muy complejo,
hasta el punto de no llegar a merecer la pena.
Editado, no sé cómo leí tu comentario, pero sí has puesto lo de los parámetros (...). Pensaba que no lo habías puesto. A eso me refería, vamos un trabajo de chinos esa implementación, escribes el triple de código.
exacto, lo de los varargs si, es un trabajo de chinos, con lo que el polimorfismo seria viable, pero una pesadilla xD.
es cierto k en lua es todo muy parecido y bien no es orientado a objetos, pero se puede crear fácilmente esa ilusion, pero con trabajo.
ah, no me fijé bien bien en tu code, cierto, al constructor le llamaste load :P, es k me acostumbro a mis nombres y luego me cuesta leer code ajeno xD, aunke weno, kreo k entre tu y yo ya hemos respondido suficiente a la pregunta. xD
Se puede hacer? si, se puede imitar. Cuesta? si, un poco. Me vale la pena? Depende de la envergadura de la clase.
pero aveces a el no le gusta como pone otro sus variables, y no he oido hablar de un Pythonplayer para el psp, digo ya se que en muchos otros lenguajes se puede hacer muchas cosas, pero estamos hablando de luaplayer para el psp, no de C, node .. ningun otro lenguaje. tu que sabes C, facil se te hace meterle a tu LuaDev las funciones que hoy en dia puedes hacer en C para el PSP, pero y si no?, tendras que ingeniartelas con lo que hay, y si vuelves a la rueda pues ni modo, es Lua y lua no es C, digo. un saludos, como estamos, bien?, sale pues, me voy por ahi, un gusto verlos.
Es decir, nativamente no, pero gracias a las metatablas si, así que no está muy clara la cosa.
Si te refieres a algo tipo
bateria = { nivel = 0, actualizar = function (self) self.nivel = funcionleerbateriaoriginal(); end , texto = "Bateria", nueva = function(self,o) o = o or {}; setmetatable(o, self); self.__index = self; return o; end }
mibateria:actualizar(); oldbateria:actualizar(); -- hacer algo mibateria:actualizar(); if mibateria.nivel > oldbateria.nivel then -- estas cargando la bateria end
Si te refieres a algo así, sí, se pueden imitar las "clases" y los objetos gracias a las metatablas. Las herencias están permitidas, como puedes ver en este ejemplo, donde hereda las funciones de la tabla original bateria, si no las proporcionas. Es decir, también podrias hacer
otrabateria = bateria:new{ nivel = 100 };
Esta nueva var, sería otra nueva bateria, pero con su propiedad nivel a 100, y el resto de propiedades / funciones las hereda de la anterior. Espero haberte ayudado.
Un saludop. (para mas info sobre el tema, lua.org )
te contestara, pero no es mi fuerte decr la palabras clases y sbcalses, no aprendi en los libros, es decir solo abase de observacion y comprecion, si al for se le llama ciclo bucle etc, eso me entere despues, pero te apoyo. en lua he echo muchas cosas que en C no he podido, ha, pero eso es porque de C, no "C" nada... bueno si, pero no. pero la idea es que ese metodo es el que uso para los controles de GuinXell. ya no te conectas?...
Lua es un lenguaje muy versátil y ligero. Y si, es posible usarlo en programación orientada a objetos (imágenes, sonidos, fuentes y otras cosas se manejan como objetos)
Respondiendo a tu segunda
Respondiendo a tu segunda pregunta, C# depende de esa [sarcasm on]maravilla[sarcarsm off] llamada .NET. Y .NET necesita de un Sistema operativo como Window$ o Linux para funcionar. Así que afortunadamente, no.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Lua NO es orientado a objetos
Lua no usa objetos, parece que usa objetos, pero en realidad
usa metatablas. No tiene herencia "pura" ni encapsulación y el poliformismo es
sólo una ilusión, ya que es el programador el que tiene que controlas el
número y tipo de parámetros de cada "método" (y pongo método entre
comillas porque no hay métodos, sino funciones).
Puedes ver aquí
el código una "clase" que hice para manejar ficheros INI. Fijate que
aunque se maneja como una clase, en la programación no se ha usado OOP.
En ese código verás que puedo emular una clase, pero no es un código
elegante como el que podrías hacer en
C++/FreePascal/Java/Python/(inserte su lenguaje favorito aquí)...
Como poder usar POO se puede, haciendo "chapuzas"
como hice yo, pero todo depende hasta dónde quieras llegar, si piensas
meter herencias o necesitas cosas avanzadas como clases friends o clases
virtuales por poner un ejemplo, llegar a implementarlo sino en algo
imposible, si se convertirá en una tarea que seguramente no te merezca
la pena.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
entre los dos peazo explicación xD
Weno, abajo te he puesto yo un ejemplo de herencia, y funciona bastante fino, fijate que solo mapeo el index, con lo que recibir, recibiré de la clase original, pero al setear, setearé la del objeto, con lo que sí, emula perfectamente una herencia.
Para el polimorfismo, se podría hacer otra tabla que heredara de la clase padre, y de una subclase k sea, amos, el tipico ejemplo clase animal, subclase ave, subclase perro. tendrian la misma funcion mover, pero uno camina, y el otro vuela. así k kon un poco de conocimiente se podría imitar el polimorfismo.
he visto tu code myconfig, está interesante, pero no lo creas como clase, para terminar de definirlo como clase, te faltaría lo que yo puse de bla:new(o) o = o or {}; setmetatable.... con lo que podrias crear objetos tipo myconfig, que heredaran los "metodos". Esto serviria por ejemplo si hicieras un io.open y lo dejaras abierto, asi tratarias los objetos por separado.
El numero y tipo de parametros, en lua, es opcional, solo que no recuerdo muy claramente como funcionaba, pero es del tipo así:
Amos, un engorro, pero de ser posible, és posible. Para controlar el tipo, pues, if type(a) == "string"... tambien puedes cambiar el tipo de las clases con metatablas.
Si bien exactamente NO son clases, ni herencias, ni polimorfismo, ni metodos, ni funciones con parametros variables, al menos, se parecen lo suficiente, como para poder implementarlo de la misma manera casi.
Un salute,
Dev.
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
Sobre el new
Otra cosa que dices que me falta el "new", en realidad, no hay "new" porque no existe un método constructor, le puedes llamar new() o pepitoperez(), no me hacía falta llamarla new(), con poner un load() ya hace un efecto de new(). Que se llame new() puede ser un convenio que se use en Lua vaya usté a sabé, pero no hay constructores
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
El polimorfismo es muuucho más....
De todas formas con polimorfismo, no me refiero a "lo típico" me refería más a algo como:
Mover(X, Y)
Mover(X, Y, Z)
Mover(otro_objeto) //Mueve a la misma posición del objeto
No la típica función, que se llama igual según el objeto (polimorfismo básico). Esta implementación de arriba es una pesadilla, ya que es el programador el que tiene que reescribir las funciones, porque para Lua, son la misma.
Lua es así de limitado y si alguien realmente quiere programar en POO con un lenguaje de script, que se pase a Python. Con Lua, le será posible, epro será sólo "una ilusión". E
intentar hacer algo 100% POO en Lua se convierte en algo muy complejo,
hasta el punto de no llegar a merecer la pena.
Editado, no sé cómo leí tu comentario, pero sí has puesto lo de los parámetros (...). Pensaba que no lo habías puesto. A eso me refería, vamos un trabajo de chinos esa implementación, escribes el triple de código.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
exacto, lo de los varargs si,
exacto, lo de los varargs si, es un trabajo de chinos, con lo que el polimorfismo seria viable, pero una pesadilla xD.
es cierto k en lua es todo muy parecido y bien no es orientado a objetos, pero se puede crear fácilmente esa ilusion, pero con trabajo.
ah, no me fijé bien bien en tu code, cierto, al constructor le llamaste load :P, es k me acostumbro a mis nombres y luego me cuesta leer code ajeno xD, aunke weno, kreo k entre tu y yo ya hemos respondido suficiente a la pregunta. xD
Se puede hacer? si, se puede imitar.
Cuesta? si, un poco.
Me vale la pena? Depende de la envergadura de la clase.
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
si
pero aveces a el no le gusta como pone otro sus variables, y no he oido hablar de un Pythonplayer para el psp, digo ya se que en muchos otros lenguajes se puede hacer muchas cosas, pero estamos hablando de luaplayer para el psp, no de C, node .. ningun otro lenguaje. tu que sabes C, facil se te hace meterle a tu LuaDev las funciones que hoy en dia puedes hacer en C para el PSP, pero y si no?, tendras que ingeniartelas con lo que hay, y si vuelves a la rueda pues ni modo, es Lua y lua no es C, digo. un saludos, como estamos, bien?, sale pues, me voy por ahi, un gusto verlos.
GuinXell aprender mas...
No, y Si.
No, y Si. xDDDDDDD
Es decir, nativamente no, pero gracias a las metatablas si, así que no está muy clara la cosa.
Si te refieres a algo tipo
bateria = {
nivel = 0,
actualizar = function (self) self.nivel = funcionleerbateriaoriginal(); end ,
texto = "Bateria",
nueva = function(self,o) o = o or {}; setmetatable(o, self); self.__index = self; return o; end
}
y luego
mibateria = bateria:new();
oldbateria = bateria:new();
mibateria:actualizar(); oldbateria:actualizar();
-- hacer algo
mibateria:actualizar();
if mibateria.nivel > oldbateria.nivel then
-- estas cargando la bateria
end
Si te refieres a algo así, sí, se pueden imitar las "clases" y los objetos gracias a las metatablas.
Las herencias están permitidas, como puedes ver en este ejemplo, donde hereda las funciones de la tabla original bateria, si no las proporcionas. Es decir, también podrias hacer
otrabateria = bateria:new{ nivel = 100 };
Esta nueva var, sería otra nueva bateria, pero con su propiedad nivel a 100, y el resto de propiedades / funciones las hereda de la anterior. Espero haberte ayudado.
Un saludop. (para mas info sobre el tema, lua.org )
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
yo
te contestara, pero no es mi fuerte decr la palabras clases y sbcalses, no aprendi en los libros, es decir solo abase de observacion y comprecion, si al for se le llama ciclo bucle etc, eso me entere despues, pero te apoyo. en lua he echo muchas cosas que en C no he podido, ha, pero eso es porque de C, no "C" nada... bueno si, pero no. pero la idea es que ese metodo es el que uso para los controles de GuinXell. ya no te conectas?...
GuinXell aprender mas...
Lua traduce? xD
En lo que he leído, has creado una funcion llamada "nueva" y cuando llamas pones "new" jajaja
Lua es un lenguaje muy
Lua es un lenguaje muy versátil y ligero. Y si, es posible usarlo en programación orientada a objetos (imágenes, sonidos, fuentes y otras cosas se manejan como objetos)
COMENTARIO ERRONEO
Borren moderadores
Ok, me equivoqué
Debí decir "comparte algunas características, pero no es realmente un lenguaje orientado a objetos"
Gracias por la corrección ;)
Creo
Que no, ese sería C++.
Digo creo, deja que se pase alguien que sepa bien de esto a que confirme.
Pero
Como que va referido a objetos, que quiere decir?
A objetos?
¿?
SI
Si lua esta orientada a objetos????