{"id":22157849,"url":"https://github.com/lsmcodes/java-poo-desafio-banco-digital","last_synced_at":"2025-03-24T14:48:16.328Z","repository":{"id":241618822,"uuid":"807047803","full_name":"lsmcodes/java-poo-desafio-banco-digital","owner":"lsmcodes","description":"Desafio de projeto Criando um Banco Digital com Java e Orientação a Objetos - DIO","archived":false,"fork":false,"pushed_at":"2024-07-04T20:20:46.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-29T19:48:33.448Z","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-28T11:41:09.000Z","updated_at":"2024-07-09T01:26:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"09702f48-cac3-40b1-82e9-22c15626bbea","html_url":"https://github.com/lsmcodes/java-poo-desafio-banco-digital","commit_stats":null,"previous_names":["lsmcodes/trilha-java-poo-desafio-banco-digital","lsmcodes/java-poo-desafio-banco-digital"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fjava-poo-desafio-banco-digital","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fjava-poo-desafio-banco-digital/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fjava-poo-desafio-banco-digital/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsmcodes%2Fjava-poo-desafio-banco-digital/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lsmcodes","download_url":"https://codeload.github.com/lsmcodes/java-poo-desafio-banco-digital/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.054Z","updated_at":"2025-03-24T14:48:16.306Z","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\u003c/div\u003e\n\n## Autor do Desafio e Repositório Original\n- [Venilton FalvoJr](https://github.com/falvojr)\n- [Lab Banco Digital](https://github.com/falvojr/lab-banco-digital-oo)\n\n## Desafio de Projeto\nAbstraia um banco com Java e como desafio, evolua o projeto da forma que preferir e adicione o Lombok como dependência para diminuir a verbosidade do código.\n\n## Contexto\nUm banco oferece aos seus clientes dois tipos de contas (`corrente` e `poupança`), as quais possuem as funcionalidades de `depósito`, `saque` e `transferência` (entre contas da própria instituição).\n\n## Abstração\n`Abstração` é primeiramente o processo de abstrair objetos do mundo real para modelar classes que capturam os atributos e comportamentos essenciais desses objetos.\n\nEm segundo lugar, abstração também é o processo de esconder detalhes irrelevantes de implementação, de forma a evidenciar ao usuário apenas o que é essencial. Isso pode ser alcançado em Java por meio de `classes abstratas` e `interfaces`.\n\n- `Classe abstrata`: é uma classe restrita que não não pode ser utilizada para criar objetos (para ser acessada deve ser herdada por uma subclasse);\n- `Método abstrato`: pode ser usado apenas em classes abstratas e não possui um corpo, sendo este provido pela subclasse que o herdou;\n\n```java\n// Classe abstrata\nabstract class Animal {\n\t// Método abstrato (não possui corpo)\n\tpublic abstract void fazerSom();\n\n\t// Método normal\n\tpublic void dormir() {\n\t\tSystem.out.println(\"Zzz\");\n\t}\n}\n```\n\n- `Interface`: é uma classe \"completamente abstrata\", ou seja, uma classe com todos os métodos sem implementação.\n```java\n// Interface\ninterface Animal {\n\t// Método da interface (não possui corpo)\n\tpublic void fazerSom();\n\n\t// Método da interface (não possui corpo)\n\tpublic void correr();\n}\n```\n\n\n## Encapsulamento\n`Encapsulamento` consiste em limitar o acesso a dados internos de uma classe (atributos e métodos) para prevenir acesso não autorizado. Para encapsular dados existem modificadores de acesso como o `private`, que torna os atributos e métodos acessíveis apenas à sua própria classe.\n\nPara permitir que atributos possam ser acessados por outras classes, os métodos `Get` e `Set` são utilizados.\n```java\npublic class Pessoa {\n\t// Atributo de acesso restrito\n\tprivate String nome;\n\n\t// Getter\n\tpublic String getNome() {\n\t\treturn nome;\n\t}\n\n\t// Setter\n\tpublic void setNome(String novoNome) {\n\t\tthis.nome = novoNome;\n\t}\n\n\t// Método de acesso restrito\n\tprivate String normalizarNome() {\n\t\treturn nome.trim().replaceAll(\"\\\\s+\",\"\").toUpperCase();\n\t}\n}\n```\n\n## Herança\n`Herança` é a capacidade de uma classe (`subclasse` ou classe filha) herdar atributos e métodos de uma outra classe (`superclasse`, classe pai ou classe base), o que dispensa a repetição do código.\n```java\npublic class Veiculo {\n\t// Atributo do Veiculo\n\tprotected String marca = \"Ford\";\n\n\t// Método do Veiculo\n\tpublic void buzinar() {\n\t\tSystem.out.println(\"Tuut, tuut!\");\n\t}\n}\n\nclass Carro extends Veiculo {\n\t// Atributo de Carro\n\tprivate String modelo = \"Mustang\";\n\t\n\tpublic static void main(String[] args) {\n\t\t// Cria um objeto meuCarro\n\t\tCarro meuCarro = new Carro();\n\n\t\t// Invoca método da superclasse por meio da instância meuCarro da subclasse\n\t\tmeuCarro.buzinar();\n\n\t\t// Imprime os valores dos atributos marca da superclasse e modelo da subclasse por meio da instância meuCarro da subclasse\n\t\tSystem.out.println(meuCarro.marca + \" \" + meuCarro.modelo);\n\t}\n```\n\n## Polimorfismo\n`\"Polimorfismo\"` significa \"muitas formas\" e ocorre quando subclasses herdam um método e o implementam de forma distinta, o que faz com que o `mesmo método` desempenhe `funções diferentes` em classes diferentes.\n```java\npublic class Animal {\n\tpublic void fazerSom() {\n\t\tSystem.out.println(\"O animal faz um som\");\n\t}\n}\n\nclass Porco extends Animal {\n\tpublic void fazerSom() {\n\t\tSystem.out.println(\"O porco grunhe\");\n\t}\n}\n\nclass Cachorro extends Animal {\n\tpublic void fazerSom() {\n\t\tSystem.out.println(\"O cachorro late\");\n\t}\n}\n```\n\n## Referências\n- Java Abstraction - https://www.w3schools.com/java/java_abstract.asp\n- Java Encapsulation - https://www.w3schools.com/java/java_encapsulation.asp\n- Java Inheritance - https://www.w3schools.com/java/java_inheritance.asp\n- Java Polymorphism - https://www.w3schools.com/java/java_polymorphism.asp","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flsmcodes%2Fjava-poo-desafio-banco-digital","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flsmcodes%2Fjava-poo-desafio-banco-digital","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flsmcodes%2Fjava-poo-desafio-banco-digital/lists"}