<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>

<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>