Anda di halaman 1dari 25

PROGRAMAO ORIENTADA A OBJETOS

Interfaces

JONATAS COSTA DE OLIVEIRA


Apresentao da Disciplina

Sumrio

Repetindo mais Cdigo?


Classe Abstrata
Mtodo Abstrato

2016/1 Programao Orientada a Objetos 2


Objetivos

dizer o que uma interface e as diferenas entre herana e


implementao
escrever uma interface em Java;
utiliz-las como um poderoso recurso para diminuir acoplamento
entre as classes
Aumentando nosso exemplo

Imagine que um Sistema de Controle do Banco pode ser acessado,


alm de pelos Gerentes, pelos Diretores do Banco
Aumentando nosso exemplo
Aumentando nosso exemplo

Considere o Sistema Interno e seu controle: precisamos receber um


Diretor ou Gerente como argumento, verificar se ele se autentica e
coloc-lo dentro do sistema.
Aumentando nosso exemplo

O SistemaInterno aceita qualquer tipo de Funcionario, tendo ele


acesso ao sistema ou no.
Note que nem todo Funcionario possui o mtodo autentica.
Isso nos impede de chamar esse mtodo com uma referncia apenas
a Funcionario (haveria um erro de compilao).
O que fazer ento?
Aumentando nosso exemplo

Uma possibilidade criar dois mtodos login no Sistema Interno:


um para receber Diretor
outro para receber Gerente
No uma boa escolha.
Por qu?
Aumentando nosso exemplo

Cada vez que criarmos uma nova classe de Funcionario que


autenticvel, precisaramos adicionar um novo mtodo de login no
Sistema Interno.
Uma soluo mais interessante seria criar uma classe no meio da
rvore de herana, FuncionarioAutenticavel:
Aumentando nosso exemplo

As classes Diretor e Gerente passariam a estender de


FuncionarioAutenticavel, e o SistemaInterno receberia referncias
desse tipo, como a seguir:
Aumentando nosso exemplo

Repare que FuncionarioAutenticavel uma forte candidata a classe


abstrata. Mais ainda, o mtodo autentica poderia ser um mtodo
abstrato.
Aumentando nosso exemplo

O uso de herana resolve esse caso, mas vamos a uma outra situao
um pouco mais complexa.
Precisamos que todos os clientes tambm tenham acesso ao
SistemaInterno.
O que fazer? Coutro mtodo login em SistemaInterno?
j descartamos essa anteriormente.
Aumentando nosso exemplo

Uma outra, que comum entre os novatos, fazer uma herana sem
sentido para resolver o problema.
Por exemplo, fazer Cliente extends FuncionarioAutenticavel.
Resolve o problema, mas trar diversos outros. Cliente
definitivamente no FuncionarioAutenticavel.
o Cliente ter, por exemplo, um mtodo getBonificacao, um atributo
salario e outros membros que no fazem o menor sentido para esta
classe!
Interfaces

O que precisamos para resolver nosso problema? Arranjar uma


forma de poder referenciar Diretor, Gerente e Cliente de uma mesma
maneira, isto , achar um fator comum.
Se existisse uma forma na qual essas classes garantissem a existncia
de um determinado mtodo, atravs de um contrato, resolveramos
o problema.
Toda classe define 2 itens:
o que uma classe faz (as assinaturas dos mtodos)
como uma classe faz essas tarefas (o corpo dos mtodos e atributos
privados)
Interfaces

Chama-se interface pois a maneira pela qual poderemos conversar


com um Autenticavel.
Interface a maneira atravs da qual conversamos com um objeto.
Lemos a interface da seguinte maneira: quem desejar ser
autenticvel precisa saber autenticar dado um inteiro e retornando
um booleano.
Interfaces

Uma interface pode definir uma srie de mtodos, mas nunca conter
implementao deles.
Ela s expe o que o objeto deve fazer, e no como ele faz, nem o
que ele tem.
Como ele faz vai ser definido em uma implementao dessa
interface.
Interfaces
Interfaces
Interfaces

A classe Gerente se compromete a ser tratada como Autenticavel,


sendo obrigada a ter os mtodos necessrios, definidos neste
contrato
A partir de agora, podemos tratar um Gerente como sendo um
Autenticavel.
Interfaces
Interfaces

Ento precisamos fazer com que o Diretor tambm implemente essa


interface.
Interfaces

Ento precisamos fazer com que o Diretor tambm implemente essa


interface.
Interfaces
Interfaces

Todo atributo de uma interface static, final e public implicitamente.


No h razo para ter atributo da classe visto que nunca ser
instanciada.
Todos os mtodos so public e abstract implicitamente.
Todos as classes concretas que implementam a interface precisam
implementar seus mtodos.

Anda mungkin juga menyukai