Programación orientada a objetos en Lua
Publicado: 02 Mar 2014 21:59
Hoy les traigo un pequeño código que construí para poder utilizar los objetos de AMS como 'objetos' usando el paradigma de programación orientada a objetos.
El código es algo simple y permite lo más básico para simular objetos propiedades y herencia, existen librerias mucho mas completas para hacer esto en Lua pero como no me gusta agregar demasiados módulos de terceros y me gusta hacer mis propias cosas, bueno...
Son al rededor de 30 lineas de codigo que les permiten crear un objeto, asignarle métodos, propiedades y crear objetos que hereden los métodos y propiedades de este.
Para los que no conozcan la programación orientada a objetos pueden ver el siguiente ejemplo en el que creamos un Humano, luego un Programador y por ultimo una persona que obtiene las caracteristicas de los 2 anteriores:
Crear humanos puede no parecerle util a muchos pero es una forma fácil de entenderlo.
También dejo un ejemplo de utilidad; una APZ en la que podrán ver mi código en acción creando una clase llamada botón y cambiandole las propiedades en tiempo de ejecución. Si alguna vez quisieron hacer una aplicación que soporte plugins o addons este sería un buen comienzo para ustedes.
thoop.apz
Antes que lo digan...
El código puede ser mejorado y gracias a la versatilidad de Lua podemos agregar propiedades privadas y publicas y más cosas utilizando metatablas. Si alguien está más interesado en esto y necesita una solución más completa puede utilizar el modulo LOOP o leer los documentos que hay en la wiki de Lua sobre metatablas.
Pueden leer el post anterior para hacer un uso más cómodo de lo explicado acá:
http://amsspecialist.com/viewtopic.php?f=12&t=2558
Espero les sirva, saludos
El código es algo simple y permite lo más básico para simular objetos propiedades y herencia, existen librerias mucho mas completas para hacer esto en Lua pero como no me gusta agregar demasiados módulos de terceros y me gusta hacer mis propias cosas, bueno...
Son al rededor de 30 lineas de codigo que les permiten crear un objeto, asignarle métodos, propiedades y crear objetos que hereden los métodos y propiedades de este.
Ver el modulo: thoop.lua
Para los que no conozcan la programación orientada a objetos pueden ver el siguiente ejemplo en el que creamos un Humano, luego un Programador y por ultimo una persona que obtiene las caracteristicas de los 2 anteriores:
-- Creamos la clase Humano:
Humano = class {
-- Nuestro Humano tendrá las siguientes propiedades:
Nombre, Edad = 0, Profesion,
-- Vamos a asignarle un método que servirá para acceder a estas propiedades. Será 'get'
get = function (self, sval)
return self[sval]
end
}
-- Creamos una clase derivada de nuestro Humano
Programador = Humano {
-- Programador heredará las propiedades de Humano y tendrá una más que será "Lenguajes"
Profesion = "Programador", Lenguajes
}
-- Creamos una Persona (objeto) que derivará de la clase Programador...
TheDary = Programador { -- TheDary es un programador pero sigue siendo Humano y podemos asignarle un nombre y una edad:
Nombre = "Dario Cano", Edad = 17, Lenguajes = "LUA, HTML, JS, C++"
}
-- Podemos acceder a las propiedades de nuestros objetos de la siguiente forma:
sName = TheDary.Nombre
sEdad = TheDary.Edad
sProf = TheDary.Profesion -- Aunque no definimos la profesion de TheDary, el objeto deriva de la clase Programador por lo tanto él es un Programador
-- Tambien podemos acceder a las propiedades con el método "get" que tiene la clase Humano:
sLangs = TheDary:get("Lenguajes")
print(sName.."\n"..sEdad.."\n"..sProf.."\nLenguajes: ".. sLangs)
-- Podemos asignarle más métodos a nuestros objetos:
function Humano:set (self, sval, sdat) -- El método "set" servirá para cambiar propiedades
self[sval] = sdat
end
TheDary:set("Profesion", "Programador/Desarrollador")
print("\nNueva profesion: ", TheDary:get("Profesion"))
Crear humanos puede no parecerle util a muchos pero es una forma fácil de entenderlo.
También dejo un ejemplo de utilidad; una APZ en la que podrán ver mi código en acción creando una clase llamada botón y cambiandole las propiedades en tiempo de ejecución. Si alguna vez quisieron hacer una aplicación que soporte plugins o addons este sería un buen comienzo para ustedes.
thoop.apz
Antes que lo digan...
El código puede ser mejorado y gracias a la versatilidad de Lua podemos agregar propiedades privadas y publicas y más cosas utilizando metatablas. Si alguien está más interesado en esto y necesita una solución más completa puede utilizar el modulo LOOP o leer los documentos que hay en la wiki de Lua sobre metatablas.
Pueden leer el post anterior para hacer un uso más cómodo de lo explicado acá:
http://amsspecialist.com/viewtopic.php?f=12&t=2558
Espero les sirva, saludos