Java - Interfaces Prof. Msc. Flávio Viotti
Interfaces Interface Podemos definir uma interface como um conjunto de métodos com suas devidas assinaturas sem nenhuma programação. Sintaxe Importante Toda variável criada em uma interface quando implementada irá se transformar em uma constante!!!!! public interface Exemplo { int valor=0; public void metodo1(); public int metodo2(String p1, float p2); public Object metodo3(Object o); } Prof. Msc. Flávio Viotti
Interfaces Problema Real Imagine um Sistema de Controle de Banco que pode ser acessado além dos Gerentes pelos Diretores do Banco. Então teríamos uma classe Diretor e uma Gerente. public class Diretor extends Funcionario { public boolean autentica(int senha) { //Verifica se a senha confere } public class Gerente extends Funcionario { //Verifica se o depto dele tem acesso Prof. Msc. Flávio Viotti
Diagrama de Classe do Sistema Interfaces Diagrama de Classe do Sistema Repare que o método autenticação de cada tipo de Funcionario pode variar muito. Considere a classe principal SistemaInterno. Prof. Msc. Flávio Viotti
Interfaces public class SistemaInterno { void login(Funcionario funcionario) { //chamar o método autentica não da! Nem todo funcioinario tem } Soluções Criar um método login para cada tipo de funcionário??? R: Irá gerar problema, pois sempre que existir um novo tipo de funcionario autenticável a classe SistemaInterno teria que ser alterada!!!! Prof. Msc. Flávio Viotti
Interfaces Nova solução Prof. Msc. Flávio Viotti
Novas classes Interfaces As classes Diretor e Gerente passariam a extender FuncionarioAutenticavel... E a classe SistemaInterno.. public class FuncionarioAutenticavel extends Funcionario { public boolean autentica(int senha) { //Faz as autenticações } public class SistemaInterno { void login(FuncionarioAutenticavel fa) { int senha = //pegar a senha biometrica boolean ok = fa.autentica(senha) } Prof. Msc. Flávio Viotti
Interfaces Novo Problema Precisamos que um Cliente tambem acesse o sistema. Mas.... um Cliente não é um funcionário. Necessitamos achar uma opção de referenciar Diretor, Gerente e Cliente de uma mesma maneira. Se existisse uma forma na qual essas classes garantissem a existencia de um determinado método, através de um contrato, resolveríamos o problema. Esse contrato pode vir na forma de uma interface, que define que: “Quem quiser ser autenticável precisa saber fazer: 1- autenticar dada uma determinada senha e devolver um booleano” Prof. Msc. Flávio Viotti
Nova interface Interfaces Lemos a interface da seguinte maneira: “quem desejar ser autenticavel precisa saber autenticar dado um inteiro e retornando um booleano”. Realmente um contrato, onde quem assina se responsabiliza por reescrever esses métodos (cumprir o contrato). public interface Autenticavel { boolean autentica(int senha); } class Gerente extends Funcionario implements Autenticavel { private int senha; // outros atributos e métodos public boolean autentica(int senha) { if(this.senha != senha) return false; // pode fazer outras possiveis verificacoes, como saber se esse // departamento do gerente tem acesso ao Sistema return true; Prof. Msc. Flávio Viotti
Novo diagrama de classe Interfaces Novo diagrama de classe Prof. Msc. Flávio Viotti
Exercicios Interfaces 1 – Implemente todas as classes desses slides juntamente com sua programação. Faça um método main() que instancie um objeto de cada classe e veja o que voce pode fazer com as senhas. 2 – Resolva os exercicios do livro [1] pag. 47 Prof. Msc. Flávio Viotti
Interfaces Bibliografia [1] Sintes, Tony; Aprenda Programação Orientada a Objetos em 21 dias – São Paulo: Pearson Education do Brasil, 2002 Prof. Msc. Flávio Viotti