Ola!!
O código está bem legal para o nível do curso. Dá pra ver claramente que você entendeu o conceito de classes, atributos, métodos, encapsulamento e uso de listas. A separação entre Main e Tarefa está correta e o programa funciona de ponta a ponta, o que já é um ótimo sinal.
Você usou bem:
- Encapsulamento: os atributos estão
private e existem getters. - Sobrescrita do
toString(), o que é uma excelente prática para representar o objeto. ArrayList<Tarefa> com generics, evitando uso de listas cruas.- Laço
for-each, que deixa o código mais limpo. - Validação de entrada do usuário com
while(true), garantindo que o status seja válido.
Tudo isso mostra uma boa base de orientação a objetos.
Pontos que podem melhorar
Na classe Main, o método main deveria ser public static void main(String[] args). Sem o public, algumas IDEs ou ambientes podem não reconhecer corretamente o ponto de entrada da aplicação.
Ainda na Main, o código está um pouco repetitivo na criação das tarefas. Isso não é um erro, mas conforme o sistema cresce, repetir esse padrão pode virar um problema. Mais pra frente, você pode extrair isso para um método ou até usar um loop para criar várias tarefas.
Na classe Tarefa, o método preencherDados() mistura duas responsabilidades:
- lógica da entidade (o que é uma tarefa)
- entrada de dados pelo usuário (Scanner, prints)
Para fins didáticos do curso, isso é totalmente aceitável. Mas como boa prática, o ideal seria que a classe Tarefa apenas representasse a tarefa, e a leitura de dados ficasse na Main ou em uma classe específica de interação com o usuário. Isso deixa o código mais organizado e reutilizável.
Outro ponto importante: você cria um Scanner dentro do método e não o fecha. O ideal é criar um único Scanner no main e reutilizá-lo, passando os dados para a tarefa ou usando setters. Fechar o Scanner também é importante para evitar avisos e possíveis problemas.
Sobre os getters: você criou, mas não está usando nenhum ainda. Não é errado, só significa que eles estão preparados para uso futuro. Conforme o projeto evoluir, você provavelmente vai começar a usá-los.
Detalhes de estilo e boas práticas
Os nomes das variáveis estão claros, o que é ótimo. Só uma observação: em Java, o padrão é usar camelCase sem underscore, então tarefa_01 poderia ser tarefa01. Não quebra nada, mas seguir o padrão ajuda na legibilidade e em projetos maiores.
A validação do “sim” e “não” está bem feita e robusta, inclusive tratando acento. Isso é um cuidado que muita gente iniciante não tem.
Para o contexto do curso, o código está bem acima da média:
- está organizado
- funciona corretamente
- aplica conceitos de OO
- já tem preocupação com validação e apresentação
Os principais próximos passos seriam:
- separar melhor responsabilidades (entrada de dados vs modelo)
- evitar repetição de código
- começar a pensar em métodos construtores e setters no lugar de métodos que “fazem tudo”
É um ótimo exercício e mostra que você está no caminho certo.