Pessoal tenho a situação abaixo, e gostaria de saber se há uma melhor maneira de lidar com isso.
Trata-se do seguinte… a classe GuiDetalheCliente, extendes a classe Container.
Sempre que eu executo a clase GuiDetalheCliente, é preciso executar as classes abaixo…
atualmente, passo para o construtor das classes que estão abaixo, um “Container” e um “GuiDetalheCliente”, pois essas precisam acessar
tanto o container quanto o GuiDetalheCliente.
P/ facilitar, pensei primeiramente fazer com que as classes abaixo, estendessem a GuiDetalheCliente.
Assim, poderia acessar tanto o container, quanto variáveis da GuiDetalheCliente.
O problema é que, quando uso extend, a minha GuiDetalheCliente está null p/ as subclasses.
Acho que herança não é a melhor opção…
Se elas precisam acessar e não “ser” uma classe “GuiDetalheCliente” a melhor forma seria mesmo por composição.
Não vejo problema de passar a referência no construtor.
Antes, métodos das classes abaixo, estavam dentro desta GuiDetalheCliente,
uma solução que encontrei, foi quebra-la em +3 classes.
as classes abaixo da GuiDetalheCliente, possuem somente 2 métodos cada.
e os métodos tem o mesmo nome.
createUI();
e
setVisible(boolean vlr);
no método createUI() eu preciso acessar parametros que já foram atribuidos valores na classe GuiDetalheCliente.
atualmente vem dando muito trabalho, dar manutenção nessas classes.
o fato de alterar na GuiDetalheCliente me obriga a mecher nas demais, e vice-versa.
[quote]Antes, métodos das classes abaixo, estavam dentro desta GuiDetalheCliente,
uma solução que encontrei, foi quebra-la em +3 classes.
as classes abaixo da GuiDetalheCliente, possuem somente 2 métodos cada.
e os métodos tem o mesmo nome.
createUI();
e
setVisible(boolean vlr);
no método createUI() eu preciso acessar parametros que já foram atribuidos valores na classe GuiDetalheCliente.
atualmente vem dando muito trabalho, dar manutenção nessas classes.
o fato de alterar na GuiDetalheCliente me obriga a mecher nas demais, e vice-versa. [/quote]
Amigo, não estou conseguindo enxergar… ou talvez tenha entendido errado.
Se conseguir postar algum fonte talvez fique mais facil…
Veja o problema que eu tinha.
uma janela(GuiCliente) com detalhes do cliente (Informações, Endereço e Financeiro).
essa classe(GuiCliente) desenhava tudo, eu tinha a criação dos dados em uma classe só, muitos dados. Caso precisasse alterar layout d Endereço, teria que mecher nos demais.
Partindo deste ponto, quebrei essa classe em outras 3 classes.
Só que, a classe GuiCliente, extende (Container) e as outras 3 classes precisam acessar o container desta classe.
Fazer através de herança ou composição não vai deixar de acessar o container da classe principal.
Imagina que nem tudo da GuiCliente será usado nas outras classes. Neste caso poderia quebrar em mais classes e usar composição.
Não entendi pq ficaria null… você não esta confundindo com instância da classe?
Na prática, hoje… cada uma das classes contém uma GuiCliente.
Para melhor especificar, segue imagem abaixo…
os métodos, das demais classes são chamados dentro do IniciaContainer(nome ta fora do padrão rs)
esse tipo de acesso deve ser feito, para que consiga posicionar as informações de Financeiro,
de acordo com as informações que já foram desenhadas no container…
[quote=jmmenezes][quote]
Só que, a classe GuiCliente, extende (Container) e as outras 3 classes precisam acessar o container desta classe.
[/quote]
Fazer através de herança ou composição não vai deixar de acessar o container da classe principal.
Imagina que nem tudo da GuiCliente será usado nas outras classes. Neste caso poderia quebrar em mais classes e usar composição.
Não entendi pq ficaria null… você não esta confundindo com instância da classe?[/quote]
Quando eu uso ‘extends GuiDetalheCliente’ eu tenho um StackOverflowError
Amigo…
Acho que só você colocando o código mesmo para tentar ver melhor!
Pelo que eu entendi, você precisa de algo, que não sabe exatamente como ? Você poderia fazer da seguinte maneira:
ClassePai {
public ClassePai() {
iniciarDependencias();
}
public void iniciarDependencias() {
//metodoVazio ou pode trocar por um abstrato, e todas as filhs seriam obrigadas a implementala.
}
}
ClasseFilha extends ClassePai {
@Override
public void iniciarDependencias() {
//inicia depenencias aqui
}
}
De uma pensada também no template method, quem sabe você não tenha alguma ideia: http://blog.caelum.com.br/design-patterns-no-java-se-o-template-method/
Tome muito cuidado com metodos que geralmente são abstratos e que são chamadas da classe pai, as vezes eles podem se tornar um problema de design.
[]'s
[quote=WRYEL]…metodos que geralmente são abstratos e que são chamadas da classe pai, as vezes eles podem se tornar um problema de design.
[]'s[/quote]
Era exatamente isso o que procurava, irei pesquisar à respeito, assim que conseguir apresento à vocês… Obg