Ir para conteúdo
Entre para seguir isso  
Eventide

[nv: av]Orientação a objetos -- Parte 2

Recommended Posts

Eventide    7
Eventide

Programação Orientada a Objetos

|Parte 2|-- Herança e utilização

 

Indice:

[parte 1]

 

 

 

Herança, é uma classe que é baseada em uma classe base

 

Nós criamos uma classe base:


BaseClass = {}

Depois nós criamos uma outra baseada:


BasedClass = {}
[/code=lua] 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:
[code=lua]
setmetatable ( BasedClasse, BaseClass )

Lógica:

Classe Animal. => Classe base.

Classe Gato é um animal. => Classe base = animal.

Classe Cachorro é um animal. => Classe base = animal.

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.

 

---------------------------------------------------------------------------------------------

 

Creditos:

Fusion (tutorial)

Eventide (formatação)

Editado por Eventide

Compartilhar este post


Link para o post
Mock    32
Mock

:o

Aprovado

Compartilhar este post


Link para o post
phmarins    0
phmarins

Parabéns ein? Muito legal, isso vai ajudar muito a quem está aprendendo.

Compartilhar este post


Link para o post
MotoBoy    0
MotoBoy

:o

muit bom emsmo hein Eventide? Oo

Hail Fusion!

esse aew da pra entender bem melhor e talz..

mais melhor de baum..

agora intendi xD~~

vlw

 

flws~~

Compartilhar este post


Link para o post
PoSo    0
PoSo

Pelo menos agora veio com exemplos ! Haha

Mesmo assim, fica algo muito teórico.

Pra entender melhor, teriam que ter trabalhado com Java, por exemplo..

Abraços.

Compartilhar este post


Link para o post
Eventide    7
Eventide

realmente, em lua isso não é muito util.. (por enquanto)

 

em breve vocês verão como isso é importante.. :*

Compartilhar este post


Link para o post
PoSo    0
PoSo

Eu não disse que não é importante e nem que é inútil, pelo contrário, tenho certeza que terá extrema importância, porém, para muitos levará certo tempo a compreendê-lo...

Não quis em momento algum menosprezar seu trabalho, estou aqui apenas para parabenizar sua atitude de nos preparar para a próxima etapa.

Abraços.

Compartilhar este post


Link para o post
MotoBoy    0
MotoBoy

próxima etapa mesmo hein.. =P

agora com a nova base SVN, como o proprio GDLib (Nostradamus) disse, muitos dos scripts cairão em desuso..

isso será implantado daqui pra frente

intaum começa a aprender isso *_*

suhaushusa

flws~~

Compartilhar este post


Link para o post
Conde2    0
Conde2

CARACA !!

 

que loko pelejei pra aprende isso e ainda nao parendi

asduashduahsud

vo estuda mais pra ve se eu consigo =D

Eu nao achei muitos lugares pra usa isso ashudasduash

faço do jeito tradicional mesmo =)

muito bom o tuto !!!

dei um thanks aew no seu topico

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×