2
respostas

Falha no encapsulamento da aula

Reproduzindo o codigo para estudos, obervei que o encapsulamento da aula não esta funcionando, visto que eu ainda consigo alterar o id do usuario (tagName) pelo metodo publico criarIdInterno.

val gamer1 = Gamer("Fabricio Moura", "fabricio@email.com")
    println(gamer1)
    val gamer2 = Gamer("Bianca", "bianca@email.com", "22/04/2000", "bpsx")
    println(gamer2)

    gamer2.let {
        it.birthDate = "06/06/2002"
        it.username = "bpsxg2"
        it.createTagName()
    }.also {
        println(gamer2)
    }

    println(gamer2)

saida do console: Gamer(name='Fabricio Moura', email='fabricio@email.com', birthDate=null, username=null, tagName=null) Gamer(name='Bianca', email='bianca@email.com', birthDate=22/04/2000, username=bpsx, tagName=bpsx#04830) Gamer(name='Bianca', email='bianca@email.com', birthDate=06/06/2002, username=bpsxg2, tagName=bpsxg2#08715) Gamer(name='Bianca', email='bianca@email.com', birthDate=06/06/2002, username=bpsxg2, tagName=bpsxg2#08715)

2 respostas

Adicionando um private ao metodo createTagName resolveria o problema

Oii, Fabricio! Tudo bem?

Fico feliz que conseguiu uma forma de solucionar o problema, parabéns!

É importante se atentar que ao adicionar um private ao método createTagName ajudaria a restringir o acesso direto a esse método fora da classe, mas não resolveria completamente o problema relacionado ao encapsulamento dos atributos da classe Gamer. E o encapsulamento é a proteção dos atributos da classe para evitar que sejam acessados ou modificados.

Para fazer isso, é preciso definir propriedades privadas para atributos e fornecer métodos públicos para acessá-los, ou seja, set e get

Para mergulhar ainda mais nesse tema, recomendo a leitura da documentação do Kotlin no qual possui informações sobre as propriedades set e get e dentre outrras.

A página pode abrir em Inglês, caso não se sinta confortável com o idioma, basta clicar com o botão direito do mouse em qualquer canto da página e escolher a opção "Traduzir para o português".

Espero ter ajudado.

Bons estudos, Fabricio!