---
# System prepended metadata

title: "\n Java OO Aula 5\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 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>
