A classe Artista, é bastante parecida com a classe Banda.
Aqui vai minha solução:
Na classe Artista
class Artista
{
public Artista(string nome, string biografia)
{
Nome = nome;
Biografia = biografia;
}
public string Nome { get; }
public string Biografia { get; }
private List<Album> Albuns = new List<Album>();
public void AdicionarAlbum(Album album)
{
Albuns.Add(album);
}
public void ExibirDiscografia()
{
Console.WriteLine($"Discografia do artista {Nome}");
foreach (Album album in Albuns)
{
Console.WriteLine($"Álbum: {album.Nome} ({album.DuracaoTotal})");
}
}
}
Na classe Musica
class Musica
{
public Musica(Artista artista, string nome, Genero genero)
{
Artista = artista;
Nome = nome;
Genero = genero;
}
public Musica(Banda artistabanda, string nome, Genero genero)
{
ArtistaBanda = artistabanda;
Nome = nome;
Genero = genero;
}
public string Nome { get; }
public Banda? ArtistaBanda { get; }
public Artista? Artista { get; }
public int Duracao { get; set; }
public bool Disponivel { get; set; }
public string DescricaoResumida =>
$"A música {Nome} pertence ao(a) artista/banda: {Artista}";
public Genero Genero { get; }
public void ExibirFichaTecnica()
{
if(Artista != null)
{
Console.WriteLine($"Nome: {Nome}");
Console.WriteLine($"Artista: {Artista.Nome}");
Console.WriteLine($"Duração: {Duracao}");
Console.WriteLine($"Gênero: {Genero.Nome}");
}
else
{
Console.WriteLine($"Nome: {Nome}");
Console.WriteLine($"Artista: {ArtistaBanda.Nome}");
Console.WriteLine($"Duração: {Duracao}");
Console.WriteLine($"Gênero: {Genero.Nome}");
}
if (Disponivel)
{
Console.WriteLine("A música está disponível em seu plano.");
}
else
{
Console.WriteLine("Adquira o plano Plus+");
}
}
}
No Program.cs
//// Generos
#region
Genero pop = new Genero("pop");
Genero rock = new Genero("rock");
#endregion
//// Artista
#region
Artista billieEilish = new Artista("Billie Eilish", "Billie Eilish Pirate Baird O’Connell é uma jovem estrela pop que compõe e canta.");
Album albumBillieEilish = new Album("When We All Fall Asleep Where Do We Go?");
Musica musica1billieEilish = new Musica(billieEilish, "bury a friend", pop)
{
Duracao = 193,
Disponivel = true,
};
Musica musica2billieEilish = new Musica(billieEilish, "when the party's over", pop)
{
Duracao = 196,
Disponivel = false,
};
albumBillieEilish.AdicionarMusica(musica1billieEilish);
albumBillieEilish.AdicionarMusica(musica2billieEilish);
billieEilish.AdicionarAlbum(albumBillieEilish);
musica1billieEilish.ExibirFichaTecnica();
musica2billieEilish.ExibirFichaTecnica();
albumBillieEilish.ExibirMusicasDoAlbum();
billieEilish.ExibirDiscografia();
#endregion
//// Banda
#region
Banda linkinPark = new Banda("Linkin Park");
Album albumLinkinPark = new Album("Hybrid Theory");
Musica musica1LinkinPark = new Musica(linkinPark, "In The End", rock)
{
Duracao = 217,
Disponivel = false,
};
albumLinkinPark.AdicionarMusica(musica1LinkinPark);
linkinPark.AdicionarAlbum(albumLinkinPark);
musica1LinkinPark.ExibirFichaTecnica();
albumLinkinPark.ExibirMusicasDoAlbum();
linkinPark.ExibirDiscografia();
#endregion
Se tiverem alguma sugestão de melhoria, agradeço!