<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 5 </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 quinta aula, voltamos &agrave;s 3 classes que utilizamos na aula 3 - Estagi&aacute;rio, Programador e Funcion&aacute;rio. A partir delas, criamos uma classe chamada Depto, que representa um departamento. Cada Departamento tem n funcion&aacute;rios entre programadores e estagi&aacute;rios - o que ilusta um <strong>Relacionamento 1-n.&nbsp;</strong>Tamb&eacute;m utilizamos <strong>ArrayList</strong>, uma das estruturas de dados mais importantes no Java. Mostramos&nbsp; uso de bloco an&ocirc;nimo.&nbsp;</p> <p>Criamos m&eacute;todos para inserir dados em um ArrayList usando <strong>VarAgrs</strong>. Imprimimos o conte&uacute;do de um ArrayList em formato <strong>JSON</strong>.</p> <p>Mostramos o uso de <em>getClass().getSimpleName()</em> para retornar o nome de uma classe.&nbsp;</p> <p>Criamos uma <strong>Interface</strong>. Trabalhar utilizando Interfaces &eacute; um diferencial de boas pr&aacute;ticas em programa&ccedil;&atilde;o. Criamos e implementamos a Interface.</p> <p>Utilizamos <strong>stream, filter, e equalsIgnoreCase</strong> para selecionarmos resultados em uma lista. Apresentamos<em> collect(Collectors.toList())</em> na convers&atilde;o de stream para lista.</p> <p>Por fim, testamos todos os recursos empregados.</p></span> <h4> Estrutura do projeto depois de finalizado </h4> ![](https://i.imgur.com/YFUOLJ3.jpg) <h3> IControleDepto.java - Interface </h3> ```java= package control; import java.util.ArrayList; import entity.Funcionario; public interface IControleDepto { public void imprimeFuncionariosDepto (String depto, ArrayList<Funcionario> lista); } ``` <h3> ControleDepto.java </h3> ```java= package control; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import entity.Funcionario; public class ControleDepto implements IControleDepto { @Override public void imprimeFuncionariosDepto (String cargo, ArrayList<Funcionario> lista) { List<Funcionario> listaFinal = new ArrayList<Funcionario>(); listaFinal = lista.stream().filter(x -> x.getClass() .getSimpleName().equalsIgnoreCase(cargo)) .collect(Collectors.toList()); listaFinal.forEach(System.out::println); } } ``` <h3> Depto.java </h3> ```java= package entity; import java.util.ArrayList; import com.google.gson.Gson; public class Depto { private String nome; private ArrayList<Funcionario> funcionarios; { funcionarios = new ArrayList<Funcionario>(); } public Depto() { // funcionarios = //new ArrayList<Funcionario>(); } public Depto(String nome) { this.nome = nome; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public ArrayList<Funcionario> getFuncionarios() { return funcionarios; } public void setFuncionarios (ArrayList<Funcionario> funcionarios) { this.funcionarios = funcionarios; } public void insereLista(Funcionario... lista) { for (Funcionario x : lista) { this.funcionarios.add(x); } } public void imprimeLista (ArrayList<Funcionario> l) { l.forEach(System.out::println); System.out.println("* * *"); for (Funcionario x:l) { System.out.println (new Gson().toJson(x)); } } } ``` <h3> Estagiario.java </h3> ```java= package entity; public class Estagiario extends Funcionario { private Integer periodo_faculdade; public Integer getPeriodo_faculdade() { return periodo_faculdade; } public void setPeriodo_faculdade (Integer periodo_faculdade) { this.periodo_faculdade = periodo_faculdade; } public Estagiario() { super(); } public Estagiario(Integer codigo, String nome, String sexo, Double salario, Integer periodo_faculdade) { super(codigo, nome, sexo, salario); this.periodo_faculdade = periodo_faculdade; } @Override public Double gerarBonus() { return 300.; } public String gerarMessage() { return "Sub Classe Estagiario"; } } ``` <h3> Funcionario.java </h3> ```java= package entity; public abstract class Funcionario { private Integer codigo; private String nome; private String sexo; private Double salario; public Funcionario() { } public Funcionario(Integer codigo, String nome, String sexo, Double salario) { this.codigo = codigo; this.nome = nome; this.sexo = sexo; this.salario = salario; } @Override public String toString() { return "Funcionario [codigo=" + codigo + ", nome="+ nome + ", sexo=" + sexo + ", salario=" + salario + "]"; } public Integer getCodigo() { return codigo; } public void setCodigo(Integer codigo) { this.codigo = codigo; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getSexo() { return sexo; } public void setSexo(String sexo) { this.sexo = sexo; } public Double getSalario() { return salario; } public void setSalario(Double salario) { this.salario = salario; } public abstract Double gerarBonus(); public String gerarMessage() { return "Classe Abstrata"; } } ``` <h3> Programador.java </h3> ```java= package entity; public class Programador extends Funcionario { public Programador() { super(); } public Programador(Integer codigo, String nome, String sexo, Double salario) { super(codigo, nome, sexo, salario); } @Override public Double gerarBonus() { return this.getSalario() * 0.11; } public String gerarMessage() { return "Sub Classe Programador"; } public static void main(String[] args) { Programador p1 = new Programador(); System.out.println (p1.getClass().getSimpleName()); } } ``` <h3> Main.java </h3> ```java= package main; import control.ControleDepto; import entity.Depto; //import control.PrintList; import entity.Estagiario; import entity.Funcionario; import entity.Programador; public class Main { public static void main(String[] args) { Programador p1 = new Programador(10, "Programador1", "F", 3000.); Programador p2 = new Programador(11, "Programador2", "M", 2999.); Estagiario e1 = new Estagiario(100, "Estagiario1", "M", 1200., 3); Estagiario e2 = new Estagiario(110, "Estagiario2", "F", 1300., 4); System.out.println(e1.gerarMessage()+"\n" +(e1.getSalario()+e1.gerarBonus())); System.out.println(p1.gerarMessage()+"\n" +(p2.getSalario()+p2.gerarBonus())); System.out.println("* * *"); Depto d1 = new Depto(); d1.setNome("Departamento do Belem"); d1.insereLista(p1, p2, e1, e2); d1.imprimeLista(d1.getFuncionarios()); System.out.println("* * *"); System.out.println("* * *"); ControleDepto cd1 = new ControleDepto(); cd1.imprimeFuncionariosDepto("estagiario", d1.getFuncionarios()); } } ``` <h5> Rodando o projeto, temos: </h5> ```= Sub Classe Estagiario 1500.0 Sub Classe Programador 3328.89 * * * Funcionario [codigo=10, nome=Programador1, sexo=F, salario=3000.0] Funcionario [codigo=11, nome=Programador2, sexo=M, salario=2999.0] Funcionario [codigo=100, nome=Estagiario1, sexo=M, salario=1200.0] Funcionario [codigo=110, nome=Estagiario2, sexo=F, salario=1300.0] * * * {"codigo":10,"nome":"Programador1","sexo":"F","salario":3000.0} {"codigo":11,"nome":"Programador2","sexo":"M","salario":2999.0} {"periodo_faculdade":3,"codigo":100,"nome":"Estagiario1","sexo":"M", "salario":1200.0} {"periodo_faculdade":4,"codigo":110,"nome":"Estagiario2","sexo":"F", "salario":1300.0} * * * Listando todos do cargo Estagiário Funcionario [codigo=100, nome=Estagiario1, sexo=M, salario=1200.0] Funcionario [codigo=110, nome=Estagiario2, sexo=F, salario=1300.0] ``` <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>