Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Resolução] Faça como eu fiz: plataforma de cursos

ICurso.cs


namespace E10PlataformaDeCursos.Interfaces;

internal interface ICurso
{
    void ValidarConteudo();
    void PublicarCurso();
}

Instrutor.cs


namespace E10PlataformaDeCursos.Models;

internal class Instrutor(string nome, string especialidade)
{
    public string Nome { get; } = nome;
    public string Especialidade { get; } = especialidade;

    public override string ToString()
        => $"Instrutor(a): {Nome} ({Especialidade})";
}

CursoProgramacao.cs


using E10PlataformaDeCursos.Interfaces;

namespace E10PlataformaDeCursos.Models;

internal class CursoProgramacao(string tituloCurso, Instrutor instrutor) : ICurso
{
    private readonly string _tituloCurso = tituloCurso;
    private readonly Instrutor _instrutor = instrutor;

    public void ValidarConteudo()
        => Console.WriteLine($"Validando conteúdo do curso de programação: {_tituloCurso}");

    public void PublicarCurso()
        => Console.WriteLine($"Curso publicado com sucesso: {_tituloCurso} - {_instrutor}");

}

CursoDesign.cs


using E10PlataformaDeCursos.Interfaces;

namespace E10PlataformaDeCursos.Models;

internal class CursoDesign(string tituloCurso, Instrutor instrutor) : ICurso
{
    private readonly string _tituloCurso = tituloCurso;
    private readonly Instrutor _instrutor = instrutor;

    public void ValidarConteudo()
        => Console.WriteLine($"Validando conteúdo do curso de design: {_tituloCurso}");

    public void PublicarCurso()
        => Console.WriteLine($"Curso publicado com sucesso: {_tituloCurso} - {_instrutor}");
}

Program.cs


using E10PlataformaDeCursos.Interfaces;
using E10PlataformaDeCursos.Models;

Instrutor instrutor1 = new Instrutor("Carla", "Back-end");
ICurso curso1 = new CursoProgramacao("C# com POO", instrutor1);
 
Instrutor instrutor2 = new Instrutor("Felipe", "UI/UX");
ICurso curso2 = new CursoDesign("Design de Interfaces", instrutor2);
 
curso1.ValidarConteudo();
curso1.PublicarCurso();
 
curso2.ValidarConteudo();
curso2.PublicarCurso();
2 respostas

Olá, Gerson! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de interfaces para padronizar comportamentos, utilizou muito bem o construtor primário para simplificar a criação das classes e ainda compreendeu a importância do polimorfismo para trabalhar com diferentes tipos de cursos de forma uniforme.

Uma dica interessante para o futuro é aplicar herança ou composição para compartilhar lógica comum entre diferentes cursos. Assim:

internal abstract class CursoBase(string tituloCurso, Instrutor instrutor) : ICurso
{
    protected readonly string _tituloCurso = tituloCurso;
    protected readonly Instrutor _instrutor = instrutor;

    public abstract void ValidarConteudo();

    public void PublicarCurso()
        => Console.WriteLine($"Curso publicado com sucesso: {_tituloCurso} - {_instrutor}");
}

Isso faz com que a lógica de publicação seja centralizada, evitando repetição de código nas classes derivadas.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!
solução!

Muito obrigado Daniel.
Sim, eu tinha pensado nisso, mas para não fugir do que o execício pedia, implementei a interface nas classes filhas.