Olá, Eduardo. Como vai?
Parabéns por mais essa entrega! É muito bacana acompanhar sua evolução nos conceitos de Orientação a Objetos. Neste exercício de controle de tarefas, você aplicou um conceito fundamental chamado Encapsulamento de Coleções.
Gostaria de destacar os pontos mais fortes da sua implementação:
- Proteção da Lista: Ao declarar a
List<string> tarefas como private, você impede que códigos externos removam tarefas ou limpem a lista sem passar pelas regras da sua classe. Isso é essencial para manter a consistência dos dados. - Validação de Entrada: O uso de
string.IsNullOrWhiteSpace(tarefa) é uma escolha excelente. Ela é mais completa que uma verificação simples de string vazia, pois também bloqueia entradas que contenham apenas espaços em branco. - Propriedade Somente Leitura: Ao expor o
TotalTarefas apenas com um get (usando a sintaxe de expressão =>), você fornece uma informação útil ao usuário da classe sem dar a ele o poder de alterar esse contador manualmente.
Para complementar seu aprendizado, deixo uma observação importante sobre o encapsulamento de listas:
Atualmente, sua classe está muito segura. No entanto, se um dia você precisar permitir que alguém "veja" a lista de tarefas sem poder modificá-la diretamente, uma boa prática em C# é retornar a lista como um tipo ReadOnly:
// Exemplo de como permitir leitura segura da lista
public IReadOnlyList<string> Tarefas => tarefas.AsReadOnly();
Isso garante que, mesmo que alguém acesse a propriedade Tarefas, não conseguirá usar o método .Add() ou .Clear() nela, mantendo o controle total dentro da classe Projeto.
Você está demonstrando uma compreensão muito sólida sobre como projetar classes que são responsáveis por si mesmas. Continue com esse excelente padrão de estudo!
Espero que possa ter lhe ajudado!