Ir para conteúdo

[Lua] Mega Tutorial De Oop [Avançado]


SkyDangerous

Posts Recomendados

 

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 exemplo

    nome: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ção
    mt = {__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 implicitamente
    login = 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()
  • Exemplo
    function 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.
  1. __add – gerencia operador de adição;
  2. __sub – gerencia operador de subtração;
  3. __mul – gerencia operador de multiplicação;
  4. __div – gerencia operador de divisão;
  5. __unm – gerencia operador unário de negação;
  6. __eq – gerencia operador de igualdade;
  7. __lt – gerencia operadores menor que e igual ou maior;
  8. __le – gerencia operadores menor ou igual e maior que;
  9. __pow – gerencia operador de potência;
  10. __tostring – gerencia conversão para string;
  11. __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
  • Exemplo
    function 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

 

Editado por Drazyn
Link para o comentário
Compartilhar em outros sites

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 para o comentário
Compartilhar em outros sites

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 para o comentário
Compartilhar em outros sites

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 para o comentário
Compartilhar em outros sites

  • 7 months later...

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 para o comentário
Compartilhar em outros sites

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.

Editado por Eventide
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...