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

[Projeto] Desafio Pet Shop

namespace PetShop;

internal class Pet
{
public string Nome { get; set; }
public DateOnly DataNascimento { get; set; }
public string Raça { get; set; }

public Dono Dono { get; set; }

public Pet(string nome, DateOnly dataNascimento, string raça, Dono dono)
{
    Nome = nome;
    DataNascimento = dataNascimento;
    Raça = raça;
    Dono = dono;
}

public void ExibirInformacoes()
{
    Console.WriteLine($"Nome: {Nome}");
    Console.WriteLine($"Data de Nascimento: {DataNascimento}");
    Console.WriteLine($"Raça: {Raça}  \nDono: {Dono.Nome}");
}

}

namespace PetShop;

internal class Dono : Identificacao
{
List Pets { get; set; } = new List();
public Dono(string nome, int cpf, DateOnly dataNascimento)
{
Nome = nome;
Cpf = cpf;
DataNascimento = dataNascimento;
Pets = new List();

}

public string Nome { get; set; }
public int Cpf { get; set; }
public DateOnly DataNascimento { get; set; }

public static void ExibirInformacoes(Dono dono)
{
    Console.WriteLine($"Nome: {dono.Nome} CPF: {dono.Cpf} Data de Nascimento: {dono.DataNascimento}");
}

}

namespace PetShop;

internal class Consulta
{
public DateTime DataConsulta { get; set; }
public decimal ValorConsulta { get; set; }

public Pet Pet { get; set; }
public Medico Medico { get; set; }
public Dono Dono { get; set; }

public Consulta(Pet pet, Medico medico, Dono dono, DateTime dataConsulta, decimal valorConsulta)
{
    Pet = pet;
    Medico = medico;
    Dono = dono;
    DataConsulta = dataConsulta;
    ValorConsulta = valorConsulta;
}

public static void ExibirInformacoes(Consulta consulta)
{
    Console.WriteLine($"Data da Consulta: {consulta.DataConsulta}");
    Console.WriteLine($"Valor da Consulta: {consulta.ValorConsulta}");
    Console.WriteLine($"Pet: {consulta.Pet.Nome}");
    Console.WriteLine($"Veterinário: {consulta.Medico.Nome}");
    Console.WriteLine($"Faturar ao Sr. {consulta.Dono.Nome}");
}

}

namespace PetShop;

internal class Medico : Identificacao
{
public Medico(string nome, int cpf, DateOnly dataNascimento)
{
Nome = nome;
Cpf = cpf;
DataNascimento = dataNascimento;
}

public string Nome { get; set; }
public int Cpf { get; set; }
public DateOnly DataNascimento { get; set; }

public static void ExibirInformacoes(Medico medico)
{
    Console.WriteLine($"Nome: {medico.Nome} CPF: {medico.Cpf} Data de Nascimento: {medico.DataNascimento}");
}

}

namespace PetShop;

internal interface Identificacao
{
public string Nome { get; set; }
public int Cpf { get; set; }
public DateOnly DataNascimento { get; set; }
}

program.cs

using PetShop;

Dono dono1 = new Dono("João", 123456789, new DateOnly(1990, 5, 15));
Pet pet1 = new Pet("Rex", new DateOnly(2020, 3, 10), "Labrador", dono1);
pet1.ExibirInformacoes();

Consulta consulta = new (pet1, new Medico("Dr. Silva", 987654321, new DateOnly(1980, 8, 20)), dono1, DateTime.Now, 150.00m);
Consulta.ExibirInformacoes(consulta);

1 resposta

Olá, Alysson! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou o namespace para organizar classes com C#, utilizou muito bem o construtor para inicializar objetos e ainda compreendeu a importância da interface para padronizar propriedades comuns entre diferentes entidades.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Tipagem genérica: ao declarar listas, usar List<Pet> em vez de List para maior segurança e clareza.
  • Relacionamentos: implementar métodos para adicionar pets ao dono, fortalecendo a ligação entre objetos.
  • Encapsulamento: restringir acesso direto às propriedades quando necessário, aplicando modificadores de acesso.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: você prefere continuar praticando com exemplos de modelagem orientada a objetos para consolidar fundamentos ou acha mais interessante avançar para padrões de projeto aplicados em sistemas maiores, como o PetShop?

Abraço e bons estudos!

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