1
resposta

[Projeto] Faça como eu fiz: plataforma de cursos


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

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

    public string Nome { get; private set; }
    public string Especialidade { get; private set; }
}

class CursoProgramacao : ICurso
{
    public CursoProgramacao(string titulo, Instrutor instrutor)
    {
        Titulo = titulo;
        Instrutor = instrutor;
    }

    public string Titulo { get; private set; }
    public Instrutor Instrutor { get; private set; }
    public void ValidarConteudo()
    {
        Console.WriteLine($"Validando conteúdo do curso de programação: {Titulo}");
    }
 
    public void PublicarCurso()
    {
        Console.WriteLine($"Curso publicado com sucesso: {Titulo} - Instrutora: {Instrutor.Nome} ({Instrutor.Especialidade})\n");
    }
}

class CursoDesign : ICurso
{
    public CursoDesign(string titulo, Instrutor instrutor)
    {
        Titulo = titulo;
        Instrutor = instrutor;
    }

    public string Titulo { get; private set; }
    public Instrutor Instrutor { get; private set; }
   public void ValidarConteudo()
    {
        Console.WriteLine($"Validando conteúdo do curso de design: {Titulo}");
    }
 
    public void PublicarCurso()
    {
        Console.WriteLine($"Curso publicado com sucesso: {Titulo} - Instrutor: {Instrutor.Nome} ({Instrutor.Especialidade})\n");
    }
}

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();
1 resposta

Olá, Eduardo! Tudo bem?

Excelente trabalho ao encerrar esse ciclo de aprendizado com uma plataforma de cursos! Você aplicou de forma muito madura a Composição e o uso de Interfaces, que são as ferramentas de ouro para criar sistemas escaláveis e fáceis de manter.

Sua implementação demonstra domínio sobre como separar a identidade de quem ensina da estrutura do curso em si:

Pontos de destaque no seu projeto:

  • Composição vs. Herança: Você utilizou corretamente a composição ao definir que um curso tem um Instrutor. Isso é perfeito porque um instrutor é um objeto independente que pode existir sem o curso e até estar vinculado a vários cursos diferentes.
  • Polimorfismo com Interfaces: Ao declarar suas variáveis como ICurso, você foca no que o objeto faz (validar e publicar) e não no que ele é especificamente. Isso permitiria, por exemplo, criar uma lista List<ICurso> e processar todos os cursos de uma vez, independentemente de serem de Programação ou Design.
  • Coesão: Cada classe tem uma responsabilidade clara. O Instrutor armazena dados de perfil, enquanto as classes de curso gerenciam o ciclo de vida do conteúdo.
  • Encapsulamento: A manutenção do private set nas propriedades garante que os dados do curso e do instrutor não sejam alterados de forma imprevista após a criação.

Dica para o Futuro:

Como suas classes CursoProgramacao e CursoDesign possuem propriedades e métodos muito parecidos, um próximo passo em um projeto real seria criar uma classe base abstrata (como CursoBase) que implementa a interface ICurso. Assim, você centralizaria as propriedades Titulo e Instrutor em um único lugar, deixando para as classes filhas apenas a lógica específica de validação de cada área.

Parabéns pela jornada incrível nesta série de exercícios! Seus 91 posts mostram uma dedicação exemplar e um progresso técnico muito consistente em C# e Orientação a Objetos.

Espero que possa ter lhe ajudado!