Programação Orientação a Objetos - Herança

31

Transcript of Programação Orientação a Objetos - Herança

Herança

Vamos imaginar o funcionamento do sistema acadêmico do Unipê, que controla o cadastro de alunos, professores e

funcionários.

Herança 4

Vamos imaginar o funcionamento de um sistema acadêmico do Unipê, que controla o cadastro de alunos, professores e funcionários

Herança 5

Conceito

• Imagine se um dia precisarmos adicionar uma novainformação(CPF, por exemplo), para todas as Pessoas docontrole acadêmico?

• Precisaríamos ir de classe em classe adicionando ainformação do CPF.

Herança 6

Conceito

• Ao modelar um conjunto de classes, podemos encontrarclasses semelhantes na estrutura e no comportamento.

• Existe uma maneira, em Java, de relacionarmos uma classede tal maneira que uma delas herda tudo que a outra tem.

Herança 7

Então, como implementar?

•A ideia central de herança é que novas classes são criadas a partir de classes já existentes.• Subclasse herda de uma Superclasse• Subclasse é mais específica que a Superclasse

•Herança é uma técnica para prover suporte a especialização• Classes mais abaixo: especializadas• Classes mais acima: genéricas

Herança 8

RepresentaçãoPessoa

-nome-email-telefone-idade-sexo

Herança 9

Professor

-salario-disciplina

Aluno

-matricula-notas

Funcionario

-salario

Em todo momento que criarmos um objeto do tipo Professor, ou Aluno, ou Funcionário, este objeto possuirá também os atributos e métodos definidos

na classe Pessoa, pois agora ele é uma Pessoa

Sobreposição

• Pode-se modificar algum método da minha superclasse?

Sim, através da sobreposição!

• Métodos implementados previamente em uma superclasse podemser redefinidos por qualquer subclasse

Herança 10

Para isso, mantém-se a mesma assinatura do método herdado, redefinindo apenas o corpo do

método

Tipos de Herança

Herança pura métodos genéricos são sobrepostos

Extensão novos comportamentos são adicionados nas classes de

especialização (métodos genéricos herdados)

• Por exemplo:

Herança 11

Forma

+desenha()+apaga()

Quadrado

+desenha()+apaga()

Circulo

+desenha()+apaga()+defineRaio()

HerançaPura

Extensão

Posso herdar de várias Classes?

•Cada subclasse possui uma única superclasse • A isso, chamamos de herança simples• Em algumas linguagens, é possível herdar a partir de

diversas superclasses (como em C++)• Java não permite herança múltipla com classes

Herança 12

Recapitulando...

• Se B é uma subclasse de A, então: • Os objetos de B suportam todas as operações suportadas

pelos objetos de A, exceto aquelas que foram redefinidas • Os objetos de B incluem todas as variáveis de instância de

B + todas as variáveis de instância de A • Métodos declarados como private não serão herdados

• Construtores também não são herdados • Serão chamados (em cascata) na construção de objetos

especializados(super()).

Herança 13

Como acessar os atributos que herdamos?

Herança 14

Como acessar os atributos que herdamos?

• Se deixarmos os atributos como public, qualquer um poderia alteraros atributos dos objetos deste tipo.

• Existe um outro modificador de acesso, o protected, que fica entreo private e o public. Um atributo protected só pode ser acessado(visível) pela própria classe e por suas subclasses .

Herança 15

Como implementar nosso primeiro exemplo?

Herança 16

Antes de aplicar Herança

Herança 17

Depois

Herança 18

Exercício 1

A) Seguindo o modelo do exemplo, vamos criar uma classechamada Pessoa. Ela deverá ter as características nome,email, telefone, idade, sexo.

B) Teremos também 3 tipos de pessoas, como: Aluno que teráainda Matricula e a Nota. Professor terá como atributosadicionais seu Salário e Disciplina. E a Secretária terá comoadicional apenas o salário. Crie uma classe para cada um.

C) Por ultimo, vamos criar uma classe para testar cada um dosatributos.

Herança 19

• Vamos supor um sistema de um banco, que controle seus clientes e suas contas...

Estudo de Caso 2 > Sistema Bancário

Conta Poupança

• Cliente

• Número

• DataAbertura

• Saldo

• TaxaRendimento

• Creditar

• Debitar

• CreditarRendimento

Conta Corrente

• Cliente

• Número

• DataAbertura

• Saldo

• TaxaManutencao

• TaxaOperacao

• Creditar

• Debitar

• DebitarManutenção

Sistema Bancário > SisBank

Conta Poupança Conta Corrente

Sistema Bancário > SisBank

O que existe de semelhante entre estes dois?

R: São Contas!

Conta Poupança• Cliente

• Número

• DataAbertura

• Saldo

• TaxaRendimento

Creditar

Debitar

CreditarRendimento

Conta Corrente• Cliente

• Número

• DataAbertura

• Saldo

• TaxaManutencao

• TaxaOperacao

Creditar

Debitar

DebitarManutenção

Sistema Bancário > SisBank

• Com a herança é possível identificar que as classes ContaCorrente e ContaPoupança irão aproveitar tudo que está na classe Conta!

Implementando Herança

•Mas e o Construtor da subclasse, Como fica?

•Precisamos chamar o construtor da superclasse!• Operador: super

Implementando Herança

•Detalhe importante:•A classe Conta pode existir no nosso

sistema bancário?

SisBank

•Detalhe importante:•A classe Conta pode “existir” no nosso

sistema bancário?

•R: Não, essa é uma classe que apenas reúne características semelhantes entreContaCorrente e ContaPoupanca. A classe Conta não pode ser instanciada!

SisBank

•Como implementar para que a classe Conta não possa ser instanciada?•R: Definindo-a como “classe abstrata”!

Classe Abstrata

•O que é uma classe Abstrata?•É uma classe que não pode ser instanciada, ou

seja, não gera objetos;•É utilizada apenas como superclasse em

hierarquia de heranças;•Também é conhecida como “superclasse

abstrata”;•Reúne características semelhantes de classes.•Operador: abstract

Classe Abstrata

• No nosso sistema bancário, o método debitar irá se comportar de maneira diferente para as implementações em ContaCorrente e ContaPoupanca:

• Corrente: ao solicitar para se debitar um valor, deve-se também debitar o valor da taxa de operação da conta;

• Poupança: ao solicitar para se debitar um valor, deve-se verificar se a conta já possui mais de um ano de abertura;

SisBank

•Como garantir que as classes herdeiras irão implementar um método?• R: Métodos abstratos!

• Não possui implementação;

• Toda classe herdeira direta deverá obrigatoriamente implementar.

• Esse é um conceito do Polimorfismo: o mesmo nome e assinatura de método podem ser utilizados para realizar diferentes ações, dependendo da implementação do método da classe!

Métodos Abstratos

Exercício 2

A) Vamos criar uma classe Conta, que possua um saldo, osmétodos para pegar saldo, creditar e debitar

B) Adicione um método na classe Conta, que atualiza essaconta de acordo com uma taxa percentual fornecida

C) Crie duas subclasses da classe Conta: ContaCorrente eContaPoupanca. Ambas terão o método atualizasobrescrito: A ContaCorrente deve atualizar-se com o dobroda taxa e a ContaPoupanca deve atualizar-se com o triplo dataxa

• D) Além disso, a ContaCorrente deve reescrever o métodocreditar, a fim de retirar uma taxa bancária de dez centavosde cada depósito

32Herança