| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/02/2003 19:14:01
|
Administrador
Java Eldar
Membro desde: 02/08/2002 12:27:02
Mensagens: 0
Offline
|
Assunto: O que são interfaces? Isto não é difícil de aprender. O ponto é saber o porquê de usá-las.
Você pode ler este artigo na íntegra http://www.guj.com.br/java.artigo.123.1.guj
Por favor, coloque os seus comentários sobre este artigo aqui.
This message was edited 1 time. Last update was at 19/07/2005 20:19:17
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/02/2003 23:46:17
|
EddiE
Virtual Machine Man
Membro desde: 31/08/2002 09:05:07
Mensagens: 647
Localização: São Paulo - SP
Offline
|
Esse tutorial é animal!
Vale a pena!!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/02/2003 11:47:26
|
Panga
JavaBaby
Membro desde: 23/01/2003 09:09:34
Mensagens: 84
Localização: Brasília
Offline
|
Me esclareça uma dúvida. No exemplo das clinicas as interfaces devem conter os métodos que serão implementados nas classes Pessoa e Animal? É para isso que servem interfaces, contém uma lista de métodos obrigatórios para classes semelhantes? Valew.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/02/2003 14:28:14
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
Exatamente!!
|
"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) 02/03/2003 20:45:20
|
Panga
JavaBaby
Membro desde: 23/01/2003 09:09:34
Mensagens: 84
Localização: Brasília
Offline
|
Valew aí Rafael, mas surgiu outra dúvida.Quando eu faço isso:
Paciente p = new Pessoa();
Paciente a = new Animal();
E eu quiser utilizar um um metodo que só tenha na classe Pessoa eu preciso de um cast? Por exemplo:
public class Pessoa implements Paciente{
public boolean testePsicologico(char resposta){
//implementacao
}
}
quando eu usar p.testePsicologico('s'); o que acontece?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2003 21:13:43
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
Faca o teste . Da erro de compilacao, uma vez que o metodo "testePsicologico" nao existe na classe "Paciente", mas sim apenas na "Pessoa".
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/04/2003 14:46:07
|
Recruta
Thread.start()
Membro desde: 03/04/2003 14:19:51
Mensagens: 27
Offline
|
Colega Rafael,
Tenho uma dúvida com relacao a classe Pessoa, ela define novamente os atributos e metodos ja definidos em Funcionario?!? Posso declarar outros? Posso recodificar eles? Sao necessarios?
Antecipadamente, muito obrigado
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2003 00:32:19
|
alex@ander
JavaBaby
![[Avatar]](/images/avatar/a9b7ba70783b617e9998dc4dd82eb3c5.jpg)
Membro desde: 28/04/2003 23:23:35
Mensagens: 78
Localização: São Paulo
Offline
|
Alguém saberia me dizer por que razão a herança múltipla seria prejudicial à elaboração de um software ? E qual a vantagem em se usar interfaces frente a herança multipla ?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2003 00:40:25
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
oi Alexander
Esse eh um topico muito delicado, e que pode causar muita polemica.
Heranca, simples ou multipla, por si soh, quebra o encapsulamento. E porque?
Porque a classe filha precisa conhecer detalhes de _implementacao_ da classe pai, o que quebra o paradigba de OO. O paradigma de OO deixa bem claro que voce deve se preocupar com a interface da classe, isso eh, com o que ela faz, e nao se preocupar com como ela faz.
Recomendo como leitura o livro Design Patterns do Gof, que fala bastante em preferir composicao a heranca, e o Effective Java, que mostra _muitos_ bugs que nascem com a utilizacao de heranca.
Com certeza, com heranca voce escreveria menos codigo. Mas OO nao quer que voce escreve menos codigo, quer que voce escreve de maneira clara (streamline of code), e encapsulada (sabendo o que faz, e nao como faz).
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2003 09:37:59
|
J2Alex
JavaEvangelist
![[Avatar]](/images/avatar/f4be00279ee2e0a53eafdaa94a151e2c.png)
Membro desde: 18/01/2003 08:14:41
Mensagens: 348
Localização: São José dos Campos
Offline
|
Mas OO nao quer que voce escreve menos codigo, quer que voce escreve de maneira clara (streamline of code), e encapsulada (sabendo o que faz, e nao como faz)
Caro Paulo, eu pessoalmente discordo um pouco dessa opinião. Escrever menos código induz a menos erros. O reaproveitamento de código é de extrema importância para a criação de software de qualidade em "ambiente de produção". E nem sempre é necessário que a classe filha saiba detalhes da classe pai, alías, diria quase nunca - desde que a classe seja bem definida e estruturada.
O desenvolvimento hoje é infinitamente mais complexo que a 10 anos atráz. O reaproveitamento promovido pela hereditariedade é crucial para suprir as necessidades atuais. E não acho que a herança quebre o paradigma da OOP, pelo contrário, considero que seja o conceito básico acerca do assunto.
Mas claro, existem posições divergentes quanto a isso.
Quanto à herança múltipla, acho sim, que esta pode tornar muito complexo e instável o gerenciamento das classes filhas.
É isso! Valeu!
|
Alexandre
Hoje tem Balada
https://apps.facebook.com/hojetembalada
Guia colaborativo de baladas, bares e restaurantes |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2003 16:00:13
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
J2Alex wrote:
Caro Paulo, eu pessoalmente discordo um pouco dessa opinião. Escrever menos código induz a menos erros. O reaproveitamento de código é de extrema importância para a criação de software de qualidade em "ambiente de produção". E nem sempre é necessário que a classe filha saiba detalhes da classe pai, alías, diria quase nunca - desde que a classe seja bem definida e estruturada.
Oi Alex. Lendo um dos dois livros que eu recomendei, um deles do Joshua Bloch, da SUN, msotra como a gente rpecisa saber da classe pai e da filha quando a gente escreve uma classe voltada para a heranca. Ele mostra um classico exemplo, de voce tentando extender um java.util.ArrayList.
O livro diz que sempre a classe filha tem de saber como a classe pai, nao importa a situacao. Isso quebra o encapsulamento, que eh o apradigma OO.
Bem, sempre considerei escrever menos uma solucao pior, senao estariamos todos programando em perl . Bricnaidera, mas reutilizar codigo por heranca eh uma pessima opcao, ja que voce pode ser quebrado nas proxima versoes da superclasse, ou mesmo sofrer muito se uma subclasse da sua classe voerrida um metodo da classe avo.
Alias, tudo isso que eu to falando eh meio um copy and paste do Effective Java e do Design Patterns. Quando chegar em casa eu pego umas citacoes interessantes a esse respeito. Eu considero muito esses dois livros porque tive muitos poblemas com heranca, e percebi que evitando heranca meu codigo eh mais limpo e menos acoplado. (baixo acomplamento, alta coesao!)
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2003 17:48:58
|
J2Alex
JavaEvangelist
![[Avatar]](/images/avatar/f4be00279ee2e0a53eafdaa94a151e2c.png)
Membro desde: 18/01/2003 08:14:41
Mensagens: 348
Localização: São José dos Campos
Offline
|
Paulo,
Porque a classe filha deve sabe como a classe pai foi implementada?
|
Alexandre
Hoje tem Balada
https://apps.facebook.com/hojetembalada
Guia colaborativo de baladas, bares e restaurantes |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2003 20:30:39
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
Effective Java, Joshua Bloch, pagina 71
"Unlike method invocation, inheritance breaks encapsulation"
E ele roubou essa frase de Alan Synder, na Conferencia de OOP, Sistemas e linguagens da AMC em 1986.
Ai ele vai e fala os argumentos que falei previamente. Veja a classe AbstractList (qquer abstract collection). A documentacao do javadoc deles tem um estilo completamente diferente: em vez de falar o que o metodo faz, ele fala, explicitamente, COMO ele faz, que metodo ele chama, de que variaveis protected ele depende. Porque? Porque a subclasse _precisa_ saber a implementacao da superclasse, ou vai fazer override de algo achando q outra coisa ia acontecer.
Design Patterns, Gang of Four, pagina 19:
"The style of reuse (composition) is called black box reuse, because no internal details of objects are visible."
Composition rulez! . Ele continua e fala:
"Because inheritance exposes a subclass to detais of its parents implementation, its often said that inheritance breaks encapsultaion" na mesma pagina. E ele cita o mesmo autor da conferencia da ACM de 86.
Nao sei se deu para engolir, ou se esclareceu. Mas lendo esses capitulos desses livros por completo, eh um choque a primeira vez.
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/05/2003 08:58:55
|
J2Alex
JavaEvangelist
![[Avatar]](/images/avatar/f4be00279ee2e0a53eafdaa94a151e2c.png)
Membro desde: 18/01/2003 08:14:41
Mensagens: 348
Localização: São José dos Campos
Offline
|
Bem, ainda não achei tão convincentes os argumentos... digo porque na prática, tenho várias classes criadas por hereditariedade que não fazem a mínima idéia do que as superclasses fazem...
Mas vou procurar estudar um pouco sobre o assunto e acho que vc realmente deva estar correto no que diz.
Valeu! Tenho aprendido algumas coisas interessantes com vcs.
[]´s
|
Alexandre
Hoje tem Balada
https://apps.facebook.com/hojetembalada
Guia colaborativo de baladas, bares e restaurantes |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/05/2003 09:08:13
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
J2Alex wrote:Mas vou procurar estudar um pouco sobre o assunto e acho que vc realmente deva estar correto no que diz.
Lembre-se que aqui nao existe um correto e um errado, Eh tudo questao de design e boas praticas.
Creio que se as classes forem simples, e se voce tiver classes bastratas que voce soh faz override dos abstracts, nao haja problema. Mas se as classes nao forem simples, voce precisa comecar a tomar cuidado.
Se heranca esta funcionando 100% ai para voce, eh sinal que a classe pai foi desenhada com bastante cuidado. A classe Classloader eh um exemplo disso, ela ta cheio de metodo privado, que sao helpers internos, para nao haver chamada virtual quando a classe pai nao quer.
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
|
|