1
resposta

Faça como eu fiz: modelando um produto digital com informações técnicas

Resolução:
InformacaoTecnica.cs

class InformacaoTecnica
{
    public InformacaoTecnica(int tamanhoArquivo, string sistemaCompativel)
    {
        TamanhoArquivo = tamanhoArquivo;
        SistemaCompativel = sistemaCompativel;
    }

    public int TamanhoArquivo { get; }
    public string SistemaCompativel { get; }

    public void ExibirInformacaoTecnica()
    {
        Console.WriteLine($"Tamanho: {TamanhoArquivo}MB");
        Console.WriteLine($"Compatível em: {SistemaCompativel}");
    }

}

ProdutoDigital.cs

class ProdutoDigital
{
    private double preco;
    public string Nome { get; set; }
    public double Preco
    {
        get => preco;
        set
        {
            if (value >= 0)
            {
                preco = value;
            }
            else
            {
                preco = 0;
            }
        }
    }
   
    private InformacaoTecnica InfoTecnica;

    public ProdutoDigital(string nome, double preco, InformacaoTecnica infoTecnica)
    {
        Nome = nome;
        Preco = preco;
        InfoTecnica = infoTecnica;
    }

    public void ExibirDetalhes ()
    {
        Console.WriteLine($"Produto: {Nome}");
        Console.WriteLine($"Preço: R$ {Preco}");
        InfoTecnica.ExibirInformacaoTecnica();
    }
}

program.cs

InformacaoTecnica infoTecnica1 = new InformacaoTecnica(1500, "Windows/Mac");
var produtoDigital1 = new ProdutoDigital("Photoshop", 89.99, infoTecnica1);

produtoDigital1.ExibirDetalhes();
1 resposta

Olá, Christopher! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Você estruturou bem as classes InformacaoTecnica e ProdutoDigital, separando as informações técnicas do produto e usando o construtor para garantir que os dados sejam preenchidos no momento da criação do objeto. Também foi uma boa escolha validar o Preco, evitando valores negativos.

Uma dica interessante para o futuro é usar private readonly quando um atributo não precisar mudar depois de receber valor no construtor:

private readonly InformacaoTecnica infoTecnica;

public ProdutoDigital(string nome, double preco, InformacaoTecnica infoTecnica)
{
    Nome = nome;
    Preco = preco;
    this.infoTecnica = infoTecnica;
}

Esse código indica que infoTecnica será definida na criação do produto e não será trocada depois, deixando a classe mais segura e organizada.

Alura

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

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