DUvida de Encapsulamento

9 respostas
P

caros,

não entendi abaixo o que tem que mofidicar para fazer o encapsulamento da classe ?

Given: 
 
  1. class TestFoo {
  2.   int x;
  3.   String y;
  4.   int getX() { return x; }
  5.   String getY() { return y; }
  6.   void setX(int x) {
  7.     int z = 7;
  8.     this.x = x;
  9.   }
 10. }
 
 How many modifiers must you add to encapsulate this class?
 
 A 2 
 B 3 
 C 4 
 D 5

9 Respostas

g4j

colocar o modificador private nos atributos…

P

okay

ViniGodoy

Só para divagar um pouco…
Eu me impressiono com a má formulação dessas perguntar.

É claro que a gente imagina que o cara quis dizer encapsular os atributos, e daí responde 4. Mas o conceito de encapsulamento está diretamente relacionado ao uso da classe.

Por exemplo, se essa fosse uma classe imutável, o seu também teria que ser privado, então, teríamos que ter 5 modificadores.

Se essa for uma inner class, e só tivesse de ser usada no escopo da classe principal, ela também teria que ser uma “private class”. E teríamos um modificador a mais.

Se você também parar para pensar… como você alteraria o valor de y, caso deixasse y privado? Não existe setter e nem construtor para ele, nem inicialização direta. Nesse caso, poderíamos dizer que ele poderia ficar privado? Se deixarmos privado, toda chamada a getY() retorna null, o que não faz absolutamente nenhum sentido. Assim, teríamos um modificador a menos.

Finalmente, mesmo adicionando private na variável, aquele setter não faz qualquer tipo de verificação. Então, embora o tipo de dado esteja encapsulado, a variável x em si, se mantermos o set público, não estará. Afinal, através do setter é livremente acessível. Um encapsulamento que faz tão pouco sentido quanto deixar a variável diretamente pública em si.

Thiago_da_Santa

Coloca o metodo PRIVATE no atributo int X, linha 2.
resp letra A;

Espero ter ajudado…
Abracao!

J

Pessoal, presta atenção na pergunta!

Linha 2: Necessita de um modificador private.
Linha 3: Necessita de um modificador private.
Linhas 4, 5 e 6: Necessitam de um modificadores public.

Então a resposta certa é letra “D”, 5 modificadores.

Paribe, aconselho a você estudar mais teoria, não adianta ficar só tentando resolver as questões…
O negócio é estudar o livro da Kathy todo, independente se alguns assuntos forem básicos ou não. Sempre tem alguma coisa básica que achamos que dominamos e na verdade não é bem assim…
Boa sorte!

ViniGodoy

A pergunta só fala em garantir o encapsulamento, o que não envolve necessariamente colocar os modificadores public. Aliás, nada garante que os métodos ali descritos não tenham mesmo que ter o modificador default, que é mais encapsulado do que o public.

O que me chamou atenção é que colocando modificador private em y, não teremos mais como alterar o valor. E isso é um problema já que y não foi inicializado. Então, não sei se isso significa que não devemos colocar esse modificador (e y será acessado diretamente) ou se isso significa que a questão só está pessimamente formulada mesmo.

P

Caro jCastilho

a resposta e a letra A

por isso estava em duvida.

abs

J

Entendi Paribe. Então vamos levar as coisas no pé da letra e vamos ver se chegamos a uma conclusão:
Para Kathy e Bert, garantir um encapsulamento é necessário manter as variáveis de instância protegidas e definir métodos public para seu acesso(está no livro, pág. 50).
O máximo, na minha opinião, que poderia ser relevante, é não colocar o modificador public nos métodos, mas o modificar private dos atributos é obrigatório. Assim a resposta “A” seria a correta (“forçando a barra”, na minha opinião seria letra D).

vinigodoy,
Em relação ao encapsulamento, você falou que default é mais encapsulado do que public, mas para se manter o encapsulamento os métodos envolvidos tem que ser public (menos reritivo claro!), um método default ou mais restritivo estragaria o encapsulamento.
A respeito de privar a variável y, concordo com você, mas no caso acho que temos qe pensar no encapsulamento, por isso não dei atenção a isso. Realmente a questão não está bem formulada, porque eu iria na letra “d” sem pensar muito.

Desculpe qualquer coisa, mas acho extremamente útil essa discussão, é assim que vamos aprendendo cada vez mais!
Abraço a todos!

fabim

Sim, a pergunta esta horrivelmente mal formulada.
Encapsulamento nao diz respeito apenas a modificadores e métodos de acesso.

Criado 5 de setembro de 2008
Ultima resposta 5 de set. de 2008
Respostas 9
Participantes 6