Programação Orientada a Objetos
[Lua]


A orientação a objetos, também conhecida como Programação Orientada a Objetos (POO) ou ainda em inglês Object-Oriented Programming (OOP) é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos.
Em alguns contextos, prefere-se usar modelagem orientada ao objeto, em vez de programação.
A análise e projeto orientados a objetos têm como meta identificar o melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se dá através do relacionamento e troca de mensagens entre estes objetos.
Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software. Cada classe determina o comportamento (definidos nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos.
:slap:
ahn?
Traduzindo:
É uma forma de organizar e programar seus codes de forma diferente da habitual. Nessa forma são definidas classes e seus atributos e objetos pertencentes a essa classe, "fragam" esses atributos.
E como fazer isso em lua?
segue o tutorial feito pelo Fusion(graças a insistentes pedidos meus):
Tutorial:
Como eu(fusion) vi que varias pessoas estão tendo duvidas em relação a 'Lua orientada a objetos', eu resolvi criar um tutorial para esclarece-las.
Primeiramente, o que a final de contas é 'Lua orientada a objetos'?
É nada mais do que um objeto que é criado a partir de uma 'classe' e que contém informações próprias.
E como podemos criar essas tal 'classes'?
Bom, existem vários métodos mas o mais utilizado é:
Class = {}
Mas atenção, não é só isso! Uma classe precisa de um 'banco de dados' para armazenar suas características. Para isso, criamos uma metatable:
Class_Metatable { __index = Class }
Mas e agora? Como que nós podemos usar essas 'classes' para criar objetos?
Para criar um objeto com a 'classe', nós devemos criar uma nova instância dela. Por exemplo:
Object = Object or {} Object = setmetatable ( Object, Class_Metatable )
Pronto. Uma nova instância foi criada a partir de uma classe.
Mas há outro modo também que é bem mais usado. Criar uma instância por meio de uma função na class normalmente denominada 'new'. Ela fica mais ou menos assim:
function Class:new () return setmetatable ( {}, Class_Metatable ) end
Caso você queira já definir características nessa função, faça da seguinte maneira:
function Class:new ( X ) return setmetatable ( { X = X }, Class_Metatable ) end
Ok. Já sabemos como criar classes, instâncias mas e quanto as funções dessa classe e como usá-las?
Para criar uma função nesta 'classe' você precisa fornecer a informação para o programa:
function Class:Function ( Arguments ) -- Stuff end
Facil não? Pois é mas é agora que entra a parte que deve confundir mais as pessoas: como usá-las. Na verdade essa é uma parte bem simples. Você deve fornecer a instância que esta sendo usada ( nesse caso 'Object' ) e depois o comando:
Object:Function ( Arguments )
não entendeu como funciona os objetos? observe o desenho:
E como podemos criar novas características nessa 'classe'?
Em Lua se você usar uma variável inexistente, ela será criada instantaneamente e usada. Nas 'classes' Não é diferente. Para criar novas variáveis para a classe basta adicionar um 'self' na frente. Desse modo:
functon Class:Function ( Arguments ) self.name = Arguments.name end
Pois é. Mamão com açúcar. Mas e para utiliza-las? Do mesmo jeito. Para utilizar essas variáveis você precisa apenas que colocar um 'self' na frente.
Agora ai vai um exemplo de criação e utilização de uma classe:
Class = {} Class_Metatable = { __index = Class } function Class:new () return setmetatable ( {}, Class_Metatable ) end function Class:SetName ( name ) self.name = name end function Class:GetName ( ) return self.name end Object = Class:new () Object:SetName ( 'MyClass' ) print ( Object:GetName )
Pronto! Espero que com esse pequeno o tutorial você já possa entender melhor como fazer uma classe em Lua e como utiliza-las.