QTDE de linhas na classe

29 respostas
G

Olá pessoal!

Vocês acham normal uma classe conter +/- 1000 (mil) linhas?
Estou fazendo um programa e a classe da interface principal do programa tem 1048, não faz sentido dividir, já que essa classe realiza uma só coisa: Uma tela!
Apesar de ter todo esse tamanho, ela é extremamente organizada!
Vocês acham isso um serviço de porco?

Gustavo
Valeu gente! :thumbup:

29 Respostas

J

Bom se eu tivesse desenvolvendo algo desde inicio, não acharia normal, tentaria ver uma forma de subdividir a classe (a menos que seja algo muuuuuuuuuito complexo).

Mas aqui na empresa onde trabalho isso é mais do que normal. =/

T

Se for uma tela, eu só questionaria se não é o caso de separar a parte visual (que realmente é muito verbosa!) da parte de tratamento de eventos (que deve ficar em um lugar separado, talvez).

O único problema é se a classe, compilada, ultrapassar 64 KB; aí você vai ter um problema grave.

G

É meio difíciul subdividi-la, ela é puro swing, tenho uma classe chamada métodos para não ter nada de métodos nessa ‘BIG’ classe. Nem os eventos dos componentes não estão nela.
Compilada ela gera 25 class, somando-se os tamanhos dá 58 kb.

Então?!

T

Acho que não tem problema algum. Eu disse que o tal problema dos 64 KB ocorre se todo o código ficar em uma única classe - e acredite, isso ocorre muito quando da compilação de páginas JSP. O Jasper, o compilador que existe no Tomcat (e em outros web containers) que converte JSP para Java, acaba gerando classes bastante grandes, que acabam estourando os 64 KB - note que esse valor soma o código propriamente dito, e os dados (literais strings).

J

thingol:
Acho que não tem problema algum. Eu disse que o tal problema dos 64 KB ocorre se todo o código ficar em uma única classe - e acredite, isso ocorre muito quando da compilação de páginas JSP. O Jasper, o compilador que existe no Tomcat (e em outros web containers) que converte JSP para Java, acaba gerando classes bastante grandes, que acabam estourando os 64 KB - note que esse valor soma o código propriamente dito, e os dados (literais strings).

Thingol, mas que problema que isso dá que nunca ouvi falar?

G

Boa observação do nosso amigo acima, não sabia que dava problemas em se ter uma classe com mais de 64 kb.
Vou presisar tomar mais cuidado! :shock:

B

cara essa tela de ter bastante coisa, e geralmente essa quantidade de coisas acontece em função de abas. Enfim, se for o caso você poderia tirar a lógica de negócio da parte de apresentação (código da tela), pesquise sobre MVC.

G

O responsável pelo tamanho é uma Barra de Menus, ela tem imagens, atalhos de teclado, os ‘negócinhos’ do ALT+letra, divisores …
Tem 7 painéis, todos os painéis e componentes são realinhados e alterado os tamanhos a medida que se altera o tamanho do frame.
Alem de duas tabela bastante complexas.

A barra de menus corresponde a metade da classe.

B

gqferreira:

A barra de menus corresponde a metade da classe.

Então está fácil! Transforme esse menu num componente gráfico, ou seja, faça uma classe separada que represente esse menu (que pelo jeito pode ser reutilizado em outras telas).

F

Sou partidario desta idéia também, inclusive os paineis e a(s) tabela(s) que foram mencionados poderiam passar por estes ajustes.

Como telas complexas geralmente estão associadas a muitos eventos (alta e baixa complexidade) eles também teriam que receber o impacto desta mudança.

A ideia geral seria a seguinte: Esta tela (classe) complexa se transformaria em uma classe que iria agregar as outras partes visuais das outras estruturas; cada componente agregado deveria seguir a idéia do padrão MVC. Exemplificando: O menu deveria ter classes que descrevessem objetos para seu MVC, as tabelas também e assim por diante. Lembrando que, é sempre bom utilizar o bom censo; muitas vezes a gente na ansia de “organizar” as coisas e acaba complicando tudo gerando classes desnecessárias, ainda mais se tratando do SWING.

Em sistemas desenvolvidos com a api swing o pattern MVC deve (na minha opinião) ser uma abstração bem simplificada, pois as classes desta api já implementam este padrão, ou seja, cada componente foi construido baseado nesta idéia.

P.S Se vc estiver utilizando algum tipo de gerador de telas (igual ao matisse) facilmente conseguira classes que fiquem com este número de linhas.

flws

G

É…Talvêz eu possa colocar a barra de menus em outra classe, ajudaria, porém tomaria um bom tempo. Mas vou tentar!
Sobre os geradores de tela, eu não uso nenhum, faço as telas na unha! Peguei raiva quando fui usar o netbeans pela primeira vêz, o troço gerava um código absurdo! Acho que quem é muito dependente dele deve sofrer para entender o código e também com o seu tamanho. Alé de que não é agradável à um programador usar um programa desses como suas pernas e braços, acho que deve agradar aos olhos da empresa aquele programador que é independente. Penso assim porque em Indaiatuba, minha cidade, tem uma empresa chamada Kaisen, que pelo o que li em uma revista, é a 4 melhor empresa para se trabalhar no mundo (nem a Microsoft é a primeira, fica em segundo), e alguns amigos meus entraram lá e o teste era programar o que o entrevistador pedisse mas tinha que ser no bloco de notas, no duro: BLOCO DE NOTAS! por isso prefiro não me viciar nesses programas, não sou passarinho para engolir o que os outros mastigam.

Valeu por todos os que participaram desse tópico, pois tive uma noção em relação ao tamanho das classes, meus amigos sempre me chamaram de porco por usar grandes classes, agora sei que isso é normal, mas o ideal é sempre buscar um meio de subdividi-las (ou será sub-dividi-las? Fiquei sabendo que ífen do ‘sub’ mudou?!).

:thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup:

O

Não te extressa, o limite recomendado é de umas 2000 linhas.

G

:shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock:
2000 :arrow: :shock:
2000 é linha pra caramba… :?

B

gqferreira:
:shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock:
2000 :arrow: :shock:
2000 é linha pra caramba… :?

Hah, tem uma classe aqui com 8125 linhas, 325 KB. E só tende a aumentar. O .class dela tem 103 KB, nunca ouvi falar de problemas com isso.

S

Taí uma informação que eu espero nunca precisar saber…

C

Bruno Laturner:
gqferreira:
:shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock:
2000 :arrow: :shock:
2000 é linha pra caramba… :?

Hah, tem uma classe aqui com 8125 linhas, 325 KB. E só tende a aumentar. O .class dela tem 103 KB, nunca ouvi falar de problemas com isso.

Meu Deus… q loucura… .class 103KB… nossa

V

É a famosa classe BuracoNegro.
:arrow: É enorme, pesadíssima e não para de crescer.
:arrow: Suga todas as coisas em torno dela para dentro de si.
:arrow: Tudo que está próximo gira em torno dela e é expremido sob imensas forças.
:arrow: Ninguém faz ideia do que ocorre dentro dela.
:arrow: Ninguém faz ideia do que existe dentro dela.
:arrow: Pouco se sabe sobre o seu comportamento.
:arrow: Nada que entra pode sair.
:arrow: Destrói tudo a sua volta e por fim acabará por destruir o sistema onde ela está.
:arrow: Muitos acreditam ser simplesmente indestrutível, ou seja, não há como eliminá-la, exceto se esta se juntar a outro BuracoNegro.

:lol:

M

thingol:

O único problema é se a classe, compilada, ultrapassar 64 KB; aí você vai ter um problema grave.

mais que problema é esse?

C

victorwss:
É a famosa classe BuracoNegro.
:arrow: É enorme, pesadíssima e não para de crescer.
:arrow: Suga todas as coisas em torno dela para dentro de si.
:arrow: Tudo que está próximo gira em torno dela e é expremido sob imensas forças.
:arrow: Ninguém faz ideia do que ocorre dentro dela.
:arrow: Ninguém faz ideia do que existe dentro dela.
:arrow: Pouco se sabe sobre o seu comportamento.
:arrow: Nada que entra pode sair.
:arrow: Destrói tudo a sua volta e por fim acabará por destruir o sistema onde ela está.
:arrow: Muitos acreditam ser simplesmente indestrutível, ou seja, não há como eliminá-la, exceto se esta se juntar a outro BuracoNegro.

:lol:

Essa foi boa…rsssssssss

D

Nossa… E eu aqui reclamando de uma classe com 500 linhas…

A

eu acho que qdo vc ta mexendo com Swing, AWT ou SWT eu acho legal você criar classes separadas para um Panel por exemplo e depois só chamar ela dentro do Form …

o legal as vezes é desenhar a interface como deve ser no papel mesmo, assim vc consegue perceber o que poderia ir em cada classe…

M

Quando a classe começar a ficar muito grande, divida em outra classe. :wink:

G

8125 linhas :?: :?: :?: :?:
Estranho isto…acho que o cara que postou isto deve ter esbarrado em um botão a mais…
rsrsrs… :lol: :lol:

T

Na verdade a limitação é 64 KB por método.

http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#88659

I

Eu tinha uma tela swing aqui com quase 7mil.Dava uns 180KB depois de compilado.
Mas só de comboboxes intercambiáveis(que “falavam entre si”) eram 16.Tinha uns 110 campos no total em 6 abas.
Usava uma versão antiga do JFormLayout e tinha um bug estranho que modificava a aparência da aba quando eu quebrava cada aba em um JPanel isolado.E na época usava JCreator ao invés de Eclipse pq meu saudoso Pentium3 de 7anos reclamava muito…
Depois de um ultra-mega-refactoring e atualizando a versão do FormsLayout eu diminui ela para menos de 2500 linhas e 70KB de tamanho compilada(100KB não compilada).Se eu pegar naquele projeto ainda sei que dá para refatorar muuuito mais. :stuck_out_tongue:

A

Cara, 8mil? 7mil? Não foram vocês que escreveram esse código, foram?
Quando eu usava NetBeans, minhas GUIs eram todas feitas na mão… Nossa… Ilegível.

Abraço.

L

Claro que uma classe assim nao eh recomendado e nao tem essa de codigo organizado, o que vc considera organizado?
Uma classe nao pode fazer tudo, ela deve ser especifica vc deve buscar a alta coesao nas suas classes…
1000 linhas, o metodo da linha 10 chama o metodo que ta na linha 899 imagine comparar blocos de codigos nessa classe?

assim se puder da uma estudada em http://www.refactoring.com pode ajudar bastante vc :slight_smile:

G

O cara aê em sima não entendeu :? … é só swing … não há nenhum metodo nela… não ha comunicação interna…

M

É o código que o NetBeans vomita na sua classe?
Pra ele é normal isso.

Fora que nunca vi um código gigante que dizem ser bem organizado que não fosse possivel fazer um Refactoring para melhorar e diminuir.

Criado 8 de janeiro de 2009
Ultima resposta 19 de jun. de 2009
Respostas 29
Participantes 19