O documento discute programação orientada a objetos, abordando conceitos como herança, sobrescrita de métodos e construtores. A herança permite que uma classe filha herde atributos e comportamentos de uma classe mãe, evitando reescrita de código. A sobrescrita de métodos possibilita personalizar o comportamento de um método herdado. Construtores garantem que atributos obrigatórios sejam definidos ao criar um objeto.
4. • 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
5. • Herança
5
Super Classe
Sub Classe
Podemos falar que Sub Classe herda
propriedades e comportamentos de
Super Classe.
Super Classe: Classe mãe
Sub Classe: Classe filha
6. • Herança
– Contextualizando...
– Imagine que um software necessita salvar
seu quadro de funcionários. Para isso
teremos a classe Funcionário.
6
7. • 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
8. • Herança
8
Essa não seria uma boa prática, pois nem todos os funcionários
possuem bônus. Somente os gerentes possuem.
9. • 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.
10. • 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
11. • 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
12. • 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;
}
13. • 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
15. • 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
16. • 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);
}
}
17. • 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
18. • 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
19. • 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.
20. • 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
22. • 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
23. • 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
24. • 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.
25. • 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”);
26. • 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
27. • 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.