quinta-feira, 19 de março de 2009

Herança

Esta semana vou falar sobre mais um tópico relativo a orientação a objetos: herança.

Herança consiste em fazer com que uma classe "herde" os atributos e métodos de uma outra classe, podendo reescrevê-los ou adicionar funcionalidade à estes.

Vamos a um exemplo prático, a partir da classe que especificamos anteriormente:

# coding: utf-8
# mamifero.py

class Mamifero:
    
    def som(self):
        print 'emitir um som'

class Homem(Mamifero):
        
    def som(self):
        print 'Oi!'

class Cachorro(Mamifero):
    
    def som(self):
        print 'Wufff! Wufff!'

class Gato(Mamifero):
    
    def som(self):
        print 'Meawwwww!'

mamifero = Mamifero()
mamifero.som()

animais = [Homem(), Cachorro(), Gato()]

for animal in animais:
    animal.som()
    

No código acima, criamos 3 classes onde estas herdam os atributos da classe "Mamifero". Neste caso estou demonstrando como podemos reescrever os métodos de uma classe para alterar o funcionamento deste numa classe mais específica.

Ao executar o código acima, no "for" mais abaixo no código, percorreremos uma lista de animais, chamando o método "som()" para cada um deles. Como cada animal foi criado a partir de uma classe específica, o método desta classe mais específica é chamado, e não o da classe mais genérica, "Mamifero". Sendo assim, o som emitido será o que nós esperamos.

Estou indo devagar nesta introdução à classes por este ser um tópico que causa muita confusão nos programadores iniciantes, mas que após um certo tempo de prática se mostra um paradigma interessante e fácil de lidar no dia a dia, tornando a abstração de problemas reais em algoritmos mais simples.

4 comentários:

Luiz Agostinho (fl0cker) disse...

Olá,

Fiquei sabendo do seu blog recentemente e após estudar todas as aulas anteriores cheguei a última e gostaria de saber se existirão outras?

Parabéns pelo blog!!! Abraço!

João Paulo Farias disse...

Olá!

Minha ideia é criar mais posts, mas estou vendo a possibilidade de criar podcasts, que acho mais interessante.

O que você acha? Um podcast com um vídeo mostrando a edição de código e uma explicação seria mais interessante que posts com apenas o texto?

--
JP

Luiz Agostinho (fl0cker) disse...

Com certeza seria interessante, mas eu mesmo prefiro o post com o código, não tenho o costume de assistir podcast's. Poderia fazer os dois, lógico, se desejar! :-)

Vitor R. disse...

Exatamente o que eu buscava. Expôs o conteúdo de maneira clara e objetiva! Obrigado!