domingo, 15 de fevereiro de 2009

Effective Java 1

Fiz esse blog para tratar dois assuntos, basicamente, Computação e Informação, quando eu digo informação, estou falando de ciência da informação, ainda não falei nada de computação, então esse será o primeiro de um série de post sobre o livro “Effective Java” de Joushua Block, pq cho que esse é um bom pretexto para falar de uma das coisas que eu mais gosto, programação de computadores.
Embora esse seja um livro de Java, ele poderia muito bem se chamar Effective SmallTalk, ou Effective Rubi ou Effetive qualquer outra linguagem da Orientação a Objetos, pois acredito que esse livro que fale muito mais de Orientação a Objetos do que qualquer outra coisa, como por exxemplo, os detalhes da sintaxe Java. O livro é divido em 57 tópicos, vou comentar cada um deles sobre meu ponto de vista. O primeiro tópico é o seguinte “Considere fornecer métodos státicos para fabricar objetos ao invés de um construtor”.
A primeira boa razão para se fazer isso é: métodos abstratos tem um nome, diferentemente dos construtores que devem ter o mesmo nome do que a classe, por exemplo, considere os dois exemplos a seguir: a classe cachorro usa um contrutor Cachorro() e a classe gato usa um método statico novoGato(), o nome do método novoGato() é muito mais intuitivo que o contrutor Cachorro(), mesmo que esse método não tivesse nenhum comentário ou JavaDoc, ficaria muito fácil de saber o que ele faz.

public class Cachorro{
public Cachorro(){
}
}

public class Gato{
public static Gato novoGato(){
return new Gato();
}
}

A Segunda razão para se usar métodos státicos para criar objetos, o invés de usar construtores é: Em um método stático vc não é obrigado a criar um objeto novo toda vez que o método é chamado. A aplicação para isso é o popular partten singleton, mas outras aplicações para isso com certeza pode sem implementas, dependendo, é claro do escopo do projeto que vc esteja trabalhando.

A terceira razão para se utilizar métodos estáticos para a criação de objetos é que eles podem retornar objetos de qualquer tipo que seja subclasse da classe em questão, isso sim, dá uma grande liberdade ao desenvolvedor, enquanto está trabalhando em seu projeto. A API de colletions nativa do Java usa e abusa dessa idéia.

Mas como tudo na vida, há desvantagens de se usar métodos estáticos para criar objetos, são elas: classes que não tenham seus construtores públicos (public) ou protegidos (protect), como é o caso da implementação do singleton, não poderão gerar sub-classes. Métodos státicos usados para criar novos objetos são iguais aos outros métodos estáticos, não há nada que os diferencie dos outros métodos státicos.

Nenhum comentário: