Giter VIP home page Giter VIP logo

desafio-poo-dio's Introduction

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

📜 SLIDES APRESENTADO NO PROJETO 📜

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.
💎 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.

🛑 Pré-Requisitos

✅ Conhecer a sintaxe da Java
✅ Java JDK 11
✅ IDE para desenvolvimento Java (usarei IntelliJ)
✅ Git
✅ Conta no GitHub

👣 Passo-a-Passo

1. Vamos ABSTRAIR o DOMÍNIO Bootcamp e MODELAR seus ATRIBUTOS E MÉTODOS
2. Criaremos as CLASSES: Bootcamp, Cursos, Mentorias e Devs e vamos relaciona-las
3. As CLASSES Curso, Mentoria e Devs também serão MODELADOS, ou seja, criaremos seus ATRIBUTOS E MÉTODOS
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
5. E para representar CLASSES que foram criadas e relacionadas, iremos transforma-las em OBJETOS


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

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

🔺 ABSTRAÇÃO:

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.

🔺 ENCAPSULAMENTO:

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

🔺 HERANÇA:

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.

🔺 POLIMORFISMO:

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.


‼️ CONCEITOS FUNDAMENTAIS POO ‼️

🔻 DOMÍNIO:

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.

🔻 CLASSE:

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.

🔻 ATRIBUTO:

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.

🔻 VARIÁVEL:

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”.

🔻 MÉTODO:

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

🔻 OBJETO:

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). 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.

🔻 INSTÂNCIA:

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.



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

✨ LINGUAGEM DE PROGRAMAÇÃO:

É 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.
Seguem alguns exemplos de como as linguagens de programação podem ser classificadas:

🔺 Nível de abstração:
Baixo Nível: Assembly
Médio Nível: C, C++, D, Objective C, etc.
Alto Nível: Java, C#, PHP, Javascript, etc.
Altíssimo Nível: Python, Ruby, Elixir, etc.

🔺 Paradigma de programação:
Programação Estruturada: C, Pascal, Ada, etc.
Programação Orientada a Objetos: Java, C#, C++, Objective C, D, etc.
Programação Funcional: Lisp, Scheme, Erlang, Elixir, etc.

🔺 Linguagens classificadas pela arquitetura da aplicação:
Desktop: C, C++, Object Pascal, Java, etc.
Web: PHP, Ruby, Javascript, Java, etc.

🔺 Tipo de execução:
Linguagens compiladas: C, C++, Pascal, D, GO, etc.
Linguagens Interpretadas: Python, Ruby, PHP, Javascript, etc.
Linguagens Hibridas: Java, Erlang, Elixir, etc.

✨ PARADIGMA DE LINGUAGEM DE PROGRAMAÇÃO

É 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.

PARADIGMAS PRINCIPAIS e SEUS SUBPARADIGMAS

🔸 1. Paradigma Imperativo
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.
Vejamos alguns Subparadigmas do Paradigma Imperativo e exemplos linguagens de programação que adotam esses subparadigmas.

🔸 1.1 Paradigma estruturado: ALGOL 58 e ALGOL 60
🔸 1.2 Paradigma concorrente: Java e Ada
🔸 1.3 Paradigma Orientado a Objetos: Smalltalk e Java

🔹 2. Paradigma Declarativo
Este paradigma é o modelo no qual os resultados são descritos, mas os passos para chegar aos resultados não são estabelecidos.
Vejamos alguns Subparadigmas do Paradigma Declarativo e exemplos linguagens de programação que adotam esses subparadigmas:

🔹 2.1 Paradigma Funcional: Lisp e Haskell
🔹 2.2 Paradigma Lógico: Prolog

🤝 Contribuindo

Este repositório foi criado para fins de estudo, então contribua com ele.
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.

Se possível:
⭐️ Star o projeto
🐛 Encontrar e relatar issues


Disponibilizado com ♥ por cami-la.

desafio-poo-dio's People

Contributors

cami-la avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

desafio-poo-dio's Issues

Uso do bootcamp.getConteudos().add(curso1);

Camila Bom dia,
Não consegui entender por que no sétimo vídeo do desafio vc usa a linha "bootcamp.getConteudos().add(curso1);" para adicionar um curso no BootCamp, levando em consideração que os métodos Getters são apenas acessar os valores dos atributos da classe, enquanto os Setters são quem usamos para setar valores neles. Me corrija se estiver errado, mas o ideal não seria o usar método .setConteudos() para essa finalidade?

Desafio Intermediário GFT

Oi Camila!

Quando faço o desafio na IDE processa corretamente, mas ao submeter na DIO aparece um erro.

Analisando o resultado percebi que o teste está sendo realizado com 3 dados de entrada, mas o correto são apenas dois dados, conforme indicado no exemplo:
entrada:
1
5
saida:
2

Segue a para facilitar o entendimento.

tela

https://github.com/DudaCampello/pizza

Obrigada por todo apoio.
Duda

DesafioDio-POO

Ooi, @cami-la Camila, tudo bem?
No desafio POO - na classe Main não consigo importar a classe "Curso". Aparece uma mensagem "Curso cannot be resolved to a type".
Ainda não entendi o que estou fazendo de errado, consegue me ajudar? :)
image

nao consigo usar o calcular xp e o .sum

Ola Camila.....tudo bem?
Preciso de um help 😟
Eu não tenho computador e faço tudo pelo celular. Utilizo um app e esta dando erro na parte que vc fala da Lambda.... não usei ela pq acredito que o app não tem essa função, mas mesmo sem ela esta dando erro tanto no calcular Xp() quanto no .sum(). Já procurei algum erro no código, porém também não encontrei. Será que vc poderia me ajudar a encontrar o erro? ou será que o app que eu uso não tem a função .sum()? Mas mesmo assim....pq o calcularXp() também não está funcionando? Ajuda euuuu 😊
Haaaa, eu adoro seus cursos. Parabéns. Vc capricha nos README.md 🤗
Bjoss 😘

Detalhes do projeto desafio-POO

Camila, fiz o projeto e acrescentei alguns detalhes, porém observei que alguns comando mesmo estando igual ao seu não obtive resposta. Você poderia dá uma olhada, e falar o que acontece, pois tanto no XP e na carga horaria sempre está 00.

Uso do equals() e hashcode()

Olá @cami-la!
Eu fiz seu curso de collections e atualmente estou acabando de fazer o desafio-poo-dio, no qual me surgiu uma dúvida que eu não consegui sanar em outras issues ou no fórum.
A dúvida é relativa a sua orientação quanto ao uso da sobrescrita do método equals() e hashcode(), pelo que eu entendi através do curso de collections e outras pesquisas, eu devo realizar a sobrescrita desses métodos em classe na qual eu vou inserir dentro do Set, no entanto, foi observado que você fez o uso do equals() e hashcode() justamente nas classes Dev e bootcamp, sendo esses, classes que contém listas, mas não estão dentro de listas.
Gostaria de saber se não seria mais adequado o uso do equals() e hashcode() nas classes Curso e Mentoria ou até mesmo, apenas na Conteudo de forma que venha gerar um gash sem incluir carga horária e data, até mesmo por armazenar Curso e Mentoria no mesmo set definindo-os com o tipo da classe Conteudo.
Obrigado desde já por sua resposta, e gostaria de agradecer também pelo seu excelente trabalho e desenvolvimento tanto das aulas e até mesmo do README.md que é tão claro.

>Qual plugin você usa para deixar colorida suas pastas de projeto no IntelliJ?

Camila, muito obrigada pelo conteúdo. Adoro seus plugin! Nesse curso tinha percebido as pastas do IntelliJ com os ícones diferentes e fiquei curiosa pra saber qual é o plugin? (como na imagem do print que você usou pra responder na publicação original)
Desde já obrigada

Oi, @robson331. Tudo bem?
Seguinte, se você quiser usar o meu README.md como base para o seu, é só baixar o projeto, pegar o arquivo README.md e fazer as alterações. Está autorizado! rsrs

Mas o arquivo README.md nada mais é que um arquivo de texto de marcação. Você pode escrever ele usando Markdown ou HTML puro. Eu geralmente uso HTML porque já tenho familiaridade.
Esse editor aqui https://pandao.github.io/editor.md/ é muito usado para ajudar a fazer o README.md.

Porém, não tem segredo. É só você criar o arquivo com o nome README.md e colocá-lo na raíz do projeto, do jeito que eu ensino na aula.
Vou te mandar um print de exemplo:
2022-03-02_09-27

Originally posted by @cami-la in #3 (comment)

Sobre o projeto

Oi Camila, é pra gente entre o repositorio com o conteudo feito passo a passo com você ,ou temos que criar um pelo seu modelo?

Git Ignore

Na segunda aula você coloca o ".gitignore" na pasta ".idea", O correto não seria colocar na raiz do projeto? na linha 128 do ".gitignere" está configurado para ignorar a pasta out que contem os binários do projeto, porem ele esta subindo, pois, as regras do arquivo só estão valendo para pasta .idea .

Melhor apresentação

Oi Camila, tudo bem??
Acabei de assistir a sua aula sobre esse projeto, e nela você menciona que está com os dedinhos coçando para melhorar a apresentação dos resultados com relação aos conteúdos inscritos. Teria uma alternativa de apresentação que não fosse tudo em uma linha só? Dá para separar os cursos e as mentorias por linha?
Obrigada pela ajuda!

Dúvida sobre remoção de um item de um LinkedHashSet<>

Ao progredir, o conteúdo de 'conteudosInscritos' deveria ser limpo, certo?

public void progredir(){
        //pegando o primeiro conteúdo, em ordem de adição dos mesmos.
        Optional<Conteudo> conteudo = this.conteudosInscritos.stream().findFirst();

        if (conteudo.isPresent()) {
            this.conteudosConcluidos.add(conteudo.get());
            this.conteudosInscritos.remove(conteudo.get());
        } else {
            System.err.println("Você não está matriculado em nenhum conteúdo!");
        }
    }

Com o código acima a remoção deveria ocorrer, porém, ao rodar o programa, resulta em:

Conteúdos inscritos Caio [Curso{titulo='Curso Javascript DIO'descricao='Este curso abordará os básicos de Javascript.'cargaHoraria=4}, Curso{titulo='null'descricao='null'cargaHoraria=0}, Mentoria{titulo='Mentoria Java DIO'descricao='Esta mentoria será sobre os básicos de Java.'data=2024-05-29}]
-
Conteúdos inscritos Caio [Curso{titulo='null'descricao='null'cargaHoraria=0}, Mentoria{titulo='Mentoria Java DIO'descricao='Esta mentoria será sobre os básicos de Java.'data=2024-05-29}]
Conteúdos concluídos Caio [Curso{titulo='Curso Javascript DIO'descricao='Este curso abordará os básicos de Javascript.'cargaHoraria=4}]
XP: 40.0
--------
Conteúdos inscritos Dev Solo [Curso{titulo='Curso Javascript DIO'descricao='Este curso abordará os básicos de Javascript.'cargaHoraria=4}, Curso{titulo='null'descricao='null'cargaHoraria=0}, Mentoria{titulo='Mentoria Java DIO'descricao='Esta mentoria será sobre os básicos de Java.'data=2024-05-29}]
-
Conteúdos inscritos Dev Solo [Curso{titulo='null'descricao='null'cargaHoraria=0}, Mentoria{titulo='Mentoria Java DIO'descricao='Esta mentoria será sobre os básicos de Java.'data=2024-05-29}]
Conteúdos concluídos Dev Solo [Curso{titulo='Curso Javascript DIO'descricao='Este curso abordará os básicos de Javascript.'cargaHoraria=4}]
XP: 40.0

Process finished with exit code 0

Revi o código e está idêntico ao da aula, onde está o problema?

Link para o meu repo com o código: https://github.com/caiobukvar/santander-bootcamp-java-2024/tree/main/desafio-poo-bootcamp

Dominando Algoritmos Intermediário com Desafio de Código Java

Camila boa tarde,

Estou com dificuldade para concluir o Bootcamp. Só falta concluir os desafios abaixo;

Desafio:
Quadrado Perfeito,
Classificando Matrizes,
Fatorial Desajeitado

Tem algum material que possa me ajudar?.

Atenciosamente,

Anderson Ferreira

Desafio de codigo Ifoof

Camila,

Me ajuda vice, só falta esses desafios, quero concluir menina.

Quadrato Perfeito
Classificando Matrizes
Fatorial Desajeitado

Nos desafios do IFood

Meu Zap: (81) 9 86357826

Slides do curso

Cami, felicitações e gratidão pelo curso!!!
Ficou show!!!
Procurei o arquivo dos slides aqui e na plataforma DIO, não encontrei
Pô, seria muito legal poder guardar junto com o material do curso.
Será que me perdi e não localizei?

setConteudo / getConteudo

Bom dia, Camila. Curso maravilhoso e está sendo de grande aprendizado, só deus sabe o quanto essa Orientação a Objetos confunde minha cabeça até eu entender, e quando entendo, bagunço novamente. hehe

Brincadeiras a parte... Seguindo o desafio, fiz um esquema de criar cursos e adicioná-los a um bootcamp criado (que ainda só consegui fazer um bootcamp, e posteriormente tentar pegar os cursos criados e adicionar a qualquer bootcamp criado):

novoBootcamp.getConteudos().add(novaCurso);

Fiquei me perguntando porque usamos o getConteudo ao invés de setConteudo. Pelo próprio IntelliJ eu vi que dá erro, e sei que a resposta é bem simples, acho até que sei, porém eu gostaria que deixasse isso mais esclarecido para minha cabeça confusa.
E aproveitando a ocasião, como e onde eu colocaria uma List ou Set para armazenar os inscritos e cursos sem que sejam diretamente dentro do bootcamp?

Agradeço muito!

Dúvida

Olá Camila, criei uma função de cancelamento de matricula na classe Dev:

public void cancelarMatricula(Bootcamp bootcamp){
bootcamp.removerDev(this);
System.out.println("Matricula cancelada do bootcamp: " + bootcamp.getNome());
}

Na classe Boootcamp criei a função:

public void removerDev(Dev dev){
this.devsInscritos.remove(dev);
}

Porém quando chamo a função cancelar matricula do devJoao na main, e mando listar os devs inscritos, o dev Joao ainda está na lista, pq isso está acontecendo?

Desafio-Poo-DIO

Parabéns Camila!! Consegui concluir o seu projeto, fiz umas pequenas alterações no meu Desafio.
e através de sua calma e dedicação(passo a passo) eu venci mais uma etapa nesta jornada. Valeu!!!

Desafio-POO

Boa tarde Camila
Suas aulas são show. Parabéns.

Eu utilizo o eclipse,
estou tendo problemas com esse código aqui. fiz o passo a passo mostrado no seu vídeo mas continua dando erro.
veja por gentileza se pode mim ajudar.

obrigado!

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.