Poccnn 385 Postado Junho 19, 2016 Share Postado Junho 19, 2016 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 More sharing options...
Felipe Moraes 151 Postado Outubro 10, 2016 Share Postado Outubro 10, 2016 @Poccnn Há como declarar a super-classe como abstrata ? Ou seja, ela não pode ser instanciada.. Ótimo tutorial, obrigado por nos trazer mais conhecimento sobre lua Link para o comentário Compartilhar em outros sites More sharing options...
Poccnn 385 Postado Outubro 11, 2016 Autor Share Postado Outubro 11, 2016 Eu não sei se dar pra fazer isso, mas irei tentar. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados