Encapsulamento

6 respostas Resolvido
C

Cheguei no encapsulamento legal estou com uma duvida por exemplo criei uma classe chamada Funcionario com atribustos nome, cpf tipo string e salario double,quando cria o construtor da classe Funcionario eu preencho com this, set ou get não entendi muito isso normalmente eu faria assim quando não tem o getts e setts eu faria assim:

public Funcionario(String nome, Data DtEntrada,String Dep, double salario) {
	this.Nome = nome;
	this.DtEntrada = DtEntrada;
	this.Departamento=Dep;
	this.Salario=salario;
}

6 Respostas

esmiralha
public Funcionario(String nome, Data dtEntrada,String dep, double salario) {
	this.setNome(nome);
	this.setDtEntrada(dtEntrada);
	this.setDepartamento(dep);
	this.setSalario(salario);
}

//Exemplo de método set
public setNome(String nome) {
        this.nome = nome;
}
C

então sempre que trabalharmos com encapsulamento não se deve usar os atributos dentro dos métodos e construtores?

No caso tenho um método chamado calcalculaGanhoAnual como ficaria isso tenho que usar o getters e setters tbm:

public double calcalculaGanhoAnual() {

double ganho =  13 * this.Salario;

return ganho;

}

ptz agira confundiu tudo criei uma classe TestaFuncinario() como devo fazer a chamada para testa a classe funcinario?

pmlm
Solucao aceita

O encapsulamento é para “esconder” os atributos para fora da classe. Dentro da classe (construtores e métodos) podes e deves (é mais legível) usar o this.atributo como tens no teu exemplo.

C

Agora entendi fica mais limpa o código gostei bora rala mais

esmiralha

Na minha humilde opinião, você sempre deve acessar e atualizar os atributos de um objeto através de métodos getter e setter. Mesmo de dentro do próprio objeto. Um dos motivos para você usar um método getter ou setter e não expor publicamente o atributo é permitir que você tenha algum controle sobre o acesso.

Vamos supor que você queira validar o valor de um atributo antes de atualizar com esse novo valor.

Exemplo:

public void setCPF(String cpf) {
    if (this.validaCPF(cpf)) {
        this.cpf = cpf;
    } else {
        throw new InvalidArgumentException("CPF Inválido");
    }
}

Você nunca vai querer atualizar o campo diretamente mesmo que seja no construtor.
O problema é que muitas vezes setters e getters são tratados como apenas uma formalidade, tipo uma receita de bolo que a gente segue e não sabe bem porque. Nem todo atributo de um objeto deve ser exposto através de getters e setters.

pmlm

Opinião perfeitamente válida :slight_smile:
Nesses casos concordo que o uso do set é a melhor maneira.

Criado 16 de setembro de 2016
Ultima resposta 17 de set. de 2016
Respostas 6
Participantes 3