[MÚSICA] [MÚSICA] Olá a todos, esse é o curso de Desenvolvimento Ágil com Padrões de Projeto, meu nome é Eduardo Guerra e nessa aula a gente vai continuar aquela revisão de orientação a objeto, agora falando sobre o encapsulamento. Então a gente vai entender que história é essa de comportamento sem dependente da interface, o que é isso que a gente está falando. Então eu sempre começo a falar de encapsulamento, já é uma tradição eu falando que a ignorância, ela pode ser uma benção. A gente não precisa saber como as coisas funcionam para poder utilizar elas. E a gente vai seguir o exemplo da outra aula, que a gente estava falando de carro então, para a gente interagir com alguma coisa, você não precisa saber. Então, por exemplo, você está utilizando carro, você tem motor com injeção eletrônica, ou carburador, sei lá, o carro é elétrico, o funcionamento interno dele às vezes é completamente diferente. Mas você interage com o carro da mesma forma, tanto é que às vezes é mais difícil você pegar carro que tenha a marcha pouco diferente ou às vezes você está acostumado com câmbio automático e pega carro manual, ou vice versa, é mais complicado do que você pegar carro com uma tecnologia completamente diferente mas na parte, por exemplo, do motor que você não interage diretamente. Então a questão é, se for a mesma interface, não interessa o que está por trás, então por isso o encapsulamento é a nossa terra, por exemplo, a gente tem contato na terra só com a superfície, a gente não sabe se tem alguma coisa por baixo, o que é que tem embaixo, mas a superfície é com o que a gente interage. Então encapsulamento é conceito que consiste esconder o comportamento interno das classes externas, daquele que está acessando aquela classe de forma externa. Por quê? Porque dessa forma a gente consegue fazer, por exemplo, uma alteração interna da classe, ou até mesmo você consegue trocar qual é a implementação daquela classe sem que o cliente, sem que quem está utilizando, a classe que está utilizando, precise saber que aquilo ali mudou. Por quê? Porque ela interage com a interface. Da mesma forma que você vai conseguir dirigir carro que tem, por exemplo, o motor diferente, uma classe que sabe, por exemplo, mandar uma mensagem a partir de uma interface, se você trocar o cara que manda mensagem, usando diferentes protocolos de rede também, que podem funcionar de forma completamente diferente, esse cara que manda mensagem não precisa saber disso, desde que ele interaja com a mesma interface. Então, por exemplo, a gente pegar o motorista que seria o nosso cliente da classe, o volante, a marcha, que seria a nossa interface para dirigir o carro, a gente tem esse cliente dirigindo qualquer carro que tenha essa interface. Por outro lado, essa interface também pode ser, esse carro pode ser dirigido por qualquer pessoa que saiba dirigir carro daquele tipo. Então, isso é uma vantagem, imagine se cada carro fosse diferente, se tivesse que aprender a dirigir de novo para cada tipo de volante, se a marcha fosse diferente, seria pesadelo, certo. Então, com essa interface padronizada a gente tem, de lado, vou voltar aqui, o motorista conseguindo dirigir qualquer carro, e por outro lado o carro também podendo ser dirigido por qualquer dos motoristas, que saibam dirigir. E aí quando a interface é a mesma, fica fácil você trocar o que está por trás. Exemplo que eu gosto de dar, por exemplo, é simulador de voo. Que você tem ali todos os instrumentos, tudo como se fosse o próprio avião, então, hoje dia, a hora de treinamento avião é muito caro, eles utilizam esse simulador de voo como uma parte do treinamento dos pilotos, para eles irem para o avião de verdade. Então depois que você acostuma ali com a interface, você trocar o simulador pelo avião real fica muito mais fácil do que se você estivesse chegando no avião do zero. Agora você está falando de carro, de avião e o que isso tem a ver com código? Imagine que eu tenha esse código aqui, por exemplo, eu pego uma conexão, abro ela, mando ali uma informação de teste e fecho. Se a gente seguir o conceito do encapsulamento, o que está sendo retornado por esse método Create do Factory pode ser, por exemplo, uma conexão com o banco de dados, onde ele vai estar mandando aquele teste para o banco de dados, pode ser uma conexão arquivo, pode ser uma conexão socket, com a rede, desde que tenha a mesma interface, eu consigo substituir a minha implementação para que eu use qualquer uma delas. Isso é muito interessante na parte do encapsulamento. Então a gente entendeu essa importância de esconder o comportamento interno e isso ajuda muito para que a gente organize melhor o nosso código. Antes, você lá na programação estruturada, que eu falei na aula anterior, quando você mudava uma coisa no código, às vezes tinha impacto enorme. Quando a gente encapsula as coisas direitinho, as modificações são muito mais locais. Você vai mexer dentro daquela classe e todo mundo de fora não precisa saber daquilo. Então isso foi ganho muito grande. Espero que você tenha entendido esse conceito, entendido a importância dele e espero vocês na próxima aula. [MÚSICA] [MÚSICA]