Você está na página 1de 46

Bacharel em Engenharia de Software / Sistemas de Informação

Programação Orientada à Objetos

Herança

Professor Msc. Leanderson André


Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Atividades previstas para esta aula:


1) Introdução.
2) Tipos de Herança
3) Tipos de sobrecarga de método
4) Encadeamento de construtores
5) Sobrecarga de método final
6) Visibilidade de atributos e métodos na Herança
7) Leitura Adicional
8) Exercícios
1) Introdução
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Herança:
• Estrutura hierárquica e modular para reutilização de código.

Classe genérica, base,


superclasse, pai

Símbolo da UML

Classe especialista,
subclasse, filha, derivada
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Herança:
• A classe que especializa, estende ou herda de uma
superclasse, não precisa fornecer uma nova implementação
para métodos genéricos.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Implementação da Herança com Java:

public class Base {


public void metodo() { }
}

public class Derivada extends Base{ }

Palavra reservada que ativa a herança


Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Implementação da Herança com Java:

public static void main(String[] args) {

Base base = new Base();


base.metodo();

Derivada derivada = new Derivada();


derivada.metodo();

}
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Herança Múltiplas:
• Uma classe pode herdar ao mesmo tempo, código de
diferentes classes.
• A linguagem Java não permite tal recurso.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Atividade prática:
• Desenvolva as classes do diagrama UML, crie um objeto de
cada classe e chame o método testar.
2) Tipos de Herança
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Tipos de Herança:
• As duas formas básicas de usar herança são: extensão e
especialização.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Tipos de Herança:
• Especialização: Refinamento de uma classe genérica em
subclasses específicas.
• Métodos são sobrecarregados para obter uma funcionalidade
correta para a subclasse.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Tipos de Herança:
• Especialização:

Método reimplementado
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Tipos de Herança:
• Extensão: Adição de novos métodos que não existem na
superclasse.

Método adicionado
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Atividade prática:
• Desenvolva uma nova classe que extende as funcionalidades
da calculadora.
3) Tipos de sobrecarga de
métodos
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Tipos de sobrecarga de método:


• A sobrecarga de método na herança também é conhecido
como sobreescrita.
• duas formas de sobrecarga de método são: refinamento e
substituição.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Tipos de sobrecarga de método:


• Substituição: O novo método substitui completamente o
método que está na superclasse.
• Boa prática: Adicione a anotação @Override.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Tipos de sobrecarga de método:


• Substituição:
public class Base {
public void metodo() {
System.out.println("Método da classe Base.");
}
}
public class Derivada extends Base{
@Override
Método reimplementado public void metodo() {
System.out.println("Método da classe Derivada.");
}
}
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Tipos de sobrecarga de método:


• Refinamento: O novo método adiciona novo código ao
método da superclasse.
• O código do método da superclasse deve ser executado.
• Necessário a utilização da palavra reservada super.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Tipos de sobrecarga de método:


• Refinamento:
public class Derivada extends Base{
@Override
public void metodo() {

super.metodo(); Chamada do método da superclasse

System.out.println("Método da classe Derivada.");


}
}
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Atividade prática:
• Desenvolva as classes Retangulo e Círculo estendendo a
classe Figura. Realize a sobrecarga do método obterArea().
4) Encadeamento de
construtores
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Encadeamento de construtores:
• Técnica de sobrecarga por refinamento de métodos aplicado
nos construtores.
• Na linguagem Java pode ser de maneira implícita ou
explícita.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Encadeamento de construtores:
• Forma implícita. Execute o código e
analise o resultado.
public class Base {
public Base() {
System.out.println("Construtor da Base.");
}
}
public class Derivada extends Base{
public Derivada() {
System.out.println("Construtor da derivada.");
}
}
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Encadeamento de construtores:
• Forma explícita.
Deve estar na primeira
public class Base { linha do construtor
public Base() {
System.out.println("Construtor da Base.");
}
}
public class Derivada extends Base{
public Derivada() {
Chamada do construtor da superclasse super();
}
}
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Sobrecarga de Métodos na linguagem Java:


• Construtores realizam sobrecarga por refinamento.
• Métodos realizam sobrecarga por substituição.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Atividade prática:
• Desenvolva a classe PontoXY estendendo a classe PontoX.
Adicione o atributo y na classe. Realize o encadeamento de
construtor.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Atividade prática:
• Desenvolva a classe Base com um construtor que recebe por
parâmetro uma String. Crie a classe Derivada sem construtor
que extende a classe Base. Analise o erro que ocorre.
5) Sobrecarga final de
método
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Sobrecarga final de método:


• É possível impedir que métodos/construtores sejam
sobreescritos utilizando a palavra reservada final.

public final void metodo() {


System.out.println("Método da classe Base.");
}
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Atividade prática:
• Crie uma classe com um método final. Realize uma herança
dessa classe e realize a sobrecarga do método. Identifique o
erro que ocorre.
6) Visibilidade de atributos
e métodos na Herança
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Visibilidade de atributos e métodos na Herança:


• A técnica de Herança respeita os tipos de visibilidade
implementado na linguagem.
• A classe que extende:
• - Privado/private: não tem acesso;
• + Público/public: tem acesso;
• # Protegido/protected: tem acesso.
• ~ Padrão/default: tem acesso.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Visibilidade de atributos e métodos na Herança:


• A visibilidade protegido permite acessar diretamente o
atributo/método na classe que extende e classes que
pertencem ao mesmo pacote.
• A visibilidade padrão permite acessar diretamente o
atributo/método nas classes que pertencem ao mesmo pacote.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Visibilidade de atributos e métodos na Herança:


• A sobrecarga de método pode alterar a visibilidade do método.
• É possível apenas aumentar a visibilidade.

• Privado < padrão < protegido < público


Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Atividade prática:
• Crie uma classe com um método público. Realize uma herança
dessa classe e implemente a sobrecarga do método
modificando a sua visibilidade para protegido. Identifique o erro
que ocorre.
7) Leitura adicional
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Leitura Adicional:
• Seção 7.11 Herança
• Sérgio, FURGERI,. Java 8 - Ensino Didático - Desenvolvimento
e Implementação de Aplicações. Editora Saraiva, 2015. [Minha
Biblioteca].
• Capítulo 7 – Herança
• Herbert, SCHILDT,. Java para iniciantes. Grupo A, 2015.
[Minha Biblioteca].
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Leitura Adicional:
• Capítulo 7 – Herança
• Edward, Finegan,. OCA Java SE 8: Guia de Estudos para o
Exame 1Z0-808. Grupo A, 2018. [Minha Biblioteca].
8) Exercícios
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Exercício 01:
• Modele um diagrama de classe UML para representar os
diferentes tipos de mouse (óptico, wireless, bluetooth, etc).
• Crie uma classe chamada Mouse para ser a superclasse.
Nessa classe adicione apenas os método e atributos que se
aplica a todos tipos de mouses.
• Crie novas classes extendendo a classe Mouse representando
os diferentes tipos específicos de Mouse.
• Desenvolva o código Java com base no diagrama de classe.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Exercício 02:
• Crie um glossário para os conceitos chaves sobre Herança.
• Exemplo
• Superclasse: Classe que é extendida por uma subclasse.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Exercício 03:
• Encontre uma solução para a implementação de uma classe
com múltipla herança na linguagem Java.
• Implemente o código.
Bacharel em Engenharia de Software
Programação Orientada à Objetos Sistemas de Informação

Desafio:
• Aplique os conceitos de Herança em uma outra linguagem de
programação de sua preferência. Exemplo: Python, C#,
TypeScript, JavaScript, Kotlin, Swift, PHP.
Universidade da Região de Joinville - UNIVILLE

Bacharel em Engenharia de Software


Bacharel em Sistemas de Informação

Prof. MSc. Leanderson André


leandersonandre@univille.br

Você também pode gostar