| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2008 23:23:22
|
yoshikichi
JavaBaby
![[Avatar]](/images/avatar/8494f6ad42261c6a8acc39ddafbbe080.jpg)
Membro desde: 25/07/2008 22:43:59
Mensagens: 84
Offline
|
Paulo Silveira wrote:
Intefaces com muitos metodos, como disse o thingol, é sinal de design ruim. Mesmo ocorre com Connection e alguns listeners.
Ow, no livro use a cabeca padroesde projetos, o autor fala muito sobre composição, no padrão strategy é q mais fala sobre isso.
pelo q entendi, strategy usa composição.
A pergunta é:
"qndo eu utilizo a composição estou usando o padrao strategy"?
falow
|
Ericsson - EGS |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2008 18:43:21
|
Zakim
JavaEvangelist
![[Avatar]](/images/avatar/e35d7a5768c4b85b4780384d55dc3620.jpg)
Membro desde: 21/07/2005 09:25:24
Mensagens: 482
Localização: Cuiabá - MT
Offline
|
Não necessáriamente!
Crie um novo tópico para discutir isso!
|
http://zakim.blogspot.com - Zakim
Sun Certified Java Programmer
Comece pequeno, pense grande e cresça rápido! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/07/2008 08:51:19
|
netShot
JavaBaby
![[Avatar]](/images/avatar/82034d7a5bdc3b8a2d2d08e9c9ab5c8c.png)
Membro desde: 03/01/2008 09:08:40
Mensagens: 84
Offline
|
Paulo Silveira wrote:prefira sempre o uso de interfaces (e da para sempre usar interfaces em vez de classe abstrata, se voce gastar um pouquinho mais de codigo e fizer composicao). é mais elegante, mais flexivel e menos acoplado... justo porque nao ha heranca de codigo. algumas pessoas consideram heranca uma forte quebra de encapsulamento.
Pode mostrar um exemplo pratico de uso de interfaces + composição e outro com classe abstratas ? Acho que fica melhor explicado.
Abraços
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2008 18:43:17
|
tnaires
Forum Spammer
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1378
Localização: Natal - RN
Offline
|
Estou ressucitando este tópico para discutir um caso especial:
Paulo Silveira wrote:Pra ser sincero, nao vejo nenhum caso. Hoje sou bem xiita que nem o James Gosling, Erich Gamma e Joshua Bloch, que descem a lenha em cima de heranca!
Paulo, neste link o autor expõe um exemplo onde a herança seria adequada:
E justifica com o texto abaixo ( traçando um paralelo entre as 5 regras que regem o uso de herança ):
- Regra 1 (tipo especial): ok. Uma Reserva é um tipo especial de Transação e não um papel assumido por uma Transação
- Regra 2 (mutação): ok. Uma reserva sempre será uma Reserva, e nunca se transforma em Compra (se houver uma compra da passagem, será outra transação). Idem para Compra: sempre será uma Compra
- Regra 3 (só estende): ok. Ambas as subclasses estendem Transação com novas variáveis e métodos e não fazem override ou anulam coisas de Transação
- Regra 4 (não estende classe utilitária): ok.
- Regra 5 (tipo especial de papel/transação/dispositivo): ok. São tipos especiais de Transação
Você concorda com a análise dele? Se discordar, em quais pontos? Na sua opinião, seria coerente forçar a composição afirmando que uma Transacao tem um tipo, e não é de um tipo?
Abraços
P.S. - direcionei a questão ao Paulo por causa de sua afirmação citada no início do post, mas gostaria de saber a opinião da galera do fórum também.
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/10/2008 23:30:40
|
tnaires
Forum Spammer
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1378
Localização: Natal - RN
Offline
|
Só dando um up...
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/10/2008 03:26:42
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5169
Localização: Sydney - Australia
Offline
|
Eu acho meio hipócrita do Gosling ou qualquer outro envolvido com a criação de Java falar mal de herança. O grande problema é que Java não oferece nenhum mecanismo para reuso de código comparável a herança. Se houvessem mixins ao menos...
tnaires wrote:
Não dá para dizer. Sem conhecer o domínio e a implementação qualquer exemplo é falho. O que é uma Transação neste contexto? Eu já trabalhei para alguns bancos e cada um tem um conceito diferente, mesmo várias definições dentro da mesma instituição.
Eu não sou xiita quanto a isso simplesmente porque já vi muita besteira sendo feita em nome de "herança é ruim, use composição". Isso é uma rule of thumb e não uma lei. Como falei antes o design de Java faz com que seja muito difícil resolvermos problemas comuns sem heranças ou gambiarras (strategy de uma implementação só e o fim).
Para mim, a decisão entre delegação e herança passa pelo domínio e este é o principal juiz. Esta delegação faz sentido no domínio? Eu dificilmente criaria uma classe extra na Camada de Negócios só para satisfazer uma rule of thumb.
Ps: Tarso, dar up é muito feio.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/10/2008 10:49:27
|
tnaires
Forum Spammer
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1378
Localização: Natal - RN
Offline
|
pcalcado wrote:Ps: Tarso, dar up é muito feio.
Desculpe ... Você acreditaria se eu dissesse que pensei mil vezes antes de fazer isso? Fiz porque a rotatividade do Java Básico é muito alta, e também porque não encontrei outra opção de torná-lo visível novamente.
pcalcado wrote:Não dá para dizer. Sem conhecer o domínio e a implementação qualquer exemplo é falho. O que é uma Transação neste contexto? Eu já trabalhei para alguns bancos e cada um tem um conceito diferente, mesmo várias definições dentro da mesma instituição.
Entendo. Aparentemente trata-se de uma transação financeira e não bancária. O contexto no qual o exemplo se encaixa é muito vago, não dá mais detalhes sobre o domínio.
pcalcado wrote:Eu não sou xiita quanto a isso simplesmente porque já vi muita besteira sendo feita em nome de "herança é ruim, use composição". Isso é uma rule of thumb e não uma lei.
Pois é... Eu estava falando justamente isso pra um amigo meu que leu sobre isso há pouquíssimo tempo, e ficou xiita quanto à herança. Quando algumas pessoas se deparam com esse "mantra" pela primeira vez, ficam tão impressionadas que passam a abominar totalmente seu uso. Isso ocorre porque elas vinham utilizando herança em todas as situações que requeriam apenas composição ( o caso Pessoa -> PessoaFisica é clássico ).
This message was edited 2 times. Last update was at 12/10/2008 11:03:34
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/10/2008 00:41:48
|
faelcavalcanti
Virtual Machine Man
![[Avatar]](/images/avatar/04f2a4140112ae491f66a1c558df795f.jpg)
Membro desde: 03/05/2006 13:16:25
Mensagens: 943
Localização: Recife-PE
Offline
|
Zakim wrote:Poderiam citar algum caso em que a herança valha a pena em relação a composição?
para implementações como nas classes de stream no pacote java.io, utilizando a concepção do pattern decorator.
|

--
http://faelcavalcanti.wordpress.com/ :: http://pe.debianbrasil.org/
--
Acredite um pouco mais na força de sua própria intuição. Muitas vezes deixamos de realizar algo de bom ou que nos favoreça simplesmente porque achamos tudo muito difícil e por isso nem começamos. Moral da história: A vida é o caminho e não o destino, você é o arquiteto do seu caminho!
--
Obrigado, Rafa Rocha! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/10/2008 00:56:45
|
faelcavalcanti
Virtual Machine Man
![[Avatar]](/images/avatar/04f2a4140112ae491f66a1c558df795f.jpg)
Membro desde: 03/05/2006 13:16:25
Mensagens: 943
Localização: Recife-PE
Offline
|
netShot wrote:Pode mostrar um exemplo pratico de uso de interfaces + composição e outro com classe abstratas ? Acho que fica melhor explicado
um exemplo de composição a partir de interfaces você pode visualizar a partir deste modelo abaixo pelo padrão observer:
já para um modelo com classes abstratas, seria o mesmo padrão utilizando as classes no pacote java.util, como Observable. neste caso prefiro o 1º caso.
|

--
http://faelcavalcanti.wordpress.com/ :: http://pe.debianbrasil.org/
--
Acredite um pouco mais na força de sua própria intuição. Muitas vezes deixamos de realizar algo de bom ou que nos favoreça simplesmente porque achamos tudo muito difícil e por isso nem começamos. Moral da história: A vida é o caminho e não o destino, você é o arquiteto do seu caminho!
--
Obrigado, Rafa Rocha! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/10/2008 06:47:10
|
tnaires
Forum Spammer
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1378
Localização: Natal - RN
Offline
|
faelcavalcanti wrote:um exemplo de composição a partir de interfaces você pode visualizar a partir deste modelo abaixo pelo padrão observer:
Outro exemplo é o padrão Strategy:
http://en.wikipedia.org/wiki/Strategy_pattern
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires |
|
|
 |
|
|