| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/01/2003 16:24:01
|
Leandro
JavaTeenager
![[Avatar]](/images/avatar/c7e48e023e257c5d8e911.jpg)
Membro desde: 05/12/2002 12:48:54
Mensagens: 157
Localização: SBC - SP - Brazil
Offline
|
Eu já vi milhões de vezes aqui falando sobre uso e abuso de Inferfaces... mas acredito que como todo programador que aprendeu sozinho, tenho algumas deficiências de definição, conceito...
Alguém pode me dar um exemplo básico de quando eu usaria uma Interface?? Porque usar?? Pra que afinal de contas ela serve??
Valeu!! Desculpa a pergunta ridícula...
|
Nosso work é codar! |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/01/2003 17:13:26
|
Bani
JWizard
![[Avatar]](/images/avatar/6cdd60ea0045eb7a6ec44c54d29ed402.jpg)
Membro desde: 13/10/2002 23:17:37
Mensagens: 2443
Localização: São Paulo
Offline
|
Por exemplo...
Você quer fazer uma mini-framework para utilizar MVC na sua aplicação, criando um controller que vai servir para tratar vários servlets. Aí você cria uma interface para seus servlets que é o que o controller vai utilizar para chamar os métodos, mas as características específicas de cada servlet vai depender da implementação de cada classe.
Ou algo ainda mais simples:
Você precisa criar uma classe que contenha os métodos utilizados para acessar o banco de dados, mas você pode querer mudar de banco de dados futuramente e o próximo não se sabe se vai aceitar a mesma implementação dos métodos. Aí você cria uma interface e usa ela nas outras classes, e se mudar de banco de dados basta fazer uma classe nova que implemente a mesma interface.
Basicamente, interfaces ajudam seu código a tornar-se mais reusável, minimizando o trabalho quando é necessário mudar alguma coisa.
Além disso, muitas vezes servem para encapsular a implementação, como no caso da várias interfaces de banco de dados, por exemplo a ResultSet, que você usa toda hora sem nem precisar saber que classe está realmente sendo utilizada.
|
~ Site da Bani ~ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/01/2003 18:56:27
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
Ver a Bani respondendo sobre interfaces eh a mesma coisa que ver o Bill Gates respondendo sobre Linux
Bom, para exemplificar o que ela quis dizer,
Note que temos 2 classes que implementam a interface Command. No caso, a
interface é útil para dizer é esperado que as classes que lhe implementarem tal
interface definam o corpo do método ( ou métodos ).
Entao é possível fazer um codigo mais generico e independente, como foi dito no
exemplo de Servlets. Entao poderiamos fazer
O resultado será "ClasseUm" e logo abaixo "ClasseDois". Isso funciona porque
ambas classes implementaram a interface.
Mas ai voce poderia perguntar: e por que nao fazer uma classe abstrata? bem,
voce pode fazer sim, porem lembre-se que em Java voce somente pode extender uma
unica classe por vez, entao nao da para sair criando classes para tudo.
Muita coisa vai do ponto de analise do projeto, isso interfere muito na decisao
de usar interfaces.
Um bom candidato a interface eh quando voce notar que varias classes definem um mesmo metodo em comum, porem com implementacoes diferentes em cada uma ( por exemplo, voce tem uma fabrica de carros, onde voce monta diferentes tipos de carros, mas ha varias coisas em comum, como o metodo andar(), freiar() etc.. ).
Apesar de voce poder fazer tudo sem interfaces ( e mesmo sem classes abstratas ), o correto em termos de design da aplicacao seria ter uma interface com os metodos andar() e freiar(), e entao implementar o metodo em cada tipo de "Carro". Dessa maneira, fica tudo mais logico, simples e portavel na aplicacao.
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/01/2003 20:36:37
|
Umlauf
JavaEvangelist
![[Avatar]](/images/avatar/e2c420d928d4bf8ce0ff2ec19b371514.png)
Membro desde: 17/09/2002 21:30:44
Mensagens: 456
Localização: São Paulo/SP
Offline
|
Pra entender Interfaces, vc precisa ter bem claros os conceitos de POO, cujo grande objetivo é reutilização de código.
Apenas reforçando as ótimas explicações da Bani e do Rafael:
Vc definiu um novo objeto chamado carro e quer que várias outras pessoas tbm fabriquem carros, porém vc não quer expor o seu projeto. Mas se vc não definir O QUE DEVE TER um carro para ser chamado de "carro", cada pessoa vai fazê-lo do seu jeito. Uns vão fazer com asas, outros uma bicicleta com motor, etc. Pra resolver isso, vc cria uma INTERFACE, que diz quais partes DEVEM ser implementadas NO SEU PROJETO. Por exemplo, carro tem que ter freio, tem que acelerar, tem que desligar, tem que virar, etc. Como cada um vai fazer pra conseguir que o seu carro tenha esses métodos, propriedades e dados é problema de cada um. Se eu quiser fazer um carro movido a óleo de mixirica, tudo bem. Desde que ele acelere, que é uma exigência da Interface carro. Por isso que Interface não tem implementação, é apenas uma lista de "exigências" a serem implementadas.
Dessa forma vc consegue que o objeto carro seja padronizado e vc poderá reusá-lo em qualquer outro código que precise, pois vc sempre sabe o que esperar dele (métodos, propriedades, etc.), pois ele tem definida um Interface.
Assim, se você criar um objeto Ferrarri que implementa a Interface carro, eu vou poder usá-lo tranquilamente, pois sei pra que ele serve e o que ele faz (acelera, freia, vira, etc.).
Espero ter sido claro.
[]'s
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/01/2003 01:52:22
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4203
Localização: São Paulo
Offline
|
leandro, soh tem louco no GUJ, nao liga nao.
a resposta para a sua pergunta: sempre.
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/01/2003 08:08:56
|
Leandro
JavaTeenager
![[Avatar]](/images/avatar/c7e48e023e257c5d8e911.jpg)
Membro desde: 05/12/2002 12:48:54
Mensagens: 157
Localização: SBC - SP - Brazil
Offline
|
VALEU!!!!
Valeu Bani, mesmo que eu não tenha entendido nada do que você falou...
Valeu Rafael, ESSE é o cara... sabia que se ele respondesse eu sairia com a resposta...
Valeu Rob, ficou ainda mais claro e agora já sei melhor QUANDO usar...
E Paulo, to em casa... não conheci nenhum programador em Java com sua sanidade em dia até hj... heheheh
Bom... é questão de tempo até eu ir me acostumando com a idéia de interfaces, mas creio que um dia posso dizer que uso SEMPRE... hehehe
Agora.... (lá vem eu denovo) aproveitando a ÓTIMA vontade de vocês... só pra esclarecer, uma classe Abstrata é uma classe que tem todos os métodos Static???
|
Nosso work é codar! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/01/2003 08:54:54
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline
|
não,
uma classe abstrata é uma classe que tem alguns metodos não implementados, esta implementação fica a cargo de seus descendentes
por exemplo
para que voce faria isto??
você pode implementar estes dois metodos em cada filho desta classe de uma maneira diferente, e sempre que você chamar executaTrabalho ele vai utilizar a mesma logica
é mais ou menos o seguinte, você tem a lógica da opeação definida, mas pode ter mais de uma implementação para ela
espero não ter confundido muito as coisas
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/01/2003 16:24:30
|
Leandro
JavaTeenager
![[Avatar]](/images/avatar/c7e48e023e257c5d8e911.jpg)
Membro desde: 05/12/2002 12:48:54
Mensagens: 157
Localização: SBC - SP - Brazil
Offline
|
Tipow... tentei uma porrada de coisa pra usar essa classe que você postou com alguma classe filha dela mas não consegui...
|
Nosso work é codar! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/01/2003 13:29:31
|
Gerson
JavaChild
![[Avatar]](/images/avatar/ccb1d45fb76f7c5a0bf619f979c6cf36.jpg)
Membro desde: 26/01/2003 19:48:37
Mensagens: 113
Localização: São Paulo
Offline
|
urubatan
uma classe abstrata é uma classe que tem alguns metodos não implementados, esta implementação fica a cargo de seus descendentes
NAO! Uma classe abstrata pode ter ZERO (NENHUM) ou TODOS metodos implementados. Seu uso varia de design p/ design.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/01/2003 14:12:28
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline
|
é verdade,
ela pode ter todos os metodos implementados, mas ai não vejo grande vantagem em declara-la abstract
mas como você disse, é uma decisão de design, acho que a unica vantagem, seria não permitir que a classe fosse instanciada
e respondendo a mensagem anterior
não é a classe mais util do mundo, mas é um exemplo
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
|
|
|
 |
|
|