<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 às 3 classes que utilizamos na aula 3 - Estagiário, Programador e Funcionário. A partir delas, criamos uma classe chamada Depto, que representa um departamento. Cada Departamento tem n funcionários entre programadores e estagiários - o que ilusta um <strong>Relacionamento 1-n. </strong>Também utilizamos <strong>ArrayList</strong>, uma das estruturas de dados mais importantes no Java. Mostramos uso de bloco anônimo. </p>
<p>Criamos métodos para inserir dados em um ArrayList usando <strong>VarAgrs</strong>. Imprimimos o conteú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. </p>
<p>Criamos uma <strong>Interface</strong>. Trabalhar utilizando Interfaces é um diferencial de boas práticas em programaçã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ão de stream para lista.</p>
<p>Por fim, testamos todos os recursos empregados.</p></span>
<h4>
Estrutura do projeto depois de finalizado
</h4>

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