[MÚSICA] Olá a todos. Esse é o curso de orientação a objetos com Java. Eu sou o Eduardo Guerra e hoje vamos estar falando sobre os métodos de acesso. Vamos entender como que a gente pode estar utilizando os métodos de acesso para encapsular o acesso aos atributos da nossa classe e como eles são importantes e muitas vezes são responsáveis por dar uma grande flexibilidade no momento da implementação. Sendo que a gente pode estar protegendo aqueles atributos, podemos estar mudando o formato deles não é? E como isso daà nos dá controle sobre como a classe está sendo vista externamente, independente de como internamente ela está estruturada. Então imagine aà uma atriz que tem várias informações sobre ela, só que ela não quer que muitas dessas informações sejam divulgadas publicamente. Então por exemplo as coisas boas que ela fez: participou de evento humanitário, lançou filme não é? Isso daà todo mundo quer que seja público. Mas ali aquela briga que teve ali com o namorado não é? Aquele problema lá de famÃlia e tal, essas coisas quer manter privado. Então vamos imaginar aà por exemplo uma classe ali Atriz. Ela tem ali o seu nome, talvez não tenha problema não é? Ou à s vezes talvez tenha ali nome artÃstico, que não queira liberar o seu nome real, a idade, tem ali segredo, tem ali amante. Então a gente pode ver que todas essas informações a princÃpio são privadas. Porquê? Porque eles têm o private ali e a classe Atriz ela pode definir como que vai expor essas informações. Então o método de acesso não é? Vamos pegar o nome aqui como exemplo. É uma forma de a gente estar dando esse acesso público a essas informações da classe. No caso a gente tem o método get, que ele pega não é? Ele retorna ali o nome. E a gente tem o método set, que permite que a gente altere aquele nome. E você fala assim: mas eu entendi o que é método de acesso, eu posso pegar e colocar isso daÃ, ao invés de usar getNome, eu vou usar retornaNome ou configuraNome ao invés do setNome? Você até pode fazer isso. Não vai deixar de ser método de acesso. Só que na linguagem Java existe padrão JavaBeans, que é uma forma padronizada de estar criando esses métodos de acesso. E a gente tem vários frameworks que trabalham identificando esse padrão, que é começar os métodos com get e set e por isso é muito recomendado que, principalmente Java, você utilize eles nesse formato aqui, como a gente exemplificou aqui do atributo nome, getNome, setNome. Bom e você fala assim: mas eu não posso ir lá, não faz sentido eu ir modificar o nome de uma atriz, por exemplo. Eu posso simplesmente não ter o método set e fazer com que essa propriedade seja somente para leitura. Olha como é fácil não é? O atributo, eu posso pôr ele como público ou privado, dar acesso ou não, mas eu não posso falar: olha você só pode ler, não pode modificar. Agora com o método de acesso isso é muito simples. É simplesmente prover método get e não prover método set. E aà aquele atributo só internamente na classe vai poder ser modificado. Outra coisa interessante é que o método set, ele pode conter dentro dele uma certa lógica para que só se aceite valores válidos. Então, por exemplo, no caso aqui da idade eu não vou aceitar uma idade negativa. Porém, o tipo inteiro, que é o tipo que está sendo recebido por aquela propriedade, ele pode ser negativo. Então, por exemplo, no método set eu posso verificar ali se a idade é maior que zero e só então atribuir aquele valor ali no meu atributo idade. Então, no meu método set eu também, eu não só posso receber a informação, como eu posso também validar ou, à s vezes, até formatar essa informação para colocar dentro da minha classe. No método get, eu não preciso retornar exatamente aquilo que está dentro da minha classe. Então, por exemplo, a gente sabe aà que à s vezes no meio artÃstico aà o pessoal dá aquela, quando chega numa certa idade, começa a dar aquela diminuÃda na idade, não é? Então ele pode, por exemplo, no getIdade, se a idade, por exemplo, for maior que 30, dar aquela reduzida ali, multiplicar por algum Ãndice ali ou reduzir alguns anos. Eu fiz essa brincadeira aqui, mas se a gente for pensar, falar assim: de repente quando eu vou retornar nome, de repente eu posso querer ver, por exemplo, se aquela pessoa tem algum tÃtulo e caso ela tenha eu vou colocar Senhor, ExcelentÃssimo. De repente eu vou colocar Doutor na frente do nome da pessoa, quando a pessoa for lá e der o getNome. Então não é tão absurdo assim num sistema real você querer ajustar a informação antes de retornar. E isso daà é uma coisa que você tem a oportunidade de fazer no método get, você não retornar exatamente, digamos assim é como se a informação que estivesse dentro da classe, ela estivesse estado bruto. Mas aà o que você quer retornar para as pessoas, você pode refinar, você pode formatar, você pode ter uma lógica ali para fazer alguma coisa. Outra coisa interessante, deixa eu até eu sair aqui do caminho do código. Por exemplo, eu não sou obrigado a retornar uma informação exatamente da forma que ela está dentro da minha classe. Então, por exemplo, ao invés de ter a idade, eu posso ter dentro da minha classe a data de nascimento e aÃ, a partir da data de nascimento, eu calcular a idade para ser retornada. Então, isso mostra que o meu formato de armazenamento dentro da classe não precisa ser exatamente igual ao meu retorno. Eu posso, por exemplo, retornar a idade, mas posso guardar a data, e calcular a idade a partir dessa data. E isso pode se aplicar a várias outras coisas. Opa, deixa eu voltar, deixa eu voltar, deixa eu voltar. Pronto, pronto. Então, a gente viu com isso daà que a prática de você ter métodos de acesso permite essa separação da estrutura interna para esse contrato, para essa, essa casca externa que as outras classes consomem. Por exemplo, imagina que eu realmente tivesse nesse caso aqui, que a gente viu aà da idade. Imagina que a gente realmente tivesse a idade dentro da classe e, de repente, eu percebi que seria interessante mudar essa estrutura. Então, numa classe que eu tivesse que fazer essa mudança, eu poderia manter o método getIdade, que outras classes talvez estivessem utilizando, mas teria toda a liberdade de mudar a minha estrutura interna contanto que as pessoas de fora, quando eu digo as pessoas eu digo as classes de fora pudessem interagir com aquela classe da mesma forma, independente de que se internamente ela mudou ou não. Então esse é dos reais benefÃcios aà do encapsulamento, ele te dá essa liberdade de você trabalhar a sua classe internamente e você manter essa estrutura interna. Com isso, espero que vocês tenham entendido pouco mais sobre métodos de acesso. Entendido que eles são pouco, eles vão pouco além do que simplesmente você fazer get e set para todos os atributos da sua classe e entender essa flexibilidade, essa liberdade de validar, de formatar na hora que você recebe, de formatar na hora que você retorna ou mesmo de retornar uma coisa, retornar ou receber uma coisa num formato completamente diferente daquele que você tem, armazena internamente na sua classe. Espero que tenha ficado claro a todos. Nos vemos na próxima aula. [MÚSICA]