Upload
rafael-pinheiro
View
215
Download
0
Embed Size (px)
Citation preview
Programação Orientada a Objetos
Aula 4Curso: Análise e Desenvolvimento de Sistemas
Professor: Rafael Wendel Pinheiro
• Roteiro da Aula
– Herança– Overloading de métodos– Construtores– Exercícios
2
Herança
3
• Herança– Em Orientação à Objetos, Herança é a
capacidade de uma classe herdar as propriedades e comportamentos públicos ou protegidos de uma outra classe.
– Esse processo visa evitar a reescrita de códigos.
4
• Herança
5
Super Classe
Sub Classe
Podemos falar que Sub Classe herda propriedades e comportamentos de Super Classe.
Super Classe: Classe mãeSub Classe: Classe filha
• Herança– Contextualizando...– Imagine que um software necessita salvar
seu quadro de funcionários. Para isso teremos a classe Funcionário.
6
• Herança– Dentro do quadro de funcionários, existem
aqueles que são gerentes. Para os gerentes, é necessário um atributo “bonus” (exclusivo de todos os gerentes).
– Como implementar então?
7
• Herança
8
Essa não seria uma boa prática, pois nem todos os funcionários possuem bônus. Somente os gerentes possuem.
• Herança
9
Também não é uma boa prática pois há muita reescrita de código. As duas classes são praticamente iguais.
• Herança– Nesse contexto, os Gerentes terão todos os
atributos de um funcionário e mais o atributo “bonus”.
– Então, poderemos criar uma relação de herança entre a classe Funcionário e a classe Gerente.
10
• Herança
11
A classe Gerente vai herdar todos os atributos da classe Funcionário
Funcionário é super classe / classe mãe de Gerente
Gerente é uma sub classe / classe filha de Funcionário
• Herança– Implementação
12
public class Funcionario { public String nome; public double salario; public int horasExtras;}
public class Gerente extends Funcionario { public double bonus;}
• Herança
13
Funcionário
Gerente
Uma classe mãe pode ter várias classes filhas, mas cada classe filha pode ter somente UMA classe mãe.
JAVA não suporta herança múltipla!Diretor Assistente
Sobrescrita (Overloading) de métodos
14
• Overloading de métodos– Para o nosso exemplo Gerente ->
Funcionário, imagine que há um método responsável por calcular e imprimir o salário total de um funcionário se baseando nos atributos salario e no número de horas extras.
15
• Overloading de métodos
16
public class Funcionario { public String nome; public double salario; public int horasExtras;
public void calcularSalarioTotal(){ double salarioTotal = salario + (horasExtras * 10); System.out.println(salarioTotal); } }
• Overloading de métodos– O método calcularSalarioTotal() será
herdado na classe Gerente. Logo, toda instância de Gerente também poderá executá-lo.
– Porém, o salário dos Gerentes têm uma particularidade, já que eles possuem um bônus no salário por exercerem a gerência.
17
• Overloading de métodos– Nesse caso, poderíamos implementar o
método calcularSalarioTotalGerente(), mas isso não impossibilitaria as instâncias de ainda executarem o método calcularSalarioTotal(), que fora herdado da classe Funcionário.
– Nesse caso, podemos sobrescrever o método calcularSalarioTotal() na classe Gerente.
18
• Overloading de métodos
19
public class Gerente extends Funcionario{ public double bonus;
public void calcularSalarioTotal(){ double salarioTotal = salario + (horasExtras * 10) + bonus; System.out.println(salarioTotal); } }
Nesse caso, o método foi sobrescrito. Logo, se o método calcularSalarioTotal() for invocado por uma instância de Gerente, esse será executado e não o da classe Funcionário.
• Exercício 1– Implemente as classes Carro e Moto, sendo que esses
possuem marca, modelo e quantCombustivel. Para esse projeto, será necessário implementar o método andar(int distancia, int velocidade). Todos os veículos consomem 1L de combustível para dar a partida antes de andar. Os carros consomem 14L/KM se estiverem abaixo de 100Km/hora e 10KM/L se estiverem acima dessa velocidade. As motos consomem 25km/L abaixo de 100km/h e 18km/L acima. Toda vez que o método for invocado, deverá ser atualizado a quantidade de combustível e imprimir as informações: Marca/Modelo: combustível inicial, distância e velocidade e combustível final..
20
Construtores
21
• Construtores– Os construtores (erroneamente chamados
de métodos construtores) é um bloco com o mesmo nome da classe que é automaticamente executado sempre que uma nova instância da classe é criada (através do comando new).
22
• Construtores– Por exemplo, quando vamos criar um
funcionário (instância da classe Funcionario), não faz sentido que esse não tenha nome. Então, podemos “forçar” que toda vez que um Funcionário for criado, ele automaticamente precisa receber um nome (que será armazenado no atributo nome).
23
• Construtores
24
public class Funcionario { public String nome; public double salario; public int horasExtras;
public Funcionario(String nome){ this.nome = nome; }
public void calcularSalarioTotal(){ double salarioTotal = salario + (horasExtras * 10); System.out.println(salarioTotal); } }
O this referencia a própria classe.
• Construtores– Dessa forma, deverá ser passado o
parâmetro nome sempre que um novo Funcionário for criado.
25
Funcionario f1 = new Funcionario(“Joao Silva”);
• Construtores– A implementação de um construtor em uma
classe mãe obriga que todas as suas classes filhas também possuam um construtor.
26
• Construtores
27
public class Gerente extends Funcionario{ public double bonus;
public Gerente(String nome){ super(nome); }
public void calcularSalarioTotal(){ double salarioTotal = salario + (horasExtras * 10) + bonus; System.out.println(salarioTotal); } }
O super referencia a classe mãe.
• Fim!
28