Criando metod private e get

Ola moçada,
como coloco o metódo private e get?

class Funcionario {

String nome;  
String departamento;  
double salario;  
String dataEntrada;  
String rg;  
boolean estaNaEmpresa;  
  
  
  
  
void bonifica(double valor){  
    this.salario=this.salario+valor;          
}  
void demite(){  
    this.estaNaEmpresa=false;         
}  
  
void mostra(){  
    System.out.println("Nome: " + this.nome);  
    System.out.println("Departamento: " + this.departamento);  
    System.out.println("Salário: " + this.salario);  
    System.out.println("Data da Entrada: " + dataEntrada);  
    System.out.println("RG: " + this.rg);  
      
    if(this.estaNaEmpresa==true){  
        System.out.println("Contratado: Sim");  
    }  
    else{  
        System.out.println("Contratado: Não");  
    }  
    System.out.println();  
      
}  

}

O método get nunca é private, mas sim os atributos.

[code]private String nome;
private String departamento;
private double salario;
private String dataEntrada;
private String rg;
private boolean estaNaEmpresa;

public String getNome() {
return nome;
}

public void setNome (String nome) {
this.nome = nome;
}

//E faça isso com os outros atributos tbm…[/code]

OBS: Use as tags code quando for postar códigos…

opa… tranquilo?

é sempre bom separar o código… por exemplo, colocar a modelagem em um pacote, e os testes em outro, como esse caso.
os Get e Set geralmente são públicos… e os atributos geralmente privados…

se vc não precisar de um Get ou de um Set, não tem problema nenhum não colocar… pra falar a verdade, é até melhor não colocar mesmo um Set, por exemplo, se vc não o usa.
essa maneira de proteger os atributos de uma classe é chamada encapsulamento.

valeu gente

Cara para você ficar livre dessas implementações use o netbenas para gerar as classes de entidade de suas tabelas, nesse caso não precisará implementar esses métodos, e se achar nescessário implementar na mão gere suas classes de entidade e revise como gerar os métodos anotar os atributos ou instanciar a classe!

wellington, eu não entendi a questão de haver possibilidade de usar um método Get privado…

se o método Get é criado para liberar o acesso de outras classes a mesma, por que deverás ser privado?

eu não consigo pensar em alguma solução que use métodos get privados

se tiver algum exemplo para facilicar o entendimento

obrigado.

então eu entendi seu ponto de vista…criar métodos para serem acessos de dentro da classe por outros métodos public…

mais nesse caso: private int getValorPositivo(), não seria um Get conhecido, quero dizer esse método não seria a de um Get comum, seria a de um método auxiliar, ou seja ele até tem o nome get, mais poderia ser convertToPositive, parseToPositive.

o que quero dizer é que quando tem um return xxxxx, nós ja imaginamos o nome do método como “retornaValorPositivo”, ai traduzimos, getPositiveValue, ai fica parecendo um Get, mais é um método normal

se por exemplo queremos receber o valor de uma variavel, usamos get"NomeDoAtributo".

é dificil explicar…mais entendi seu ponto de vista, e acredito que haja sim alguma utilidade, não sei talves com reflection, sei ñ

Discordo. Vc pode usar o método get como private quando deseja que o programador tenha acesso exclusivamente a métodos de atribuição (set) porém deseja manter o atributo encapsulado (devido a qualquer inteligência inclusa nele) para utilizar única e exclusivamente dentro da classe.

É dificil de ocorrer essas exceções, logo não se pode carimbar como regra que esse método “nunca” possa ser private.[/quote]

Sim. Eu posso criar um atributo private e ter um método get private tbm. Mas pq isso seria útil? Se eu só vou usar esse método dentro da própria classe, posso simplesmente usar o atributo de uma vez.

Não tenho muita experiência em Java. Tenho apenas o conhecimento, mas nenhuma experiência. Vc poderia me mostrar algum caso prático onde isso seria útil?

No exemplo citado acima com o getValorPositivo, esse método apenas recebe o nome get no início, mas não é o método get padrão de um atributo qualquer.

No caso dessa dúvida do tópico, o método get/set citado, é aquele em que vc tem atributos private e métodos get/set pra abrir esse atributo pra outras classes do sistema, logo, não teria pq ser private tbm.

Discordo. Vc pode usar o método get como private quando deseja que o programador tenha acesso exclusivamente a métodos de atribuição (set) porém deseja manter o atributo encapsulado (devido a qualquer inteligência inclusa nele) para utilizar única e exclusivamente dentro da classe.

É dificil de ocorrer essas exceções, logo não se pode carimbar como regra que esse método “nunca” possa ser private.

[quote=douglaskd]wellington, eu não entendi a questão de haver possibilidade de usar um método Get privado…

se o método Get é criado para liberar o acesso de outras classes a mesma, por que deverás ser privado?

eu não consigo pensar em alguma solução que use métodos get privados

se tiver algum exemplo para facilicar o entendimento

obrigado.[/quote]
O método “getter” é criado para, em teoria, encapsular um atributo permitindo aplicar inteligências no mesmo antes de retornar um valor, não necessariamente para liberar o acesso a outras classes apesar de ser o uso mais comum desse padrão.

Considere a classe abaixo:

//Sei que não é o melhor exemplo mas foi o que me veio agora class IntegerControl { private int valor; public IntegerControl(int valor) { this.valor = valor; System.out.println("O valor positivo de " + valor + " é " + getValorPositivo()); } private int getValorPositivo() { return Integer.signum(valor) * valor; } }
O método getValorPositivo não representa um atributo propriamente (mas você acreditaria que há um atributo com o nome valorPositivo). Nesse método aplico uma inteligência para tornar qualquer número positivo. Porém, atualmente esse método diz respeito exclusivamente à classe IntegerControl, logo não há necessidade de expô-la para outros pontos do sistema.

Não estou dizendo que seja uma regra, mas uma exceção, previamente analisada e validada.


Um exemplo que me veio a mente, mas utilizando métodos “protected” é a classe DefaultFormatter (usado no Swing) que possui um método getDocumentFilter e, inclusive, não há um “setter” para ele. Caso eu tenha necessidade de utilizá-lo, preciso sobrescrevê-lo. Ainda assim, mantenho o mesmo como protected pois sei que o método continua dizendo respeito apenas à classe DefaultFormatter.

[quote=douglaskd]então eu entendi seu ponto de vista…criar métodos para serem acessos de dentro da classe por outros métodos public…

mais nesse caso: private int getValorPositivo(), não seria um Get conhecido, quero dizer esse método não seria a de um Get comum, seria a de um método auxiliar, ou seja ele até tem o nome get, mais poderia ser convertToPositive, parseToPositive.

o que quero dizer é que quando tem um return xxxxx, nós ja imaginamos o nome do método como “retornaValorPositivo”, ai traduzimos, getPositiveValue, ai fica parecendo um Get, mais é um método normal

se por exemplo queremos receber o valor de uma variavel, usamos get"NomeDoAtributo".

é dificil explicar…mais entendi seu ponto de vista, e acredito que haja sim alguma utilidade, não sei talves com reflection, sei ñ[/quote]

Eu entendo seu ponto de vista e aí, eis a questão, estamos acostumados a fazer classes para nós mesmos utilizarmos. Por isso que um getter privado/protected/default normalmente não faça muito sentido.

As exceções normalmente aparecem quando a classe será utilizada por outros que não conhecerão sua implementação e não deverão ter acesso a esse método (ainda que possa utilizar-se de um setter equivalente). Mesmo assim é exceção da exceção. É mais comum ter setters privados com getters públicos (e mesmo assim, apenas quando a classe terá características de imutabilidade).

E no fim, getters e setters são apenas convenções (ou padrões se preferir) :stuck_out_tongue: . Não convenciono métodos como métodos normais, métodos auxiliares, etc. Minha visão, método é método e, conforme minha intenção/necessidade, defino a visibilidade do mesmo. (nisso me lembro como gostaria de baixar a visibilidade de métodos públicos sobrescritos, mas isso é assunto para outra discussão :stuck_out_tongue: )

Como disse, usar getters e setters é apenas uma convenção e serverm, em geral para encapsular comportamentos extras além de simplesmente ser uma ponte para um atributo. Mas vou exemplificar (não usando necessariamente métodos privados) de um uso diferenciado dos getters e setters.
A implementação que segue é essa:

[code]class TestClass {

private Map<String, Object> attributes = new HashMap<String, Object>();

public Integer getValue() {
	return (Integer) attributes.get("value");
}
public void setValue(Integer value) {
	if(value < 0) {
		throw new RuntimeException("Valor não pode ser negativo");
	}
	attributes.put("value", value);
}
public String getDescription() {
	return attributes.get("description").toString().toUpperCase();
}
public void setDescription(String description) {
	if(description.isEmpty()) {
		throw new RuntimeException("Descrição não pode ser vazia");
	}
	attributes.put("description", description);
}

}[/code]
Porém, se você não conhece a implementação você vai pensar que é uma classe com apenas 2 atributos: value e description e na verdade é um Map.

Não pretendo exemplificar uma situação onde isso seja necessário mesmo porque, agora, não tenho um que seja realmente útil, mas já exemplifiquei com protected.
Mas na hora que estiver diante de uma situação onde isso for necessário, você a utilizará.