Getters & setters

galera
eu entendi o q seria getters retorna valores

mas naum entendi o q seria setters

e qdo usar e pra q usar

class Conta {
  private double limite;
  private double saldo;
  
  public double getSaldo() {
    return saldo;
  }
  
  public void setSaldo(double saldo) {
    this.saldo = saldo;
  }
  
  public double getLimite() {
    return limite;
  }
  
  public void setLimite(double limite) {
    this.limite = limite;
  }
}

isso seria get

e o set como usar ???

O get recupera o valor e o set insere o valor.

[code]class Conta {
private double saldo;

public double getSaldo() {
return saldo;
}

public void setSaldo(double saldo_) {
this.saldo = saldo_;
}
}[/code]

welitonjose , o seu exemplo de set está correto.
Os getters e setters servem para encapsular o acesso das suas variáveis. Você poderia, no futuro, colocar uma validação no setter. Por exemplo, se o valor recebido for menor do que 0, então, você setta 0, garantindo que nunca haverá valores negativos na sua variável.
Pode, por exemplo, colocar um contador no getter, para saber quantas vezes o valor da variável foi lida e assim por diante.

Existem alguns frameworks/IDE’s/etc que usam esse padrão de getter e setter para ler os atributos da sua classe.

Espero ter ajudado

Já que tocou no assunto, você acha interessante a ideia de colocar validação dentro de get e set?

Outra coisa, é legal subir mensagem de validação em exception? Eu sempre faço assim, crio uma exception especifica da aplicação e quando estou validando regras de negócio eu subo as mensagens de validação para a camada de visualização. Vocês acham isso um padrão legal?

Pois é, apesar da motivação principal de getter/setter ser essa, eu não gosto muito de colocar coisas lá por que não é o padrão adotado. Quando você vê um getter/setter no código, você não imagina que exista validação e nem mudança do valor. Isso poderia dificultar muito quando surgir algum comportamento inesperado.

Com relação as exceptions, eu também prefiro lançar uma exceção, mas não necesseriamente específica da aplicação. Depende de cada caso. Na maioria dos casos, quando se trata de setter, por exemplo, uma IllegalArgumentException resolve.

[quote=welitonjose]galera
eu entendi o q seria getters retorna valores

mas naum entendi o q seria setters

e qdo usar e pra q usar

class Conta {
  private double limite;
  private double saldo;
  
  public double getSaldo() {
    return saldo;
  }
  
  public void setSaldo(double saldo) {
    this.saldo = saldo;
  }
  
  public double getLimite() {
    return limite;
  }
  
  public void setLimite(double limite) {
    this.limite = limite;
  }
}

isso seria get

e o set como usar ???[/quote]

Os gets e os sets servem para encapsular os valores dos atributos dos objetos, ou seja, controlar o acesso do meio exterior (outras classes) às propriedades internas seu objeto.
Especificamente o get retornas os valores dos atribulos e os sets servem para alterá-los, tudo de maneira encapsulada!
Espero ter ajudado…

da pra dar um exemplo de sett
na pratica???

favor meio que get eu saquei o seria mas set naum entende
???
sei ki e pra setar mas setar o que
e como setar algo que naum esta na mmsm classe ?
ou algo parecida???

Boa tarde, você falou acima que não está entendendo o que é o SET, pois então, como foi dito acima o SET é pra setar valores em uma determinada variável certo???
e o GET é pra buscar os valores daquela varíavel,… quando você usa o Encapsulamento, você cria Get e Set para cada variavel sua… Por exemplo.: " a sua variavel Saldo contem o método GetSaldo( busca o valor do saldo ) e a SetSaldo( Que seta ou inclui um valor na variável saldo) "… então vou te mostrar um exemplo de sua propria classe, irei instanciar um objeto e te darei um exemplo… um exemplo bem simples para você entender perfeitamente :mrgreen:

SUA CLASSE

[code] class Conta {
private Double limite;
private Double saldo;

public void setLimite(Double limite) {
this.limite = limite;
}

public Double getLimite() {
return limite;
}

public void setSaldo(Double saldo) {
this.saldo = saldo;
}

public Double getSaldo() {
return saldo;
}
[/code]

CLASSE QUE INSTÂNCIA UM OBJETO DO TIPO “CONTA”

  public class Exemplo{
      public static void main(String args[]){
            Conta conta = new Conta();

                // ISSO É SÓ UM EXEMPLO PARA ENTENDER NA PRATICA
                 
            conta.setSaldo(1.000); // NESSA PARTE DO CÓDIGO VOCÊ ESTÁ SETANDO OU INCLUINDO UM VALOR NA VARIÁVEL SALDO
            
           System.out.print(conta.getSaldo()); // NESSE EXEMPLO VOCÊ ESTÁ BUSCANDO O VALOR QUE ESTÁ NA VARIÁVEL SALDO   
    }

 }

[quote=welitonjose]da pra dar um exemplo de sett
na pratica???

favor meio que get eu saquei o seria mas set naum entende
???
sei ki e pra setar mas setar o que
e como setar algo que naum esta na mmsm classe ?
ou algo parecida???[/quote]

Partindo da sua classe conta:

class Conta {
  private double limite;
  private double saldo;
  
  public double getSaldo() {
    return saldo;
  }
  
  public void setSaldo(double saldo) {
    this.saldo = saldo;
  }
  
  public double getLimite() {
    return limite;
  }
  
  public void setLimite(double limite) {
    this.limite = limite;
  }
}

Criemos uma classe que irá utilizar o set para modificar os atributos de uma conta mas note que isso não se procederá diretamente com o nome do atributo e sim pelo método set.
Segue a classe que modifica uma conta:

public class ModificadorDeConta{
  public static void main(String [] args){
    Conta c = new Conta(); //Construtor default criado pelo Java
    c.setSaldo(Double.parseDouble("123.123")); //nesse momento vc esta modificando as propriedades do objeto conta
                                                                           //isso de forma indireta, a forma direta seria c.saldo=Double.parseDouble("123.123")
                                                                           //a forma direta não funciona devido a vc ter encapsulado seus atributos com private
  }
}

Espero ter ajudado…
Uma recomendação pra quem aparentemente ta começando no java como vc seria o livro “java como programar” de Paul Deitel…

Falando das exceptions, realmente tratar qualquer coisa como uma exceção não é muito viável. Seria bom vc usá-las apenas
para as exceções verificadas (lógico), aquelas que o compilador consegue enxergar. De resto, um “if”, “while” é melhor, até pq,
citando como exemplo, a JVM não tem culpa se um array tem 10 posições e vc quer usar a 11ª.

E nunca é tarde para lembrar que não devemos abusar de getters e setters:

http://blog.caelum.com.br/2006/09/14/nao-aprender-oo-getters-e-setters/

Cara, com todo respeito, vc ta precisando dar uma olhada em OO básico antes mesmo de futucar em Java.


Entenda o seguinte. Vamos supor que vc tenha a classe Cachorro. e vc queira trocar o nome dele de Rambo para Golias.

Se vc não tiver o set, vc faria: cachorro.nome = "Golias";

Agora, e se quando vc trocasse o nome, vc tivesse que colocar um apelido?

Todo lugar que o código tivesse o código para alterar o nome vc teria alterar o nome da Coleira:

cachorro.nome = "Golias"; cachorro.nomeColeira = "Gogo";

Com o set, vc deixa seu código sujeito a menos alterações. se tivesse usando o set ficaria

[code]public void setNome(String nome){
this.nome = nome;
this.nomeColeira = nome;
}

e pronto. Todo código que for alterar o nome do cachorro, de quebra ja altera o nome da coleira.

Igual ao Sérgio falou, não vá sair lascando get/set para todos seus atributos não que isso não é correto.