---
# System prepended metadata

title: "\n Java OO Aula 2\n"

---

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