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 nova
informação(CPF, por exemplo), para todas as Pessoas do
controle acadêmico?
• Precisaríamos ir de classe em classe adicionando a
informação do CPF.
Herança 6
Conceito
• Ao modelar um conjunto de classes, podemos encontrar
classes semelhantes na estrutura e no comportamento.
• Existe uma maneira, em Java, de relacionarmos uma classe
de 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ção
Pessoa
-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 é umaPessoa
Sobreposição
• Pode-se modificar algum método da minha superclasse?
Sim, através da sobreposição!
• Métodos implementados previamente em uma superclasse podem
ser 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ça
Pura
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 alterar
os atributos dos objetos deste tipo.
• Existe um outro modificador de acesso, o protected, que fica entre
o 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 classe
chamada 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 atributos
adicionais seu Salário e Disciplina. E a Secretária terá como
adicional apenas o salário. Crie uma classe para cada um.
C) Por ultimo, vamos criar uma classe para testar cada um dos
atributos.
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 entre
ContaCorrente 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, os
métodos para pegar saldo, creditar e debitar
B) Adicione um método na classe Conta, que atualiza essa
conta de acordo com uma taxa percentual fornecida
C) Crie duas subclasses da classe Conta: ContaCorrente e
ContaPoupanca. Ambas terão o método atualiza
sobrescrito: A ContaCorrente deve atualizar-se com o dobro
da taxa e a ContaPoupanca deve atualizar-se com o triplo da
taxa
• D) Além disso, a ContaCorrente deve reescrever o método
creditar, a fim de retirar uma taxa bancária de dez centavos
de cada depósito
32Herança

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

  • 2.
  • 3.
    Vamos imaginar ofuncionamento do sistema acadêmico do Unipê, que controla o cadastro de alunos, professores e funcionários. Herança 4
  • 4.
    Vamos imaginar ofuncionamento de um sistema acadêmico do Unipê, que controla o cadastro de alunos, professores e funcionários Herança 5
  • 5.
    Conceito • Imagine seum dia precisarmos adicionar uma nova informação(CPF, por exemplo), para todas as Pessoas do controle acadêmico? • Precisaríamos ir de classe em classe adicionando a informação do CPF. Herança 6
  • 6.
    Conceito • Ao modelarum conjunto de classes, podemos encontrar classes semelhantes na estrutura e no comportamento. • Existe uma maneira, em Java, de relacionarmos uma classe de tal maneira que uma delas herda tudo que a outra tem. Herança 7
  • 7.
    Então, como implementar? •Aideia 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
  • 8.
    Representação Pessoa -nome -email -telefone -idade -sexo Herança 9 Professor -salario -disciplina Aluno -matricula -notas Funcionario -salario Em todomomento 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 é umaPessoa
  • 9.
    Sobreposição • Pode-se modificaralgum método da minha superclasse? Sim, através da sobreposição! • Métodos implementados previamente em uma superclasse podem ser 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
  • 10.
    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ça Pura Extensão
  • 11.
    Posso herdar devá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
  • 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
  • 13.
    Como acessar osatributos que herdamos? Herança 14
  • 14.
    Como acessar osatributos que herdamos? • Se deixarmos os atributos como public, qualquer um poderia alterar os atributos dos objetos deste tipo. • Existe um outro modificador de acesso, o protected, que fica entre o private e o public. Um atributo protected só pode ser acessado (visível) pela própria classe e por suas subclasses . Herança 15
  • 15.
    Como implementar nosso primeiroexemplo? Herança 16
  • 16.
    Antes de aplicarHerança Herança 17
  • 17.
  • 18.
    Exercício 1 A) Seguindoo modelo do exemplo, vamos criar uma classe chamada 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 atributos adicionais seu Salário e Disciplina. E a Secretária terá como adicional apenas o salário. Crie uma classe para cada um. C) Por ultimo, vamos criar uma classe para testar cada um dos atributos. Herança 19
  • 19.
    • Vamos suporum sistema de um banco, que controle seus clientes e suas contas... Estudo de Caso 2 > Sistema Bancário
  • 20.
    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
  • 21.
    Conta Poupança ContaCorrente Sistema Bancário > SisBank O que existe de semelhante entre estes dois? R: São Contas!
  • 22.
    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
  • 23.
    • Com aherança é possível identificar que as classes ContaCorrente e ContaPoupança irão aproveitar tudo que está na classe Conta! Implementando Herança
  • 24.
    •Mas e oConstrutor da subclasse, Como fica? •Precisamos chamar o construtor da superclasse! • Operador: super Implementando Herança
  • 25.
    •Detalhe importante: • Aclasse Conta pode existir no nosso sistema bancário? SisBank
  • 26.
    •Detalhe importante: • Aclasse Conta pode “existir” no nosso sistema bancário? •R: Não, essa é uma classe que apenas reúne características semelhantes entre ContaCorrente e ContaPoupanca. A classe Conta não pode ser instanciada! SisBank
  • 27.
    •Como implementar paraque a classe Conta não possa ser instanciada? •R: Definindo-a como “classe abstrata”! Classe Abstrata
  • 28.
    •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
  • 29.
    • No nossosistema 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
  • 30.
    •Como garantir queas 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
  • 31.
    Exercício 2 A) Vamoscriar uma classe Conta, que possua um saldo, os métodos para pegar saldo, creditar e debitar B) Adicione um método na classe Conta, que atualiza essa conta de acordo com uma taxa percentual fornecida C) Crie duas subclasses da classe Conta: ContaCorrente e ContaPoupanca. Ambas terão o método atualiza sobrescrito: A ContaCorrente deve atualizar-se com o dobro da taxa e a ContaPoupanca deve atualizar-se com o triplo da taxa • D) Além disso, a ContaCorrente deve reescrever o método creditar, a fim de retirar uma taxa bancária de dez centavos de cada depósito 32Herança