# Projeto 2: Sistema de Gestão de Tarefas

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

  1. Quais são os atributos da classe Tarefa e o que representam?
  2. Como se podem remover tarefas de uma lista na classe GestaoDeTarefas?
  3. Explique como procurar tarefas específicas na lista. Que método usaria?
  4. Por que ordenar tarefas por data pode ser útil na gestão de tarefas? Como o implementa na classe GestaoDeTarefas?
  5. Implemente um método adicional na classe GestaoDeTarefas que mude o estado de uma tarefa de "pendente" para "concluída". Como o faria?
<< Encapsulamento, Herança e... Índice