linguagem de programaÇÃo orientada a objetos interfaces prof. thiago pereira rique
TRANSCRIPT
![Page 1: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/1.jpg)
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS
INTERFACES
Prof. Thiago Pereira Rique
http://thiagorique.wordpress.com/
![Page 2: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/2.jpg)
AGENDA
Aumentando nosso exemplo (banco/empresa)
Interfaces
![Page 3: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/3.jpg)
AUMENTANDO NOSSO EXEMPLO (BANCO/EMPRESA)
Considere a seguinte situação: um Sistema de Controle do Banco pode ser acessado, além de pelos Gerentes, pelos Diretores do banco.
Classe Diretor
![Page 4: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/4.jpg)
AUMENTANDO NOSSO EXEMPLO (BANCO/EMPRESA)
Classe Gerente
![Page 5: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/5.jpg)
AUMENTANDO NOSSO EXEMPLO (BANCO/EMPRESA)
Perceba que o método autentica de cada tipo de Funcionario pode variar.
![Page 6: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/6.jpg)
AUMENTANDO NOSSO EXEMPLO (BANCO/EMPRESA)
Considere agora o SistemaInterno e seu controle: É preciso receber um Diretor ou um Gerente
como argumento, verificar se o mesmo autentica e colocá-lo no sistema.
![Page 7: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/7.jpg)
AUMENTANDO NOSSO EXEMPLO (BANCO/EMPRESA)
Não podemos chamar o método autentica, pois nem todo Funcionario possui este método (haveria erro de compilação).
O que fazer então?
![Page 8: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/8.jpg)
AUMENTANDO NOSSO EXEMPLO (BANCO/EMPRESA)
Possibilidade:
Não é uma boa saída. Por quê?
![Page 9: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/9.jpg)
AUMENTANDO NOSSO EXEMPLO (BANCO/EMPRESA)
De acordo com o slide anterior, cada vez que criarmos uma nova classe de Funcionario que é autenticável, teríamos que adicionar um novo método de login no SistemaInterno.
Uma solução mais interessante seria criar uma nova classe no meio da árvore de herança.
![Page 10: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/10.jpg)
AUMENTANDO NOSSO EXEMPLO (BANCO/EMPRESA)
A classe FuncionarioAutenticavel.
![Page 11: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/11.jpg)
AUMENTANDO NOSSO EXEMPLO (BANCO/EMPRESA)
As classes Gerente e Diretor estenderiam a classe FuncionarioAutenticavel.
![Page 12: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/12.jpg)
AUMENTANDO NOSSO EXEMPLO (BANCO/EMPRESA)
Perceba que FuncionarioAutenticavel é uma forte candidata a classe abstrata. O método autentica poderia ser abstrato.
![Page 13: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/13.jpg)
AUMENTANDO NOSSO EXEMPLO (BANCO/EMPRESA)
Vamos a uma situação um pouco mais complexa: precisamos que todos os clientes tenham acesso ao SistemaInterno.
O que fazer? Criar outro método login em SistemaInterno
(Opção descartada!) Fazer uma herança sem sentido (comum entre os
novatos na POO). (Opção descartada!) Cliente estende FuncionarioAutenticavel Cliente definitivamente não é um
FuncionarioAutenticavel.
![Page 14: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/14.jpg)
AUMENTANDO NOSSO EXEMPLO (BANCO/EMPRESA)
Como resolver essa situação?
![Page 15: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/15.jpg)
INTERFACES
Precisamos encontrar uma forma de referenciar Diretor, Gerente e Cliente de uma mesma maneira (fator comum).
Toda classe define: O que faz (assinaturas dos métodos) Como faz (corpo dos métodos)
Podemos criar um “contrato” que define tudo o que uma classe deve fazer se quiser ter um determinado status.
![Page 16: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/16.jpg)
INTERFACES
Nosso contrato:
Podemos criar este contrato em Java:
![Page 17: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/17.jpg)
INTERFACES
Tal contrato chama-se interface, pois é a maneira pela qual poderemos conversar com um Autenticavel.
“Quem desejar ser autenticável precisa saber autenticar dado um inteiro e retornando um booleano”.
Uma interface pode definir uma série de métodos (o que faz), mas nunca conter implementação deles (como faz). Métodos de uma interface são públicos e
abstratos sempre!
![Page 18: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/18.jpg)
INTERFACES
Agora o Gerente pode “assinar” o contrato:
![Page 19: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/19.jpg)
INTERFACES
O implements pode ser lido assim: “A classe Gerente se compromete a ser tratada como Autenticavel, sendo obrigada a ter os métodos necessários, definidos neste contrato”.
![Page 20: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/20.jpg)
INTERFACES
Agora podemos tratar um Gerente como sendo um Autenticavel (polimorfismo).
A utilização mais comum seria receber como argumento no nosso SistemaInterno.
![Page 21: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/21.jpg)
INTERFACES
Agora podemos passar qualquer Autenticavel para o SistemaInterno.
![Page 22: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/22.jpg)
INTERFACES
Quando tivermos mais um funcionário com acesso ao sistema, basta que ele implemente esta interface para se encaixar no sistema.
![Page 23: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/23.jpg)
INTERFACES
E se quisermos que o Fornecedor tenha acesso ao sistema?
Quem escreveu o SistemaInterno só precisa saber que Fornecedor é Autenticavel. (desacoplamento)
![Page 24: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/24.jpg)
INTERFACES
Lembrete: “A interface define que todos vão saber se
autenticar (o que fazer), enquanto a implementação define como exatamente vai ser feito (como fazer).
![Page 25: LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique](https://reader036.vdocuments.site/reader036/viewer/2022070310/552fc100497959413d8bcdc7/html5/thumbnails/25.jpg)
REFERÊNCIA
Apostila caelum-java-objetos-fj11 http://www.caelum.com.br/apostilas/