Duvida de Encapsulamento

4 respostas
D

Boa Tarde Pessoal, estou iniciado no mundo Java, baixei as apostilas da caelun e estou fazendo os exercicios. a minha dúvida é a seguinte.
Tenho uma classe Funcionario que tem entre seus atributos um atributo do tipo Data, e tenho a minha classe Data com os atributos dia,mes,ano. Na minha classe de teste quando vou atribuir um valor para minha variavel dia da classe Data qual a forma correta de fazer ?

Deixo o atributo da Data classe Funcionario como protected e acesso o atributo diretamente . por exemplo :

public class Funcionario {

protected Data dataEntrada = new Data();

//getters and setters

}
public class Data {

private int dia;

private int mes;

private int ano;

//getters and setters

}

Class Teste{

Funcionario funcionario = new Funcionario();

funcionario.dataEntrada.setDia(25);

}

ou coloco o meu atributo dataEntrada como private e na minha classe de Teste (main) instancio novamente a classe Data , faço as atribuicoes e passo o valor para a classe funcionario atraves do metodo getDataEntada?

public class Funcionario {

private Data dataEntrada;

//getters and setters

}
public class Data {

private int dia;

private int mes;

private int ano;

//getters and setters

}
Class Teste{

Funcionario funcionario = new Funcionario();

Data data = new Data();

data.dia   = 31;

data.mes = 09;

data.ano  = 2008;

funcionario.setDataEntrada(data);
}

4 Respostas

H
danielm5524:
public class Funcionario {
    protected Data dataEntrada = new Data();    
    //getters and setters 
}
public class Data {
   private int dia;
   private int mes;
   private int ano;
   //getters and setters 
}
Class Teste{
   Funcionario funcionario = new Funcionario();
   funcionario.dataEntrada.setDia(25);
}
public class Funcionario {
    private Data dataEntrada;
    //getters and setters 
}
public class Data {
   private int dia;
   private int mes;
   private int ano;
   //getters and setters 
}
Class Teste{
   Funcionario funcionario = new Funcionario();
   Data data = new Data();
   data.dia   = 31;
   data.mes = 09;
   data.ano  = 2008;

   funcionario.setDataEntrada(data);
}
Boa tarde! Então só um aviso já existe um objeto definido no pacote java.util que encapsula datas e etc(Date) quanto a sua pergunta, acho que seria melhor você fazer da seguinte forma para mudar alguma coisa, caso só seja um atributo da data.
Class Teste{
   Funcionario funcionario = new Funcionario();
   funcionario.getDataEntrada().setDia(20);
}
Ou até mesmo, você talvez devesse alterar o construtor da classe Funcionario , colocando um objeto de Data como argumento.
public class Funcionario {
    private Data dataEntrada = new Data();    
    // construtor
    public Funcionario(Data data){
        this.dataEntrada = data;
}
    //getters and setters 
}

Obs: coloque as tags de code quando for postar código

D

ok Helio, muito obrigado pela ajuda… vou fazer da primeira forma, porque é assim que eu estou fazendo e dar conmtinuidade aos estudos aqui, vlw

ViniGodoy

Seria bom usar um construtor e um set. Assim vc também faz a verificação se a data está correta. Por exemplo, se a data não é inferior a da fundação da empresa (com certeza, não havia funcionários antes disso), ou se a data é superior a de hoje (no máximo acrescida de uns dias, para permitir adiantar lançamentos).

public void setDataEntrada(Date data) { if (data.compareTo(DATA_FUNDACAO) < 0 || data.compareTo(new Date()) > 0) throw new IllegalArgumentException("Data de entrada inválida!"); this.dataEntrada = data; }

Quanto mais segura for a sua classe, melhor encapsulada ela está.

D

Obrigado Vinicius pela Ajuda, eu estou começando agora, trabalho com PHP e um pouco de ASP, mas estou estudando Java para WEB, estou vendo interfacee polimorfismo agora, Agradeço sua ajuda.

vlw
Daniel de Macedo

Criado 4 de setembro de 2008
Ultima resposta 5 de set. de 2008
Respostas 4
Participantes 3