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

Exibindo Mídias - POO

Program.cs

using Exibindo;
List<Midia> midias = new List<Midia>
{
    new Imagem("paisagem.jpg", "1920x1080"),
    new Video("filme.mp4", 120)
};

foreach (var midia in midias)
{
    midia.ExibirDetalhes();
}

Imagem.cs

namespace Exibindo;

internal class Imagem : Midia
{
    public Imagem(string nome, string resolucao)
        : base(nome)
    {
        this.Resolucao = resolucao;
    }

    public string Resolucao { get; }

    public override void ExibirDetalhes()
    {
        Console.WriteLine($"Imagem: {Nome} - Resolucao: {Resolucao}");
    }

}

Video.cs

namespace Exibindo;

internal class Video : Midia
{
    public Video(string nome, int duracao)
        : base(nome)
    {
        this.Duracao = duracao;
    }

    public int Duracao { get; }

    public override void ExibirDetalhes()
    {
        Console.WriteLine($"Vídeo: {Nome} - Duração: {Duracao}");
    }
}

Midia.cs

namespace Exibindo;

internal class Midia
{
    public Midia(string nome)
    {
        this.Nome = nome;
    }

    public string Nome { get; set; }

    public virtual void ExibirDetalhes()
    {
        Console.WriteLine($"Midia: {this.Nome}");
    }
}
1 resposta

Olá, Cauã. Tudo certo?

O código que você compartilhou para a implementação das classes está correto e está aplicando o conceito de polimorfismo de forma adequada, conforme solicitado no exercício. A sobrescrita do método ExibirDetalhes em Imagem e Video está clara, permitindo que cada classe exiba informações específicas sem que seja necessário alterar a lista de mídias no Program.cs. É muito importante notar que o uso do modificador virtual na classe base e override nas derivadas facilita esse comportamento dinâmico em tempo de execução.

Uma dica que pode enriquecer seu código é considerar tornar a classe Midia abstrata, caso ela não tenha motivo para ser instanciada diretamente. Isso reforçaria a ideia de que Midia é uma entidade conceitual usada apenas como base para outras classes. Por exemplo, alterando para abstract class Midia você impediria que objetos do tipo Midia fossem criados sem uma especialização.

Você já pensou em como poderia expandir essa hierarquia para suportar outros tipos de mídia, como áudio ou documentos, mantendo o mesmo padrão de polimorfismo? Como isso poderia influenciar na estrutura geral e na manutenção do seu código?

Parabéns pelo trabalho até aqui. Qualquer dúvida ou nova ideia, o fórum está à disposição para te apoiar.

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