cami-la / desafio-poo-dio

897 stars 1.38k forks source link

setConteudo / getConteudo #4

Closed FartoMan closed 2 years ago

FartoMan commented 2 years ago

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!

cami-la commented 2 years ago

Oi, amigão @FartoMan. Boa tarde. Ótima dúvida, vamos lá:

Se usarmos o médoto

public void setConteudos(Set<Conteudo> conteudos) {
        this.conteudos = conteudos;
    }

note que ele recebe como argumento um novo Set<Conteudo> conteudos. Logo a execução desse método vai sobreescrever todos os conteúdos desse Bootcamp this.conteudos = conteudos; e não é isso o que queremos. O que queremos é PEGAR O SET DE CONTEÚDOS QUE JÁ EXISTE E ADICIONAR APENAS MAIS UM CONTEÚDO NESSE SET. E como fazemos para adicionar um ítem em um set? Chamando o método adicionar. Traduzindo isso em código java, por exemplo:

Conteudos listaDeConteudos = novoBootcamp.getConteudos(); //recuperei o Set com os conteúdos atuais
listaDeConteudos.add(novaCurso); //adicionei mais um conteúdo

//ou simplificando

novoBootcamp.getConteudos().add(novaCurso);

como e onde eu colocaria uma List ou Set para armazenar os inscritos e cursos sem que sejam diretamente dentro do bootcamp? No nosso projetinho, a regra é a seguinte: Um Dev só pode se registrar na plataforma se escolher um Bootcamp para fazer e um curso só pode existir se ele estiver vinculado com um Bootcamp. Para mudar isso, teriamos que mudar a regra de negócio. Na vida real, teriamos um banco de dados para salvar os alunos, os cursos e os bootcamps, separadamente. E assim, fazer o que precisasse. (:

FartoMan commented 2 years ago

Esclareceu bastante! Imaginei mesmo que a resposta fosse essa, só não tinha visto bem a lógica. E sobre o banco de dados, quero muuuuuuito pegar o jeito nisso pra abrir esse horizonte haha E já matando outra dúvida, trabalhei há anos com C++, se não me engano, e o banco que utilizava para gravar informações simples era um .txt. Hoje ainda se utiliza deles em Java?

cami-la commented 2 years ago

Esclareceu bastante! Imaginei mesmo que a resposta fosse essa, só não tinha visto bem a lógica. E sobre o banco de dados, quero muuuuuuito pegar o jeito nisso pra abrir esse horizonte haha E já matando outra dúvida, trabalhei há anos com C++, se não me engano, e o banco que utilizava para gravar informações simples era um .txt. Hoje ainda se utiliza deles em Java?

cami-la commented 2 years ago

Esclareceu bastante! Imaginei mesmo que a resposta fosse essa, só não tinha visto bem a lógica. E sobre o banco de dados, quero muuuuuuito pegar o jeito nisso pra abrir esse horizonte haha E já matando outra dúvida, trabalhei há anos com C++, se não me engano, e o banco que utilizava para gravar informações simples era um .txt. Hoje ainda se utiliza deles em Java?

Não sei te falar sobre C++ porque nunca peguei nada. hehe Mas em Java, usamos ou o banco de dados relacional (MySQL, Oracle, SQLite e etc) ou não-relacional (NoSQL, Redis e etc). Sugiro já começar a estudar sobre banco de dados. Temos um curso bem completo de PostgreSQL na DIO: https://web.dio.me/course/conceitos-e-melhores-praticas-com-bancos-de-dados-postgresql/learning/abe736a3-279b-465c-986f-e35be51a7b39/?back=/browse