Destruir a encapsulação?

Programadores de alguma liguagem OO sempre falam que mapear objetos para tabelas banco de dados é horrivel destroem a encapsulação.

Minha dúvida é a seguinte o que é destruir essa encapsulação??

:arrow: Acho que o correto seria “encapsulamento”
:arrow: Discordo da frase. O problema maior é perder a orientação a objetos e deixar suas classes com “características relacionais” ao invés de organizar os objetos da forma como normalmente deveriam estar no lado da programação
:arrow: Mas respondendo a pergunta, “destruir o encapsulamento” seria expor as características do objeto. Tudo bem, é verdade que quando você tem uma tabela que representa o objeto você pode manipulá-la diretamente e alterar os dados, talvez até privados, do seu objeto de forma irregular. Mas acho que não tem muito como escapar disso usando banco de dados… quem sabe não é essa mais uma idéia para usar Prevayler… hehehe

bem
isso eh relativamente ruim, mas nao quer dizer q vc vai expor seu encapsulamento nao.
se vc usar variaveis publicas e tiver trocentos metodos save e update dentro do proprio bean, ai sim (GUJ, cof, cof :)).
encapsular eh esconder o modo o qual voce representa seu estado interno. soh voce sabe como ele eh representado.

muitas vezes BD’s são usados como middleware entre sistemas… o Prevayler vale a pena ser estudado. Não ter que mapear objetos elimina muito desgaste intelectual… sem citar as outras vantagens tipo usar OO de verdade…

Vamos ver se entendi

Se eu tenho um Bean bem simples só para exemplo tipo

	public class Pessoa{
	  private nome="";
	  public void setNome(String nome){this.nome=nome;}
	  public String getNome(){return nome;}
	}	 

Ao usar o Prevayler como o pessoal falou, esse Bean será persistido, não preciso me preocupar com  tabela(isso seria um dos desgate intelectual dito acima?) e o estado interno do Bean está escondido ou seja  não ocorre a "destruição do encapsulamento".
Bom estou iniciando agora se estiver errado por favor me corrijam.

[quote=“Yoshi”] Ao usar o Prevayler como o pessoal falou, esse Bean será persistido, não preciso me preocupar com tabela(isso seria um dos desgate intelectual dito acima?) e o estado interno do Bean está escondido ou seja não ocorre a “destruição do encapsulamento”.
Bom estou iniciando agora se estiver errado por favor me corrijam.[/quote]

Não, Yoshi. Quem faz isso para você é o Hibernate. Prevayler persiste seus objetos diretamente na memória da sua máquina. Ou seja, nada de tabelas, nada de banco de dados, nada de SQL. Um paraíso, para a maioria dos casos.

Faltou um “implements Serializable” no seu bean :wink:
Mas a idéia básica é essa mesma.

Porém, como já foi dito, ninguém vai deixar de usar um banco de dados só por causa desse conceito de “destruir o encapsulamento”. Isso é algo que você tem que se preocupar no seu código, não no banco de dados.

Mesmo pq, encapsulamento eh exatamente a unica coisa que um banco de dados NAO PODE fazer :wink: