Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Avaliacao - POO

Program.cs

using Avaliacao;

List<Conteudo> conteudos = new List<Conteudo>
{
    new AulaGravada("POO na prática", 45),
    new MaterialComplementar("Resumo do módulo 2", 12)
};

foreach (var conteudo in conteudos)
{
    conteudo.ExibirInfo();
}

Conteudo.cs

using Avaliacao;

List<Conteudo> conteudos = new List<Conteudo>
{
    new AulaGravada("POO na prática", 45),
    new MaterialComplementar("Resumo do módulo 2", 12)
};

foreach (var conteudo in conteudos)
{
    conteudo.ExibirInfo();
}

AulaGravada.cs

namespace Avaliacao;


internal class AulaGravada : Conteudo
{
    public AulaGravada(string titulo, int duracao)
        : base(titulo)
    {
        this.Duracao = duracao;
    }

    public int Duracao { get; set; }
    public override void ExibirInfo()
    {

        Console.WriteLine($"Titulo: {Titulo}\nDuracao: {Duracao} min\n");
    }
}

MaterialComplementar.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Avaliacao;

internal class MaterialComplementar : Conteudo
{
    public MaterialComplementar(string titulo, int paginas)
        : base(titulo)
    {
        this.Paginas = paginas;
    }

    public int Paginas { get; set; }
    public override void ExibirInfo()
    {
        Console.WriteLine($"Titulo: {Titulo}\nPaginas: {Paginas} paginas\n");
    }
}
1 resposta

Olá, Cauã. Tudo certo?

Você organizou muito bem a hierarquia das classes para trabalhar o polimorfismo, utilizando a lista de Conteudo para armazenar tanto objetos do tipo AulaGravada quanto MaterialComplementar. A sobrescrita do método ExibirInfo nas subclasses está correta e apropriada para exibir as informações específicas de cada conteúdo.

Um ponto interessante para você explorar é a visibilidade das classes e como isso pode impactar seu código em projetos maiores. Note que suas classes estão definidas como internal, o que restringe o uso delas ao mesmo assembly. Se for necessário utilizar essas classes em outros projetos, seria interessante mudar para public. Além disso, observe se a classe base Conteudo está implementada com um método ExibirInfo como abstract ou virtual, para garantir que a sobrescrita funcione perfeitamente.

Como dica adicional, considere implementar mais propriedades ou métodos comuns na classe base Conteudo, por exemplo, um campo para data de criação ou um identificador, que possa ser compartilhado entre as subclasses, potencializando o reaproveitamento de código.

Você já pensou em como o polimorfismo pode ser utilizado para criar coleções que manipulam diferentes tipos de conteúdos de forma mais flexível, talvez com métodos que realizem operações genéricas dentro da plataforma de avaliação?

Parabéns pelo empenho no exercício. O fórum está à disposição para continuar ajudando no seu aprendizado.

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