Skip to content

strefakursowpl/Kurs-Python---programowanie-obiektowe

Repository files navigation

TaskManager - Zaawansowany System Zarządzania Zadaniami

Kompleksowa aplikacja do zarządzania zadaniami zbudowana w Pythonie z wykorzystaniem wzorców projektowych i nowoczesnego interfejsu GUI w Streamlit.

📋 Opis projektu

TaskManager to zaawansowany system zarządzania zadaniami, który demonstruje praktyczne zastosowanie programowania obiektowego, wzorców projektowych i najlepszych praktyk tworzenia aplikacji w Pythonie. Projekt został stworzony w ramach kursu programowania obiektowego.

✨ Funkcjonalności

🎯 Zarządzanie zadaniami

  • Różne typy zadań: Standard, Cykliczne, Projektowe, Spotkania
  • System priorytetów: URGENT, HIGH, MEDIUM, LOW
  • Statusy zadań: TODO, IN_PROGRESS, COMPLETED, CANCELLED
  • Elastyczne terminy: z obsługą zadań bez terminu
  • Edycja i usuwanie: pełna kontrola nad cyklem życia zadań

🔔 System powiadomień

  • Email Observer: powiadomienia e-mail o ważnych zdarzeniach
  • Logging Observer: szczegółowe logowanie wszystkich operacji
  • Smart Observer: inteligentne powiadomienia z analizą priorytetów
  • Konfigurowalność: elastyczne ustawienia powiadomień

📊 Analiza i statystyki

  • Wykresy priorytetów: wizualizacja rozkładu zadań
  • Analiza statusów: śledzenie postępów
  • Metryki wydajności: statystyki ukończonych zadań
  • Dashboard: przegląd najważniejszych informacji

🔍 Zaawansowane filtrowanie i sortowanie

  • Filtry: według statusu, priorytetu, typu zadania
  • Strategie sortowania: priorytet, data utworzenia, termin wykonania
  • Elastyczne wyszukiwanie: intuicyjny interfejs

🏗️ Architektura i wzorce projektowe

Wzorce projektowe

  • Singleton: TaskManager jako pojedyncza instancja
  • Factory: Fabryka do tworzenia różnych typów zadań
  • Observer: System powiadomień reagujący na zmiany
  • Strategy: Wymienne strategie sortowania i filtrowania

Struktura projektu

TaskManager/
├── base/                  # Klasy bazowe
├── tasks/                 # Implementacje zadań
├── managers/             # Menedżery i kolekcje
├── factories/            # Fabryki tworzące obiekty
├── observers/            # System powiadomień
├── strategies/           # Strategie sortowania/filtrowania
├── protocols/            # Interfejsy (protokoły)
├── enums/               # Definicje enumów
├── exceptions/          # Obsługa wyjątków
└── streamlit_app.py     # Interfejs GUI

🚀 Instalacja i uruchomienie

Wymagania

  • Python: 3.12+
  • System operacyjny: Windows, macOS, Linux
  • Plotly (do wykresów)
  • Inne zależności w requirements.txt

Weryfikacja wersji Python

python --version
# lub
python3 --version

Uwaga: Projekt został przetestowany z Python 3.12-3.13. Starsze wersje mogą nie być w pełni kompatybilne z używanymi funkcjami (np. typing protocols).

Tworzenie środowiska wirtualnego

Windows

# Tworzenie środowiska wirtualnego
python -m venv venv

# Aktywacja środowiska
venv\Scripts\activate

# Weryfikacja aktywacji (powinien pojawić się prefix (venv))
where python

macOS/Linux

# Tworzenie środowiska wirtualnego
python3 -m venv venv

# Aktywacja środowiska
source venv/bin/activate

# Weryfikacja aktywacji (powinien pojawić się prefix (venv))
which python

### Instalacja

```bash
# Utworzenie środowiska wirtualnego (opcjonalne)
python -m venv venv
venv\Scripts\activate  # Windows
# lub
source venv/bin/activate  # Linux/Mac

# Instalacja zależności
pip install -r requirements.txt

Uruchomienie

# Uruchomienie aplikacji GUI
streamlit run streamlit_app.py

# Uruchomienie demo konsolowego
python demo.py

💻 Użytkowanie

Interfejs GUI (Streamlit)

  1. Otwórz przeglądarkę pod adresem http://localhost:8501
  2. Korzystaj z menu bocznego do nawigacji między sekcjami:
    • 🏠 Dashboard: przegląd zadań i statystyk
    • ➕ Nowe zadanie: tworzenie nowych zadań
    • 📝 Lista zadań: zarządzanie istniejącymi zadaniami
    • 📊 Statystyki: analizy i wykresy
    • 🔔 Powiadomienia: historia powiadomień
    • ⚙️ Ustawienia: konfiguracja aplikacji

API programistyczne

from managers.task_manager import TaskManager
from factories.default_task_factory import DefaultTaskFactory
from enums.priority import Priority

# Uzyskanie instancji menedżera (Singleton)
manager = TaskManager.get_instance()

# Tworzenie zadania przez fabrykę
factory = DefaultTaskFactory()
task = factory.create_task(
    task_type="standard",
    title="Przykładowe zadanie",
    description="Opis zadania",
    priority=Priority.HIGH
)

# Dodanie zadania do menedżera
manager.add_task(task)

# Pobranie wszystkich zadań
tasks = manager.get_all_tasks()

🧪 Testowanie

# Uruchomienie testów jednostkowych
python -m pytest tests/

# Uruchomienie z pokryciem kodu
python -m pytest --cov=. tests/

📚 Dokumentacja

Główne klasy

  • TaskManager: Singleton zarządzający kolekcją zadań
  • BaseTask: Abstrakcyjna klasa bazowa dla wszystkich zadań
  • StandardTask: Podstawowy typ zadania
  • RecurringTask: Zadania cykliczne
  • TaskFactory: Fabryka abstrakcyjna do tworzenia zadań
  • BaseObserver: Interfejs dla obserwatorów

Wzorce projektowe w praktyce

Singleton

class TaskManager:
    _instance = None
    
    @classmethod
    def get_instance(cls):
        if cls._instance is None:
            cls._instance = cls()
        return cls._instance

Factory

class DefaultTaskFactory(TaskFactory):
    def create_task(self, task_type: str, **kwargs) -> BaseTask:
        if task_type == "standard":
            return StandardTask(**kwargs)
        elif task_type == "recurring":
            return RecurringTask(**kwargs)
        # ...

Observer

class EmailObserver(BaseObserver):
    def update(self, task: BaseTask, event_type: str):
        # Wysyłanie powiadomienia e-mail
        pass

Dodawanie nowych typów zadań

  1. Utwórz nową klasę dziedziczącą po BaseTask
  2. Zarejestruj ją w fabryce zadań
  3. Dodaj obsługę w interfejsie GUI

👨‍💻 Autor

Stworzony w ramach kursu programowania obiektowego w Pythonie.

Projekt TaskManager - praktyczna nauka programowania obiektowego przez tworzenie rzeczywistej aplikacji.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages