├── .gitignore ├── .idea ├── .name ├── misc.xml ├── modules.xml ├── runConfigurations.xml ├── uiDesigner.xml └── vcs.xml ├── README.md ├── desafio-poo-dio.iml ├── out └── production │ └── desafio-poo-dio │ ├── Main.class │ └── br │ └── com │ └── dio │ └── desafio │ └── dominio │ ├── Bootcamp.class │ ├── Conteudo.class │ ├── Curso.class │ ├── Dev.class │ └── Mentoria.class └── src ├── Main.java └── br └── com └── dio └── desafio └── dominio ├── Bootcamp.java ├── Conteudo.java ├── Curso.java ├── Dev.java └── Mentoria.java /.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | 5 | 6 | # Created by https://www.toptal.com/developers/gitignore/api/java,intellij,eclipse,visualstudiocode 7 | # Edit at https://www.toptal.com/developers/gitignore?templates=java,intellij,eclipse,visualstudiocode 8 | 9 | ### Eclipse ### 10 | .metadata 11 | bin/ 12 | tmp/ 13 | *.tmp 14 | *.bak 15 | *.swp 16 | *~.nib 17 | local.properties 18 | .settings/ 19 | .loadpath 20 | .recommenders 21 | 22 | # External tool builders 23 | .externalToolBuilders/ 24 | 25 | # Locally stored "Eclipse launch configurations" 26 | *.launch 27 | 28 | # PyDev specific (Python IDE for Eclipse) 29 | *.pydevproject 30 | 31 | # CDT-specific (C/C++ Development Tooling) 32 | .cproject 33 | 34 | # CDT- autotools 35 | .autotools 36 | 37 | # Java annotation processor (APT) 38 | .factorypath 39 | 40 | # PDT-specific (PHP Development Tools) 41 | .buildpath 42 | 43 | # sbteclipse plugin 44 | .target 45 | 46 | # Tern plugin 47 | .tern-project 48 | 49 | # TeXlipse plugin 50 | .texlipse 51 | 52 | # STS (Spring Tool Suite) 53 | .springBeans 54 | 55 | # Code Recommenders 56 | .recommenders/ 57 | 58 | # Annotation Processing 59 | .apt_generated/ 60 | .apt_generated_test/ 61 | 62 | # Scala IDE specific (Scala & Java development for Eclipse) 63 | .cache-main 64 | .scala_dependencies 65 | .worksheet 66 | 67 | # Uncomment this line if you wish to ignore the project description file. 68 | # Typically, this file would be tracked if it contains build/dependency configurations: 69 | #.project 70 | 71 | ### Eclipse Patch ### 72 | # Spring Boot Tooling 73 | .sts4-cache/ 74 | 75 | ### Intellij ### 76 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 77 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 78 | 79 | # User-specific stuff 80 | .idea/**/workspace.xml 81 | .idea/**/tasks.xml 82 | .idea/**/usage.statistics.xml 83 | .idea/**/dictionaries 84 | .idea/**/shelf 85 | 86 | # AWS User-specific 87 | .idea/**/aws.xml 88 | 89 | # Generated files 90 | .idea/**/contentModel.xml 91 | 92 | # Sensitive or high-churn files 93 | .idea/**/dataSources/ 94 | .idea/**/dataSources.ids 95 | .idea/**/dataSources.local.xml 96 | .idea/**/sqlDataSources.xml 97 | .idea/**/dynamic.xml 98 | .idea/**/uiDesigner.xml 99 | .idea/**/dbnavigator.xml 100 | 101 | # Gradle 102 | .idea/**/gradle.xml 103 | .idea/**/libraries 104 | 105 | # Gradle and Maven with auto-import 106 | # When using Gradle or Maven with auto-import, you should exclude module files, 107 | # since they will be recreated, and may cause churn. Uncomment if using 108 | # auto-import. 109 | # .idea/artifacts 110 | # .idea/compiler.xml 111 | # .idea/jarRepositories.xml 112 | # .idea/modules.xml 113 | # .idea/*.iml 114 | # .idea/modules 115 | # *.iml 116 | # *.ipr 117 | 118 | # CMake 119 | cmake-build-*/ 120 | 121 | # Mongo Explorer plugin 122 | .idea/**/mongoSettings.xml 123 | 124 | # File-based project format 125 | *.iws 126 | 127 | # IntelliJ 128 | out/ 129 | 130 | # mpeltonen/sbt-idea plugin 131 | .idea_modules/ 132 | 133 | # JIRA plugin 134 | atlassian-ide-plugin.xml 135 | 136 | # Cursive Clojure plugin 137 | .idea/replstate.xml 138 | 139 | # Crashlytics plugin (for Android Studio and IntelliJ) 140 | com_crashlytics_export_strings.xml 141 | crashlytics.properties 142 | crashlytics-build.properties 143 | fabric.properties 144 | 145 | # Editor-based Rest Client 146 | .idea/httpRequests 147 | 148 | # Android studio 3.1+ serialized cache file 149 | .idea/caches/build_file_checksums.ser 150 | 151 | ### Intellij Patch ### 152 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 153 | 154 | # *.iml 155 | # modules.xml 156 | # .idea/misc.xml 157 | # *.ipr 158 | 159 | # Sonarlint plugin 160 | # https://plugins.jetbrains.com/plugin/7973-sonarlint 161 | .idea/**/sonarlint/ 162 | 163 | # SonarQube Plugin 164 | # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin 165 | .idea/**/sonarIssues.xml 166 | 167 | # Markdown Navigator plugin 168 | # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced 169 | .idea/**/markdown-navigator.xml 170 | .idea/**/markdown-navigator-enh.xml 171 | .idea/**/markdown-navigator/ 172 | 173 | # Cache file creation bug 174 | # See https://youtrack.jetbrains.com/issue/JBR-2257 175 | .idea/$CACHE_FILE$ 176 | 177 | # CodeStream plugin 178 | # https://plugins.jetbrains.com/plugin/12206-codestream 179 | .idea/codestream.xml 180 | 181 | ### Java ### 182 | # Compiled class file 183 | *.class 184 | 185 | # Log file 186 | *.log 187 | 188 | # BlueJ files 189 | *.ctxt 190 | 191 | # Mobile Tools for Java (J2ME) 192 | .mtj.tmp/ 193 | 194 | # Package Files # 195 | *.jar 196 | *.war 197 | *.nar 198 | *.ear 199 | *.zip 200 | *.tar.gz 201 | *.rar 202 | 203 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 204 | hs_err_pid* 205 | 206 | ### VisualStudioCode ### 207 | .vscode/* 208 | !.vscode/settings.json 209 | !.vscode/tasks.json 210 | !.vscode/launch.json 211 | !.vscode/extensions.json 212 | *.code-workspace 213 | 214 | # Local History for Visual Studio Code 215 | .history/ 216 | 217 | ### VisualStudioCode Patch ### 218 | # Ignore all local history of files 219 | .history 220 | .ionide 221 | 222 | # End of https://www.toptal.com/developers/gitignore/api/java,intellij,eclipse,visualstudiocode 223 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | desafio-dio-POO -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Desafio: Aprenda na Prática Programação Orientada a Objetos

2 | 3 |

📜 SLIDES APRESENTADO NO PROJETO 📜

4 |

Sejam bem-vindos ao desafio: APRENDENDO NA PRÁTICA O PARADIGMA DE ORIENTAÇÃO A OBJETOS.
Desafio este que tive a honra de co-criar com a plataforma de cursos online DIGITAL INNOVATION ONE 💛🧡 e disponibilizado de forma gratuita para a comunidade dos desenvolvedores Java.
5 | 💎 O objetivo principal é colocar em prática umas das principais ferramentas da OO: ABSTRAÇÃO, ENCAPSULAMENTO, HERANÇA E POLIMORFISMO, através de um projeto Java.

6 | 7 | 8 | 9 |

🛑 Pré-Requisitos

10 | 11 |

12 | ✅ Conhecer a sintaxe da Java
13 | ✅ Java JDK 11
14 | ✅ IDE para desenvolvimento Java (usarei IntelliJ)
15 | ✅ Git
16 | ✅ Conta no GitHub
17 |

18 | 19 | 20 |

👣 Passo-a-Passo

21 | 22 |

23 | 1. Vamos ABSTRAIR o DOMÍNIO Bootcamp e MODELAR seus ATRIBUTOS E MÉTODOS
24 | 2. Criaremos as CLASSES: Bootcamp, Cursos, Mentorias e Devs e vamos relaciona-las
25 | 3. As CLASSES Curso, Mentoria e Devs também serão MODELADOS, ou seja, criaremos seus ATRIBUTOS E MÉTODOS
26 | 4. Para que o código fique mais legível e de fácil manutenção, iremos utilizar de algumas das ferramentas que o PARADIGMA DE ORIENTAÇÃO A OBJETOS (POO) nos oferece: ABSTRAÇÃO, ENCAPSULAMENTO, HERANÇA E POLIMORFISMO
27 | 5. E para representar CLASSES que foram criadas e relacionadas, iremos transforma-las em OBJETOS
28 |

29 | 30 | ---- 31 | 32 |

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

33 | 34 |

35 | A visão de Orientação a Objetos (OO) é aquela de um mundo de objetos que interagem.
36 | 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.
37 | São 4 os pilares principais do POO: ABSTRAÇÃO, ENCAPSULAMENTO, HERANÇA E POLIMORFISMO. 38 |

39 | 40 | 41 |

🔺 ABSTRAÇÃO:

42 | 43 |

44 | Habilidade de concentrar-se nos aspectos essenciais de um domínio, ignorando características menos importantes ou acidentais. Nesse contexto, objetos são abstrações de entidades existentes no domínio em questão.

45 | 46 |

🔺 ENCAPSULAMENTO:

47 | 48 |

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

49 | 50 |

🔺 HERANÇA:

51 | 52 |

Permite que você defina uma classe filha que reutiliza (herda), estende ou modifica o comportamento de uma classe pai. A classe cujos membros são herdados é chamada de classe base. A classe que herda os membros da classe base é chamada de classe derivada.

53 | 54 |

🔺 POLIMORFISMO:

55 | 56 |

Capacidade de um objeto poder ser referenciado de várias formas. Cuidado, polimorfismo não quer dizer que o objeto fica se transformando, muito pelo contrário, um objeto nasce de um tipo e morre daquele tipo, o que pode mudar é a maneira como nos referimos a ele. A capacidade de tratar objetos criados a partir das classes específicas como objetos de uma classe genérica é chamada de polimorfismo.

57 |
58 |

‼️ CONCEITOS FUNDAMENTAIS POO ‼️

59 |

60 |

🔻 DOMÍNIO:

61 | 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. 62 | 63 |

🔻 CLASSE:

64 | 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. 65 | 66 |

🔻 ATRIBUTO:

67 | 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. 68 | 69 |

🔻 VARIÁVEL:

70 | 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”. 71 | 72 |

🔻 MÉTODO:

73 | Os métodos representam os estados e ações dos objetos e classes. 74 | 75 |

🔻 OBJETO:

76 | 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). 77 | 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. 78 | 79 |

🔻 INSTÂNCIA:

80 | 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. 81 | 82 |

83 | 84 | ------------ 85 |
86 | 87 |

🧮 Linguagem de Programação vs Paradigma de Linguagem de Programação

88 | 89 |

90 |

✨ LINGUAGEM DE PROGRAMAÇÃO:

91 | É uma linguagem formal que, através de uma série de instruções, permite que um programador escreva um conjunto de ordens, ações consecutivas, dados e algoritmos para criar programas que controlam o comportamento físico e lógico de uma máquina.
92 | Seguem alguns exemplos de como as linguagens de programação podem ser classificadas:
93 |
94 | 🔺 Nível de abstração:
95 | Baixo Nível: Assembly
96 | Médio Nível: C, C++, D, Objective C, etc.
97 | Alto Nível: Java, C#, PHP, Javascript, etc.
98 | Altíssimo Nível: Python, Ruby, Elixir, etc.
99 |
100 | 🔺 Paradigma de programação:
101 | Programação Estruturada: C, Pascal, Ada, etc.
102 | Programação Orientada a Objetos: Java, C#, C++, Objective C, D, etc.
103 | Programação Funcional: Lisp, Scheme, Erlang, Elixir, etc.
104 |
105 | 🔺 Linguagens classificadas pela arquitetura da aplicação:
106 | Desktop: C, C++, Object Pascal, Java, etc.
107 | Web: PHP, Ruby, Javascript, Java, etc.
108 |
109 | 🔺 Tipo de execução:
110 | Linguagens compiladas: C, C++, Pascal, D, GO, etc.
111 | Linguagens Interpretadas: Python, Ruby, PHP, Javascript, etc.
112 | Linguagens Hibridas: Java, Erlang, Elixir, etc.
113 | 114 | 115 |

✨ PARADIGMA DE LINGUAGEM DE PROGRAMAÇÃO

116 | 117 | É um conjunto de características que podem ser utilizados para categorizar determinado grupo de linguagens. Um paradigma pode oferecer técnicas apropriadas para uma aplicação específica.
118 |
119 | PARADIGMAS PRINCIPAIS e SEUS SUBPARADIGMAS
120 | 121 | 🔸 1. Paradigma Imperativo
122 | Neste paradigma, o programa descreve o processamento necessário para solucionar o problema. Assim, o paradigma imperativo é caracterizado por execução sequencial de instruções, pelo uso de variáveis que representam posições de memória e pelo uso de instruções de atribuição que alteram os valores dessas variáveis.
123 | Vejamos alguns Subparadigmas do Paradigma Imperativo e exemplos linguagens de programação que adotam esses subparadigmas.
124 |
125 | 🔸 1.1 Paradigma estruturado: ALGOL 58 e ALGOL 60
126 | 🔸 1.2 Paradigma concorrente: Java e Ada
127 | 🔸 1.3 Paradigma Orientado a Objetos: Smalltalk e Java
128 |
129 | 🔹 2. Paradigma Declarativo
130 | Este paradigma é o modelo no qual os resultados são descritos, mas os passos para chegar aos resultados não são estabelecidos.
131 | Vejamos alguns Subparadigmas do Paradigma Declarativo e exemplos linguagens de programação que adotam esses subparadigmas:
132 |
133 | 🔹 2.1 Paradigma Funcional: Lisp e Haskell
134 | 🔹 2.2 Paradigma Lógico: Prolog
135 |

136 | 137 |

🤝 Contribuindo

138 | 139 |

140 | Este repositório foi criado para fins de estudo, então contribua com ele.
141 | 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.
142 |
143 | Se possível:
144 | ⭐️ Star o projeto
145 | 🐛 Encontrar e relatar issues
146 |

147 | 148 | 149 | 150 | ------------ 151 | 152 | Disponibilizado com ♥ por [cami-la](https://www.linkedin.com/in/cami-la/ "cami-la"). 153 | -------------------------------------------------------------------------------- /desafio-poo-dio.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /out/production/desafio-poo-dio/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/desafio-poo-dio/a023d969bab0a2bfc95d35425252c49f87f844e4/out/production/desafio-poo-dio/Main.class -------------------------------------------------------------------------------- /out/production/desafio-poo-dio/br/com/dio/desafio/dominio/Bootcamp.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/desafio-poo-dio/a023d969bab0a2bfc95d35425252c49f87f844e4/out/production/desafio-poo-dio/br/com/dio/desafio/dominio/Bootcamp.class -------------------------------------------------------------------------------- /out/production/desafio-poo-dio/br/com/dio/desafio/dominio/Conteudo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/desafio-poo-dio/a023d969bab0a2bfc95d35425252c49f87f844e4/out/production/desafio-poo-dio/br/com/dio/desafio/dominio/Conteudo.class -------------------------------------------------------------------------------- /out/production/desafio-poo-dio/br/com/dio/desafio/dominio/Curso.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/desafio-poo-dio/a023d969bab0a2bfc95d35425252c49f87f844e4/out/production/desafio-poo-dio/br/com/dio/desafio/dominio/Curso.class -------------------------------------------------------------------------------- /out/production/desafio-poo-dio/br/com/dio/desafio/dominio/Dev.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/desafio-poo-dio/a023d969bab0a2bfc95d35425252c49f87f844e4/out/production/desafio-poo-dio/br/com/dio/desafio/dominio/Dev.class -------------------------------------------------------------------------------- /out/production/desafio-poo-dio/br/com/dio/desafio/dominio/Mentoria.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/desafio-poo-dio/a023d969bab0a2bfc95d35425252c49f87f844e4/out/production/desafio-poo-dio/br/com/dio/desafio/dominio/Mentoria.class -------------------------------------------------------------------------------- /src/Main.java: -------------------------------------------------------------------------------- 1 | import br.com.dio.desafio.dominio.Bootcamp; 2 | import br.com.dio.desafio.dominio.Curso; 3 | import br.com.dio.desafio.dominio.Dev; 4 | import br.com.dio.desafio.dominio.Mentoria; 5 | 6 | import java.time.LocalDate; 7 | 8 | public class Main { 9 | public static void main(String[] args) { 10 | Curso curso1 = new Curso(); 11 | curso1.setTitulo("curso java"); 12 | curso1.setDescricao("descrição curso java"); 13 | curso1.setCargaHoraria(8); 14 | 15 | Curso curso2 = new Curso(); 16 | curso2.setTitulo("curso js"); 17 | curso2.setDescricao("descrição curso js"); 18 | curso2.setCargaHoraria(4); 19 | 20 | Mentoria mentoria = new Mentoria(); 21 | mentoria.setTitulo("mentoria de java"); 22 | mentoria.setDescricao("descrição mentoria java"); 23 | mentoria.setData(LocalDate.now()); 24 | 25 | /*System.out.println(curso1); 26 | System.out.println(curso2); 27 | System.out.println(mentoria);*/ 28 | 29 | Bootcamp bootcamp = new Bootcamp(); 30 | bootcamp.setNome("Bootcamp Java Developer"); 31 | bootcamp.setDescricao("Descrição Bootcamp Java Developer"); 32 | bootcamp.getConteudos().add(curso1); 33 | bootcamp.getConteudos().add(curso2); 34 | bootcamp.getConteudos().add(mentoria); 35 | 36 | Dev devCamila = new Dev(); 37 | devCamila.setNome("Camila"); 38 | devCamila.inscreverBootcamp(bootcamp); 39 | System.out.println("Conteúdos Inscritos Camila:" + devCamila.getConteudosInscritos()); 40 | devCamila.progredir(); 41 | devCamila.progredir(); 42 | System.out.println("-"); 43 | System.out.println("Conteúdos Inscritos Camila:" + devCamila.getConteudosInscritos()); 44 | System.out.println("Conteúdos Concluídos Camila:" + devCamila.getConteudosConcluidos()); 45 | System.out.println("XP:" + devCamila.calcularTotalXp()); 46 | 47 | System.out.println("-------"); 48 | 49 | Dev devJoao = new Dev(); 50 | devJoao.setNome("Joao"); 51 | devJoao.inscreverBootcamp(bootcamp); 52 | System.out.println("Conteúdos Inscritos João:" + devJoao.getConteudosInscritos()); 53 | devJoao.progredir(); 54 | devJoao.progredir(); 55 | devJoao.progredir(); 56 | System.out.println("-"); 57 | System.out.println("Conteúdos Inscritos João:" + devJoao.getConteudosInscritos()); 58 | System.out.println("Conteúdos Concluidos João:" + devJoao.getConteudosConcluidos()); 59 | System.out.println("XP:" + devJoao.calcularTotalXp()); 60 | 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /src/br/com/dio/desafio/dominio/Bootcamp.java: -------------------------------------------------------------------------------- 1 | package br.com.dio.desafio.dominio; 2 | 3 | import java.time.LocalDate; 4 | import java.util.HashSet; 5 | import java.util.LinkedHashSet; 6 | import java.util.Objects; 7 | import java.util.Set; 8 | 9 | public class Bootcamp { 10 | private String nome; 11 | private String descricao; 12 | private final LocalDate dataInicial = LocalDate.now(); 13 | private final LocalDate dataFinal = dataInicial.plusDays(45); 14 | private Set devsInscritos = new HashSet<>(); 15 | private Set conteudos = new LinkedHashSet<>(); 16 | 17 | 18 | public String getNome() { 19 | return nome; 20 | } 21 | 22 | public void setNome(String nome) { 23 | this.nome = nome; 24 | } 25 | 26 | public String getDescricao() { 27 | return descricao; 28 | } 29 | 30 | public void setDescricao(String descricao) { 31 | this.descricao = descricao; 32 | } 33 | 34 | public LocalDate getDataInicial() { 35 | return dataInicial; 36 | } 37 | 38 | public LocalDate getDataFinal() { 39 | return dataFinal; 40 | } 41 | 42 | public Set getDevsInscritos() { 43 | return devsInscritos; 44 | } 45 | 46 | public void setDevsInscritos(Set devsInscritos) { 47 | this.devsInscritos = devsInscritos; 48 | } 49 | 50 | public Set getConteudos() { 51 | return conteudos; 52 | } 53 | 54 | public void setConteudos(Set conteudos) { 55 | this.conteudos = conteudos; 56 | } 57 | 58 | @Override 59 | public boolean equals(Object o) { 60 | if (this == o) return true; 61 | if (o == null || getClass() != o.getClass()) return false; 62 | Bootcamp bootcamp = (Bootcamp) o; 63 | return Objects.equals(nome, bootcamp.nome) && Objects.equals(descricao, bootcamp.descricao) && Objects.equals(dataInicial, bootcamp.dataInicial) && Objects.equals(dataFinal, bootcamp.dataFinal) && Objects.equals(devsInscritos, bootcamp.devsInscritos) && Objects.equals(conteudos, bootcamp.conteudos); 64 | } 65 | 66 | @Override 67 | public int hashCode() { 68 | return Objects.hash(nome, descricao, dataInicial, dataFinal, devsInscritos, conteudos); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/br/com/dio/desafio/dominio/Conteudo.java: -------------------------------------------------------------------------------- 1 | package br.com.dio.desafio.dominio; 2 | 3 | public abstract class Conteudo { 4 | 5 | protected static final double XP_PADRAO = 10d; 6 | 7 | private String titulo; 8 | private String descricao; 9 | 10 | public abstract double calcularXp(); 11 | 12 | public String getTitulo() { 13 | return titulo; 14 | } 15 | 16 | public void setTitulo(String titulo) { 17 | this.titulo = titulo; 18 | } 19 | 20 | public String getDescricao() { 21 | return descricao; 22 | } 23 | 24 | public void setDescricao(String descricao) { 25 | this.descricao = descricao; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/br/com/dio/desafio/dominio/Curso.java: -------------------------------------------------------------------------------- 1 | package br.com.dio.desafio.dominio; 2 | 3 | public class Curso extends Conteudo{ 4 | 5 | private int cargaHoraria; 6 | 7 | @Override 8 | public double calcularXp() { 9 | return XP_PADRAO * cargaHoraria; 10 | } 11 | 12 | public Curso() { 13 | } 14 | 15 | 16 | public int getCargaHoraria() { 17 | return cargaHoraria; 18 | } 19 | 20 | public void setCargaHoraria(int cargaHoraria) { 21 | this.cargaHoraria = cargaHoraria; 22 | } 23 | 24 | @Override 25 | public String toString() { 26 | return "Curso{" + 27 | "titulo='" + getTitulo() + '\'' + 28 | ", descricao='" + getDescricao() + '\'' + 29 | ", cargaHoraria=" + cargaHoraria + 30 | '}'; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/br/com/dio/desafio/dominio/Dev.java: -------------------------------------------------------------------------------- 1 | package br.com.dio.desafio.dominio; 2 | 3 | import java.util.*; 4 | 5 | public class Dev { 6 | private String nome; 7 | private Set conteudosInscritos = new LinkedHashSet<>(); 8 | private Set conteudosConcluidos = new LinkedHashSet<>(); 9 | 10 | public void inscreverBootcamp(Bootcamp bootcamp){ 11 | this.conteudosInscritos.addAll(bootcamp.getConteudos()); 12 | bootcamp.getDevsInscritos().add(this); 13 | } 14 | 15 | public void progredir() { 16 | Optional conteudo = this.conteudosInscritos.stream().findFirst(); 17 | if(conteudo.isPresent()) { 18 | this.conteudosConcluidos.add(conteudo.get()); 19 | this.conteudosInscritos.remove(conteudo.get()); 20 | } else { 21 | System.err.println("Você não está matriculado em nenhum conteúdo!"); 22 | } 23 | } 24 | 25 | public double calcularTotalXp() { 26 | Iterator iterator = this.conteudosConcluidos.iterator(); 27 | double soma = 0; 28 | while(iterator.hasNext()){ 29 | double next = iterator.next().calcularXp(); 30 | soma += next; 31 | } 32 | return soma; 33 | 34 | /*return this.conteudosConcluidos 35 | .stream() 36 | .mapToDouble(Conteudo::calcularXp) 37 | .sum();*/ 38 | } 39 | 40 | 41 | public String getNome() { 42 | return nome; 43 | } 44 | 45 | public void setNome(String nome) { 46 | this.nome = nome; 47 | } 48 | 49 | public Set getConteudosInscritos() { 50 | return conteudosInscritos; 51 | } 52 | 53 | public void setConteudosInscritos(Set conteudosInscritos) { 54 | this.conteudosInscritos = conteudosInscritos; 55 | } 56 | 57 | public Set getConteudosConcluidos() { 58 | return conteudosConcluidos; 59 | } 60 | 61 | public void setConteudosConcluidos(Set conteudosConcluidos) { 62 | this.conteudosConcluidos = conteudosConcluidos; 63 | } 64 | 65 | @Override 66 | public boolean equals(Object o) { 67 | if (this == o) return true; 68 | if (o == null || getClass() != o.getClass()) return false; 69 | Dev dev = (Dev) o; 70 | return Objects.equals(nome, dev.nome) && Objects.equals(conteudosInscritos, dev.conteudosInscritos) && Objects.equals(conteudosConcluidos, dev.conteudosConcluidos); 71 | } 72 | 73 | @Override 74 | public int hashCode() { 75 | return Objects.hash(nome, conteudosInscritos, conteudosConcluidos); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/br/com/dio/desafio/dominio/Mentoria.java: -------------------------------------------------------------------------------- 1 | package br.com.dio.desafio.dominio; 2 | 3 | import java.time.LocalDate; 4 | 5 | public class Mentoria extends Conteudo{ 6 | 7 | private LocalDate data; 8 | 9 | @Override 10 | public double calcularXp() { 11 | return XP_PADRAO + 20d; 12 | } 13 | 14 | public Mentoria() { 15 | } 16 | 17 | public LocalDate getData() { 18 | return data; 19 | } 20 | 21 | public void setData(LocalDate data) { 22 | this.data = data; 23 | } 24 | 25 | @Override 26 | public String toString() { 27 | return "Mentoria{" + 28 | "titulo='" + getTitulo() + '\'' + 29 | ", descricao='" + getDescricao() + '\'' + 30 | ", data=" + data + 31 | '}'; 32 | } 33 | } 34 | --------------------------------------------------------------------------------