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