Ajuda [Encapsulamento Eficaz]

Segundo o livro - Aprenda programação orientada a objetos em 21 dias.

O encapsulamento eficaz deve seguir esses dicas abaixo:

[list]Acesse seu TAD epenas através de uma interface de métodos; nunca permita que uma estrutura interna se torne parte da interface publica.[/list]
[color=red]Eu estou com muitas duvidas nessa parte do TAD e interface, se alguém poder me dar um luz com uma explicação, ou um exemplo em código mesmo ajudaria bastante[/color]

[list]Não forneça acesso as estruturas de dados internas, abstraia todo o acesso.[/list]
[color=red]Estrutura de dados internas seria as variáveis e os métodos da classe? Como eu posso abstrair o acesso?[/color]

[list]Não forneça acesso inadvertido as estruturas de dados internas, retornando acidentalmente ponteiros ou referencias.[/list]
[color=red]O que pode causar um acesso inadvertido? E o que seria ponteiros e referencias?[/color]

[list]Nunca faça suposições a respeito dos outros tipos que você usa. A não ser que um comportamento apareça na interface ou na documentação, não conte com ele.[/list]
[color=red]O que seria fazer suposições de outros tipos? O que seria comportamento, tipo, interface e documentação?[/color]

[list]Cuidado ao escrever dois tipos relacionados. Não se permita programar acidentalmente com base em suposições e dependências[/list]
[color=red]O que são tipos relacionados? E como assim programar acidentalmente com base em suposições e dependências?[/color]

[color=olive]Eu sei que estou perguntando muito coisa, e até abusando da boa vontade do pessoal do forum, mas eu estou com muita duvida nessa parte de Encapsulamento, e sem entender essa parte não posso dar continuidade no livro, eu estou lendo o mesmo capitulo todo dia pra tentar pegar mas ta complicado.[/color]

Se possível, abandone esse livro e leia outro. Use a Cabeça - Java é o que eu mais indico.

Comecei a ler o Aprenda Java em 21 dias e quase desisti do Java por causa dele.

Até hoje só vi quem criticasse esse livro e não falasse bem.

Só o defino como: horrível.

Quanto a sua dúvida outra pessoa responderá! =D

[quote=rodazzz]Segundo o livro - Aprenda programação orientada a objetos em 21 dias.

[list]Acesse seu TAD epenas através de uma interface de métodos; nunca permita que uma estrutura interna se torne parte da interface publica.[/list]
[color=red]Eu estou com muitas duvidas nessa parte do TAD e interface, se alguém poder me dar um luz com uma explicação, ou um exemplo em código mesmo ajudaria bastante[/color]

[/quote]

Trata-se da estrutura como as classes internas e seus comportamentos, padrões implementados, coleções, enfim tome com exemplo simplório de estrutura a mesma visão que a da construção civil estrutura é do que algo é feito e como isso é organizado.
Em miúdos, se você tem uma punhado de classes no seu modelo que tem como obrigação oferecer certos comportamentos, apenas os comportamentos devem ser acessíveis pela interface, se necessário devem ser criadas estruturas de fronteira (são conhecidas publicamente e se necessário traduzidas para estruturas internas por meio de interfaces.
De modo leigo imagine o motor de um carro ele é composto de inúmeras peças que poderiam ser definidas por classes de objetos, você como motorista você só conhece componentes como pedais, volante e macha, esta é sua interface, daí não preciso saber o que é um carter para dirigir um carro que é a interface pública e útil.

Ele se refere aos comportamentos internos, seguindo o exemplo do carro, eu não posso e nem devo poder puxar ou empurrar um pistão manualmente isso quebra um conceito conhecido como transparência.
Programando isso tem a ver com não deixar que como em uma Calculadora permitir que o usuário mude o modo como as somas devem ser feitas diretamente, para isso deve existir uma interface!
Seus métodos de classes internas não podem ser chamados externamente!

O conceito de ponteiros e referências existe fisicamente na linguagem C++, mas de fato o que ele quis dizer para o java é que sempre deve se trabalhar com uma cópia do objeto interno ou algo do tipo.
Eu não devo passar um objeto interno com metodos que o alteram diretamente, isso não pode ser permitido.

Significa simplesmente que você não deve construir nada baseado em suposições, não posso construir um código que dependa de um método que limpe algo se aquilo não está na documentação, simplesmente por acreditar que isso venha a existir.
Isso também é fortemente ligado ao conceito de não depender do funcionamento interno de algo, eu não posso por exemplo imaginar que um carro tem uma estrutura interna que se adapta e vai correr mais com combustível de foguete e o abastecer com isso.
Não imagine que em uma classe lista todos os objetos são inseridos são armazenados uma a um, que sabe exista um buffer isso seja de bloco em bloco ou qual seja o arranjo interno.

Quer dizer que você não pode construir das peças que compõe fortemente um único comportamento só porque acredita que futuramente isso venha a ser necessário.
É como construir duas partes de um volante onde para qualquer movimento, ou seja, um comportamento básico (só pra isso que ele serve) as partes devem se comunicar, faça um único volante e ponto.
Isto segue o princípio da coesão.

Hebert Coelho

  • Obrigado pela dica. O use a cabeça java é muito com, parece mais que você esta conversando com alguém do que lendo um livro.

DavidUser

-Muito obrigado pela ajuda, foi realmente esclarecedor!