Neste capítulo, vamos criar um projeto de Sistema de Gestão de Tarefas utilizando Python, que nos permitirá aprofundar o uso de listas através da Programação Orientada a Objetos (POO). Cada tarefa será representada como um objeto de uma classe Tarefa
, e vamos introduzir uma classe de gestão que conterá e manipulará uma lista de tarefas. Este projeto ajudará a consolidar o seu entendimento de como criar e manipular listas, usando operações como adicionar, remover, procurar e ordenar objetos.
Definição das Classes
Classe Tarefa
A primeira etapa consiste em definir a classe Tarefa
. Esta classe reunirá os atributos necessários para representar uma tarefa:
class Tarefa:
def __init__(self, descricao, data_limite, estado="pendente"):
self.descricao = descricao
self.data_limite = data_limite
self.estado = estado
def __str__(self):
return f"Tarefa: {self.descricao}, Data Limite: {self.data_limite}, Estado: {self.estado}"
-
Atributos:
-
descricao
: o detalhe sobre o que a tarefa implica. -
data_limite
: a data até quando a tarefa deve ser concluída. -
estado
: o estado da tarefa (por defeito "pendente", podendo ser alterado para "concluída").
-
Classe GestaoDeTarefas
A classe GestaoDeTarefas
será responsável por gerir uma lista de objetos Tarefa
. Terá métodos para adicionar, remover, procurar, e ordenar tarefas.
-
Métodos:
-
adicionar_tarefa(tarefa)
: adiciona uma tarefa à lista. -
remover_tarefa(descricao)
: remove tarefas pela descrição. -
procurar_tarefa(descricao)
: procura e mostra tarefas pela descrição. -
ordenar_tarefas_por_data()
: ordena a lista de tarefas pela data limite. -
mostrar_tarefas()
: mostra todas as tarefas.
-
Implementação Prática
Vamos proceder à implementação do sistema de gestão de tarefas.
Teste de funcionalidades
Criar Tarefas e Gerir a Lista
Implemente um programa simples onde irá instanciar objetos da classe Tarefa
e gerir uma lista de tarefas através de GestaoDeTarefas
.
# Criar novas tarefas
tarefa1 = Tarefa("Estudar para o teste", "2023-12-01")
tarefa2 = Tarefa("Comprar um presente", "2023-11-15")
# Adicionar tarefas à lista
________.adicionar_tarefa(tarefa1)
________.adicionar_tarefa(tarefa2)
# Mostrar todas as tarefas
print("Tarefas Iniciais:")
________.mostrar_tarefas()
# Procurar tarefas pela descrição
print("\nProcurar Tarefa 'Estudar para o teste':")
resultado = ________.procurar_tarefa("Estudar para o teste")
for tarefa in resultado:
print(tarefa)
# Ordenar tarefas por data
________.ordenar_tarefas_por_data()
print("\nTarefas Ordenadas por Data:")
________.mostrar_tarefas()
# Remover uma tarefa
________.remover_tarefa("Comprar um presente")
print("\nTarefas Após Remover:")
________.mostrar_tarefas()
Implementação
=== Gestão de Tarefas ===
1. Adicionar Tarefa
2. Mostrar Todas as Tarefas
3. Remover Tarefa
4. Procurar Tarefa
5. Marcar Tarefa como Concluída
6. Ordenar Tarefas por Data Limite
7. Listar Tarefas Pendentes
8. Sair
Escolha uma opção: 1
Insira a descrição da tarefa: Preparar relatório
Insira a data limite (dd-mm-aaaa): 12-10-2024
Tarefa adicionada com sucesso!
Escolha uma opção: 2
1. Preparar relatório (Data limite: 12-10-2024, Estado: Pendente)
Escolha uma opção: 5
Insira a descrição da tarefa a marcar como concluída: Preparar relatório
Tarefa 'Preparar relatório' foi marcada como concluída.
Escolha uma opção: 2
1. Preparar relatório (Data limite: 12-10-2024, Estado: Concluída)
Exemplos do Mundo Real
Imagine que é o responsável de um clube de programação na sua escola e que está a coordenar vários eventos e tarefas. Pode usar este sistema de gestão de tarefas para manter facilmente o registo das responsabilidades. Por exemplo, planeie eventos, defina datas limite para inscrições, e mantenha o controlo das tarefas concluídas e pendentes.
Resumo do Capítulo
Neste capítulo, desenvolvemos um sistema de gestão de tarefas que serviu para reforçar conhecimentos sobre listas, manipulação de objetos e POO em Python. Explorámos como criar e implementar classes para representar tarefas e gerir listas de tarefas através de operações críticas como adicionar, remover, procurar e ordenar elementos numa lista.
Questionário
- Quais são os atributos da classe
Tarefa
e o que representam? - Como se podem remover tarefas de uma lista na classe
GestaoDeTarefas
? - Explique como procurar tarefas específicas na lista. Que método usaria?
- Por que ordenar tarefas por data pode ser útil na gestão de tarefas? Como o implementa na classe
GestaoDeTarefas
? - Implemente um método adicional na classe
GestaoDeTarefas
que mude o estado de uma tarefa de "pendente" para "concluída". Como o faria?