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!

3
respostas

Estou fazendo esse curso criando algo um pouco diferente dos desafios. Focando tudo para livros.

// Aqui está a classe usada, com o método em que essa será lida e as propriedades.

class Livro
{
    public string Titulo { get; set; }
    public string Autore { get; set; }
    public bool Disponivel { get; set; }
    public string Genero { get; set; }
    public int Paginas { get; set; }
    public string Sinopse { get; set; }
    public string DescricaoResumida =>
        $"{Titulo} - {Autore} ({Genero})";


    public void ExibirFichaTecnica()
    {
        Console.WriteLine($"{DescricaoResumida}");
        Console.WriteLine($"Páginas: {Paginas}");
        Console.WriteLine($"Sinopse: {Sinopse}");
        if (Disponivel)
        {
            Console.WriteLine("Disponível para Empréstimo");
        }
        else
        {
            Console.WriteLine("Não está disponível para empréstimo");
        }
    }
}

// E aqui estão os objetos com as informações

Livro livro1 = new Livro ();
livro1.Titulo = "Os demônios";
livro1.Autore = "Joe Abercrombie";
livro1.Paginas = 616;
livro1.Genero = "Fantasia Grimdark";
livro1.Sinopse = "A Europa está à beira do abismo. A peste e a fome assolam a terra, criaturas sobrenaturais espreitam em cada sombra, príncipes gananciosos não dão a mínima para nada além das próprias ambições. E os elfos estão voltando, prontos para devorar quem se puser em seu caminho. Isso é certo.\r\n\r\nÉ nesse cenário que um desafortunado sacerdote deve se juntar a uma congregação de assassinos impenitentes, de praticantes das Artes das Trevas e de monstros condenados. Tudo em prol de uma causa maior: proteger uma ladra enquanto se dirigem a Troia, colocá-la no trono imperial e unir a Santa Igreja contra o apocalipse que se avulta pelo continente.\r\n\r\nA vocação sagrada por vezes requer atos profanos. Quando se está passando pelo inferno, o melhor então é que os demônios estejam ao seu lado.";
livro1.Disponivel = true;
livro1.ExibirFichaTecnica();


Livro livro2 = new Livro();
livro2.Titulo = "Porém Bruxa";
livro2.Autore = "Carol Chiovatto";
livro2.Paginas = 320;
livro2.Genero = "Fantasia Urbana";
livro2.Sinopse = "Ísis Rossetti é uma bruxa. Como monitora responsável por atividades sobrenaturais na cidade de São Paulo, ela sabe que não pode intervir em questões humanas. Porém, no cotidiano urbano, as pessoas estão sempre em perigo e é impossível não tentar ajudar.\r\n\r\nQuando Ísis recebe a missão de uma divindade, em meio a casos policiais estranhamente similares e investigações extraoficiais, ela precisará revisitar traumas do passado para proteger os comuns e enfrentar o temido Corregedor.";
livro2.Disponivel = false;
livro2.ExibirFichaTecnica();
3 respostas

Olá, Rafaela, como vai?

Gostei da forma como você adaptou o projeto para um contexto de livros. Esse tipo de personalização é uma ótima maneira de praticar os conceitos de orientação a objetos, porque faz com que as classes tenham mais significado para quem está desenvolvendo. A estrutura da classe está bem organizada, utilizando propriedades, um método para exibição.

Pensando na evolução desse projeto, quais outras classes você imagina adicionar, como Usuário, Empréstimo ou Biblioteca, para representar melhor um sistema completo?

Conte com o fórum sempre que quiser compartilhar a evolução do projeto ou tirar dúvidas.

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

Eu acabei terminando o projeto como um sistema que faça se o livro de uma saga tem tradução para português ou não.

Autor robertJacksonBennett = new Autor("Robert Jackson Bennett");

Saga shadowoftheLevithan = new Saga("Shadow of the Leviathan");

Livro livro1 = new Livro(robertJacksonBennett, "O Cálice Contaminado")
{
    Paginas = 448,
    Genero = "Fantasia/Ficção Científica LGBTQ+",
    Traducao = true,
    Sinopse = "Em uma opulenta mansão de Daretana, um oficial imperial de alto escalão morre de repente após uma planta enorme florescer de seu corpo. Completamente fora do comum, todos os indícios do caso apontam para um assassinato, até então sem pista alguma. Agora, a população local corre um grande risco ― mesmo ali, às margens do império, onde existem preocupações maiores por causa dos temíveis leviatãs que invadem as terras de tempos em tempos.\r\n\r\nSó uma detetive de carreira respeitável poderia resolver o caso. Entram em cena Ana Dolabra, de mente afiada e atitudes excêntricas, capaz de solucionar os crimes mais diversos sem nem mesmo sair de casa, e seu novo assistente Dinios Kol, dono de uma habilidade de memorização muito conveniente para uma investigação. No entanto, ambos guardam os próprios enigmas à medida que desvendam uma rede que põe em xeque o próprio Império, caso a misteriosa planta não seja contida.",
};


Livro livro2 = new Livro(robertJacksonBennett, "A Drop of Corruption")
{
    Genero = "Fantasia/Ficção Científica LGBTQ+",
    Traducao = false,
};

Livro livro3 = new Livro(robertJacksonBennett, "A Trade of Blood")
{
    Genero = "Fantasia/Ficção Científica LGBTQ+",
    Traducao = false,
};


shadowoftheLevithan.AdicionarLivro(livro1);
shadowoftheLevithan.AdicionarLivro(livro2);
shadowoftheLevithan.AdicionarLivro(livro3);
robertJacksonBennett.adicionarSaga(shadowoftheLevithan);


robertJacksonBennett.ExibirAutor();
shadowoftheLevithan.ExibirSaga();

E aqui estão as classes. Começando por uma chamada livro, onde controla as informações dos livros de acordo com o sistema.

class Livro
{
    public Livro(Autor autor, string titulo)
    {
        Autor = autor;
        Titulo = titulo;
    }
    public string Titulo { get; }
    public Autor Autor { get; set; }
    public bool Traducao { get; set; }
    public string Genero { get; set;  }
    public int Paginas { get; set; }
    public string Sinopse { get; set; }
    public string DescricaoResumida =>
        $"{Titulo} - {Autor.Nome} ({Genero})";


    public void ExibirFichaTecnica()
    {
        Console.WriteLine($"{DescricaoResumida}");
        if (Paginas != 0)
        {
            Console.WriteLine($"Páginas: {Paginas}");
        }
        else
            Console.WriteLine($"Páginas: Informação Indisponível");

        if (Sinopse != null)
        {
            Console.WriteLine($"Sinopse: {Sinopse}");
        }
        else
            Console.WriteLine($"Sinopse: Informação Indisponível");
        if (Traducao)
        {
            Console.WriteLine("\nPossui tradução para o português");
        }
        else
        {
            Console.WriteLine("\nAinda não possui tradução para o português");
        }
    }
}

Outra chamada Saga onde você pode por mais de uma saga diferente:

class Saga
{
    private List<Livro> livros = new List<Livro>();

    public Saga(string nome)
    {
        Nome = nome;
    }

    public string Nome { get; }
    public int LivrosPertencentes => livros.Count;
    public void AdicionarLivro(Livro livro)
    {
        livros.Add(livro);
    }

    public void ExibirSaga()
    {
        Console.WriteLine($"Saga: {Nome}");
        Console.WriteLine($"Livros Pertencentes: {LivrosPertencentes} ");
        foreach (var livro in livros)
        {
            livro.ExibirFichaTecnica();
            Console.WriteLine();
        }
    }
}

e outra chamada Autor, em que, com ela dá para por livros de sagas diferentes para o mesmo autor:

class Autor
{
    private List<Saga> sagas = new List<Saga>();

    public Autor(string nome)
    {
        Nome = nome;
    }


    public string Nome { get; }
    public void adicionarSaga(Saga saga)
    {
        sagas.Add(saga);
    }

    public void ExibirAutor()
    {
        Console.WriteLine($"Autor: {Nome}");

        // Exibe todos os nomes das sagas no sistema
        if (sagas.Count == 0)
        {
            Console.WriteLine("Sagas no Sistema: Nenhuma");
        }
        else
        {
            Console.Write("Sagas no Sistema: ");
            for (int i = 0; i < sagas.Count; i++)
            {
                if (i > 0) Console.Write(", ");
                Console.Write(sagas[i].Nome);
            }
            Console.WriteLine();
        }
    }
}

Oi, Rafaela.

Você expandiu o projeto de forma interessante, modelando as entidades Autor, Saga e Livro com relacionamentos que fazem sentido para o domínio. O uso de listas para representar as associações entre autores, sagas e livros foi uma boa escolha, assim como o construtor de Livro exigindo Autor e Título, garantindo que esses dados sempre existam. Como dica de evolução, o método adicionarSaga poderia seguir o padrão de nomenclatura do C#, utilizando AdicionarSaga. Também seria interessante impedir a inclusão de sagas ou livros duplicados nas listas.

Obrigado por compartilhar a evolução do projeto, ficou uma adaptação bem criativa.

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