Aula 4 herança, sobrescrita de métodos, construtor

28
Programação Orientada a Objetos Aula 4 Curso: Análise e Desenvolvimento de Sistemas Professor: Rafael Wendel Pinheiro

Transcript of Aula 4 herança, sobrescrita de métodos, construtor

Page 1: Aula 4   herança, sobrescrita de métodos, construtor

Programação Orientada a Objetos

Aula 4Curso: Análise e Desenvolvimento de Sistemas

Professor: Rafael Wendel Pinheiro

Page 2: Aula 4   herança, sobrescrita de métodos, construtor

• Roteiro da Aula

– Herança– Overloading de métodos– Construtores– Exercícios

2

Page 3: Aula 4   herança, sobrescrita de métodos, construtor

Herança

3

Page 4: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 5: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 6: Aula 4   herança, sobrescrita de métodos, construtor

• Herança– Contextualizando...– Imagine que um software necessita salvar

seu quadro de funcionários. Para isso teremos a classe Funcionário.

6

Page 7: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 8: Aula 4   herança, sobrescrita de métodos, construtor

• Herança

8

Essa não seria uma boa prática, pois nem todos os funcionários possuem bônus. Somente os gerentes possuem.

Page 9: Aula 4   herança, sobrescrita de métodos, construtor

• 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.

Page 10: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 11: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 12: Aula 4   herança, sobrescrita de métodos, construtor

• 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;}

Page 13: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 14: Aula 4   herança, sobrescrita de métodos, construtor

Sobrescrita (Overloading) de métodos

14

Page 15: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 16: Aula 4   herança, sobrescrita de métodos, construtor

• 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); } }

Page 17: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 18: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 19: Aula 4   herança, sobrescrita de métodos, construtor

• 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.

Page 20: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 21: Aula 4   herança, sobrescrita de métodos, construtor

Construtores

21

Page 22: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 23: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 24: Aula 4   herança, sobrescrita de métodos, construtor

• 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.

Page 25: Aula 4   herança, sobrescrita de métodos, construtor

• 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”);

Page 26: Aula 4   herança, sobrescrita de métodos, construtor

• 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

Page 27: Aula 4   herança, sobrescrita de métodos, construtor

• 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.

Page 28: Aula 4   herança, sobrescrita de métodos, construtor

• Fim!

28