Mostrando postagens com marcador Más Praticas de Programação. Mostrar todas as postagens
Mostrando postagens com marcador Más Praticas de Programação. Mostrar todas as postagens

sábado, 5 de julho de 2014

Swing! A primeira impressão não é a que fica.

Como é bom mudar de opinião e ver as coisas sobre outra perspectiva. Nunca conseguiria ser como as pessoas que morrem com uma opinião fixa sobre alguma coisa, muitas vezes sem ao mesmo ter tido alguma experiência com o motivo da opinião.  Já havia escrito sobre isso no Facebook, mas com o sucesso do projeto no qual estou trabalhando decidi falar sobre isso aqui no blog também.

Algum tempo atrás eu redescobri o Swing! Não é o que você está pensando é o Java Swing. Antigamente, não gostava do seu modelo, achava demasiado complicado! Para mim a melhor plataforma para criação de interfaces com o usuário era a disponibilizada pelo Delphi. O modelo do Swing não podia se comparar as facilidades disponibilizadas por ele .

quarta-feira, 2 de janeiro de 2013

Otimização e Boas Práticas de Programação!


O Sérgio Taborda escreveu um excelente artigo sobre otimização preventiva de código. Concordo com ele em quase tudo, só não considero alguns casos como otimização que, a meu ver, são boas práticas!

Primeiramente, deve se entender o que é otimização. Conforme o dicionário Aurélio, otimização, vem de otimizar cuja a definição para a informática é:
Aperfeiçoar (um programa, rotina, etc) a fim de que ele realize sua função no menor tempo ou no menor número de passos possível. 
Só que um problema deve utilizar somente o número de passos necessários a sua resolução e nada mais e isso não ocorre nos casos abaixo, similares a exemplos colocados pelo Sérgio:
void fazAlgo(boolean ok){
  if(ok == true){
    //faz alguma coisa
  }
  else {
    //faz outra coisa
  }
...

private Set<Cliente> clientes;

void buscaCliente(cpf CPF){
  Cliente resposta;
  for(Cliente cliente : clientes){
    if (cliente.getCpf.equals(cpf))
      resposta = cliente;
  }
  return resposta;
}
Na função fazAlgo (desconsiderando possáveis otimização do compilador) a verificação é desnecessária, pois são feitas duas operações ao invés de uma). Na função buscaCliente a iteração continua mesmo que tenha encontrado o cliente na primeira iteração! Em ambos os casos temos um problema de desempenho por más praticas de programação na minha opinião!

As soluções de ambas são simples, e explicadas pelo Sérgio (deixa de ser preguiço e vai ler o post dele dele), mas não acredito que sejam "otimizações". Uma otimização possível do exemplo acima, que também foi exemplificado por ele, seria substituir o Set por um Map assim na busca de clientes teríamos um ganho de desempenho pois teríamos apenas uma operação sendo feito ao invés de N conforme exemplo abaixo. Nesse caso, temos realmente uma otimização preventiva.

private Map<CPF, Cliente> clientes;
void buscaCliente(cpf CPF){
  return clientes.get(cpf);
}
Para concluir, a minha intenção ao escrever este texto é ressaltar a importância da diferença entre otimização e a alteração de código para corrigir problemas oriundos de más práticas programação. Más praticas devem ser combatidas e otimização devem ser feitas com moderação pois podem introduzir erros ou tornar o código confuso e de difícil manutenção. Conforme o citação retirado do livro Java Efetivo, de Joshua Bloch (o qual recomendo a leitura veementemente)
Mais erros de computação são cometidos em nome da eficiência (sem necessariamente atingi-la) do que por qualquer outra razão - inclusive a simples ignorância!
 Então evite as más práticas e otimize com moderação!