<p><img src="https://i.imgur.com/D01Fpky.png" alt="" title="Entre no nosso site e veja nossos cursos"></p> <h1> <img class="emoji" alt=":coffee:" src="https://cdn.jsdelivr.net/npm/@hackmd/emojify.js@2.1.0/dist/images/basic/coffee.png"> Java OO Aula 2 </h1> O objetivo deste curso é abordar os principais conceitos, empregar as principais estruturas de dados, e trabalhar utilizando as principais boas práticas de Programação Orientada a Objetos [POO] em **Java**. <h2 id="-Tema-da-aula" data-id="-Tema-da-aula"><a class="anchor hidden-xs" href="#-Tema-da-aula" title="-Tema-da-aula"><span class="octicon octicon-link"></span></a><img class="emoji" alt=":book:" src="https://cdn.jsdelivr.net/npm/@hackmd/emojify.js@2.1.0/dist/images/basic/book.png"> <span> Tema da aula:</span></h2><p><span>Nessa segunda aula, mostramos como realizar chamadas encadeadas de métodos - a partir da alteração de métodos set, e a partir de métodos criados por nós mesmos.</span><br> <h4> Estrutura do projeto depois de finalizado </h4> ![](https://i.imgur.com/ylsMsbS.jpg) <h3> Aluno.java </h3> <p>Métodos encadeados sendo chamados na construção do objeto, a partir de alterações feitas em métodos set. Repare que o método set, ainda que alterado, funciona em chamadas encadeadas ou normalmente, como um set gerado automaticamente.</p> ```java= package entity; public class Aluno { private String nome; private Integer id; private String email; private String disciplina; private Double nota1 = 0D; private Double nota2 = 0.; private Double media = 0.; private String situacao = ""; public Aluno() { } public Aluno(String nome, Integer id, String email, String disciplina, Double nota1, Double nota2) { this.nome = nome; this.id = id; this.email = email; this.disciplina = disciplina; this.nota1 = nota1; this.nota2 = nota2; } @Override public String toString() { return "Aluno [nome=" + nome + ", id=" + id + ", email=" + email + "\ndisciplina=" + disciplina + ", nota1=" + nota1 + ", nota2=" + nota2 + "\nmedia=" + media + ", situacao=" + situacao + "]"; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getDisciplina() { return disciplina; } public void setDisciplina(String disciplina) { this.disciplina = disciplina; } public Double getNota1() { return nota1; } public void setNota1(Double nota1) { this.nota1 = nota1; } public Double getNota2() { return nota2; } public void setNota2(Double nota2) { this.nota2 = nota2; } public Double getMedia() { return media; } public Aluno setMedia() { this.media = (this.nota1 + this.nota2) / 2; return this; } public String getSituacao() { return situacao; } public Aluno setSituacao() { this.situacao = (this.media >= 7) ? "Aprovado" : "Reprovado"; return this; } public static void main(String[] args) { Aluno a1 = new Aluno("fernando", 10, "fernando@gmail.com", "JAVA", 3.3, 5.5).setMedia().setSituacao(); System.out.println(a1); System.out.println("---"); Aluno a2 = new Aluno(); a2.setDisciplina("JavaScript"); a2.setEmail("fernando@gmail.com"); a2.setId(11); a2.setNome("fernando jr"); a2.setNota1(7.); a2.setNota2(8.); a2.setMedia(); a2.setSituacao(); System.out.println("---"); System.out.println(a2); System.out.println("---"); } } ``` <p>Rodando o método main, temos no Console:</p> ```= Aluno [nome=fernando, id=10, email=fernando@gmail.com disciplina=JAVA, nota1=3.3, nota2=5.5 media=4.4, situacao=Reprovado] --- --- Aluno [nome=fernando jr, id=11, email=fernando@gmail.com disciplina=JavaScript, nota1=7.0, nota2=8.0 media=7.5, situacao=Aprovado] --- ``` <h3> Aluno.java </h3> <p>Métodos encadeados sendo chamados na construção do objeto, a partir de métodos criados por nós - mantendo os métodos set como foram gerados pela IDE.</p> ```java= package entity; public class Aluno { private String nome; private Integer id; private String email; private String disciplina; private Double nota1 = 0D; private Double nota2 = 0.; private Double media = 0.; private String situacao = ""; public Aluno() { } public Aluno(String nome, Integer id, String email, String disciplina, Double nota1, Double nota2) { this.nome = nome; this.id = id; this.email = email; this.disciplina = disciplina; this.nota1 = nota1; this.nota2 = nota2; } @Override public String toString() { return "Aluno [nome=" + nome + ", id=" + id + ", email=" + email + "\ndisciplina=" + disciplina + ", nota1=" + nota1 + ", nota2=" + nota2 + "\nmedia=" + media + ", situacao=" + situacao + "]"; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getDisciplina() { return disciplina; } public void setDisciplina(String disciplina) { this.disciplina = disciplina; } public Double getNota1() { return nota1; } public void setNota1(Double nota1) { this.nota1 = nota1; } public Double getNota2() { return nota2; } public void setNota2(Double nota2) { this.nota2 = nota2; } public Double getMedia() { return media; } public void setMedia(Double media) { this.media = media; } public String getSituacao() { return situacao; } public void setSituacao(String situacao) { this.situacao = situacao; } public Aluno calcularMedia() { this.media = (this.nota1 + this.nota2) / 2; return this; } public Aluno gerarSituacao() { this.situacao = (this.media >= 7) ? "Aprovado" : "Reprovado"; return this; } public static void main(String[] args) { Aluno a1 = new Aluno("fernando", 10, "fernando@gmail.com", "JAVA", 3.3, 5.5).calcularMedia().gerarSituacao(); System.out.println(a1); System.out.println("---"); Aluno a2 = new Aluno(); a2.setDisciplina("JavaScript"); a2.setEmail("fernando@gmail.com"); a2.setId(11); a2.setNome("fernando jr"); a2.setNota1(7.); a2.setNota2(8.); a2.calcularMedia(); a2.gerarSituacao(); System.out.println("---"); System.out.println(a2); System.out.println("---"); } } ``` <p>Rodando o método main, temos no Console:</p> ```= Aluno [nome=fernando, id=10, email=fernando@gmail.com disciplina=JAVA, nota1=3.3, nota2=5.5 media=4.4, situacao=Reprovado] --- --- Aluno [nome=fernando jr, id=11, email=fernando@gmail.com disciplina=JavaScript, nota1=7.0, nota2=8.0 media=7.5, situacao=Aprovado] --- ``` <h2> Polimorfismo: Sobrecarga de Métodos </h2> <p>Polimorfismo é um recurso de várias linguagens de programação orientadas a objeto - permite que um mesmo elemento seja utilizado de formas diferentes.</p> <p>Abaixo vemos um exemplo de polimorfismo estático, ou seja, <strong>sobrecarga de métodos</strong>. </p><p> Temos métodos com o mesmo nome mas que possuem assinaturas diferentes - uma com 2 parâmetros: nota1 e nota2, e outra com 3 parâmetros. o JAVA executa um método ou o outro de acordo com o número de parâmetros passados na chamada do método.</p> ```java= package entity; public class AlunoPF { private String nome; private Integer id; private String email; private String disciplina; private Double nota1 = 0D; private Double nota2 = 0.; private Double nota_prova_final = 0.; private Double media = 0.; private String situacao = ""; public AlunoPF() { } public AlunoPF(String nome, Integer id, String email, String disciplina, Double nota1, Double nota2, Double nota_prova_final) { this.nome = nome; this.id = id; this.email = email; this.disciplina = disciplina; this.nota1 = nota1; this.nota2 = nota2; this.nota_prova_final = nota_prova_final; } @Override public String toString() { return "AlunoPF [nome=" + nome + ", id=" + id + ", email=" + email + ", disciplina=" + disciplina + "\nnota1=" + nota1 + ", nota2=" + nota2 + ", nota_prova_final=" + nota_prova_final + "\nmedia=" + media + ", situacao=" + situacao + "]"; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getDisciplina() { return disciplina; } public void setDisciplina(String disciplina) { this.disciplina = disciplina; } public Double getNota1() { return nota1; } public void setNota1(Double nota1) { this.nota1 = nota1; } public Double getNota2() { return nota2; } public void setNota2(Double nota2) { this.nota2 = nota2; } public Double getNota_prova_final() { return nota_prova_final; } public void setNota_prova_final(Double nota_prova_final) { this.nota_prova_final = nota_prova_final; } public Double getMedia() { return media; } public void setMedia(Double media) { this.media = media; } public String getSituacao() { return situacao; } public void setSituacao(String situacao) { this.situacao = situacao; } public void calcularMedia(Double n1, Double n2) { this.media = (n1 + n2) / 2; } public void calcularMedia(Double n1, Double n2, Double n3) { this.media = (((n1 + n2) / 2) + n3) / 2; } public AlunoPF gerarSituacao(Double n1, Double n2) { this.situacao = (this.media >= 7) ? "Aprovado" : "Prova Final"; return this; } public void gerarSituacao(Double n1, Double n2, Double n3) { this.situacao = (this.media >= 5) ? "Aprovado" : "Reprovado"; } public static void main(String[] args) { AlunoPF a1 = new AlunoPF("fernando em pf", 10, "fernandojnr@gmail.com", "JAVA", 3.3, 4.4, 7.7); a1.calcularMedia(a1.getNota1(), a1.getNota2()); a1.gerarSituacao(a1.getNota1(), a1.getNota2()); System.out.println(a1); System.out.println("---"); a1.calcularMedia(a1.getNota1(), a1.getNota2(), a1.getNota_prova_final()); a1.gerarSituacao(a1.getNota1(), a1.getNota2(), a1.getNota_prova_final()); System.out.println(a1); System.out.println("---"); AlunoPF a2 = new AlunoPF(); a2.setDisciplina("JavaScript"); a2.setEmail("fernando@gmail.com"); a2.setId(11); a2.setNome("fernando jr"); a2.setNota1(7.); a2.setNota2(8.); a2.calcularMedia(a2.getNota1(), a2.getNota2()); a2.gerarSituacao(a2.getNota1(), a2.getNota2()); System.out.println(a2); } } ``` <p>Rodando o método main, temos que o primeiro objeto tem a sua média e a sua situação calculadas duas vezes - uma sem o cálculo com a nota da prova final, e outro usando esse valor para o cálculo da média final e sua situação como aprovado ou reprovado.</p> ```= AlunoPF [nome=fernando em pf, id=10, email=fernandojnr@gmail.com, disciplina=JAVA nota1=3.3, nota2=4.4, nota_prova_final=7.7 media=3.85, situacao=Prova Final] --- AlunoPF [nome=fernando em pf, id=10, email=fernandojnr@gmail.com, disciplina=JAVA nota1=3.3, nota2=4.4, nota_prova_final=7.7 media=5.775, situacao=Aprovado] --- AlunoPF [nome=fernando jr, id=11, email=fernando@gmail.com, disciplina=JavaScript nota1=7.0, nota2=8.0, nota_prova_final=0.0 media=7.5, situacao=Aprovado] ``` <span></span></p><blockquote style="border-left-color: red;"> <p><span class="color" data-color="red"></span><span> </span><small><i class="fa fa-user"></i> Prof Fernando Gomes - fernandojnr@gmail.com</small></p>