Problema com arquitetura em um sistema de desenho em Java  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
VantuilJose
JavaChild
[Avatar]

Membro desde: 15/09/2008 11:47:53
Mensagens: 101
Offline

Blz galera?
Aqui tô com o seguinte problema:
Tenho uma classe Forma e algumas filhas: Quadrado, Circulo, Triangulo.

Tenho também um Jframe onde há uma toolbox onde você pode selecionar a forma que quer desenhar, e um PanelDesenho que é uma classe capaz de desenhar essas formas, (O método de desenho está na classe Forma(abstrato), e as outras classe o implementam...).

Vou ter que criar um se pra cada Forma? Queria uma jeito que, quando o usuário fosse desenhar no PanelDesenho eu instanciasse a forma correta, e, quando criar novas formas (Estrela por exemplo), não precise alterar a classe PanelDesenho adicionando mais if's pra ela saber qual forma desenhar..

Alguma sugestão? Padrão de Projeto? Gambiarra?

Valeu,

Vantuil Oliveira
Tecnólogo em Análise e Desenvolvimento de Sistemas - IFMG Bambuí
Mestrando em Ciência da Computação - UFOP
-
"I am the maniac serial killer that knows where you live who will maintain your code!"
[MSN]
juniorsatanas
GUJ Master
[Avatar]

Membro desde: 20/05/2007 01:08:24
Mensagens: 1864
Localização: web2ajax@gmail.com
Offline

posta a imagem desse projeto aqui.. fiquei curioso..


Cheque Mate em 6
[WWW] [Yahoo!] aim icon [MSN] [ICQ]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Online

O ideal é criar uma classe para cada sim. O padrão de projeto para evitar os ifs é o strategy.

Você pode ver mais detalhes de Java 2D no meu site (link na minha assinatura).

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
VantuilJose
JavaChild
[Avatar]

Membro desde: 15/09/2008 11:47:53
Mensagens: 101
Offline

Junior, aqui, não sei se é bem isso que vc quer...
heheeh
TEm um esboço idiota do sistema... É basicamente isso..
Preciso de saber como vou fazer, se, cada Forma sabe desenhar a se mesma e eu não ter que ficar panelDesenho.setForma("Quadrado"), e na classe PanelDesennho não ter que fazer um monte de if, quando o usuário estiver desenhando a imagem..


Se quiser ver o diagrama de classes eu envio, e, basicamente é o que desecrevi no post... Cada classe que herda forma tem que implementar o método drawYourselg(Graphics g), onde elas se desenham no Graphics que eu passar...

ViniGodoy, vou dar uma olhada no Strategy e no seu site, eu já estava ciente que é inviável não fazer uma classe para cada forma, mas quero deixar o sistema o mais extensível possível, e permitir que a adição de uma forma posteriormente altere o menor numero possível de classes...

valeu pessoal..

This message was edited 1 time. Last update was at 25/04/2010 18:25:47


Vantuil Oliveira
Tecnólogo em Análise e Desenvolvimento de Sistemas - IFMG Bambuí
Mestrando em Ciência da Computação - UFOP
-
"I am the maniac serial killer that knows where you live who will maintain your code!"
[MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Online

Justamente fazer uma classe para cada forma é o que vai tornar seu sistema extensível.

Isso através do polimorfismo.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
VantuilJose
JavaChild
[Avatar]

Membro desde: 15/09/2008 11:47:53
Mensagens: 101
Offline

Tudo bem ViniGodoy, mas quando o usuário arrastar o mouse eu terei de desenhar a forma que ele selecionou, aí vou fazer um if?
Tipo vou ter um


Eram esses if's e a adição de outros que desejo evitar... entenderam?

This message was edited 1 time. Last update was at 25/04/2010 19:57:59


Vantuil Oliveira
Tecnólogo em Análise e Desenvolvimento de Sistemas - IFMG Bambuí
Mestrando em Ciência da Computação - UFOP
-
"I am the maniac serial killer that knows where you live who will maintain your code!"
[MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Online

Realmente, vc não precisa desses ifs.

Essa variável forma não deveria ser uma String, e sim uma classe, que permita que vc crie as formas por polimorfismo.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
VantuilJose
JavaChild
[Avatar]

Membro desde: 15/09/2008 11:47:53
Mensagens: 101
Offline

Mas eu teria que fazer isso com reflection certo?
ou estou sendo ignorante?

Vantuil Oliveira
Tecnólogo em Análise e Desenvolvimento de Sistemas - IFMG Bambuí
Mestrando em Ciência da Computação - UFOP
-
"I am the maniac serial killer that knows where you live who will maintain your code!"
[MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Online

Não, o código do seu botão ficaria:


E, na hora que o usuário soltar o mouse:

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
VantuilJose
JavaChild
[Avatar]

Membro desde: 15/09/2008 11:47:53
Mensagens: 101
Offline


ViniGodoy,
Isso é Abstract Factory?
Dei uma olhada lá no seu site, muito bom o material. Você tem algum tutorial, ou links que me ajudem a desenhar as formas na tela? está funcionando perfeitamente com imagens menores, mas com imagens muito grande, (imagem de fundo), fica bem lento, já que tenho que desenhar a imagem nop drag do componente....

Vantuil Oliveira
Tecnólogo em Análise e Desenvolvimento de Sistemas - IFMG Bambuí
Mestrando em Ciência da Computação - UFOP
-
"I am the maniac serial killer that knows where you live who will maintain your code!"
[MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Online

Isso é o factory method. E, por incrível que pareça, fábricas assim também são parte do padrão Strategy.

O abstract factory é quando vc tem diversas fábricas para componentes relacionados, numa mesma classe.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team