├── .gitignore ├── .idea ├── .gitignore ├── description.html ├── project-template.xml ├── encodings.xml ├── vcs.xml ├── modules.xml ├── runConfigurations.xml ├── misc.xml └── uiDesigner.xml ├── src └── me │ └── dio │ ├── domain │ ├── CalculaBonificacao.java │ ├── OperadorDeCaixa.java │ ├── Vendedor.java │ ├── Gerente.java │ ├── Endereco.java │ ├── FuncionarioPJ.java │ └── FuncionarioCLT.java │ └── Main.java ├── mentoria-philips-fullstack.iml └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Project exclude paths 2 | /out/ -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/description.html: -------------------------------------------------------------------------------- 1 | Simple Java application that includes a class with main() method -------------------------------------------------------------------------------- /.idea/project-template.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/me/dio/domain/CalculaBonificacao.java: -------------------------------------------------------------------------------- 1 | package me.dio.domain; 2 | 3 | public interface CalculaBonificacao { 4 | void calculaBonificacao(Double porcentagemBonificacao); 5 | } 6 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /mentoria-philips-fullstack.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/me/dio/domain/OperadorDeCaixa.java: -------------------------------------------------------------------------------- 1 | package me.dio.domain; 2 | 3 | public class OperadorDeCaixa extends FuncionarioCLT { 4 | private Double quebraDeCaixa; 5 | 6 | public OperadorDeCaixa(String nome, String documento, Double valorSalario, Endereco endereco) { 7 | super(nome, documento, valorSalario, endereco); 8 | } 9 | 10 | @Override 11 | public String toString() { 12 | return "OperadorDeCaixa{" + 13 | "nome='" + nome + '\'' + 14 | ", documento='" + documento + '\'' + 15 | ", valorSalario=" + valorSalario + 16 | ", endereco=" + endereco.getBairro() + 17 | '}'; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 15 | -------------------------------------------------------------------------------- /src/me/dio/domain/Vendedor.java: -------------------------------------------------------------------------------- 1 | package me.dio.domain; 2 | 3 | import me.dio.domain.CalculaBonificacao; 4 | import me.dio.domain.FuncionarioCLT; 5 | 6 | public class Vendedor extends FuncionarioCLT implements CalculaBonificacao { 7 | private Double valorDaBonificacao; 8 | 9 | @Override 10 | public void calculaBonificacao(Double porcentagemBonificacao) { 11 | this.valorDaBonificacao = super.valorSalario * (porcentagemBonificacao/100d); 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return "Vendedor{" + 17 | "nome='" + nome + '\'' + 18 | ", documento='" + documento + '\'' + 19 | ", valorSalario=" + valorSalario + 20 | ", endereco=" + endereco.getRua() + 21 | ", valorDaBonificacao=" + valorDaBonificacao + 22 | '}'; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/me/dio/domain/Gerente.java: -------------------------------------------------------------------------------- 1 | package me.dio.domain; 2 | 3 | public class Gerente extends FuncionarioPJ implements CalculaBonificacao{ 4 | private Double valorBonificacao; 5 | 6 | @Override 7 | public void calculaBonificacao(Double porcentagemBonificacao) { 8 | this.valorBonificacao = (super.getValorRemuneracao() * (porcentagemBonificacao/100)) + 100d; 9 | } 10 | 11 | @Override 12 | public String toString() { 13 | return "Gerente{" + 14 | "nome='" + super.getNome() + '\'' + 15 | ", documento='" + super.getDocumento() + '\'' + 16 | ", endereco=" + super.getEndereco().getBairro() + 17 | ", horasTrabalhadas=" + super.getHorasTrabalhadas() + 18 | ", valorHora=" + super.getValorHora() + 19 | ", valorRemuneracao=" + super.getValorRemuneracao() + 20 | ", valorBonificacao=" + this.valorBonificacao + 21 | '}'; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/me/dio/domain/Endereco.java: -------------------------------------------------------------------------------- 1 | package me.dio.domain; 2 | 3 | public class Endereco { 4 | //atributos 5 | private String rua; 6 | private String complemento; 7 | private String bairro; 8 | 9 | public Endereco() { 10 | } 11 | 12 | public Endereco(String rua, String complemento, String bairro) { 13 | this.rua = rua; 14 | this.complemento = complemento; 15 | this.bairro = bairro; 16 | } 17 | 18 | public String getRua() { 19 | return rua; 20 | } 21 | 22 | public void setRua(String rua) { 23 | this.rua = rua; 24 | } 25 | 26 | public String getComplemento() { 27 | return complemento; 28 | } 29 | 30 | public void setComplemento(String complemento) { 31 | this.complemento = complemento; 32 | } 33 | 34 | public String getBairro() { 35 | return bairro; 36 | } 37 | 38 | public void setBairro(String bairro) { 39 | this.bairro = bairro; 40 | } 41 | 42 | @Override 43 | public String toString() { 44 | return "Endereco{" + 45 | "rua='" + rua + '\'' + 46 | ", complemento='" + complemento + '\'' + 47 | ", bairro='" + bairro + '\'' + 48 | '}'; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/me/dio/domain/FuncionarioPJ.java: -------------------------------------------------------------------------------- 1 | package me.dio.domain; 2 | 3 | public abstract class FuncionarioPJ { 4 | //atributo 5 | private String nome; 6 | private String documento; 7 | private Endereco endereco; 8 | private Integer horasTrabalhadas; 9 | private Double valorHora; 10 | private Double valorRemuneracao; 11 | 12 | public void calculaRemuneracao(){ 13 | this.valorRemuneracao = this.horasTrabalhadas * this.valorHora; 14 | } 15 | 16 | public String getNome() { 17 | return nome; 18 | } 19 | 20 | public void setNome(String nome) { 21 | this.nome = nome; 22 | } 23 | 24 | public String getDocumento() { 25 | return documento; 26 | } 27 | 28 | public void setDocumento(String documento) { 29 | this.documento = documento; 30 | } 31 | 32 | public Endereco getEndereco() { 33 | return endereco; 34 | } 35 | 36 | public void setEndereco(Endereco endereco) { 37 | this.endereco = endereco; 38 | } 39 | 40 | public Integer getHorasTrabalhadas() { 41 | return horasTrabalhadas; 42 | } 43 | 44 | public void setHorasTrabalhadas(Integer horasTrabalhadas) { 45 | this.horasTrabalhadas = horasTrabalhadas; 46 | } 47 | 48 | public Double getValorHora() { 49 | return valorHora; 50 | } 51 | 52 | public void setValorHora(Double valorHora) { 53 | this.valorHora = valorHora; 54 | } 55 | 56 | public Double getValorRemuneracao() { 57 | return valorRemuneracao; 58 | } 59 | 60 | 61 | } 62 | -------------------------------------------------------------------------------- /src/me/dio/domain/FuncionarioCLT.java: -------------------------------------------------------------------------------- 1 | package me.dio.domain; 2 | 3 | public abstract class FuncionarioCLT { 4 | //atributos 5 | protected String nome; 6 | protected String documento; 7 | protected Double valorSalario; 8 | protected Endereco endereco; 9 | 10 | public FuncionarioCLT(String nome, String documento, Double valorSalario, Endereco endereco) { 11 | this.nome = nome; 12 | this.documento = documento; 13 | this.valorSalario = valorSalario; 14 | this.endereco = endereco; 15 | } 16 | 17 | 18 | public FuncionarioCLT() { 19 | } 20 | 21 | public String getNome() { 22 | return nome; 23 | } 24 | 25 | public void setNome(String nome) { 26 | this.nome = nome; 27 | } 28 | 29 | public String getDocumento() { 30 | return documento; 31 | } 32 | 33 | public void setDocumento(String documento) { 34 | this.documento = documento; 35 | } 36 | 37 | public Double getValorSalario() { 38 | return valorSalario; 39 | } 40 | 41 | public void setValorSalario(Double valorSalario) { 42 | this.valorSalario = valorSalario; 43 | } 44 | 45 | public Endereco getEndereco() { 46 | return endereco; 47 | } 48 | 49 | public void setEndereco(Endereco endereco) { 50 | this.endereco = endereco; 51 | } 52 | 53 | @Override 54 | public String toString() { 55 | return "FuncionarioCLT{" + 56 | "nome='" + nome + '\'' + 57 | ", documento='" + documento + '\'' + 58 | ", valorSalario=" + valorSalario + 59 | ", endereco=" + endereco + 60 | '}'; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/me/dio/Main.java: -------------------------------------------------------------------------------- 1 | package me.dio; 2 | 3 | import me.dio.domain.Endereco; 4 | import me.dio.domain.Gerente; 5 | import me.dio.domain.OperadorDeCaixa; 6 | import me.dio.domain.Vendedor; 7 | 8 | public class Main { 9 | public static void main(String[] args) { 10 | Endereco endereco = new Endereco(); 11 | endereco.setRua("Endereço para essa rua"); 12 | System.out.println(endereco.getRua()); 13 | 14 | Endereco endereco1 = 15 | new Endereco("Rua funcionário", 16 | "Complemento endereço funcionário", "bairro funcionário"); 17 | System.out.println(endereco1); 18 | System.out.println("-----"); 19 | 20 | Vendedor vendedor = new Vendedor(); 21 | vendedor.setNome("Camila Vendedora"); 22 | vendedor.setDocumento("123.456.789-00"); 23 | vendedor.setValorSalario(1000d); 24 | vendedor.calculaBonificacao(2d); 25 | vendedor.setEndereco(endereco); 26 | System.out.println(vendedor); 27 | System.out.println("-----"); 28 | 29 | OperadorDeCaixa operadorCaixa = 30 | new OperadorDeCaixa("Camila Op Caixa", 31 | "789.456.123-00", 32 | 2000d, endereco); 33 | System.out.println(operadorCaixa); 34 | System.out.println("-----"); 35 | 36 | Gerente gerente = new Gerente(); 37 | gerente.setNome("Camila Gerente"); 38 | gerente.setDocumento("456.123.789-00"); 39 | gerente.setEndereco(endereco); 40 | gerente.setHorasTrabalhadas(20); 41 | gerente.setValorHora(100d); 42 | gerente.calculaRemuneracao(); 43 | gerente.calculaBonificacao(3d); 44 | System.out.println(gerente); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Mentoria: Abstraindo situações do mundo real com Orientação a 2 | Objetos

3 | 4 |

⚠️ SLIDES DA MENTORIA ⚠️

5 | 6 | O objetivo principal é colocar em prática umas das principais ferramentas da OO: ABSTRAÇÃO, ENCAPSULAMENTO, HERANÇA, COMPOSIÇÃO E POLIMORFISMO através de um projeto Java.

7 | 8 | 9 |

🛑 Pré-Requisitos

10 | 11 |

12 | ✅ Conhecer a sintaxe da Java
13 | ✅ Java JDK 8+
14 | ✅ IDE para desenvolvimento Java (usarei IntelliJ)
15 |

16 | 17 |

🎯 Desafio

18 | 19 |

Modelar as entidades de uma aplicação de Gerenciamento de Colaboradores de uma loja.
20 | Dentre as outras funcionalidades (as quais você não precisará implementar), esse sistema terá a funcionalidade de calcular a bonificação dos colaboradores dessa loja seguindo as seguintes regras:

21 | 22 | 27 | 28 |

Colaboradores

29 |
    30 |
  1. Vendedor:
  2. nome, documento, salario, valor da bonificação e endereço. 31 |
  3. Operador de Caixa:
  4. nnome, documento, salario e endereço. 32 |
  5. Gerente:
  6. nome, documento, horas trabalhadas, valorHora, endereço e valor da bonificação. 33 |
34 | 35 | 36 | ---- 37 | 38 |

📚 Paradigma de Programação Orientado a Objetos (POO)

39 | 40 |

41 | pilares-POO 42 |

43 | 44 |

45 | A visão de Orientação a Objetos (OO) é aquela de um mundo de objetos que interagem.
46 | Este paradigma é um modelo de análise, projeto e programação baseado na aproximação entre o mundo real e o mundo virtual, através da criação e interação entre classes, atributos, métodos, objetos, entre outros.
47 | A observação do mundo real compõe o princípio da ABSTRAÇÃO, sendo considerada a base da Orientação a Objetos.
48 | São 4 os pilares principais do POO: ENCAPSULAMENTO, HERANÇA, COMPOSIÇÃO E POLIMORFISMO. 49 |

50 | 51 |

🔺 ENCAPSULAMENTO:

52 |

Encapsular significa esconder a implementação dos objetos. O encapsulamento favorece principalmente dois aspectos de um sistema: a manutenção e a evolução.

53 | 54 |

🔺 HERANÇA:

55 |

Permite que objetos sejam referenciados como pai e filhos, em que os objetos filhos herdam todas as características do objeto pai, mas o objeto pai nada herda do filho. Isso reduz a duplicação de código-fonte.

56 | 57 |

🔺 COMPOSIÇÃO:

58 |

Busca representar as relações que os objetos devem ter, baseando-se nas relações que existem na vida real. Isso faz com que os objetos sejam reaproveitados, evitando duplicidade e mantendo a simplicidade.

59 | 60 |

🔺 POLIMORFISMO:

61 |

Com o polimorfismo, podemos transformar objetos diferentes em objetos que conseguem trocar mensagem por meio da generalização de suas características.

62 | 63 |

‼️ CONCEITOS FUNDAMENTAIS POO ‼️

64 | 65 |

🔻 DOMÍNIO:

66 | Domínio da aplicação, também conhecida como camada de negócio ou de objetos de negócio, é aquela onde estão localizadas as classes que fazem parte do domínio do problema, ou seja, classes correspondentes a objetos que fazem parte da descrição do problema. 67 | 68 |

🔻 CLASSE:

69 | Um elemento do código que tem a função de representar objetos do mundo real. Dentro dela é comum declararmos atributos e métodos, que representam, respectivamente, as características e comportamentos desse objeto. 70 | 71 |

🔻 ATRIBUTO:

72 | Atributos são, basicamente, a estrutura de dados que vai representar a classe. Os atributos também são conhecidos como VARIÁVEL DE CLASSE, e podem ser divididos em dois tipos básicos: atributos de instância e de classe. 73 | 74 |

🔻 VARIÁVEL:

75 | Uma “região de memória (do computador) previamente identificada cuja finalidade é armazenar os dados ou informações de um programa por um determinado espaço de tempo”. 76 | 77 |

🔻 MÉTODO:

78 | Os métodos representam os estados e ações dos objetos e classes. 79 | 80 |

🔻 OBJETO:

81 | Em POO, objeto é um "molde" de uma determinada classe, que passa a existir a partir de uma instância da classe. A classe define o comportamento do objeto, usando atributos (propriedades) e métodos (ações). 82 | Objeto em ciência da computação, é uma referência a um local da memória que possui um valor. Um objeto pode ser uma variável, função, ou estrutura de dados. 83 | 84 |

🔻 INSTÂNCIA:

85 | Uma instância de uma classe é um novo objeto criado dessa classe, com o operador new. Instanciar uma classe é criar um novo objeto do mesmo tipo dessa classe. Uma classe somente poderá ser utilizada após ser instanciada. 86 | 87 | ------------ 88 |

📝 Exercícios de Fixação

89 | 90 |

🤝 Contribuindo

91 | 92 |

93 | Este repositório foi criado para fins de estudo, então contribua com ele.
94 | Se te ajudei de alguma forma, ficarei feliz em saber. E caso você conheça alguém que se identidique com o conteúdo, não deixe de compatilhar.
95 |
96 | Se possível:
97 | ⭐️ Star o projeto
98 | 🐛 Encontrar e relatar issues
99 |

100 | 101 | ------------ 102 | 103 | Disponibilizado com ♥ por [cami-la](https://www.linkedin.com/in/cami-la/ "cami-la"). 104 | 105 | 106 | -------------------------------------------------------------------------------- /.idea/uiDesigner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | --------------------------------------------------------------------------------