[SEM_ÁUDIO] Meu nome é Eduardo Guerra estou falando com você aqui do curso de Orientação a Objetos com Java. Hoje vamos falar de conceito extremamente importante e vamos entender a importância dele nessa aula que é o encapsulamento. O encapsulamento é considerado dos pilares da programação orientada a objetos e espero que nessa aula você possa entender o porquê. Eu começo dizendo que a ignorância é uma benção. E não digo a ignorância, o fulano é ignorante, chega falando alto, chega chutando a porta, não. Não é esse tipo de ignorância. É a ignorância no sentido de que você não precisa saber tudo. É a ignorância boa aquela ignorância do tipo: você não precisa conhecer tudo. Você pode ser ignorante relação a alguma coisa. Vamos entender melhor o que eu estou querendo dizer. Então quando você está por exemplo, lá na sua casa, no seu sofá assistindo uma TV, você precisa saber lidar com o controle remoto você precisa saber ligar a TV, trocar o canal, ajustar o volume, de repente até sintonizar os canais, uma coisa até pouco mais avançada, daquela que as vovós chamam os netinhos pra fazer pra elas, sintoniza aqui pra mim. Mas trocar o canal, ligar e desligar ela sabe. Então a questão é, ninguém precisa entender como uma TV funciona por dentro para poder assistir uma TV, ligar e desligar, então nesse caso, a ignorância é muito boa. Imagina se para assistir TV você precisasse entender o funcionamento da tela, por exemplo, se você tinha uma TV antiga, comprou uma TV de uma nova tecnologia, você teria que estudar aquela nova tecnologia para poder usar aquela TV, nesse caso a ignorância é muito bom. É muito bom a gente não precisar entender o funcionamento da TV para conseguir utilizá-la. Uma outra coisa, as TVs por dentro, com certeza uma TV de tubo funciona completamente diferente de uma TV de LED, uma TV de plasma e as coisas estão sempre evoluindo, a tecnologia está sempre andando para frente no sentido de tornar as coisas mais leves, mais baratas até, e estou aqui com controle remoto ele funciona da mesma forma. Os controlezinhos da TV funcionam da mesma forma. Então você não precisa aprender nada para comprar uma TV que utilize uma tecnologia diferente. Então esse é bom exemplo dessa ignorância boa, no sentido de que você não precisa conhecer tudo que está por trás, tudo que está por dentro, o funcionamento interno, para poder interagir com aquilo. O que você precisa conhecer é só a superfície. Você não precisa saber o que tem dentro, você tem que conhecer essa superfície. Aí você fala: está falando de televisão, controle remoto que isso tem a ver com programação? Bom, aí eu volto uma pergunta para você. Como você trabalha com sistema que tem algumas milhões de linhas de código? Você acha que o desenvolvedor desse sistema vai conhecer uma por uma, todas essas linhas de código? Não. Então o que acontece, ele precisa conhecer a parte muito bem a parte que ele está trabalhando, e ele precisa conhecer essa superfície que a gente falou dos módulos que interagem com aquele que ele está trabalhando. Então a ideia é a seguinte, se eu estou fazendo por exemplo, sistema que lida com imagens de satélite, e eu preciso utilizar por exemplo, filtro de imagem, preciso fazer processamento de imagem eu posso ter componente que eu chego para ele e falo assim: olha, faz este processamento nessa imagem para mim, aí eu não preciso compreender como ele faz esse processamento. Eu só tenho que conhecer a superfície, ou seja, aquela casca que eu vou interagir no momento de lidar com aquele componente. Então quando a gente está desenvolvendo sistema maior é interessante que a gente conheça o pedaço do nosso sistema que a gente está trabalhando e as interfaces dele com os componentes que interessam para ele. E não pense que essa estrutura vai: não estou usando orientação a objetos, então vai ficar tudo encapsulado. Não senhor. Isso aí é uma estrutura que você tem que criar no seu software, para que seja possível alguém trabalhar numa parte dele sem precisar conhecer todo o resto, até mesmo para que quando você trabalhar naquela parte, independente da pessoa conhecer o resto ou não o impacto seja naquela parte, e não no resto. Sistemas ás vezes muito acoplados, você realmente precisa conhecer tudo porque uma coisa impacta na outra, uma coisa está misturada com a outra. Você vai mexer na lógica, isso está misturado com a interface gráfica, às vezes está misturado com o acesso a dados está misturado com o acesso a outros sistemas, isso está misturado com a lógica que seria de componente separado com cálculo e aí quando você tem que mexer no sistema, você tem que lidar com isso tudo. Então, esse encapsulamento é extremamente importante e não vem de graça. Fique ciente que você tem que pensar o seu software de forma que você fale: ok, essa é uma parte independente, eu posso criá-la eu posso definir muito bem qual é essa interface para que os outros componentes possam interagir com essa parte do meu sistema. Então isso você tem que projetar, você tentar tudo isso que a gente vem falando, separação de responsabilidades, que seriam justamente: olha, essa classe é responsável por isso, então o que está dentro dela as outras não precisam saber. Esta parte maior aqui está dentro desse conjunto de classes, e a gente vai fazendo isso com escopos diferentes. Às vezes uma classe pode encapsular comportamento menor componente pode encapsular uma parte maior do meu sistema, mas sempre de forma que o resto não precise saber do comportamento interno, somente daquela superfície, somente da parte que ele tem que interagir. Vamos falar mais de encapsulamento, mas espero que nessa aula você tenha compreendido como que esse encapsulamento é extremamente importante, principalmente se você está desenvolvendo sistemas comerciais, sistema de fácil manutenção que uma equipe vai estar trabalhando cima dele e que com certeza você ter os componentes encapsulados é extremamente importante para o sucesso do seu projeto. Muito obrigado, vejo você na próxima aula. [SEM_ÁUDIO]