Advertisement
LucasSousa

Simplesmente pra ler depois...

Sep 5th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.16 KB | None | 0 0
  1. Usos Práticos da Interface
  2. Tendo conhecimento do uso básico de uma Interface, podemos entender qual a verdadeira funcionalidade dela em um caso real.
  3.  
  4. Seguindo o Padrão
  5. A Interface é muito utilizada em grandes projetos para obrigar o programador a seguir o padrão do projeto, por esta tratar-se de um contrato onde o mesmo é obrigado a implementar seus métodos, ele deverá sempre seguir o padrão de implementação da Interface.
  6.  
  7. Vamos supor o seguinte caso: Temos uma Interface BasicoDAO que dirá aos programadores do nosso projeto o que suas classes DAO devem ter (para efeito de conhecimento, o DAO é onde ficará nosso CRUD), qualquer método diferente do que tem na nossa Interface DAO será ignorado e não utilizado.
  8.  
  9. Listagem 3: Nossa Interface DAO
  10.  
  11. import java.util.List;
  12.  
  13. public interface BasicoDAO {
  14.  
  15. public void salvar(Object bean);
  16. public void atualizar(Object bean);
  17. public void deletar(int id);
  18. public Object getById(int id);
  19. public List<Object> getAll();
  20.  
  21.  
  22. }
  23. Agora um dos programadores que está trabalhando no módulo de RH quer criar um DAO para realizar o CRUD de Funcionários, ele implementa a Interface acima e ainda adiciona métodos a parte (que serão ignorados mais a frente).
  24.  
  25. Listagem 4: Implementado a Interface DAO
  26.  
  27. import java.util.List;
  28.  
  29. public class FuncionarioDAO implements BasicoDAO {
  30.  
  31. @Override
  32. public void salvar(Object bean) {
  33. // TODO Auto-generated method stub
  34.  
  35. }
  36.  
  37. @Override
  38. public void atualizar(Object bean) {
  39. // TODO Auto-generated method stub
  40.  
  41. }
  42.  
  43. @Override
  44. public void deletar(int id) {
  45. // TODO Auto-generated method stub
  46.  
  47. }
  48.  
  49. @Override
  50. public Object getById(int id) {
  51. // TODO Auto-generated method stub
  52. return null;
  53. }
  54.  
  55. @Override
  56. public List<Object> getAll() {
  57. // TODO Auto-generated method stub
  58. return null;
  59. }
  60.  
  61. //Método a parte criado e implementado pelo próprio programador
  62. public void calcularSalario(){
  63.  
  64. }
  65.  
  66.  
  67. }
  68. Temos agora todos os itens da “receita”, vamos agora utilizá-lo em nossa aplicação. Suponha que um novo programador (que não criou a classe FuncionarioDAO), precise inserir um novo funcionário.
  69.  
  70. Este novo programador não tem idéia de como foi implementada a classe FuncionarioDAO, ele nem mesmo tem acesso a esta classe, porém ele sabe de algo muito mais importante: A Definição da Interface. Sendo assim ele irá usar todo o poder do polimorfismo e criar um novo objeto FuncionarioDAO do tipo BasicoDAO. Veja a listagem 5.
  71.  
  72. Listagem 5: Usando o polimorfismo
  73.  
  74. public class MeuApp {
  75.  
  76. /**
  77. * @param args
  78. */
  79. public static void main(String[] args) {
  80. BasicoDAO funcionarioDAO = new FuncionarioDAO();
  81.  
  82. funcionarioDAO.salvar(Funcionario001);
  83.  
  84. }
  85.  
  86. }
  87. Perceba que criamos o objeto FuncionarioDAO do tipo BasicoDAO, sendo assim só conseguimos chamar os métodos da Interface BasicoDAO. Mas o mais importante é que o novo programador que utilizará a classe FuncionarioDAO, poderá chamar os métodos descritos na Interface.
  88.  
  89. Mas o que obriga que o programador que criou a classe FuncionarioDAO implemente BasicoDAO ? Na verdade nada, ele pode criar FuncionarioDAO sem implementar a interface, porém o novo programador que utilizará essa classe não conseguirá realizar o polimorfismo acima e verá que a classe está errada, foi criada de forma errada, fora do padrão. Há ainda outra forma de sabermos se a classe que foi criada implementou a interface BasicoDAO, veja na listagem 6.
  90.  
  91. Listagem 6: Uso do instanceof
  92.  
  93. public class MeuApp {
  94.  
  95. /**
  96. * @param args
  97. */
  98. public static void main(String[] args) {
  99. FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
  100.  
  101. if (funcionarioDAO instanceof BasicoDAO)
  102. funcionarioDAO.salvar(Funcionario001);
  103. else
  104. System.err.println("A Classe FuncionarioDAO não implementa BasicoDAO, nenhum procedimento foi realizado");
  105.  
  106. }
  107.  
  108. }
  109. Agora conseguimos ver os métodos implementados a parte pelo programador (fora da implementação da interface), porém testamos antes se a classe é uma instancia (instanceof) de BasicoDAO.
  110.  
  111. Interface de Marcação
  112. Existe ainda um conceito que chamamos de: Interface de Marcação. São interfaces que servem apenas para marcar classes, de forma que ao realizar os “instanceof” podemos testar um conjunto de classe.
  113.  
  114. Vamos a outro exemplo prático: Temos uma Interface Funcionario sem nenhum método ou atributo, isso porque será apenas uma interface de marcação. Veja na listagem 7.
  115.  
  116. Listagem 7: Interface de Marcação Funcionario
  117.  
  118. public interface Funcionario {
  119.  
  120. }
  121.  
  122. Agora criamos 3 Beans, que correspondem a 3 tipos distintos de funcionários: Gerente, Coordenador e Operador. Todos implementando Funcionario.
  123.  
  124. Listagem 8: Criação de Gerente, Coordenador e Operador
  125.  
  126. public class Gerente implements Funcionario {
  127.  
  128. private int id;
  129. private String nome;
  130.  
  131. }
  132.  
  133. public class Coordenador implements Funcionario {
  134.  
  135. private int id;
  136. private String nome;
  137.  
  138.  
  139. }
  140.  
  141. public class Operador implements Funcionario {
  142.  
  143. private int id;
  144. private String nome;
  145.  
  146. }
  147. Agora em nossa aplicação temos um método que realiza um procedimento de calculo de salário diferente para cada tipo de funcionário. Poderiamos não utilizar o poder da Interface e fazer a implementação abaixo.
  148.  
  149. Listagem 9: Uso indevido da Interface de Marcação
  150.  
  151. public class MeuApp {
  152.  
  153. public void calcularSalarioParaGerente(Gerente gerente){
  154.  
  155. }
  156.  
  157. public void calcularSalarioParaCoordenador(Coordenador coordenador){
  158.  
  159. }
  160.  
  161. public void calcularSalarioParaOperador(Operador operador){
  162.  
  163. }
  164.  
  165. }
  166.  
  167. Muito trabalho pode ser reduzido a apenas 1 método, mostrado na listagem 9.
  168.  
  169. Listagem 10: Usando a interface de marcação
  170.  
  171. public class MeuApp {
  172.  
  173. public void calculaSalarioDeFuncionario(Funcionario funcionario){
  174.  
  175. if (funcionario instanceof Gerente){
  176. //calculo para gerente
  177. }else if (funcionario instanceof Coordenador){
  178. //calculo para coordenador
  179. }else if (funcionario instanceof Operador){
  180. //calculo para operador
  181. }
  182.  
  183. }
  184.  
  185.  
  186.  
  187. }
  188. Em vez de ficar criando um método para cada tipo de funcionário, juntamos tudo em apenas 1 utilizando a interface de marcação.
  189.  
  190. CONCLUSÃO
  191. Quando bem utilizada, a interface acaba tornando-se uma poderosa ferramenta nas mãos de um programador ou Analista, e torna-se indispensável o seu uso no dia-a-dia. As boas práticas de programação regem que o uso da Interface é indispensável para um bom projeto de software.
  192.  
  193.  
  194.  
  195. --------------------------------------------------------------------
  196.  
  197. Interfaces
  198. Interface é um recurso da orientação a objeto utilizado em Java que define ações que devem ser obrigatoriamente executadas, mas que cada classe pode executar de forma diferente.
  199.  
  200. Interfaces contém valores constantes ou assinaturas de métodos que devem ser implementados dentro de uma classe.
  201.  
  202. E por que isso?
  203.  
  204. Isso se deve ao fato que muitos objetos (classes) podem possuir a mesma ação (método), porém, podem executá-la de maneira diferente.
  205.  
  206. Usando um exemplo bem drástico, podemos ter uma interface chamada aéreo que possui a assinatura do método voar(). Ou seja, toda classe que implementar aéreo deve dizer como voar(). Portanto, se eu tenho uma classe chamada pássaro e outra chamada avião, ambas implementando a interface aéreo, então, nestas duas classes devemos codificar a forma como cada um irá voar().
  207.  
  208. Uma interface é criada da mesma forma que uma classe, mas utilizando a palavra-chave interface no lugar de class.
  209.  
  210. interface nomeDaInterface { métodoAbstrato (argumentos); }
  211.  
  212. --------------------------------------------------------------------------------
  213.  
  214. Antes de começar a discutir onde usá-las, vamos entender o que são. Uma interface pode ser vista como um protocolo de comportamento. Ela é simplesmente uma lista de métodos abstratos, podendo também incluir variáveis. Para utilizá-la, é criada uma classe que implemente-a. Esta classe será obrigada a definir todos os métodos das interfaces que está implementando, como mostrado no exemplo abaixo, em que temos as interfaces Leitor e Programador sendo implementadas pela classe ParticipanteForum.
  215.  
  216. Read more: http://www.linhadecodigo.com.br/artigo/80/utilizando-interfaces.aspx#ixzz4JOlOqDlQ
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement