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

Post on 10-Feb-2017

212 views 0 download

Transcript of 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

• 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