Sets vs Construtor - [Resolvido]

Bom dia a todos.

Para esclarecer bem a dúvida, um código básico e bem simples de entender.

Exemplo 1

class Dog { private String name; public Dog(String name) { this.name = name; } public String getName() { return name; } } }

Agora com o modelo de set.

Exemplo 2:

[code]class Dog {
private String name;

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}
}[/code]

Bom, uma diferença óbvia nesse caso é que no exemplo do construtor só posso setar o campo name via construtor e no exemplo 2 via set.
Ambos obrigam que você tenha uma instancia do Objeto, nisso, não se altera.

Eu não gosto do exemplo 1 quando temos muitos atributos, o que eu diria que acima de 4 são muitos já. Passa a ter um construtor longo e etc, mas isso é questão minha, particular. Por isso, alguém saberia me explicar no Java se existe uma diferença técnica entre eles? Desempenho, qualidade de código, entre outros…

Talvez, em determinadas situações um exemplo se aplique melhor que o outro, só não consigo enxergar tal cenário.
Bom, é isso. Espero ter sido claro.

O questionamento é porque já vi ambos modelos sendo aplicados, seja em sistemas e/ou exemplos em livros entre outros.

Abraços a todos.

Nos exemplos que vc deu, no primeiro o nome do animal é imutável, no segundo não.

[code]// 1
Dog dog = new Dog(“Rex”); // Depois daqui não é possível mudar o nome.

// 2
Dog dog = new Dog();
dog.setName(“Rex”);
// Faz algo
dog.setName(“Lulu”); // Pode modificar o nome.[/code]

como o lsjunior já disse, a diferença é que não tendo o método set você não vai conseguir modificar o valor do atributo nunca mais.

Bom dia nel eu particularmente trabalho tanto com o construtor e com o metodo set, pois quando instancio um objeto qualquer que foi definido um construtor explicito para ele eu garanto que irei passar todos os atributos, sem pedigo de esquecer, pois se caso eu esquecer será impossivel compilar, e quando à necessidade de se alterar algum atributo eu utilizo o set, na minha opiniao mesmo eles tendo quase as mesmas funções, é ideal usar tanto um quanto outro.

lsjunior, não havia prestado atenção na questão do objeto torna-se imutavél, afinal, para que haja uma modificação de valor, eu preciso criar um novo objeto (instancia) e não simplesmente modificar um já existente.

Sendo assim, creio que o resultado final depende de análise, se é necessário ou não que o objeto seja imutavél.
Muito obrigado a todos que opinaram.

O construtor também garante a obrigatoriedade do atributo. Note que no primeiro caso, mesmo que você tivesse um set, o usuário ainda seria obrigado a informar um nome de cachorro para começar a usar a classe.

Isso é especialmente importante para atributos que não podem ser nulos, ou tem que respeitar um determinado intervalo, e não tem um valor padrão que vc mesmo possa atribuir.