[MÚSICA] [MÚSICA] Olá a todos, eu sou Eduardo Guerra. Estamos mais hands on. Desse vez a gente vai falar aqui sobre o encapsulamento de arrays né, a gente vai ver aà como que é, à s vezes, a gente retornar array que está dentro do nosso objeto também pode está bastante errado. Tá! Então, eu vou pegar aqui o mesmo exemplo que a gente tinha visto anteriormente da classe pilha. Né, que eu tenho aqui array de objetos e eu criei aqui get e set para esse array, tá. Imagina que eu não quero deixar alguém configurar o array. Então, eu posso apagar até esse set. Eu simplesmente vou deixar que alguém pegue essa informação. Tá! Mas a gente vai ver que mesmo só deixando pegar, isso pode ser perigoso. Tá! Então, vamos rodar novamente aqui só para a gente entender, eu tenho aqui a pilha. Eu estou empilhando Eduardo, Maria e José. Estou vendo o topo e o tamanho. Certo? Depois eu vou desempilhar, tá? Vou até tirar aqui esses uppercases aqui. [TECLANDO] Certo? É, e imprimir aqui o tamanho. Né, então vamos rodar, ver como é que a pilha funciona. Certo? Então, eu tenho aqui, o José e 3, tá certo? Né! Quem está no topo da pilha e o tamanho 3. Aqui, ele desempilhou o José, ficou a Maria que era a seguinte e o tamanho da pilha foi 2. A princÃpio, o comportamento está correto. Tá? Bom, eu vou pegar uma informação aqui, né? Que seria o array de elementos. Então, eu vou vir aqui e fazer p. getElementos(). Bom, a princÃpio eu não estou mexendo mais na classe pilha, né. Eu poderia vir aqui, pegar esse array de elementos, né. E vou pegar, por exemplo, aqui a posição 2 desse array e vou setar outro cara ali. Certo? A princÃpio, né, eu estou setando informações, mas não na classe pilha. O que é que será que acontece aqui? Vamos ver. Eu vou rodar aqui. Na hora que eu desempilhar ele vai desempilhar o outro, né. Certo? Se eu colocar, por exemplo, aqui na posição 1, né, ele vai rodar vai desempilhar o José, mas na posição ali da Maria ele colocou outro, né, e vai ficar como o topo aqui da pilha. Né? A gente vê que quando ele retorna aquele array, qualquer modificação nesse array vai ter uma influência dentro da minha classe pilha. Então, à s vezes, a gente fala assim, encapsulamento a gente tem que ter cuidado com aquilo a gente vai permitir que o cara modifique. Né? Só que muitas vezes se a gente retornar, por exemplo, array, ele consegue modificar esse array. Tá certo? E isso vai ter impacto dentro da nossa classe. O que é que a gente pode fazer? Tá? Nesse hands on eu vou mostrar aqui, por exemplo, que a gente pode até permitir que ele recupere todo o array mas a gente precisa fazer uma cópia desse array. Certo? Então, tem uma classe chamada arrays, certo? Que ele tem aqui... ele tem método chamado copyOf. Certo? Então, eu passo o meu array original. Certo? É, que no caso aqui vai ser os elementos, né. Tá. Então, elementos e o novo tamanho que pode ser o próprio topo ali, né, que tem o tamanho, né. Vou até chamar aqui de tamanho. Vou chamar aqui o método tamanho. Certo? Então, eu vou criar aqui array de objetos, né. Vou chamar de paraRetorno e ao invés de eu retornar diretamente o meu array de elementos eu vou retornar esse array que está sendo uma cópia. Note que nesse caso eu ainda estou ajustando o tamanho dele só para aquilo que realmente tem dentro da pilha, né. Certo? Então, é, eu vou imprimir aqui o [TECLANDO] esse array elementos aqui só para a gente ver o que é que ele está retornando, né. E aà eu continuo setando ali o outro. Né. Vamos ver o que acontece agora? Bom, ele imprimiu aqui negócio esquisito, deixa eu ver se eu der twist aqui se ele melhora. Também não. É! Bom, vamos imprimir aqui, vamos ver pelo menos o tamanho aqui do array, né. Certo? Então, o tamanho do array é 3 e mesmo que eu configure o outro eu estou configurando esse outro numa cópia do meu array de elementos. Tá. Observa, por exemplo, que se eu vier aqui, né, no final e colocar, né a pilha. getElementos, é... e ver o tamanho, né. Ele vai ter que imprimir 2 porque é o tamanho da pilha atual, né. Certo. Então, ele retorna só os elementos. Aquele elemento a mais ali o José, que ainda está no array aqui, certo. Ele ainda está nesse array porque quando eu desempilho eu só diminuo o topo. Ele não está sendo retornando junto com o array. E aÃ, essa cópia que eu recebo eu posso modificar ela a vontade que isso não vai estar influenciando dentro ali do meu array. Tá certo? Então, espero que com isso a gente tenha visto mais detalhe dessa questão do encapsulamento, que é não só tomar cuidado com as informações que você permite que a pessoa modifique, mas também, tomar cuidado com o que você retorna para não ser uma coisa que possa ser modificada e quebrar, a princÃpio, o funcionamento da sua classe. Tá certo? Muito obrigado. Até o próximo hands on. [MÚSICA]