Prévia do material em texto
Herança Python Prof. Anderson Barroso anderson.santos@souunit.com.br Herança - conceito • O principal mecanismo do recurso da herança é permitir que uma classe possa ser derivada de uma classe base, permitindo que um comportamento mais especifico seja implementado na subclasse; • A herança, é também uma importante característica para o reuso de algoritmos e evitar códigos redundantes que possam tornar difícil a manutenção da base de códigos. • Declarar uma classe e, entre parênteses, outra classe, significa que a externa herda da interna: • Classe1(Classe2): • Classe1 herda de Classe2 Herança - exemplo Herança – Continuando com o nosso Banco • Como toda empresa, nosso banco possui funcionários. Um funcionário tem um nome, um cpf e um salário. Vamos modelar a classe Funcionário; • Além de um funcionário comum, há também outros cargos, como os gerentes; • Os gerentes guardam a mesma informação que um funcionário comum, mas possuem outras informações próprias, além de ter funcionalidades um pouco diferentes; • Um gerente no nosso banco possui também uma senha numérica que permite o acesso ao sistema interno do banco, além do número de funcionários que ele gerencia. Herança – Continuando com o nosso Banco Sem Herança Precisamos repetir todos os atributos e características de Funcionário em Gerente Herança – Continuando com o nosso Banco Com Herança Só precisamos criar os atributos e características específicos de Gerente Herança – Continuando com o nosso Banco • Como a classe Gerente já possui um construtor __init__() com seus atributos, o método da classe Funcionário é sobrescrito pelo Gerente; • Para Gerente acessar as características de Funcionário (nome, cpf e salário, por exemplo) devemos inicializar a classe Funcionário dentro do construtor de Gerente. Herança – Continuando com o nosso Banco • Dizemos que a classe Gerente herda todos os atributos e métodos da classe pai Funcionário; • Na classe filha, Gerente, precisamos garantir que todos os atributos de Gerente e do seu pai serão inicializados; • Para isso, ao instanciar um Gerente, precisamos passar os atributos de Funcionário também. Herança – Continuando com o nosso Banco • Agora vem a SACADA da Herança: • Não precisamos inicializar os atributos NOME, SENHA e SALARIO dentro de Gerente, apenas chamamos o construtor de Funcionário e passamos os 3 atributos como parâmetro. • Todo método da classe pai que quisermos chamar, DEVEMOS utilizar o modificador chamado super(). Toda vez que uso super() em uma classe filha, estou me referindo a algo da classe pai. Herança – Continuando com o nosso Banco • Podemos ter uma classe Sub-Gerente herdando de gerente que por sua vez herda de Funcionário; • Isso quer dizer que Sub-Gerente também tem NOME, CPF e SALÁRIO de funcionário; SENHA e QTD_FUNCIONÁRIOS de Gerente; • Além disso, pode ter seus atributos próprios. A lógica será a mesma anterior. • Vamos tentar? Herança – Avô, Pai e Filho Avô Pai Filho Herança – Por que reescrever métodos? • Todo fim de ano, os funcionários do nosso banco recebem uma bonificação; • Os funcionários comuns recebem 10% do valor do salário e os gerentes, 15%. • A classe Funcionário teria o seguinte método: Pergunta: A Classe Gerente poderia usar esse método do seu pai ou teria que ter o seu próprio método? Herança – Por que reescrever métodos? • No Python, quando herdamos um método, podemos alterar seu comportamento. Podemos reescrever (sobrescrever, override) este método, assim como fizemos com o construtor __init__: Herança – Vamos colocar o método imprimir() dentro das classes • Agora vamos criar os métodos imprimir nas classes: Avô Pai Filho Herança Múltipla • E se quisermos que uma classe filha herde de mais de uma classe Pai? • Imagine que temos uma classe Diretor e outra classe Presidente; • No nosso banco temos também o cargo Diretor-Presidente, logo teremos a classe Diretor-Presidente; • Podemos dizer que essa classe herda características de Presidente e de Diretor, além de ter as suas próprias. • Em linguagens como JAVA não temos o conceito de Herança Múltipla. • Mais em: https://www.caelum.com.br/apostila-python-orientacao- objetos/heranca-multipla-e-interfaces/ https://www.caelum.com.br/apostila-python-orientacao-objetos/heranca-multipla-e-interfaces/ Exercícios - 01 • Criar uma classe chamada Animal • A classe Animal deve conter os seguintes atributos: • nome; • raça; • idade; • Criar um construtor passando nome, raça e idade do animal; • Criar os métodos get e set necessários para os atributos acima; • Criar um método imprimir(), cuja saída deve ser a impressão dos atributos do animal como no exemplo abaixo: Nome : XXXXX Raça : YYYYY Idade : 0 Exercícios - 01 • Criar uma classe chamada Passaro • A classe Passaro deve herdar da classe Animal e tem seguinte atributo bolleano: • cantador; • Criar um construtor passando nome, raça, idade e a característica cantador do pássaro (chamar o construtor da classe Animal); • Criar os métodos get e set necessários para o atributo adicional acima; • Criar um método imprimir() que deve chamar o método imprimir da classe Animal e imprimir o atributo adicional (cantador); a saída deve ser a impressão de todos os atributos do pássaro como no exemplo abaixo: Nome : Piupiu Raça : Canário Belga Idade : 1 Cantador : Sim Exercícios - 01 • Criar uma classe chamada Cachorro • A classe Cachorro deve herdar da classe Animal, acrescentando o seguinte atributo bolleano: • caçador; • Criar um construtor passando nome, raça, idade e a característica caçador do cachorro (chamar o construtor da classe Animal); • Criar os métodos get e set necessários para o atributo adicional acima; • Criar um método imprimir() que deve chamar o método imprimir da classe Animal e imprimir o atributo adicional (caçador); a saída deve ser a impressão de todos os atributos do cachorro como no exemplo abaixo: Nome : Totó Raça : Vira-Lata Idade : 4 Caçador : Não Exercícios - 01 • Criar um programa principal chamado TestaAnimal • Deve instanciar um Animal chamado “Genérico” sem raça e idade igual a 0, em seguida imprimir (método imprimir() de Animal) os dados deste animal como no exemplo abaixo: Nome : Genérico Raça : Sem Raça Idade : 0 • Instanciar um Cachorro “Totó” da raça Labrador com 2 anos de idade, em seguida imprimir (método imprimir() de Cachorro) os dados deste cachorro como no exemplo abaixo: Nome : Totó Raça : Labrador Idade : 2 Caçador : Muito Bom • Exercícios - 01 • Instanciar um Pássaro “Kaká” da raça Canário Belga com 1 ano de idade, em seguida imprimir (método imprimir() de Passaro) os dados deste pássaro como no exemplo abaixo: Nome : Bichano Raça : Labrador Idade : 2 Cantador : Excelente