SkyDangerous 395 Posted October 11, 2012 Share Posted October 11, 2012 (edited) Lua Orientada a Objetos Avançado ! Lua é uma linguagem de programação(Sério??) , sua orientação a tabelas, meta tabelas, meta métodos é bem prático e versátil. * Meta tabelas * O que é uma meta tabelas? São tabelas que controla o comportamento de outras estruturas de dados, ela nos permiti alterar o comportamento da tabela. Exemplo, se colocar o código abaixo num interpretador Lua. nome = "Xtibia Forum de Tibia"print(nome:upper()) A saída será:XTIBIA FORUM DE TIBIA Porém, da onde saiu esse upper()? Vejamos..print(getmetatable(nome)) Sua saída será:table: 0033BE78 Uma meta tabela associado a string !!, vejamos:print(getmetatable(nome).__index == string) Sua saída será:true ou seja concluímos que a chave __index da meta tabelas é módulo de uma string: como exemplonome:upper() == nome.upper(nome) == string.upper(nome) *Chave __index* A chave __index da meta tabela pode ser uma tabela ou uma função e indica o que deve acontecer quando houver uma tentativa de leitura de uma chave que a estrutura de dados original não possuía Se o objeto referenciado pela variável nome(uma string) não possui a chave upper, então quando tentamos acessar esta chave, o sistema procura pela chave na tabela referenciada pela chave __index da meta tabela, que é uma string Caso queiramos que ela retorna um valor da tabela ASCII, podemos utilizar está funçãomt = {__index = function (t, k)return k:byte()end}var = setmetatable({b}, mt)print(var) Vale lembrar que essa chave é importante para orientação a objetos. * Classes e Construtores * Em orientação a objeto, classe é um molde para a criação de novos objetos, em Lua,classe em geral é uma meta tabela onde a chave __index aponta para ela própria. Exemplo abaixo:mt = {}mt.__index = mt Meta tabelas se torna um molde para as outras tabelas. As tabelas que fazem o uso deste molde são chamadas de instâncias. As funções de uma classe/instância são chamadas de métodos e sempre recebem implícita ou explicitamente como primeiro argumento a classe ou instância que faz a chamada.Lua pode chamar um método passando a instância (ou classe) implícita ou explicitamente Exemplo de uma chamada explícita:login = login.lower(login) Exemplo de uma chamada , passando a instância implicitamentelogin = login:lower() Existe um método especial chamado construtor, que é executado sempre que uma nova instância é criada. Vejamos:function mt:new(o)o = o or {}return setmetatable(o, self)end O construtor do código a cima recebe como um argumento uma tabela que servirá de referência para a criação da instância. O primeiro comando garante que o argumento o é uma tabela, o segundo associa a meta tabela ao objeto, retornando-o. Como new()é um método de classe, self representa a classe. Se fosse um método de instância, self representaria a instância. * Outros métodos * Podemos criar outros métodos. Por exemplo queremos criar um somatório dos elementos números da tabela seja retornado para o método soma() Exemplofunction mt:soma()local s = 0table.foreachi(self, function (i, e)if type(e) == "number" thens = s + eendend)return send Podemos criar um objeto com alguns valores números e retornar seu somatório:var = mt:new { 2, 4, 6 }ret = var:soma()print (ret) Que imprimirá:12 *Meta Métodos* Apenas irei citar alguns, caso tenha curiosidade procure sobre.__add – gerencia operador de adição; __sub – gerencia operador de subtração; __mul – gerencia operador de multiplicação; __div – gerencia operador de divisão; __unm – gerencia operador unário de negação; __eq – gerencia operador de igualdade; __lt – gerencia operadores menor que e igual ou maior; __le – gerencia operadores menor ou igual e maior que; __pow – gerencia operador de potência; __tostring – gerencia conversão para string; __tonumber – gerencia conversão para número. * Herança * Queremos outra classe que além de devolver a soma, também devolva o produto, mas sem modificar a classe original. Para isso herdamos uma nova classe, para isso precisamos instanciar a classe pai normalmente, modificar a instância e usar esta instância como uma nova classe Exemplofunction nmt:produto()local p = 1]table.foreachi(self, function (i, e)if type(e) == "number" thenp = p * eendend)return pendvar = nmt:new { 2, 4, 6 }[size=4]print(var:soma(), var:produto()) Imprimirá:48 Há outra forma mais avançada de herança, chamada herança múltipla, que acontece quando uma classe é herdeira de mais de uma classe pai.Fim. Mega Tutorial OOP em Lua Edited August 20, 2016 by Drazyn Link to comment Share on other sites More sharing options...
patrickjean 37 Posted October 11, 2012 Share Posted October 11, 2012 Topico Muito bom! Explica tudo certinho! REP ++! ;D Link to comment Share on other sites More sharing options...
Overloker 100 Posted October 11, 2012 Share Posted October 11, 2012 Perfeito, tudo organizado e bem explicado. Tenho curiosidade sobre "lua", quem sabe um dia não me dedique, parabéns pelo tópico. Reputado Link to comment Share on other sites More sharing options...
SkyDangerous 395 Posted October 11, 2012 Author Share Posted October 11, 2012 Obrigado a todos. Eu retirei as informações de um blog, porém eu rescrevi tudo, arrumei alguns erros e testei os códigos. Link to comment Share on other sites More sharing options...
DragonTheory 2 Posted October 11, 2012 Share Posted October 11, 2012 Muito bom,prima coisa que gosto em você ajudou muito aqui em algumas duvidas. Rep+ Link to comment Share on other sites More sharing options...
SkyDangerous 395 Posted October 11, 2012 Author Share Posted October 11, 2012 ~D Vlw, vou fazer vários tutoriais de lua. ai depois eu faço uns de tibia também ;D Link to comment Share on other sites More sharing options...
20cm 70 Posted October 11, 2012 Share Posted October 11, 2012 Apesar de parecer que foi traduzido no google, é legal o tutorial, e também poste os créditos Fora isso, legal... Link to comment Share on other sites More sharing options...
SkyDangerous 395 Posted October 11, 2012 Author Share Posted October 11, 2012 Apesar de parecer que foi traduzido no google, é legal o tutorial, e também poste os créditos Fora isso, legal... Não foi traduzido, o tutorial que eu encontrei está em português. Porém ele está muito complicado de se intender, e tive tentei melhorar ele, além de retirar pequenos erros. Link to comment Share on other sites More sharing options...
SkyLigh 453 Posted October 11, 2012 Share Posted October 11, 2012 Parabéns Sky Otimo Tutorial Link to comment Share on other sites More sharing options...
EdMignari 187 Posted October 12, 2012 Share Posted October 12, 2012 Só eu não entendi? O que é uma meta tabela? São tabelas que controlam o comportamento de outras estruturas de dados, ela nos permie alterar o comportamento da tabela. Mas o que é a tabela que a meta tabela controla seu comportamento? Bem...Não sei se é muito diferente do que eu entendo por POO ou se tem muita lacuna no tutorial. Mesmo assim parabéns. Link to comment Share on other sites More sharing options...
Oneshot 732 Posted October 12, 2012 Share Posted October 12, 2012 Seu tutorial e sua iniciativa foram legais, mas o que ele tem de colorido, ele não tem de conteúdo. Desculpe a crítica, mas analisando seu tutorial, acho ele bastante superficial, você dá voltas e voltas, define os meta-métodos e só. Você podia ter começado dizendo que Lua não possui orientação a objetos e o uso das meta-tabelas é só um modo de contornar isso. Para mim, este é mais uma definição de meta-tabelas do que um tutorial de orientação a objetos, uma vez que uma aula/tutorial voltado a esse tema, deve girar em torno da definição de classe, atributo e método. Mesmo assim, não é sua culpa, pois você mesmo disse que adaptou o conteúdo de um blog e tal. Abração. Link to comment Share on other sites More sharing options...
Fuptcumpfoult 0 Posted May 19, 2013 Share Posted May 19, 2013 These reading glasses available on the internet are crafted out partying about high-quality materials all of which bring to the table all your family durability and comfort. Plus going to be the camera lenses concerning all these glasses come so that you have different coatings often the foremost you can use and popular among them because they are the UV coating. The UV coating ensures that for those times when all your family are wearing many of these reading glasses, your with what they see are given going to be the maximum safe practices back and forth from going to be the harmful ultra azure radiations having to do with going to be the rays of the sun As significantly more plus a good deal more a period of time are today being that they are spent on trips UV coating has ceased being aware of an all in one up to you and has turned out to be into a multi functional basic necessity as well as each of these reading glasses. Apart both to and from going to be the UV coating, anti-glare coating also works well for offering your family an all in one a lot better talent Reading glasses most of the time have camera lenses leaving this anti-glare coating, because a resource box may be the a common thing for more information on round trip drive your car besides the fact that wearing your pair to do with reading glasses or otherwise reading an all in one pick out however relaxing at going to be the beach. Anti glare coating makes many of these reading glasses less reflective to understand more about light,and as such ensuring maximum relevant light weight gets into your eyes plus this be sure at the back of an all in one considerably better the view of the Finally, anti as high as scratch coating, adds durability plus electrical power to understand more about going to be the camera lenses protecting the two the lenses and your their vision back and forth from made up dangers slightly like air - borne debris or perhaps powdered ingredients and pollutants. This coating is the fact that the culprit and then for an all in one a considerable ways lasting eyewear experience in the field. sunglass computer glasses buy glasses online sunglasses ray ban glasses Link to comment Share on other sites More sharing options...
Eventide 23 Posted May 21, 2013 Share Posted May 21, 2013 (edited) Eu já tinha feito um tutorial sobre isso há muito tempo atrás, mas o seu com certeza está bem melhor formatado, entretanto poderia ter dado mais exemplos práticos e explicado mais detalhadamente, pra quem achou difícil usar as metatables, existem algumas bibliotecas que facilitam o trabalho com POO em Lua: classlib: http://lua-users.org...eritanceClasses http://code.google.c.../downloads/list LOOP: http://loop.luaforge.net/ Ambas vem junto com o Lua For Windows, mas requerem instalação para serem usadas em otserv. obs: nunca usei nenhuma das duas pois acho desnecessário usar classes em Lua, use por sua conta em risco. Edited May 21, 2013 by Eventide Link to comment Share on other sites More sharing options...
Recommended Posts