{"id":22157850,"url":"https://github.com/lsmcodes/java-poo-desafio-bootcamp","last_synced_at":"2025-07-08T11:35:16.099Z","repository":{"id":242286626,"uuid":"808658269","full_name":"lsmcodes/java-poo-desafio-bootcamp","owner":"lsmcodes","description":"Desafio de projeto Abstraindo um Bootcamp Usando Orientação a Objetos em Java - DIO","archived":false,"fork":false,"pushed_at":"2024-07-05T01:16:02.000Z","size":50,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-29T19:48:33.405Z","etag":null,"topics":["challenge","oop","oop-in-java","santander-bootcamp-2024"],"latest_commit_sha":null,"homepage":"http://www.dio.me","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lsmcodes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-31T14:30:16.000Z","updated_at":"2024-07-09T01:26:59.000Z","dependencies_parsed_at":"2024-06-27T16:59:47.207Z","dependency_job_id":"cbd58eb1-276a-4e54-87fe-47d27a1de431","html_url":"https://github.com/lsmcodes/java-poo-desafio-bootcamp","commit_stats":null,"previous_names":["lsmcodes/trilha-java-poo-desafio-bootcamp","lsmcodes/java-poo-desafio-bootcamp"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fjava-poo-desafio-bootcamp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fjava-poo-desafio-bootcamp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fjava-poo-desafio-bootcamp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fjava-poo-desafio-bootcamp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lsmcodes","download_url":"https://codeload.github.com/lsmcodes/java-poo-desafio-bootcamp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245294764,"owners_count":20591899,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["challenge","oop","oop-in-java","santander-bootcamp-2024"],"created_at":"2024-12-02T03:15:48.158Z","updated_at":"2025-03-24T14:48:14.683Z","avatar_url":"https://github.com/lsmcodes.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DIO - Trilha POO Java\n\u003cdiv style=\"display:inline-block\"\u003e\n        \u003cpicture\u003e\n                \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://img.shields.io/badge/Java-black?style=for-the-badge\u0026logo=OpenJDK\u0026logoColor=white\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Java-white?style=for-the-badge\u0026logo=OpenJDK\u0026logoColor=black\" /\u003e\n        \u003c/picture\u003e\n        \u003cpicture\u003e\n                \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://img.shields.io/badge/Maven-black?style=for-the-badge\u0026logo=ApacheMaven\u0026logoColor=white\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Maven-white?style=for-the-badge\u0026logo=ApacheMaven\u0026logoColor=black\" /\u003e\n        \u003c/picture\u003e\n        \u003cpicture\u003e\n                \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://img.shields.io/badge/Spring_Boot-black?style=for-the-badge\u0026logo=SpringBoot\u0026logoColor=white\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/Spring_Boot-white?style=for-the-badge\u0026logo=SpringBoot\u0026logoColor=black\" /\u003e\n        \u003c/picture\u003e\n        \u003cpicture\u003e\n                \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://img.shields.io/badge/UML-black?style=for-the-badge\u0026logo=UML\u0026logoColor=white\"\u003e\n                \u003cimg src=\"https://img.shields.io/badge/UML-white?style=for-the-badge\u0026logo=UML\u0026logoColor=black\" /\u003e\n        \u003c/picture\u003e\n\u003c/div\u003e\n\n## Autora do Desafio e Repositório Original\n- [Camila Cavalcante](https://github.com/cami-la)\n- [Desafio POO](https://github.com/cami-la/desafio-poo-dio)\n\n## Desafio de Projeto\nSiga os passos a seguir e como desafio, implemente as evoluções que achar interessantes.\n\n1. Abstraia o domínio Bootcamp e modele seus atributos e métodos;\n2. Crie as classes: `Bootcamp`, `Cursos`, `Mentorias` e `Devs` e as relacione;\n3. Modele as classes criadas, ou seja, crie seus atributos e métodos;\n4. Para que o código fique mais legível e de fácil manutenção, utilize de algumas das ferramentas que o Paradigma de Orientação a Objetos (POO) nos oferece: `Abstração`, `Encapsulamento`, `Herança` e `Polimorfismo`;\n5. E para representar classes que foram criadas e relacionadas, transforme-as em objetos.\n\n## Conceitos Fundamentais\n### Domínio\n`Domínio` se refere à área temática ou escopo de problema que o sistema de software está sendo construído para abordar. Além de englobar os conceitos, regras e processos do mundo real que o software se propõe a modelar. Por exemplo, uma aplicação que tem como propósito representar os conceitos e comportamentos associados a uma bicicleta, o domínio (também conhecido como `camada de negócios` ou `camada de objetos de negócio`) pode incluir uma classe Bicicleta com propriedades como cadência, velocidade e engrenagem, além de métodos que representem ações como mudar cadência, mudar engrenagem, aumentar velocidade e aplicar freios como demonstra o diagrama a seguir.\n\u003cp align=\"center\"\u003e\n        \u003cimg src=\"assets/images/diagrama.png\"\u003e\n\u003c/p\u003e\n\n### Classe\n`Classe` é como um molde ou uma planta que define o `tipo` dos objetos que são criados a partir dela. No mundo real frequentemente encontramos diversos objetos individuais que são do mesmo tipo. Por exemplo, podem existir milhares de bicicletas, todas da mesma marca e modelo, sendo que cada uma delas foi construída a partir do mesmo conjunto de especificações e desenhos técnicos e portanto, contêm os mesmos componentes. Em termos orientados a objetos, podemos dizer que todas essas bicicletas são `instâncias` da classe de `objetos` conhecidos como bicicletas.\n```java\npublic class Bicicleta {\n\tprivate int cadencia = 0;\n\tprivate int velocidade = 0;\n\tprivate int engrenagem = 1;\n\n\tpublic void mudarCadencia(int novoValor) {\n\t\tcadencia = novoValor;\n\t}\n\n\tpublic void mudarEngrenagem(int novoValor) {\n\t\tengrenagem = novoValor;\n\t}\n\n\tpublic void aumentarVelocidade(int incremento) {\n\t\tvelocidade = velocidade + incremento;   \n\t}\n\n\tpublic void aplicarFreios(int decremento) {\n\t\tvelocidade = velocidade - decremento;\n\t}\n}\n```\n\n### Objeto\n`Objetos` no mundo real compartilham duas características: estado e comportamento. Bicicletas possuem estado (cadência, velocidade, engrenagem) e comportamento (mudar cadência, mudar engrenagem, aumentar velocidade e aplicar freios). Objetos de software são conceitualmente similares a objetos do mundo real: eles também possuem estado e comportamento. Um objeto armazena seu estado em campos (também chamados de `atributos` ou propriedades) e expõe seu comportamento por meio de `métodos`.\n\n```java\nBicicleta bicicleta = new Bicicleta();\n```\n\n### Instância\n`Instância` é uma cópia executável de uma classe. Outro nome para instância é objeto.\n```java\nBicicleta bicicleta = new Bicicleta();\nbicicleta.aumentarVelocidade(15);\n```\n\n### Atributo\n`Atributos` são variáveis dentro de uma classe que definem o `estado` da mesma.\n```java\npublic class Bicicleta {\n\tprivate int cadencia = 0;\n  \tprivate int velocidade = 0;\n  \tprivate int engrenagem = 1;\n}\n```\n\n### Variáveis\n`Variáveis` são \"locais\" reservados na memória para armazenar um determinado tipo de dado. Existem quatro tipos de variáveis: variáveis de instância (campos não estáticos), variáveis de classe (campos estáticos), variáveis locais e parâmetros.\n```java\nint engrenagem = 1;\n```\n\n### Método\n`Métodos` são blocos de código que apenas são executados quando chamados. Podem receber dados por meio de parâmetros e `definem o comportamento` da classe e dos objetos criados a partir dela.\n```java\nvoid mudarCadencia(int novoValor) {\n  \tcadencia = novoValor;\n}\n```\n## Referências\n- Domain-Driven Design (DDD) - https://www.geeksforgeeks.org/domain-driven-design-ddd/\n- What Is a Class? - https://docs.oracle.com/javase/tutorial/java/concepts/class.html\n- What Is an Object? - https://docs.oracle.com/javase/tutorial/java/concepts/object.html\n- Object-Oriented Programming - https://www.oracle.com/java/technologies/oop.html\n- Variables - https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html\n- Declaring Classes - https://docs.oracle.com/javase/tutorial/java/javaOO/classdecl.html","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flsmcodes%2Fjava-poo-desafio-bootcamp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flsmcodes%2Fjava-poo-desafio-bootcamp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flsmcodes%2Fjava-poo-desafio-bootcamp/lists"}