Ir para conteúdo

Posts Recomendados

Isso é um tutorial de scripting!



:withstupidsmiley:

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 = {}

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:

		 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)



Link para o comentário
https://xtibia.com/forum/topic/103359-programa%C3%A7%C3%A3o-orientada-a-objetos-parte-2-lua/
Compartilhar em outros sites

×
×
  • Criar Novo...