Set/Get

Ola pessoal, gostaria muito saber quando devo usar os metodos Get e Set, gostaria muito de ter alguns exemplos.

Obrigado pela Força!!!

Marcos Tonel

Bom de acordo com o POO, os atributos de seus objetos devem estar “protegidos” (private), ou seja, não deve ser permitido acessá-los diretamente, por isso voce cria métodos set’s para mudar o seu conteúdo, e get’s para recuperar o conteudo… Um exemplo pequeno:

[code]public class Pessoa
{
private String nome;
private String CPF;

public void setNome (String newNome)
{
nome = newNome;
}
public String getNome ()
{
return nome;
}

public void setCPF (String newCPF)
{
CPF = newCPF;
}
public String getCPF ()
{
return CPF;
}
}[/code]

vc nunca pode acessar um atributo diretamente, e sempre através de metodos (POO)…, vc deve usar sempre que vai armazenar ou buscar algo de um objeto… só complementando o código acima…

Pessoa.setNome ("Angelo"); Pessoa.setCPF ("111.111.11-11");

String nome = Pessoa.getNome (); String cpf = Pessoa.getCPF ();

inté mais…

além do q já foi falado, isso serve tbm para vc fazer consistência dos dados, tipo:

public class Pessoa{

  private Cliente cliente;

  public Cliente getCliente(){
    if ( this.cliente == null ){
      this.cliente = new Cliente();
    }
    return this.cliente;
  }

  public void setCliente( Cliente cliente ) {
    this.cliente = cliente;
  }

}

desta forma vc garante q nunca vai retornar o atributo cliente nulo.

[]'s

Mas, não é sempre que metodos set serão implementados. Nas wrapper classes por exemplo, só há metodos para leitura aos dados. Vc evitar set’s quando quer criar objetos imutaveis (immutable objects) muito bons para representar chaves em coleções de dados.

valeuz…

Mais ou menos, né galera…

Ninguémd everia precisar acessar algum atributo diretamente, mas a OO não proíbe que isso seja feito, apenas recomenda manter o encapsulamento :wink:

Você pode muito bem ter um:

usuario.carro.setCor(vermelho);

Mas se você puder usar um:

usuario.getCarro().setCor(vermelho);

É bem melhor. Nunca é muito tempo :wink:

[]s

A grande verdade é que no Java vc pode programar usando tudo que o paradigma de OO oferece. Ou vc pode programar de uma forma estruturada usando um método como esse que citaram usuario.carro.setCor(vermelho);

Unico problema de vc estar programando de forma “estruturada” é que você não estará utizando as facilidades que a OO pode oferecer, como reutilização de Código.

O problema é que quem programava de forma estruturada para começar a pensar em OO é phoda, pelo menos pra mim está sendo :stuck_out_tongue:

Salve Tonel!!!

Cara set/get é muito fácil entender, é dessa forma: get você usa-o quando você quiser receber, ou requerer um dado de uma variável ou um método para receber uma determinada informação.

umObjetoDoQualObteraAInformacao.getAlgumaCoisaEspecifica()

já o set é usado para atribuição de valores a uma determinada variável

umObjetoDoQualObteraAInformacao.setAlgumaCoisaEspecifica(novoValor)

Resumindo
set = atribuir valor
get = receber valor

Até mais… :wink:

Oi,

[quote=“HGK_Blade”]A grande verdade é que no Java vc pode programar usando tudo que o paradigma de OO oferece. Ou vc pode programar de uma forma estruturada usando um método como esse que citaram usuario.carro.setCor(vermelho);
[/quote]

Esta statement não tem nada de estruturada. Programação estruturada separa dados e funções, programação OO concentra atributos e comportamentos em unidades. O simples fato de você usar um atributo de outro desta forma não descaracteriza OO, mas não é uma boa prática, e deve ser usada com cautela. Se fosse assim, não haveriam atributos publicos :wink:

Maior reutilziação de código, visto que de forma procedural/estruturada você também tem reutilização, ecapsulamento e oturas características, mas em um grau menor.

[quote=“HGK_Blade”]
O problema é que quem programava de forma estruturada para começar a pensar em OO é phoda, pelo menos pra mim está sendo :P[/quote]

Sim, é. Todo paradigma é complicado, e minha sugestão é ler os textos clássicos sobre o assunto, os bem antigos, porque eles ensinaram ao mundo :slight_smile:

[]s

pq que vc usa newNome no setNome e o mesmo no cpf, ñ é so colocar o tipo do atributo e nome

[code]public class Pessoa
{
private String nome;
private String CPF;

public void setNome (String newNome)
{
nome = newNome;
}
public String getNome ()
{
return nome;
}

public void setCPF (String newCPF)
{
CPF = newCPF;
}
public String getCPF ()
{
return CPF;
}
}[/code][/quote]

[quote=“Bumbs”]pq que vc usa newNome no setNome e o mesmo no cpf, ñ é so colocar o tipo do atributo e nome

[code]public class Pessoa
{
private String nome;
private String CPF;

public void setNome (String newNome)
{
nome = newNome;
}
public String getNome ()
{
return nome;
}

public void setCPF (String newCPF)
{
CPF = newCPF;
}
public String getCPF ()
{
return CPF;
}
}[/code][/quote]

bem, tu até poderia declarar com o mesmo nome da variavel de instancia, mas pra acessar a de instancia depois no método teria q ser com o this (this.nome = nome)