[MÚSICA] Bem-vindos a mais "hands on" do curso de orientação a objetos com Java. Hoje eu queria mostrar para vocês pouco mais sobre como que funciona a orientação a objetos, como que a gente cria métodos orientados a objetos. Então a ideia é: eu vou criar primeiro método digamos assim da forma que a gente estava acostumado a criar numa programação estruturada, certo? E depois eu vou mostrar para vocês como que seria esse mesmo método com uma cara mais orientada a objetos. Então vamos lá. Eu vou criar aqui uma funcionalidade simples que vai ser aqui, eu vou chamar aqui de Escola. O meu projeto vai se chamar Escola. O quê que eu vou fazer? Eu vou criar aluno, ele vai ter notas bimestrais, certo? E eu vou ter uma lógica que vai, por exemplo, estar me calculando qual é a média e se o aluno passou ou não. Certo? Então eu vou criar aqui primeiro a minha classe Aluno, certo? Então criei aqui. Eu vou ter aqui as notas dos bimestres não é? Então eu vou criar aqui int 1º bimestre, int 2º bimestre, int 3º bimestre e por fim int 4º bimestre. Certo? Não pode começar aqui. Então eu vou colocar no final. Eu me esqueci desse detalhe aqui que Java você não pode começar as variáveis com números, certo? Então tem que vir depois. Então eu simplesmente criei aqui, como à s vezes a gente cria os struts ou arrays lá na programação estruturada não é? No sistema mesmo a classe Aluno acabaria tendo outras informações. Então eu vou criar aqui uma outra classe, certo? Que eu vou colocar aqui Verificadora de Notas certo? E vou criar nessa classe alguns métodos estáticos, que são equivalentes à s funções que a gente tem lá na programação estruturada. Então eu vou vir aqui e vou criar aqui, public static int média aluno. Então eu passo aqui o aluno como parâmetro e vou criar aqui a lógica desse método. Então eu vou criar aqui int total certo? Começando aqui com 0, eu vou fazer aqui total mais igual ao aluno ponto 1º bimestre e vou fazer isso aqui para todos. 2º bimestre, 3º bimestre, 4º bimestre. E aà eu vou retornar o total dividido por 4, certo? É a média ali do aluno. Certo? Vou criar aqui também outro método que ele vai por exemplo retornar booleano, true ou false não é? True ou false aqui para mim, se o aluno passou de ano não é? Então ele vai vir aqui aluno "a" certo? Então o que é que ele vai fazer? Vai usar o de cima ali, ele vai vir aqui, média aluno. Opa! Vai chamar o método ali de cima, certo? E aà vai ver aqui, se a média for maior ou igual que 60 certo? Ele vai retornar true, senão ele retorna false. Certo? Então o que acontece? Esse aqui é o jeito que a gente costuma fazer na programação estruturada, onde a gente não tem objetos, não tem esse de tipo de coisa. Então o quê que a gente vai fazer aqui? A gente pode ver que a média do aluno é uma funcionalidade que tem a ver com o aluno. Então eu não deveria ter que perguntar para uma outra classe qual que é a média desse aluno certo? Eu deveria perguntar para o próprio aluno. Eu vou criar aqui método principal só para a gente ilustrar aqui como que seria usar essa solução aqui. Eu vou chamar aqui de principal, bota aqui para criar método main, certo? Então eu vou vir aqui, vou criar aluno, vou chamar aqui de Guerra. Eu vou colocar aqui guerra, ponto. No 1º bimestre ele tirou por exemplo 70, vou para facilitar aqui usar o control c, control v, certo? Aà aqui por exemplo 60, 80 e 70. A média ali tem que ser 70. Então o que que eu vou fazer? Agora eu tenho que ir lá no verificador de notas, eu vou mandar imprimir aqui. Então eu vou vir aqui, verificador notas ponto, vamos! É verificadora notas. A média do aluno, certo? E aà eu vou passar o Guerra ali, certo? Eu acho que no método, aqui embaixo eu me esqueci de colocar static também. Pronto. Vamos ver. Então dá 70. Vamos ver se o Guerra passou. É. Verificadora notas ponto, passou de ano o Guerra. Então vamos ver aqui se ele passou de ano. True. Então, quem está usando isso aqui ele não só vai conhecer a classe Aluno, mas ele tem que saber que tem uma outra classe que faz esse tipo de cálculo. Como que seria uma abordagem orientada a objetos? Seria este método aqui ele está na própria classe Aluno. Então eu posso vir aqui e dar Move, certo? Ele vai, no caso aqui como ele é estático, talvez ele não deixe eu fazer isso. Eu vou mover aqui na mão mesmo. Então eu vou vir aqui, ao invés de chamar de média aluno, eu vou chamar só de média, porque eu já estou na classe aluno, certo? E não preciso mais passar isso aqui como parâmetro também. Essas informações aqui, se eu quiser eu posso substituir o "a" pelo this. Mas também não é obrigatório. E aà a mesma coisa eu vou fazer aqui no método passou de ano, certo? Também ao invés de eu ter outro método, eu vou perguntar para o próprio aluno se ele passou de ano, certo? Eu posso inclusive já chamar direto aqui o método média, certo? Então olha como que fica mais intuitivo, na hora que o cara vem aqui e aperta aqui. O quê que eu posso fazer com o aluno? Aqui eu posso calcular a média, eu posso ver se ele passou de ano. Então para quem está utilizando aqui, ele não tem que saber que existe uma outra classe com outros métodos que recebem o aluno como parâmetro. Ele simplesmente vai perguntar para o próprio aluno: qual que é a sua média? Você passou de ano meu amigo? Certo? Então, a gente percebe que fica muito mais intuitivo não é? E assim, essa é uma coisa, é erro que eu percebo muito quem está vindo da programação estruturada, que está acostumado a fazer as coisas dessa forma lá, certo? Criar funções, então acaba usando ali as classes mais para fazer uma definição. A gente pode ver que o resultado aqui é o mesmo. Ele está acostumado a criar as classes só como uma estrutura de dados e criar uma série de funções que utilizam essa estrutura de dados, enquanto que muitas dessas coisas tinham que estar na própria classe. Muitas vezes pode ser que não seja tão intuitivo assim você migrar, porque à s vezes não vai ser o método inteiro que vai poder ser migrado, à s vezes é pedaço dele que tem a ver com o objeto. Então aà você tem que separar ele. A gente vai entrar mais detalhes com isso quando a gente for falar de refatoração. Mas eu achei interessante introduzir essa questão agora justamente para você ter esse contraste de como que programador de programação estruturada fazia e como que programador orientado a objetos vai fazer isso daÃ. Espero que tenha ajudado e tenha ficado mais claro essa questão. Muito obrigado por assistir. Até a próxima aula. [MÚSICA]