Ótimo tutorial, parabéns.
MOVIDO :back:
(tempo recorde
)
Por Eventide, 22 de dez. de 2008 em Tutoriais de Scripting
info
Grupo: Conde
Registrado: 06/11/06
Posts: 850
Reputação: +6
Char no Tibia: Xearius Thor

Ótimo tutorial, parabéns.
MOVIDO :back:
(tempo recorde
)
info
Grupo: Cavaleiro
Registrado: 07/10/08
Posts: 189
Reputação: +23
Isso é um tutorial de scripting!
:withstupidsmiley:
Programação Orientada a Objetos
|Parte 2|-- Herança e utilização
Indice:
[parte 1]
Nós criamos uma classe base:
BaseClass = {}Depois nós criamos uma outra baseada:
BasedClass = {}Mas e agora como nós iremos definir essa classe como uma classe base? Nós iremos definir a metatable da classe para a classe base da seguinte maneira:
Lógica:
Representamos em Lua:
Animal = {} Animal_Metatable = { __index = Animal } Gato = {} setmetatable ( Gato, Animal ) Gato_Metatable = { __index = Animal } Cachorro = {} setmetatable ( Cachorro, Animal ) Cachorro_Metatable = { __index = Animal }Resumindo, quando há uma herança de classes, uma classe receberá todas as funções e variaveis membro da classe base.
Agora um exemplo completo de como usar o metodo:
Comida = {} Comida_Metatable = { __index = Comida } function Comida:new ( o ) return setmetatable ( o or {}, Comida_Metatable ) end function Comida:Tipo () return { 'um nada' } end function Comida:Ingredientes () return { 'nada' } end function Comida:Comer () local x = math.random ( 1, 3 ) if ( x == 1 ) then return 'Hmm que delicia!' else return 'Eca!!' end end Hamburger = {} setmetatable ( Hamburger, Comida_Metatable ) Hamburger_Metatable = { __index = Hamburger } function Hamburger:new ( o ) return setmetatable ( o or {}, Hamburger_Metatable ) end function Hamburger:Tipo () return { 'um carboidrato', 'uma proteína' } end function Hamburger:Ingredientes () return { 'pão', 'carne', 'queijo' } end Frango = {} setmetatable ( Frango, Comida_Metatable ) Frango_Metatable = { __index = Frango } function Frango:new ( o ) return setmetatable ( o or {}, Frango_Metatable ) end function Frango:Tipo () return { 'uma proteína' } end MeuHamburger = Hamburger:new () TiposDoMeuHamburger = MeuHamburger:Tipo () HTipos = '' for index, tipo in ipairs ( TiposDoMeuHamburger ) do if ( index == #TiposDoMeuHamburger and #TiposDoMeuHamburger > 1 ) then HTipos = HTipos .. ' e ' elseif ( index > 1 ) then HTipos = HTipos .. ', ' end HTipos = HTipos .. tipo end IngredientesDoMeuHamburger = MeuHamburger:Ingredientes () HIngredientes = '' for index, ingrediente in ipairs ( IngredientesDoMeuHamburger ) do if ( index == #IngredientesDoMeuHamburger and #IngredientesDoMeuHamburger > 1 ) then HIngredientes = HIngredientes .. ' e ' elseif ( index > 1 ) then HIngredientes = HIngredientes .. ', ' end HIngredientes = HIngredientes .. ingrediente end print ( 'O meu hamburger é ' .. HTipos .. ' e é feito com ' .. HIngredientes .. '.\nQue delicia! Vou come-lo!\n\n' .. MeuHamburger:Comer () .. '\n' ) SeuFrango = Frango:new() TiposDoSeuFrango = SeuFrango:Tipo () FTipos = '' for index, tipo in ipairs ( TiposDoSeuFrango ) do if ( index == #TiposDoSeuFrango and #TiposDoSeuFrango > 1 ) then FTipos = FTipos .. ' e ' elseif ( index > 1 ) then FTipos = FTipos .. ', ' end FTipos = FTipos .. tipo end IngredientesDoSeuFrango = SeuFrango:Ingredientes () FIngredientes = '' for index, ingrediente in ipairs ( IngredientesDoSeuFrango ) do if ( index == #IngredientesDoSeuFrango and #IngredientesDoSeuFrango > 1) then FIngredientes = FIngredientes .. ' e ' elseif ( index > 1 ) then FIngredientes = FIngredientes .. ', ' end FIngredientes = FIngredientes .. ingrediente end print ( 'O seu frago é ' .. FTipos .. ' e é feito com ' .. FIngredientes .. '. Ele me parece muito gostoso... Sera que eu...\n\n' .. SeuFrango:Comer () .. '\n\n OPS! Ja era!')Pronto! Espero que com esse pequeno tutorial você jé possa entender melhor como fazer uma classe em Lua e como utiliza-la.
---------------------------------------------------------------------------------------------
Fusion (tutorial)
Eventide (formatação)