De novo os Getters e Setters

Pessoal,

Eu leio com frequência em blogs, forums etc etc etc sobre não utilizar a nomenclatura de gets e sets. Até gosto da ideia, compreendi a tese mas …

Como fazer quando você utiliza alguma coisa que precisa que a sua classe tenha os metodos get e set como por exemplo a JSTL (se eu estiver enganado me corrijam por favor) ? Volta-se para o get e set ? ou abandona e utiliza outra alternativa ? Não seria mais facil continuar utilizando os gets e sets já que é compativel com tudo que é framework, ou seja, os que dependem dessa nomenclatura e os que não dependem, vide os que utilizam reflection ?

Aguardo um debate sadio sobre esse assunto.

Posta aew os links que falam pra NÃO usar os getters e setters.

get , set são nomenclatura padrão para o Encapsulamento
nada te impede de inves de usar

private String nome;

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

    }

   public String getNome(){
       return nome; 

    }

usar assim


  public void MundaNome(String nome){
       this.nome  =  nome;

  }

  public String pegaNome(){
     return nome; 

   }

caso vc num queira Encapsular nada

invés de

private String nome;

use assim

assim vc nem precisa instaciar seu Objeto.

public static String nome;

ou

public String nome;

Alguns mais “puristas” discordam de usar get e set como prefixo, sendo que usar o nome do atributo bastaria.

Ex:

[code]public class Pessoa {
private String nome;

public String nome() { return nome; }
public void nome(String nome) { this.nome = nome; }
}[/code]

Pessoa p = new Pessoa(); p.nome( "GUJ" ); System.out.println("Meu nome é " + p.nome() );

Mas quando você tem um legado de frameworks e convenções que dependem dos get/set, não tem o que fazer, apenas aderir ao convencionado.

Isso não é bem encapsulamento.

Pessoal,

Ninguem até agora além do daniel respondeu alguma coisa de util. Para que serve o get e set eu sei, basta ler a minha mensagem de abertura do tópico. A questão é como fazer no caso de utilizar algum framework, taglib, linguagem de script que necessite dos getters e setters.

Exemplos bem realistas: JSTL, EL.

Eu utilizo JSTL e a Expression Languagem direto inclusive combinadas (Nossa que Obvio, nem precisava falar :slight_smile: )

Já respondi!

Eu penso igual a você mas pelo que eu entendi de posts de algumas pessoas … (estou tentando localizar os links), me parece que é tosco utilizar em qualquer situação.

Why getter and setter methods are evil

Acho que você precisa ler o artigo… e alguns outros também.

O problema não é o nome, o problema é pensar que acessores e mutatores te dão encapsulamento.

Esse artigo tbm é bem legal: http://blog.caelum.com.br/2006/09/14/nao-aprender-oo-getters-e-setters/

Quanto ao que fazer com frameworks que utilizam esse nomenclatura, acho que na verdade não se tem muito o que fazer…se precisa, precisa e pronto!

Essa idéia que o Daniel levantou, que alguns puristas acham que o nome do atributo bastaria…eu acho que é interessante…algumas linguagens jah fazem assim…

Shoes, como eu disse na abertura do tópico eu entendi a questão de retirar os gets e sets e só utilizalos quando necessário etc etc etc. Já li esse artigo no fragmental e zilhões de outros. A questão é: quando você precisa utilizar uma lista da classe Pessoa por exemplo com JSTL forEach e depois imprimir todos os dados do cliente (exemplo bem básico) você necessitaria dos getters e ai qual a solução que o pessoal geralmente dá ? você por exemplo, o que você faz nesse caso ? Abraço

CARA, neste caso, a convenção é usar GET e SET.

Daniel, foi exatamente o que eu falei. Volta-se ao caso inicial. Não estou dizendo que devemos sair criando get e set para qualquer coisa. O que eu quero dizer é ao invez de criar um metodo nome() para recuperar um atributo nome eu prefiro o getNome porque é mais compativel com tudo que é framework que se usa hoje em dia. Claro que isso somente quando necessário. O que acontece é que hoje temos muitos sistemas de consulta onde você monta uma collection poe no request e tem que iterar e exibir cada atributo de uma classe praticamente. Nessa situação eu achei muito complicado fugir dos getters. Acho que o Shoes deve ter entendido errado heim Shoes ? :smiley:

Então, Emerson, como falei no outro post não tem problema você usar getNome() em vez de nome() (até é recomendado em Java), o problema não é esse. O problema é ter gets pra tudo.

Resumindo: use os gets e sets quando fizerem sentido.

Bom, ta entendido então. Eu realmente não uso get e set sem pensar se realmente preciso deles e me enganei achando que era uma má pratica a convenção mesmo com criterio. Entendi que para alguns casos terei que utilizar mesmo :). Agradeço a todos pelo esclarecimento. Abraço