cami-la / desafio-poo-dio

897 stars 1.38k forks source link

Melhor apresentação #1

Closed mfmuzi closed 2 years ago

mfmuzi commented 2 years ago

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!

cami-la commented 2 years ago

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!

Oie, boa tarde! Tudo bem? Tu poderia me mandar por aqui a parte do código que tu estais mencionando?

Se no código a gente estiver utilizando de stream API (lambda) é recomendável deixar dessa forma. Mas a gente pode ver como faz. (:

A gente poderia fazer juntas por aqui, que tal? Cola aqui o código.

mfmuzi commented 2 years ago

Oii! Tudo sim e com você?

É referente à saída dessa parte da classe Main:

System.out.println("Conteúdos Inscritos Camila:" + devCamila.getConteudosInscritos());

Quando apresenta os cursos inscritos e as mentorias a saída fica assim: Conteúdos inscritos: [Curso{titulo='Curso Java', descricao='Curso voltado para ensinamentos em Java', cargaHoraria=8}, Curso{titulo='Curso JavaScript', descricao='Curso voltado para ensinamentos em JavaScript', cargaHoraria=4}, Mentoria{titulo='Mentoria em Java', descricao='Mentoria para as aulas de Java', data=22/11/2021}, Mentoria{titulo='Mentoria em JavaScript', descricao='Mentoria para as aulas de JavaScript', data=23/11/2021}]

É que fica tudo junto em uma linha só. Queria saber se tem alguma forma melhor de apresentar essa saída. Tipo um curso por linha. Algo assim.

cami-la commented 2 years ago

Oii! Tudo sim e com você?

É referente à saída dessa parte da classe Main:

System.out.println("Conteúdos Inscritos Camila:" + devCamila.getConteudosInscritos());

Quando apresenta os cursos inscritos e as mentorias a saída fica assim: Conteúdos inscritos: [Curso{titulo='Curso Java', descricao='Curso voltado para ensinamentos em Java', cargaHoraria=8}, Curso{titulo='Curso JavaScript', descricao='Curso voltado para ensinamentos em JavaScript', cargaHoraria=4}, Mentoria{titulo='Mentoria em Java', descricao='Mentoria para as aulas de Java', data=22/11/2021}, Mentoria{titulo='Mentoria em JavaScript', descricao='Mentoria para as aulas de JavaScript', data=23/11/2021}]

É que fica tudo junto em uma linha só. Queria saber se tem alguma forma melhor de apresentar essa saída. Tipo um curso por linha. Algo assim.

Ah tá, entendi. A sugestão que posso te dar é criar um método chamado public void mostraConteudosInscritos(), por exemplo, na classe Dev. No corpo desse método formatar a saída, pegando ogetConteudosInscritos().stream().forEach( ... ).

Se você conseguir fazer algo coloca aqui, caso não, mais tarde faço para você.

mfmuzi commented 2 years ago

uhuuulll!!! Consegui!!! Mas em partes!! Consegui fazer a separação do Título e da Descrição, que são as propriedades comuns dentro da classe Conteudo. Mas não consegui fazer para a cargaHoraria do curso nem para a data da mentoria, que não são comuns para as duas classes. Como consigo acesso à elas?

Segue meu projeto: https://github.com/mfmuzi/Bootcamp-POO.git

cami-la commented 2 years ago

uhuuulll!!! Consegui!!! Mas em partes!! Consegui fazer a separação do Título e da Descrição, que são as propriedades comuns dentro da classe Conteudo. Mas não consegui fazer para a cargaHoraria do curso nem para a data da mentoria, que não são comuns para as duas classes. Como consigo acesso à elas?

Segue meu projeto: https://github.com/mfmuzi/Bootcamp-POO.git

Como a classe Conteudo é uma classe abstrata para que a gente usa em Bootcamp e Mentoria, modifica o método toString() de ambos, pensei em fazer o seguinte:

toString() da classe Mentoria:

@Override
public String toString() {
    return String.format("Curso: %s - %s - %d", getTitulo(), getDescricao(), getCargaHoraria());
}

toString() da classe Curso:

@Override
public String toString() {
    return String.format("Mentoria: %s - %s - %s", getTitulo(), getDescricao(), data.toString());
}

mostrarConteudo() da classe Dev:

public void mostrarConteudo() {
    this.getConteudosInscritos().stream().forEach(c -> System.out.println(c));
}
mfmuzi commented 2 years ago

Ficou perfeito!!! O método toString() me permite sempre modificar a saída dos atributos da classe? Fiz assim: Classe Curso: @Override public String toString() { return String.format("Curso: %s \nDescrição: %s \nDuração: %d horas\n", getTitulo(), getDescricao(), getCargaHoraria()); }

Classe Mentoria: @Override public String toString() { return String.format("Mentoria: %s\nDescrição: %s\nData: %s\n", getTitulo(), getDescricao(), data.toString()); }

Classe Dev: public void mostrarConteudosInscritos() { this.getConteudosInscritos().stream().forEach(inscritos -> System.out.println(inscritos)); }

public void mostrarConteudosConcluidos(){
    this.getConteudosConcluidos().stream().forEach(concluidos -> System.out.println(concluidos));
}
cami-la commented 2 years ago

Ficou perfeito!!! O método toString() me permite sempre modificar a saída dos atributos da classe? Fiz assim: Classe Curso: @OverRide public String toString() { return String.format("Curso: %s \nDescrição: %s \nDuração: %d horas\n", getTitulo(), getDescricao(), getCargaHoraria()); }

Classe Mentoria: @OverRide public String toString() { return String.format("Mentoria: %s\nDescrição: %s\nData: %s\n", getTitulo(), getDescricao(), data.toString()); }

Classe Dev: public void mostrarConteudosInscritos() { this.getConteudosInscritos().stream().forEach(inscritos -> System.out.println(inscritos)); }

public void mostrarConteudosConcluidos(){
    this.getConteudosConcluidos().stream().forEach(concluidos -> System.out.println(concluidos));
}

Isso, o toString() é um método que imprime as propriedades do objeto. Faz um teste, comenta o toString() e tenta rodar a classe Main de novo. Vai mostrar o endereço de memória do objeto. Esse método toString() é da classe Object, por tanto, todos os objetos criados têm esse método por default. Aí a gente pode sobreescrever como fizemos. (:

No nosso código em questão, como temos um Set de Conteúdo, não temos como acessar diretamente os atributos de Mentoria, Cursos ou de outra classe que eventualmente fosse filha de Conteudo.

Enfim, fico feliz em ter ajudado. E estou à disposição.

mfmuzi commented 2 years ago

Camila, muuuuuito obrigada pela ajuda e pela explicação!!! Adoro suas aulas na DIO!!! O modo como você explica e apresenta os exemplos faz toda a diferença! Uma inspiração!!

cami-la commented 2 years ago

Camila, muuuuuito obrigada pela ajuda e pela explicação!!! Adoro suas aulas na DIO!!! O modo como você explica e apresenta os exemplos faz toda a diferença! Uma inspiração!!

Obrigada!!! Estou estudando ainda mais para evoluir e ajudar mais pessoas a evoluirem comigo! <3