Ir para conteúdo

Herança em poo lua


Poccnn

Posts Recomendados

Gostaria apenas de passar um pouco do que aprendi estudando simulação de poo em lua.

O que vou citar aqui é, à herança herdada por classes.

 

Primeiro, criamos um método de classe.

 

Citar


function newClass(class,pai) 
   return setmetatable(class, {__index = pai or class}) 
end 

 

Aqui eu usei esse método que herda da classe 'pai' caso exista.

 

 

Citar

local Item = newClass({}) 

function Item:setName(name) 
   self.name = name 
end 

function Item:getName() 
   return self.name 
end 

 

Agora eu criei um objeto usando o método de classe que declarei acima. 

Criei duas funções para ela.

Veja que ele não tem uma classe pai declarada, portanto, não vai receber nada.

 

 

Citar

local Shield = newClass({},Item) 

function Shield:setDef(def) 
   self.def = def 
end 

function Shield:getDef() 
   return self.def 
end 

 

Agora criei outro objeto e novamente declarei duas outras funções diferentes para ele.

Veja que ele usa como classe pai 'item', portanto, herda dessa classe os metodos declarados na mesma.

 

 

Citar

local Weapon = newClass({},Shield) 

function Weapon:setAttack(attack) 
   self.attack = attack 
end 

function Weapon:getAttack() 
   return self.attack 
end 

 

Mais um objeto criado com o mesmo método dos demais e com duas funções diferentes declaradas para ela.

Veja que ele usa como classe pai 'shield', ou seja, ela herda os métodos declarados nessa classe. 

 

 

Citar

-- usando as funções declardas para cada objeto

Item:setName('armas e escudos') 
Shield:setDef(10) 
Weapon:setAttack(10) 

 

Cada função usa suas funções declaradas para a mesma.

 

 

Agora veja o que é à herança herdada de outras classes.

Citar

Weapon:setName('sword') -- setName é uma função declarada em item que pode ser usado por seus descendentes (no caso: shield e weapon).


Weapon:setDef(5) -- setDef é uma função declarada em shield que pode ser usada por seus descendentes (no caso: weapon).

 

Agora veja o que fica protegido,  ou seja, não pode ser usado por tais objetos.

Citar

--Item:setDef(10) -- Erro, def não pode ser implantado em item, porquê def foi declarado em shield que é descendente de item. 


--Shield:setAttack(10) -- Erro, attack não pode ser implantado em shield, porquê attack foi declarado em weapon que é descendente de shield. 

 

Demonstrando a herança de funções que foram declaradas em classes anteriores:

Citar

print(Weapon:getName(),Weapon:getDef()) -- getDef e getName não são funções declaradas em weapon, mas podem ser usadas por ele, pois são descendentes. 

 

Espero que tenha ficado claro como funciona a herança em poo lua.

Link para o comentário
Compartilhar em outros sites

  • 3 months later...
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...