Estou participando de um projeto na universidade em que estudo e inicialmente este projeto foi desenvolvido em delphi. Só que devido algumas mudanças foi necessario implementação deste sistema em Java.
Tenho uma boa experiencia em delphi e percebi uma diferença interessante e gostaria saber se vcs podem me ajudar
DUVIDA:
No deplhi podemos fazer referencia às propriedades de um componente sem precisar repetir o nome do mesmo, desta forma:
// Voces podem perceber que eu repeti ‘painelCadastrarServidor’ 3 vezes… o que se torna um pouco trabalhoso a depender da quantidade de componentes em tela…
Realmente, Java não tem a construção with…do. E sinceramente, eu particularmente não gosto não. E até interessante quando se tem um bloco muito grande de setter ou getter de um mesmo objeto, mas se você tiver que colocar código no meio fica muito confuso, pois não dá pra saber se o método que você chama é do objeto referenciado ou da classe. Esse comando veio do Pascal, de uma época em que não se tinha IDE’s poderosas em que você dispõe de autocomplete.
Também desconheço opção deste tipo na linguagem Java.
Como foi citado, um bom editor com boas opções de autocomplete já vai te ajudar bastante.
Uma dica é verificar quais construtores o objeto disponibiliza e configurar o objeto já ao instanciar, economizando algumas possíveis chamadas a setters. No exemplo de adicionar listeners que você postou, acho que não irá encontrar construtores com estas opções, mas em outros casos podem existir.
Delphi suporta o conceito de propriedade. Na verdade é um par de get e set, mas que você utiliza como se fosse um atributo. Se você usa do lado direito de uma atribuição ele executa o get, se você utiliza do lado esquerdo ele executa o set. E você pode definir a propriedade como read-only ou write-only, definindo apenas o get ou apenas o set, respectivamente.
[quote=jairelton]Em Java não existe nada semelhante.
E mexer com componentes de GUI manualmente é muito trabalhoso mesmo, recomendo o uso de alguma IDE pra isso, como o Netbeans.[/quote]
Na minha opinião isto é relativo. Construir interfaces simples e estáticas é realmente mais rápido utilizando-se drag and drop (NetBeans por exemplo), porém, construir interfaces complexas e dinâmicas com este tipo de ferramenta é bastante complicado.
Além disso, existem pessoas totalmente desacostumadas com estas interfaces. Eu por exemplo acho consideravelmente mais fácil digitar um código invocando um método de determinado componente do que procurar em uma paleta a determinada “propriedade”.
EDIT: Mas gosto é gosto e o importante é entregar o projeto atendendo aos requisitos
Particularmente eu também prefiro fazer interface “na mão” mesmo. Claro, isso se o framework tiver algum tipo de LayoutManager, porque usar posicionamento absoluto componente por componente também não dá.
Isso sem falar na depuração… Utilizar os recursos de depuração do delphi em um código cercado por um with é um pouco mais complicado. Porém, eu acho que deixa o código bem mais legível e mais DRY.
[quote=yoshikichi]Um conselho, esqueca Delphi…
Acessar uma propriedade diretamente é meio procedural.
em vez disso utilize metodos.
falow[/quote]
Não concordo. Usar propriedades não é a mesma coisa que deixar seus atributos públicos, pois como lembrou o rmendes08, há chamadas de métodos envolvidas no uso de propriedades. Ou seja, quem usa propriedades em Delphi tem que usar métodos. Particularmente, acho a implementação de propriedades no Delphi bastante elegante.
O que é atributo no Java é Field no Object Pascal. É boa prática inicializar os campos privados com ‘F’.
E como você bem disse, as propriedades “encapsulam” os getters e setters. Confesso que não gosto desse conceito.
Acho que além do problema de debug, você ainda tem o problema de não saber se o que você está chamando é do objeto do with, do form (quando é o caso), ou de qualquer outro treco. É cruel.
Nisso eu discordo. IMHO, um código com with fica menos legível.
E por fim:
[PRÉ-conceito]
[quote=yoshikichi]Um conselho, esqueca Delphi…
Acessar uma propriedade diretamente é meio procedural.
em vez disso utilize metodos.
falow[/quote]
[/PRÉ-conceito]
apesar de ser um atalho tosco ^^ … caso vc esteja implementando suas proprias coisas… vc pode, no lugar de métodos voids, utilizar métodos que retornam o proprio objeto, para que vc possa setar propriedades mais rapidamente… mas isso tem q ser uma implementação sua…
Por exemplo…
[code]public class Rosto {
//… fields…
//…
public Rosto setCorDoCabelo(Color cor) {
this.corDoCabelo = cor;
return this;
}
public Rosto setCorDoOlho(Color cor) {
this.corDoOlho = cor;
return this;
}
//… assim sucessivamene…
}
//um uso para a classe acima
Rosto r = new Rosto()
.setCorDoCabelo(new Color(255,255,255))
.setCorDoOlho(new Color(0,0,255));
[/code]
assim vc consegue ir invocando diretamente os varios métodos ^^
sim, sei que é necessario pro padrao build, falei tosco, apenas em querer implementar para parecer com o delphi =x
e sobre a discução do ternario, não era sobre usar ou não o operador, era sobre usar ele encadeado ^^
mais como agente não manda no rumo que a discução toma …