Metodos get e set

19 respostas
V

Gostaria de uma explicação dos comandos Get e Set. Fiz um rpograma e utilizei estes comandos três vezes encapsulados e o professor fez o mesmo programa e utilizou apenas uma vez, todos deram certo.

[


public class Pessoa {
private String nome;
private int idade;
private double altura;


// public Cliente (String novoNome, int novaIdade, double novaAltura) {
public Pessoa(String novoNome, int novaIdade, double novaAltura) {

this.nome = novoNome;
this.idade = novaIdade;
this.altura = novaAltura;
}

public String getNome() {
return nome;
}

public int getIdade() {
return idade;
}

public double getAltura() {
return altura;
}

public String setNome(String nome) {

return this.nome = nome;
}

public int getIdade(int idade) {

return this.idade = idade;
}

public double getAltura(double altura) {

return this.altura = altura;
}

public static void main(String[] args) {

Pessoa pessoa1 = new Pessoa("Luciano", 28, 1.80);
Pessoa pessoa2 = new Pessoa("Laís", 23, 1.70);
Pessoa pessoa3 = new Pessoa("Lucy", 51, 1.58);
System.out.println("Pessoa 1: " + pessoa1.getNome() + ", "
+ pessoa1.getIdade() + ", " + pessoa1.getAltura());
System.out.println("Pessoa 2: " + pessoa2.getNome() + ", "
+ pessoa2.getIdade() + ", " + pessoa2.getAltura());
System.out.println("Pessoa 3: " + pessoa3.getNome() + ", "
+ pessoa3.getIdade() + ", " + pessoa3.getAltura());
}

} 

]
public class Pessoa { 

private String nome;
private int idade;
private double autura;

public String getNome() {
return nome;
}



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


public int getIdade() {

return idade;
}

public void setIdade(int idade) {
this.idade = idade;
}

public double getAltura() {
return autura;
}

public void setAltura(double autura) {
this.autura = autura;
}

public static void main(String[] args) {

Pessoa pessoa1 = new Pessoa(); // Você mesmo determinou que "pessoa" é
pessoa1.setNome("Pedro");
pessoa1.setIdade(32); 
pessoa1.setAltura(1.80);

Pessoa pessoa2 = new Pessoa(); 
pessoa2.setNome("Saulo");
pessoa2.setIdade(18); 
pessoa2.setAltura(1.65);

Pessoa pessoa3 = new Pessoa(); 
pessoa3.setNome("Juan");
pessoa3.setIdade(15); 
pessoa3.setAltura(1.60);

System.out.println("Pessoa1 " + pessoa1.getNome() + " tem "
+ pessoa1.getIdade() + " anos e " + pessoa1.getAltura()
+ " metros de autura");
System.out.println("Pessoa2 " + pessoa2.getNome() + " tem "
+ pessoa2.getIdade() + " anos e " + pessoa2.getAltura()
+ " metros de autura");
System.out.println("Pessoa3 " + pessoa3.getNome() + " tem "
+ pessoa3.getIdade() + " anos e " + pessoa3.getAltura()
+ " metros de autura");

}

}

19 Respostas

g4j

Não entendi cara,

Pode postar os códigos?

V

g4j:
Não entendi cara,

Pode postar os códigos?

Ai vai os códigos, perceba que no primeiro tem o metodo SET uma vez enquanto no segundo tem três vezes e os dois códigos estão corretos.

Obs: Qualquer erro de digitação aqui pode ser quando digitei aqui.

g4j

valdecio-silva:
g4j:
Não entendi cara,

Pode postar os códigos?

Ai vai os códigos, perceba que no primeiro tem o metodo SET uma vez enquanto no segundo tem três vezes e os dois códigos estão corretos.

Obs: Qualquer erro de digitação aqui pode ser quando digitei aqui.

No caso do primeiro código, os dados de Pessoa estão sendo passada via método construtor. No segundo código, os dados são populados (“setados”) via métodos set.

O método construtor de Pessoa neste caso foi criado por conveniência, pois fica mais curto e legível o código.

Dê uma estudada sobre método construtor que você vai entender.

V

g4j:
valdecio-silva:
g4j:
Não entendi cara,

Pode postar os códigos?

Ai vai os códigos, perceba que no primeiro tem o metodo SET uma vez enquanto no segundo tem três vezes e os dois códigos estão corretos.

Obs: Qualquer erro de digitação aqui pode ser quando digitei aqui.

No caso do primeiro código, os dados de Pessoa estão sendo passada via método construtor. No segundo código, os dados são populados (“setados”) via métodos set.

O método construtor de Pessoa neste caso foi criado por conveniência, pois fica mais curto e legível o código.

Dê uma estudada sobre método construtor que você vai entender.

Ótimo cara valeu. Obrigado e vou estuda.
evertonsilvagomesjav

Construtor nao é um metodo.

j0nny

Isso me deixou com pula atrás da orelha, hehe. Poderia explicar melhor?

evertonsilvagomesjav

Diferenças basicas entre um método e um construtor é:

Construtor é chamado na instanciação de uma classe um método nao (ah nao ser que vc use new Teste().metodo()), construtor nao tem um tipo de retorno e um método tem.

g4j

já houve discussão disso neste tópico:

http://www.guj.com.br/posts/list/83090.java

Z

gostaria de deixar um comentário com relação ao uso do construtor e dos setters…

Quando voce tem uma classe onde no construtor tem parâmetros a serem passados você é obrigado a informá-los no momento de sua criação, ou seja, quando você dá um new…

Já usando uma classe sem parâmetros no construtor usando somente setters você pode atribuir os valores quando quiser, deixar de passar algum ou nunca passar, somente usar os getter’s…

Abraço

g4j

Zillo:
gostaria de deixar um comentário com relação ao uso do construtor e dos setters…

Quando voce tem uma classe onde no construtor tem parâmetros a serem passados você é obrigado a informá-los no momento de sua criação, ou seja, quando você dá um new…

Já usando uma classe sem parâmetros no construtor usando somente setters você pode atribuir os valores quando quiser, deixar de passar algum ou nunca passar, somente usar os getter’s…

Abraço

  • Lembrando que pode existir mais de um construtor em uma classe;
  • Se a classe não possui construtor, o compilador entende que há um construtor default (construtor vazio);
  • O construtor que será executado é o que contem o(s) mesmo(s) parametros da chamada;
  • Se a classe possui construtor não default, então não será possível instanciar usando construtor default, a menos que este também seja criado;

Exemplo: Em uma classe que tenham construtores:

public Pessoa(String nome, Integer idade, char sexo, Endereco endereco, Telefone tel) {
//...
}
public Pessoa(String s) {
//...
}

Entende-se que a classe possui somente 2construtores e correspondem respectivamente às chamadas:

Pessoa p1 = new Pessoa("Pedro", 18, 'M', new Endereco("Rua xxx", 8), new Telefone("[telefone removido]"));
Pessoa p2 = new Pessoa("Pedro");

A chamada abaixo não compila para a classe Pessoa, pois o construtor default não foi declarado:

Pessoa p3 = new Pessoa(); //erro de compilação

Tem mais regras sobre os (métodos) construtores: http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#41652

discorpio

Boa tarde a todos.

Em primeiro lugar:

Meu caro amigo, me desculpe mas voce está equivocado, O contrutor de uma classe é sim considerado um método.

Em segundo lugar:

Me desculpe mais uma vez, porém novamente voce está equivocado, se voce considera métodos aqueles somente que tem retorno de valor, e também aqueles que são invocados pelos usuários, então que voce me diz deste método abaixo de uma classe qualquer que é invocado pelo usuário.

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

Repare que este método não tem retorno e é invocado pelo usuário, o que contradiz a sua teoria.

Definição de método: É um conjunto de códigos que executa uma determinada rotina com o objetivo de realizar uma Ação, Evento ou procedimento, que é disparada por um ação qualquer do Objeto, seja ela provocada pelo usuário ou pelos recursos internos do Sistema.

Assim sendo, se o Construtor de uma classe é disparado no momento de sua instanciação, ainda que disparado pelos recusos internos do sistema, então ele é um método.

Se assim não fosse, então voce jamais poderia fazer sobreescrita ou sobrecarga do método construtor.

Mais definições sobre Método:

Método (do Grego methodos, met’ hodos que significa, literalmente, “caminho para chegar a um fim”). Sobre este assunto, podemos referir:

Em Filosofia, ou até na esfera científica (teórica - Filosofia da Ciência), temos o método que delimita o modus da obtenção do conhecimento: a epistemologia.
O Discurso sobre o método de Descartes, obra seminal de 1619, e um dos momentos charneira do Iluminismo, que abriu o caminho para a ciência moderna e para o método científico em geral.
Em ciência, em geral, o método científico é constituído por uma série de passos codificados que se têm de tomar, de forma mais ou menos esquemática para atingir um determinado objectivo científico - ver também algoritmo e metodologia.
[color=darkblue]Em ciência da computação em particular, um método é o mesmo que uma ação, algoritmo, função, ou procedimento; mais especificamente, em programação orientada a objecto, é uma implementação de código em resposta a certas mensagens[/color].
Em engenharia de software, em particular, um método é uma “receita” técnica para a produção de software.
O Método é também uma metodologia de interpretação teatral muito importante no Século XX desenvolvida por importantes atores e atrizes norte-americanos, numa leitura particular do sistema de interpretação de Constantin Stanislavski
Obtido em “http://pt.wikipedia.org/wiki/Método

discorpio

Olá, sou eu de novo.

Me esqueci de responder a dúvida do nosso amigo.

Voce definiu um método Set assim:

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

Só para esclarecimento que eu te pergunto, porque este método Set foi definido desta maneira, se em momento nenhum do seu desenvolvimento do projeto, voce fará atribuição de um valor de um Objeto e ao mesmo tempo apanhar esse valor armazenado. :?:

O que eu quero dizer é que como pode-se programar dessa maneira :?:

Pessoa cliente = new Pessoa();
    String nomecliente = cliente.setNome("Valdecio Silva");
   
    // Isto seria a mesma coisa que 
    String nomecliente = "Valdecio Silva";

    // Qual a finalidade de armazenar então o dado no atributo nome ????

Percebe que neste caso, se voce utiliza o método Set para fazer ambas as atribuições de atribuir e ao mesmo tempo apanhar o valor do atributo, então para que os métodos Gets :?: Isto não é uma boa prática de encapsulamento. Voce não deve misturar as atribuições dos métodos Gets com os do método Set, uma coisa é uma coisa e outra coisa é outra coisa. Utilize apenas o método Set para atribuir os valores e os Gets para apanhar os valores somente.

discorpio

Olá, sou eu de novo

Zillo:
gostaria de deixar um comentário com relação ao uso do construtor e dos setters…

Quando voce tem uma classe onde no construtor tem parâmetros a serem passados você é obrigado a informá-los no momento de sua criação, ou seja, quando você dá um new…

Já usando uma classe sem parâmetros no construtor usando somente setters você pode atribuir os valores quando quiser, deixar de passar algum ou nunca passar, somente usar os getter’s…

Abraço

Voce está correto quanto a isto, entretanto voce tem a opção de construir a classe com dois métodos construtores, fazendo sobrecarda dos mesmos, assim:

public Pessoa(){
}

public Pessoa(String novoNome, int novaIdade, double novaAltura) {   
     this.nome = novoNome;   
     this.idade = novaIdade;   
     this.altura = novaAltura;   
}

Neste caso voce não está sobreescrevendo o método construtor, mas sim fazendo sobrecarga do mesmo, com entrada de parâmetros diferente, então voce poderá instanciar a classe de duas maneiras. Com tudo se voce omitir a primeira declaração, ainda com implementação vazia, voce ai fará a sobreescrita do método construtor, e não a sobrecarga.

M

Construtor NÃO é um método (muito cuidado com fontes como Wikipedia). Veja isso: http://www.guj.com.br/posts/list/15/83090.java#1003218

evertonsilvagomesjav

discorpio:
Olá, sou eu de novo.

Me esqueci de responder a dúvida do nosso amigo.

Voce definiu um método Set assim:

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

Só para esclarecimento que eu te pergunto, porque este método Set foi definido desta maneira, se em momento nenhum do seu desenvolvimento do projeto, voce fará atribuição de um valor de um Objeto e ao mesmo tempo apanhar esse valor armazenado. :?:

O que eu quero dizer é que como pode-se programar dessa maneira :?:

Pessoa cliente = new Pessoa();
    String nomecliente = cliente.setNome("Valdecio Silva");
   
    // Isto seria a mesma coisa que 
    String nomecliente = "Valdecio Silva";

    // Qual a finalidade de armazenar então o dado no atributo nome ????

Percebe que neste caso, se voce utiliza o método Set para fazer ambas as atribuições de atribuir e ao mesmo tempo apanhar o valor do atributo, então para que os métodos Gets :?: Isto não é uma boa prática de encapsulamento. Voce não deve misturar as atribuições dos métodos Gets com os do método Set, uma coisa é uma coisa e outra coisa é outra coisa. Utilize apenas o método Set para atribuir os valores e os Gets para apanhar os valores somente.

Rapaz quando eu falei que método tem um tipo de retorno, e construtor nao, eu quis dizer tb que um construtor nao pode ser “void” ou seja CONSTRUTOR NAO É UM METODO!!!

evertonsilvagomesjav

discorpio:
Boa tarde a todos.

Em primeiro lugar:

Meu caro amigo, me desculpe mas voce está equivocado, O contrutor de uma classe é sim considerado um método.

Em segundo lugar:

Me desculpe mais uma vez, porém novamente voce está equivocado, se voce considera métodos aqueles somente que tem retorno de valor, e também aqueles que são invocados pelos usuários, então que voce me diz deste método abaixo de uma classe qualquer que é invocado pelo usuário.

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

Repare que este método não tem retorno e é invocado pelo usuário, o que contradiz a sua teoria.

Definição de método: É um conjunto de códigos que executa uma determinada rotina com o objetivo de realizar uma Ação, Evento ou procedimento, que é disparada por um ação qualquer do Objeto, seja ela provocada pelo usuário ou pelos recursos internos do Sistema.

Assim sendo, se o Construtor de uma classe é disparado no momento de sua instanciação, ainda que disparado pelos recusos internos do sistema, então ele é um método.

Se assim não fosse, então voce jamais poderia fazer sobreescrita ou sobrecarga do método construtor.

Mais definições sobre Método:

Método (do Grego methodos, met’ hodos que significa, literalmente, “caminho para chegar a um fim”). Sobre este assunto, podemos referir:

Em Filosofia, ou até na esfera científica (teórica - Filosofia da Ciência), temos o método que delimita o modus da obtenção do conhecimento: a epistemologia.
O Discurso sobre o método de Descartes, obra seminal de 1619, e um dos momentos charneira do Iluminismo, que abriu o caminho para a ciência moderna e para o método científico em geral.
Em ciência, em geral, o método científico é constituído por uma série de passos codificados que se têm de tomar, de forma mais ou menos esquemática para atingir um determinado objectivo científico - ver também algoritmo e metodologia.
[color=darkblue]Em ciência da computação em particular, um método é o mesmo que uma ação, algoritmo, função, ou procedimento; mais especificamente, em programação orientada a objecto, é uma implementação de código em resposta a certas mensagens[/color].
Em engenharia de software, em particular, um método é uma “receita” técnica para a produção de software.
O Método é também uma metodologia de interpretação teatral muito importante no Século XX desenvolvida por importantes atores e atrizes norte-americanos, numa leitura particular do sistema de interpretação de Constantin Stanislavski
Obtido em “http://pt.wikipedia.org/wiki/Método

Vc ja viu um construtor ter algum tipo de retorno ou algo como void?

Trebloc

Pela Wikipédia:

Construtor em linguagens de programação orientadas a objeto é um método chamado assim que uma nova instância do objeto for criada. Tal método geralmente é responsável pela alocação de recursos necessários ao funcionamento do objeto além da definição inicial das variáveis de estado (atributos).

Sem contar que vários sites também se referem a ele como método:

http://www.tiexpert.net/programacao/java/metodo-construtor.php

Inclusive em páginas da Unicamp e outras:

http://www.dca.fee.unicamp.br/cursos/PooJava/metodos/construtor.html
http://www.dca.fee.unicamp.br/cursos/PooJava/classes/construtor.html


http://www.lenep.uenf.br/~bueno/DisciplinaCpp/Aulas/aula_12.pdf
http://www.ic.unicamp.br/~cmrubira/aacesta/java/javatut11.html

Ou seja, o construtor é um tipo especial de método, que não define tipo de retorno.

G

Deitel - Java Como programar - 6 edição, página 69:

É difícil entender que não são a mesma coisa?

M

Trebloc:
Pela Wikipédia:

Construtor em linguagens de programação orientadas a objeto é um método chamado assim que uma nova instância do objeto for criada. Tal método geralmente é responsável pela alocação de recursos necessários ao funcionamento do objeto além da definição inicial das variáveis de estado (atributos).

Sem contar que vários sites também se referem a ele como método:

http://www.tiexpert.net/programacao/java/metodo-construtor.php

Inclusive em páginas da Unicamp e outras:

http://www.dca.fee.unicamp.br/cursos/PooJava/metodos/construtor.html
http://www.dca.fee.unicamp.br/cursos/PooJava/classes/construtor.html


http://www.lenep.uenf.br/~bueno/DisciplinaCpp/Aulas/aula_12.pdf
http://www.ic.unicamp.br/~cmrubira/aacesta/java/javatut11.html

Ou seja, o construtor é um tipo especial de método, que não define tipo de retorno.


Esses caras precisam rever os conceitos. Todos eles. Se os engenheiros da Sun resolveram definir que, em Java, um construtor não é um método e explicitaram isso na especificação da linguagem, o fato de quem quer que seja achar que um construtor é um método não muda nada. Construtor, ao menos em Java, não é método.

PS: Wikipedia não é fonte confiável. Tanto que o fulano que escreveu isso não conhece a especificação (aliás, quem escreveu o exemplo sequer conhece as convenções de código).

Criado 27 de fevereiro de 2010
Ultima resposta 28 de fev. de 2010
Respostas 19
Participantes 9