Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Resolução] Dominando a OO - Desafio 01

Adicionei uma verificação antes de adicionar um filme a lista de atuações do artista.. e também fiz uma verificação antes de adicionar um artista ao elenco.

Artista.cs

using System.Text;

namespace Alura.Filmes;

public class Artista(string nome, DateTime nascimento, List<Filme>? filmesAtuados)
{
    public Artista(string nome, DateTime nascimento) : this(nome, nascimento, null) { }

    public string Nome { get; set; } = nome;
    public int Idade
    {
        get
        {
            var hoje = DateTime.Today;
            var idade = hoje.Year - nascimento.Year;

            if (nascimento.Date > hoje.AddYears(-idade))
                idade--;

            return idade;
        }
    }

    public List<Filme> FilmesAtuados = filmesAtuados ?? [];

    public void AdicionarFilme(Filme filme)
    {
        if (filme is null)
        {
            Console.WriteLine("ERRO: Não é possível adicionar um filme nulo.");
            return;
        }

        if (FilmesAtuados.Any(f => f.Titulo.Equals(filme.Titulo, StringComparison.OrdinalIgnoreCase)))
        {
            Console.WriteLine($"ERRO - O filme '{filme.Titulo}' já existe na lista de filmes atuados de {Nome}.");
            return;
        }

        FilmesAtuados.Add(filme);

        if (!filme.Elenco.Contains(this))
            filme.AdicionarElenco(this);

        Console.WriteLine($"Filme '{filme.Titulo}' adicionado a lista de atuações do artista {Nome}!");
    }
    public void ExibirDetalhes()
    {
        StringBuilder sb = new();
        sb.AppendLine($"\nNome: {Nome}");
        sb.AppendLine($"Idade: {Idade}");
        sb.AppendLine($"Número de atuações: {FilmesAtuados.Count}");

        if (FilmesAtuados.Count > 0)
        {
            sb.AppendLine("---- Filmes ----");
            foreach (var filme in FilmesAtuados)
            {
                sb.AppendLine($"{filme.Titulo}({filme.Ano}) - Duração: {filme.Duracao}min");
            }
        }

        Console.Write(sb.ToString());
    }
}

Filme.cs

using System.Text;

namespace Alura.Filmes;

public class Filme(string titulo, int duracao, int ano)
{
    public Filme(string titulo, int duracao, int ano, List<Artista>? elenco) : this(titulo, duracao, ano)
    {
        Elenco = elenco ?? [];
    }

    public string Titulo { get; set; } = titulo;
    public int Duracao { get; set; } = duracao;
    public int Ano { get; set; } = ano;
    public List<Artista> Elenco { get; set; } = [];

    public void ExibirDetalhes()
    {
        StringBuilder sb = new();
        sb.AppendLine($"\nFilme: {Titulo}");
        sb.AppendLine($"Duração: {Duracao}");
        sb.AppendLine($"Elenco: {string.Join(", ", Elenco.Select(a => a.Nome))}");
        Console.WriteLine(sb.ToString());
    }
    public void AdicionarElenco(Artista artista)
    {
        if (Elenco.Any(a => a.Nome.Equals(artista.Nome, StringComparison.OrdinalIgnoreCase)))
        {
            Console.WriteLine($"ERRO - O Artista '{artista.Nome}' já existe na lista do elenco.");
            return;
        }
        
        Elenco.Add(artista);

        if (!artista.FilmesAtuados.Contains(this))
            artista.AdicionarFilme(this);

        Console.WriteLine($"Artista '{artista.Nome}' adicionado ao elenco de {Titulo}");
    }
}

Program.cs

Artista a1 = new("Ryan Reynolds", new(1976,10,23));
Artista a2 = new("Hugh Jackman", new(1968,10,12));
Filme f1 = new("Deadpool & Wolverine", 127, 2024);

a1.ExibirDetalhes();
f1.ExibirDetalhes();

a1.AdicionarFilme(f1);
a1.ExibirDetalhes();
f1.ExibirDetalhes();

f1.AdicionarElenco(a2);
f1.ExibirDetalhes();

Saída do console

1 resposta
solução!

Oi, Gerson! Como vai?

Agradeço por compartilhar.

Gostei da sua solução, importante como você cuidou da consistência entre Artista e Filme, evitando duplicações tanto na lista de atuações quanto no elenco.

Continue explorando esse cuidado com validações, isso fortalece muito a modelagem em OO.

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