[MÚSICA] Esse é o curso de Orientação a Objetos com Java. Neste iii zone a gente vai tentar entender pouco mais a colaboração entre as classes. O que a gente vai fazer, o nosso exercício é o seguinte: Vamos criar uma classe que registra pontos do usuário, já vendo aí a questão do nosso projeto de gamification, já aquecimento aí, e a ideia que para esse registro de pontuação exista bónus, certo, e para esse bónus a gente precisa, por exemplo, vamos ter multiplicadores dependendo do tipo do usuário, está certo? Ou de fatores do dia, então vamos ver como é que a gente pode criar a classe que vão estar colaborando para fazer essa funcionalidade. Então eu vou criar aqui novo projeto, o projeto Java. Eu vou chamar aqui de Pontuação. [SEM ÁUDIO] Então vou vir aqui, vou criar uma nova classe. A princípio essa classe aqui, ela vai chamar Registro de pontos, RegistroPontos. Imagina que essa classe ela vai ter, por exemplo, métodos para coisas que o usuário faz, certo? Então vai ser, por exemplo, aqui, vamos criar aqui os métodos Void, eu vou colocar aqui fazerUmComentario. Vamos a princípio criar aqui. Bom, quem é que faz comentário? Tem que ser usuário. Eu vou criar aqui agora uma classe Usuário que a minha classe que vai ter os pontos. Então vou criar aqui o Usuário, certo? Vou criar aqui público mesmo, certo? Então public, nome, opa, String nome e public. Vamos colocar aqui inteiro mesmo os pontos, certo? Vamos colocar aqui uma informação aqui, booleana, que é verdadeiro ou falso, se ele é cliente vip, por exemplo, certo? Bom, então eu tenho aqui fazerUmComentario, vou passar aqui usuário. [SEM ÁUDIO] Eu posso ter, e vou criar outros métodos aqui que seriam, por exemplo, criar tópico, por exemplo, certo? Imagina que eu tenho aqui, que estou num fórum aqui. Então vamos lá criar, criarUmTopico, certo, e por fim é que vamos colocar aqui gostar, vou colocar do jeito que todo o mundo fala que é dar like, certo? Então ele está fazendo comentário criando tópico ou dando like. Então imagina o seguinte: Se ele faz comentário, se ele dá like, vamos começar aqui pelo menor. Eu vou fazer aqui u., cadê aqui os pontos dele, eu vou somar 1, certo? Aqui no criar tópico, que seria aqui o mais complicado, ele ganha 5 pontos. E fazer comentário ele vai ganhar 3 pontos, certo? Só o que é que acontece? Usuário vip ele tem 5 pontos, ele multiplica por 5 a pontuação que ele faz. Isso aí são aqueles usuários que pagam para para por exemplo, para o site ou que contribuem de alguma forma. Ou, por exemplo, se eu tenho às vezes é dia que estou querendo promover alguma coisa, eu tenho multiplicador para aquele dia. Então esse tipo de coisa eu vou querer multiplicar. Agora imagina o seguinte: Se eu tenho aqui para cada, por exemplo, para cada método aqui fazer por exemplo, ou If, por exemplo, u.vip, então sei lá, multiplicador, uma coisa assim. Por exemplo, int multiplicador, por exemplo, aqui igual a 0 e aí igual a 1, vamos zerar ali na hora de multiplicar. Se ele for vip o multiplicador ele vira 5 e aí é que eu multiplico pelo multiplicador. Então isso daqui a gente percebe que é uma coisa que pode, como é que fala isso aqui? Eu vou ter que replicar todos esses métodos. Então não é essa a ideia. Então o que é que a gente vai fazer? A gente vai criar uma outra classe aqui que a gente vai chamar aqui de Bonus, CalculadoraBonus. Vai ser uma classe que vai ser responsável por calcular esse bónus que o usuário vai ter. Então por exemplo, eu posso ter aqui, vamos colocar aqui bonusDoDia, certo? Colocar public aqui também para ficar aqui igual ao outro ali, e tem a questão de o cara ser vip. Que eu vou fazer aqui, Public, vamos colocar aqui bónus do usuário, certo? OK. Então o que é que eu vou fazer? Eu vou pegar aqui essa questão aqui para calcular o multiplicador, certo? Vou jogar isso para cá e vou retornar aqui o bónus. Ou melhor, vou retornar o multiplicador. Eu posso começar aqui, por exemplo, já com o bónus do dia, que eu posso modificar ali, está certo? Então o que é que eu vou fazer? Eu vou vir aqui, vou criar uma calculadora bónus, ou melhor, quando eu criar registro de pontos eu já vou passar para ele no construtor uma calculadora bónus, certo? Então vamos lá, Calculadora Bónus. E aí aqui vou criar aqui uma, uma, vou até criar como privado aqui, depois a gente vai ver direitinho como isso funciona, vou chamar aqui CalculadoraBonus cb, então a gente faz aqui, ou melhor, vou chamar ali de bónus só, então bonus.cb é igual a cb e aí toda a vez que eu for fazer o comentário, que eu vou somar os pontos, eu sempre vou multiplicar aqui pelo pelo bónus ali, o bónus., o bónus daquele usuário, certo? Para que é que serve isso daqui? Por exemplo, se eu quiser modificar a minha lógica de bónus, se eu quiser acrescentar, sei lá, bónus pelo cara entrar todo o dia, ou ou bônus, sei lá, para os mais ativos do mês, ou para o primeiro do ranking ou para quem está muito baixo, para incentivar, eu posso estar colocando isso, dentro dessa lógica, que o registro de pontos não vai precisar ser modificado, ta? Então digamos assim, o registro de pontos, ele não precisa saber como que é calculado esse bônus do usuário, certo? Nem a calculadora de bônus tem que saber exatamente quanto que é a pontuação de cada coisa, que é a função dessa classe aqui, certo? Bom para gente verificar se está tudo funcionando direitinho, vamos só criar testezinho de unidade, para a gente não perder o costume certo? Então vou chamar aqui, Teste RegistroPontos, certo? Adiciona aqui. Então, é teste, vou colocar aqui, teste vamos botar aqui, pontosCriarTopico certo? então eu vou criar aqui usuário, new Usuario, certo? vou botar nome aqui, nome igual a Guerra, certo? E aí vou também criar ali o meu, note várias coisas que eu preciso fazer aqui, para preparar o meu teste certo? Então eu preciso criar o registro de pontos para criar ele, eu estou percebendo aqui que eu vou precisar da minha calculadora bônus, certo? Então eu vou vir aqui CalculadoraBonus new CalculadoraBonus a princípio eu não vou adicionar o bônus do dia lá, certo? Aí sim eu vou fazer aqui rp. criarUmTopico, quem está criando é o Usuario, ta? E aí eu tenho que ver se ele somou 5 pontos ali no Usuario. Então vou fazer o assertEquals aqui, u. pontos, isso aqui tem que ser igual a 5 certo? Então salvo aqui, vou rodar o meu teste. Opa, falhou! Está 0, vamos ver porque é que está 0, então está 5 vezes o bônus. Olha! O bônus do dia está sendo inicializado com 0, vamos começar com ele com 1 ali, certo? Vamos ver se agora funciona. Aí viu como é importante o teste? certo? Agora funcionou, vamos testar aqui os ponstos para criar o topico VIP, certo? Então além de criar o usuário, eu vou colocar aqui que o VIP dele é igual a true, certo? Então ele tem que ser 5 vezes ali, ele tem que ser 25 pontos. Certo? Então eu vou rodar aqui o teste, vamos ver se vai passar os dois agora. [SEM ÁUDIO] Rodou ali os dois testes, com sucesso. Certo? Vamos fazer o teste agora aqui do bônus do dia, vamos supor que esse dia esteja com é. vamos botar aqui, bonusDoDia, vamos ver aqui, se eu consigo fazer aqui, então se eu botar aqui que cb. bonusDoDia se for igual a 3, então tem que ser 15 pontos, então eu vou salvar, vou rodar aqui os testes. Bom, então a gente pode ver aqui que os três testes passaram, ta? E aí para terminar ta faltando que mistura aqui o VIP com o bonusDoDia, então eu vou colocar aqui o bonusDoDia 2, certo? Vou colocar aqui o usuário como VIP certo? Aqui, então vou colocar, CriarTopicoVIP BonusDoDia, certo? então ele tem que ganhar aqui, 50 pontos, que seria 5 vezes do VIP mais, vezes 2 do bônus do dia. Ta? Então vamos ver aqui se ele está, calculando corretamente. Opa, deu pau aqui, vamos ver, está sendo 25, porque será? Vamos ver aqui, aqui! Achamos aqui erro ta? Então o multiplicador está substituindo por 5, mas tem que ser vezes 5 certo? Vamos ver agora salvar e rodar os testes de novo para ver se vai, agora foi. Ta? Então a gente vê que os teste são importantes. A ideia desse exemplo aqui, foi mostrar para vocês, como que é importante a gente dividir essas responsabilidades, aí eu tenho uma classe que calcula o bônus, eu tenho outra classe que registra os pontos, e a gente de quebra viu como que é importante testar, que as vezes a princípio até uma lógica simples dessa a gente pode pisar na bola, certo? Não vou fazer igual às vezes o professor que fala que errou de propósito, acabei errando mesmo, mas a gente viu que acontece, e a gente consegue detectar essas questões aí. Muito obrigado por assistir. [MÚSICA]