Duvida com construtores

9 respostas
wampactimus

Boa tarde pessoal do guj

tenho uma duvida, poderiam me escalrecer ?

o meu professor de java me disse para criar um construtor inicializando todos os atributos
vou colocar o código abaixo para vocês verem

eu gostaria de saber se issi é necessário, se é correto fazer isso e por que qual o objetivo disso

eis o código:

public class Funcionario {

private String Nome;

private String Depart;

private double Salario;

private Data DataEntrada;

private String RG;

private boolean Ativa;

private static int Identificador;

public Funcionario () {

}

public Funcionario (String JNome, String JDepart, double JSalario, String JDataEntrada, String JRG,

boolean JAtiva)  {

//método construtor iniciando todos os atributos

this.Nome = JNome;

this.Depart = JDepart;

this.Salario = JSalario;

this.DataEntrada = JDataEntrada;

this.RG = JRG;

this.Ativa = JAtiva;

}

// getteres e setteres…

9 Respostas

drigo.angelo

Oi,

Quando for postar seu código, utilize a formatação do fórum por favor!

Quanto ao seu construtor está aparentemente correto, e se é necessário ou não depende de sua aplicação, apesar de ser muito útil as vezes :stuck_out_tongue:

wampactimus

Obrigado pela ajuda drigo.angelo e vou usar a formatação do forum da proxima vez

mas eu gostaria de saber o seguinte :

por que usar um construtor inicializando todos os atributos ?

fabiomedeirosf

Como dito, o construtor serve para inicializar atributos de uma classe, fazendo isto, vc pode passar os valores de cada atributo no momento da instância, exemplo:

Pessoa pessoa = new Pessoa(1, "jose da silva", "programador", "ativo");

poupando o trabalho de usar setters para isso:

Pessoa pessoa = new Pessoa(); pessoa.setCodigo(1); pessoa.setNome("jose da silva");

Espero que tenha ajudado

renanreismartins

amigo o mais importante a saber sobre construtores e que geralmente não é ensinado é pq usar. sintaxe e como usar eh tranquilo.

vc poderia muito bem criar um obj com o construtor padrao e dps usar os sets, neste caso o construtor serviria apenas como outra maneira de criar o obj.

Porém ha casos em que eh importante que um objeto seja criado com alguns dados necessario para seu funcionamento. Neste caso sem estes dados o obj nao pode ser criado, ou seja, eh impossivel ter uma instancia sem que informe alguns dados basicos para existencia do obj.

Uma forma bem pratica de entender:

imagine a classe java.io.File. Ela possui os construtores

File(File parent, String child)

File(String pathname)

File(String parent, String child)

File(URI uri)

e nao possui o construtor padrao. Veja que faz todo o sentido pois imagine um File sem “referencia” ao arquivo propriamente dito. Como pode existir um arquivo sem indicar o local onde ele esta ?

se vc tentasse executar o metodo renameTo por exemplo, que arquivo seria renomeado ?

Nao teria como o obj funcionar corretamente.

procure pelo design pattern good citizen para mais explicações

abrasss

wampactimus

Obrigado pela ajuda galera, agora estou entendo melhor

mais eu acho que não é uma bora prática de programação utilizar construtores para inicializar os atributos

o correto seria usar set mesmo, não é ?

ou estou errado ?

drigo.angelo

Acho muito forte você dizer que isso não é boa prática… Nesse caso não vejo nada de mal, mas alguns objetos tem, sei lá 30 atributos, daí fazer um construtor que inicializa todos os 30 atributos de uma vez já é estranho né…

Tem que ir balanceando, usar get/set demais também é meio estranho… tem gente que é muito orientada a get/set e acaba enfraquecendo o encapsulamento por causa disso, pois acaba que a pessoa cria os atributos privados, cria gets e sets públicos que não fazem nada além de alterar o valor do atributo… isso é quase a mesma coisa que deixar o atributo público, oras…

renanreismartins

wampactimus acho que vc ainda nao entendeu pq usar um construtor, se os dados forem vitais para o obj nao é mah pratica

mesmo que nao sejam vitais é uma forma de adiantar as coisas… e nao é mah pratica nao, mesmo pq vc pode dentro de seu construtor usar os sets para atribuir valor ao campo.

drigo.angelo uma classe com mtos paramtros geralmente esta com responsabilidades demais, porem, se nao for o caso, da pra usar o padrao Builder e Fluent Interface.

abrasssssssss

wampactimus

Muito bom, obrigado pessoal

me esclareceu bastante

Valeu

drigo.angelo

@renanreismartins

Foi uma hipérbole mesmo hauhuaha

Criado 14 de março de 2011
Ultima resposta 14 de mar. de 2011
Respostas 9
Participantes 4