1
resposta

[Projeto] Faça como eu fiz: controlando acesso

public class Paciente
{
    public Paciente(string nome, int idade)
    {
        Nome = nome;
        Idade = idade;
    }

    public string Nome { get; private set; }
    public int Idade { get; private set; }
}

internal class HistoricoMedico
{
    public HistoricoMedico(string codigoProntuario, Paciente paciente)
    {
        CodigoProntuario = codigoProntuario;
        Paciente = paciente;
    }

    public string CodigoProntuario { get; private set; }

    public Paciente Paciente { get; private set; }

    public void ExibirCodigo()
    {
        Console.WriteLine("Código do prontuário: " + CodigoProntuario);
    }
}

Paciente paciente = new Paciente("Luiz Costa", 42);
HistoricoMedico historico = new HistoricoMedico("XPT-9987", paciente);
historico.ExibirCodigo();
1 resposta

Olá, Eduardo. Como vai?

Parabéns pela implementação! O seu código é um excelente exemplo prático de como o Encapsulamento funciona no C#. Você aplicou com maestria o uso de propriedades com private set, o que é uma das formas mais seguras de proteger o estado dos seus objetos.

Gostaria de destacar alguns pontos técnicos muito positivos na sua estrutura:

  • Proteção de Dados: Ao utilizar public string Nome { get; private set; }, você permite que qualquer parte do sistema leia o nome do paciente, mas garante que ele só possa ser alterado dentro da própria classe (geralmente pelo construtor). Isso evita alterações acidentais em dados sensíveis.
  • Composição de Objetos: Sua classe HistoricoMedico recebe um objeto do tipo Paciente. Isso demonstra que você compreendeu bem como as classes podem se relacionar para formar sistemas mais complexos.
  • **Uso do Modificador internal**: Ao definir o HistoricoMedico como internal, você está limitando o acesso a essa classe apenas dentro do mesmo assembly (projeto). Isso é ótimo para organizar a visibilidade da arquitetura do seu software.

Para levar esse conceito um pouco adiante, imagine que você precise garantir que um paciente nunca tenha uma idade negativa. Com o encapsulamento, você pode evoluir sua propriedade automática para uma propriedade com lógica de validação:

private int idade;
public int Idade 
{ 
    get { return idade; }
    private set 
    { 
        if (value >= 0) idade = value; 
    } 
}

Essa é a verdadeira "mágica" da Orientação a Objetos: a classe se torna responsável por garantir que seus próprios dados sejam sempre válidos.

Continue com esse excelente padrão de organização e estudo!

Espero que possa ter lhe ajudado!