---
# System prepended metadata

title: "\n Java OO Aula 4\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 4
</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><span><p>Nessa quarta aula, mostramos um <strong>relacionamento 1-1</strong>, ali&aacute;s, um <strong>auto-relacionamento</strong>. Pessoa tem um c&ocirc;njuge.</p>
<p>Empregamos <em>DateTimeFormatter</em> para exibir as datas no formato dd/mm/aaaa; definimos um atributo como <strong>LocalDate</strong> [do Java 8]; utilizamos uma constante [<strong>final</strong>] para designar nosso local - para a formata&ccedil;&atilde;o da data; e a partir da&iacute;, criamos um m&eacute;todo para relacionar dos objetos da mesma classe.</p>
<p>Apresentamos o conceito de <strong>ENUM</strong>, recurso utilizado para restringir o uso de alguns valores específicos, de acordo com padr&otilde;es utilizados na maioria das empresas;&nbsp;</p>
<p>Calculamos o intervalo entre duas datas, e exibimos esse intevalo em anos, meses, e dias e tamb&eacute;m apenas em dias. Para esse c&aacute;lculo, utilizamos um objeto da classe <strong>Period</strong> e o m&eacute;todo <strong>ChronoUnit</strong> - ambos do <strong>Java 8</strong>.</p>
<p>Exibimos os valores de dia da semana e m&ecirc;s escritos por extenso, como &eacute; necess&aacute;rio em v&aacute;rias situa&ccedil;&otilde;es.</p>
<p>Tamb&eacute;m, apresentamos uma maneira de medir o tempo de execu&ccedil;&atilde;o, em milisegundos, de um m&eacute;todo - usando <strong>Instant e Duration</strong> - ambos do <strong>Java 8</strong>.&nbsp;</p>
<p>Por fim, apresentamos uma compara&ccedil;&atilde;o de performance entre<strong> String, StringBuilder e StringBuffer.</strong></p></span>

<h4>
Estrutura do projeto depois de finalizado
</h4>

![](https://i.imgur.com/qKe1thP.jpg)

<h3>Pessoa.java</h3>

```java=
package entity;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

import teoria.ContagemTempo;
import type.TypeSexo;

public class Pessoa {

	private Integer id;
	private String nome;
	private TypeSexo sexo;
	private Pessoa conjuge;

	public static DateTimeFormatter dataf = 
			DateTimeFormatter.ofPattern("dd/MM/yyyy");

	public static final Locale bra = new Locale("pt", "BR");

	private LocalDate data_casamento;

	public Pessoa() {

	}

	public Pessoa(Integer id, String nome, TypeSexo sexo, 
			Pessoa conjuge, LocalDate data_casamento) {
		this.id = id;
		this.nome = nome;
		this.sexo = sexo;
		this.conjuge = conjuge;
		this.data_casamento = data_casamento;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public TypeSexo getSexo() {
		return sexo;
	}

	public void setSexo(TypeSexo sexo) {
		this.sexo = sexo;
	}

	public Pessoa getConjuge() {
		return conjuge;
	}

	public void setConjuge(Pessoa conjuge) {
		this.conjuge = conjuge;
	}

	public LocalDate getData_casamento() {
		return data_casamento;
	}

	public void setData_casamento(LocalDate data_casamento) {
		this.data_casamento = data_casamento;
	}

	public void casamento(Pessoa p1, Pessoa p2, LocalDate data) {
		p1.setConjuge(p2);
		p2.setConjuge(p1);
		p1.setData_casamento(data);
		p2.setData_casamento(p1.getData_casamento());
	}

	public static void main(String[] args) {
		Pessoa p1 = new Pessoa(10, "joao", 
				TypeSexo.M, null, null);
		Pessoa p2 = new Pessoa(11, "maria", 
				TypeSexo.F, null, null);
		Pessoa p3 = new Pessoa(12, "jose", 
				TypeSexo.M, null, null);
		Pessoa p4 = new Pessoa(13, "marcia", 
				TypeSexo.F, null, null);

		p1.casamento(p1, p2, LocalDate.of(2017, 06, 22));

		p3.casamento(p3, p4, LocalDate.of(2010, 01, 13));

		System.out.println(p1.getNome() + " casou com " 
		+ p1.getConjuge().getNome());
		System.out.println("Data do Casamento: " 
		+ p1.getData_casamento().format(dataf));
		ContagemTempo ct = new ContagemTempo();
		ct.calculoTempo(p1.getData_casamento());
		

		System.out.println("* * *");

		System.out.println(p3.getNome() + " casou com " 
		+ p3.getConjuge().getNome());
		System.out.println("Data do Casamento: " 
		+ p3.getData_casamento().format(dataf));
		ct.calculoTempo(p3.getData_casamento());

	}

}


```

<h5>
Rodando o método main, temos:
</h5>

```=
joao casou com maria
Data do Casamento: 22/06/2017
3 Ano[s] 8 Mes[es] 12 Dia[s]
Total em dias: 1353
* * *
jose casou com marcia
Data do Casamento: 13/01/2010
11 Ano[s] 1 Mes[es] 21 Dia[s]
Total em dias: 4070


```

<h3>
TypeSexo.java
</h3>

```java=
package type;

public enum TypeSexo {

	M, F;

}

```
<h3>
ContagemTempo.java
</h3>

```java=
package teoria;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.time.temporal.ChronoUnit;
import java.util.Locale;

public class ContagemTempo {

	public static DateTimeFormatter dataf = 
			DateTimeFormatter.ofPattern("dd/MM/yyyy");
	public static DateTimeFormatter horaf = 
			DateTimeFormatter.ofPattern("HH:mm:ss");
	public static DateTimeFormatter horaAP = 
			DateTimeFormatter.ofPattern("hh:mm:ss a");

	public static final Locale bra = new Locale("pt", "BR");

	private LocalDate datai;



	public LocalDate getDatai() {
		return datai;
	}

	public void setDatai(LocalDate datai) {
		this.datai = datai;
	}

	public void calculoTempo(LocalDate lc) {

		Period periodo = Period.between(lc, LocalDate.now());
		System.out
				.println(periodo.getYears() + " Ano[s] " 
		+ periodo.getMonths() + " Mes[es] " 
						+ periodo.getDays() + " Dia[s]");
		System.out.println
		("Total em dias: " 
		+ ChronoUnit.DAYS.between(lc, LocalDate.now()));

	}

	public static void main(String[] args) {

		System.out.println(LocalDate.now().format(dataf));
		System.out.println(LocalDateTime.now().format(horaf));
		System.out.println(LocalDateTime.now().format(horaAP));
		System.out.println("---");
		System.out.println(LocalDate.now()
				.getDayOfWeek()
                .getDisplayName(TextStyle.FULL, bra));
		System.out.println(LocalDate.now()
				.getMonth().getDisplayName(TextStyle.FULL, bra));
		System.out.println("---");
		ContagemTempo ct = new ContagemTempo();
		ct.setDatai(LocalDate.of(1971, 10, 24));
		System.out.println(ct.getDatai().format(dataf));
		ct.calculoTempo(ct.getDatai());

	}

}

```

<h5>
Rodando o método main, temos:
</h5>

```=
06/03/2021
20:01:08
08:01:08 PM
---
sábado
março
---
24/10/1971
49 Ano[s] 4 Mes[es] 10 Dia[s]
Total em dias: 18031


```

<h3>
TesteString.java
</h3>

```java=
package teoria;

import java.time.Duration;
import java.time.Instant;

public class TesteString {

	public static void main(String[] args) {

		StringBuffer strFinal = new StringBuffer();
		Instant inicio = Instant.now();
		for (int count = 1; count <= 100000; count++) {
			strFinal.append("a");
		}
		Instant fim = Instant.now();

		Duration duracao = Duration.between(inicio, fim);
		long duracaoEmMilissegundos = duracao.toMillis();
		System.out.println("\nStringBuffer: " 
		+ duracaoEmMilissegundos);

		StringBuilder strFinala = new StringBuilder();
		Instant inicioa = Instant.now();
		for (int count = 1; count <= 100000; count++) {
			strFinala.append("a");
		}
		Instant fima = Instant.now();

		Duration duracaoa = Duration.between(inicioa, fima);
		long duracaoaEmMilissegundos = duracaoa.toMillis();
		System.out.println("\nStringBuilder: " 
		+ duracaoaEmMilissegundos);

		String strFinalb = "";
		Instant iniciob = Instant.now();
		for (int count = 1; count <= 100000; count++) {
			strFinalb += "a";
		}
		Instant fimb = Instant.now();

		Duration duracaob = Duration.between(iniciob, fimb);
		long duracaobEmMilissegundos = duracaob.toMillis();
		System.out.println("\nString: " 
		+ duracaobEmMilissegundos);

	}

}


```

<h5>
Rodando o método main, temos:
</h5>

```=

StringBuffer: 22

StringBuilder: 5

String: 2525


```

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