Você está na página 1de 38

October 19, 2022

Abstração em Java

Introdução a Abstração em Java


I Classe abstrata em Java
I Interface em Java
I Diferença entre classe abstrata e interface
Classe abstrata em Java

I Uma classe que é declarada com a palavra-chave abstract é


conhecida como classe abstrata em Java.
I Pode ter métodos abstratos e não abstratos (método com o corpo).

Abstração em Java
I A abstração é um processo de ocultar os detalhes da
implementação e mostrar apenas a funcionalidade ao usuário.
I Outra forma, mostra apenas coisas essenciais para o usuário e
oculta os detalhes internos, por exemplo, o envio de SMS onde
você digita o texto e envia a mensagem.
I A abstração permite que você se concentre no que o objeto
faz em vez de como ele o faz.
Cont...

Maneiras de alcançar a abstração


Existem duas maneiras de obter abstração em java
1. Class Abstracta (0 a 100 %)
2. Interface (100 %)
I A palavra-chave abstract é um modificador sem acesso, usado para
classes e métodos:
I Classe abstrata: é uma classe restrita que não pode ser usada para
criar objetos (para acessá-la, ela deve ser herdada de outra classe).
I Método abstrato: só pode ser usado em uma classe abstrata e não
possui corpo. O corpo é fornecido pela subclasse (herdado de).
Classe abstrata em Java

I Pode ter métodos abstratos e não abstratos. Ele precisa ser


estendido e seu método implementado. Não pode ser instanciado.
Pontos para lembrar
I Uma classe abstrata deve ser declarada com uma palavra-chave
abstrat.
I Pode ter métodos abstratos e não abstratos.
I Não pode ser instanciado.
I Ele pode ter construtores e métodos estáticos também.
I Ele pode ter métodos finais que forçarão a subclasse a não alterar o
corpo do método.
Cont...

I Ele pode ter construtores e métodos estáticos também.


I Ele pode ter métodos finais que forçarão a subclasse a não
alterar o corpo do método.
Exemplo de classe abstrata

Método abstrato em Java


I Um método que é declarado como abstrato e não tem
implementação é conhecido como método abstrato.
Exemplo de método abstrato

abstract void printStatus();


cont
Exemplo de classe abstrata que possui um método abstrato

I Bike é uma classe abstrata que contém apenas um método abstrato


executado. Sua implementação é fornecida pela classe Honda.
Cont...

Cenário real da classe Abstract

I Shape é a classe abstrata e sua implementação é fornecida pelas


classes Rectangle e Circle.
I Principalmente, não sabemos sobre a classe de implementação
(que está oculta para o usuário final), e um objeto da classe de
implementação é fornecido pelo método de fábrica.
I Um método de fábrica é um método que retorna a instância da
classe. Vamos aprender sobre o método de fábrica mais tarde.
I Exemplo para criação de instância da classe Rectangle, o método
draw() da classe Rectangle será invocado.
Cont...

Arquivo: TestAbstraction1.java
Cont...

Outro exemplo de classe abstrata em java


Arquivo: TestBank.java
Cont...
Classe abstrata com construtor, membro de dados e métodos
Uma classe abstrata pode ter um membro de dados, método
abstrato, corpo de método (método não abstrato), construtor e até
mesmo método main().
Arquivo: TestAbstraction2.java
Cont...

Regra: Se houver um método abstrato em uma classe, essa classe


deve ser abstrata.

Nota: Se você estiver estendendo uma classe abstrata que possui


um método abstrato, deverá fornecer a implementação do método
ou tornar essa classe abstrata.
Outro cenário real de classe abstrata
A classe abstrata também pode ser usada para fornecer alguma
implementação da interface . Nesse caso, o usuário final não pode
ser forçado a substituir todos os métodos da interface.
Cont...
terminado
Interface em Java

Uma interface em Java é um modelo de uma classe. Possui


constantes estáticas e métodos abstratos.
A interface em Java é um mecanismo para alcançar a abstração.
Pode haver apenas métodos abstratos na interface Java, não no
corpo do método. Ele é usado para obter abstração e herança
múltipla em Java

Em outras palavras, você pode dizer que as interfaces podem ter


métodos e variáveis abstratos. Ele não pode ter um corpo de
método.
A Interface Java também representa o relacionamento IS-A
Ele não pode ser instanciado como a classe abstrata.
Desde o Java 8, podemos ter métodos padrão e estáticos em
uma interface.
Desde o Java 9, podemos ter métodos privados em uma interface.
Cont...

Por que usar a interface Java?


Existem basicamente três razões para usar a interface. Eles são
dados abaixo.
I Ele é usado para alcançar a abstração.
I Por interface, podemos suportar a funcionalidade de herança
múltipla.
I Ele pode ser usado para obter um acoplamento solto.

Como declarar uma interface?


Uma interface é declarada usando a palavra-chave interface. Ele
fornece abstração total; significa que todos os métodos em uma
interface são declarados com o corpo vazio e todos os campos são
públicos, estáticos e finais por padrão. Uma classe que implementa
uma interface deve implementar todos os métodos declarados na
interface.
Cont...

Sintaxe:

Melhoria da Interface Java 8


Desde o Java 8 , a interface pode ter métodos padrão e estáticos
que serão discutidos posteriormente.

Adição interna pelo compilador


O compilador Java adiciona palavras-chave públicas e abstratas
antes do método de interface. Além disso, adiciona palavras-chave
públicas, estáticas e finais antes dos membros de dados.
Cont...

Em outras palavras, os campos da Interface são públicos, estáticos


e finais por padrão, e os métodos são públicos e abstratos.

O relacionamento entre classes e interfaces


Conforme mostrado na figura abaixo, uma classe estende outra
classe, uma interface estende outra interface, mas uma classe
implementa uma interface .
Cont...

Exemplo de interface Java


Cont...
Exemplo de interface Java: desenhável
Neste exemplo, a interface Drawable tem apenas um método. Sua
implementação é fornecida pelas classes Rectangle e Circle. Em
um cenário real, uma interface é definida por outra pessoa, mas
sua implementação é fornecida por diferentes provedores de
implementação. Além disso, é usado por outra pessoa. A parte de
implementação é ocultada pelo usuário que usa a interface.

Arquivo: TestInterface1.java
cont...

Exemplo de interface Java: banco


Vamos ver outro exemplo de interface java que fornece a
implementação da interface Bank.
Cont...

Arquivo: TestInterface2.java
cont...

Herança múltipla em Java por interface


Se uma classe implementa várias interfaces ou uma interface
estende várias interfaces, isso é conhecido como herança múltipla.
Cont...
Cont...
P) Herança múltipla não é suportada por classe em java, mas
é possı́vel por uma interface, por quê?
Como explicamos no capı́tulo sobre herança, herança múltipla não
é suportada no caso de classe devido à ambiguidade. No entanto,
é suportado no caso de uma interface porque não há ambiguidade.
É porque sua implementação é fornecida pela classe de
implementação. Por exemplo:
Cont...

Como você pode ver no exemplo acima, as interfaces Printable e


Showable possuem os mesmos métodos, mas sua implementação é
fornecida pela classe TestTnterface1, portanto, não há
ambiguidade.
Herança de interface
Uma classe implementa uma interface, mas uma interface estende
outra interface.
Cont...

Método padrão Java 8 na interface


Desde o Java 8, podemos ter o corpo do método na interface. Mas
precisamos torná-lo o método padrão. Vejamos um exemplo:
Cont...

Arquivo: TestInterfaceDefault.java
Método estático Java 8 na interface
Desde o Java 8, podemos ter método estático na interface.
Vejamos um exemplo:

Arquivo: TestInterfaceStatic.java
Cont...

P) O que é marcador ou interface etiquetada?


Uma interface que não tem membro é conhecida como um
marcador ou interface etiquetada, por exemplo, Serializable,
Cloneable, Remote, etc. Eles são usados para fornecer algumas
informações essenciais à JVM para que a JVM possa realizar
alguma operação útil.

Interface aninhada em Java


Nota: Uma interface pode ter outra interface que é conhecida
como interface aninhada. Aprenderemos isso em detalhes no
capı́tulo de classes aninhadas . Por exemplo:
Cont...
Diferença entre classe abstrata e interface

A classe abstrata e a interface são usadas para obter a abstração


onde podemos declarar os métodos abstratos. A classe abstrata e a
interface não podem ser instanciadas.

Mas há muitas diferenças entre a classe abstrata e a interface que


são fornecidas abaixo.
cont...
Cont...

Simplesmente, a classe abstrata atinge a abstração parcial (0 a 100


porcento), enquanto a interface atinge a abstração total (100
porcento).

Exemplo de classe abstrata e interface em Java


Vamos ver um exemplo simples onde estamos usando tanto a
interface quanto a classe abstrata.
Cont...
cont...
References

Santos, R.F (2012)


Programação Orientado a Objetos
Journal Name 12(3), 45 – 678.
Fim

Você também pode gostar