Lab1
Loading...
Searching...
No Matches
Lab 1: Refactoring & Object-Oriented Design (Notes Manager)

Structured Notes Manager — це застосунок на C++ для керування нотатками з підтримкою динамічних схем даних.


Звіти про виконання (Reports)

  • Лабораторна робота №1a (Рефакторинг): Читати звіт
  • Порівняння змін (GitHub Compare): Дивитися зміни між версіями
  • Лабораторна робота №1b (Моделювання з використанням UML): Моделювання сервісу Google Classroom. Проаналізовано структуру даних, ролі користувачів та процеси взаємодії студента з викладачем.

    Ідея: Наразі в Classroom процес "Повернути на доопрацювання" є хаотичним: викладач повертає роботу, але студент не має нового чіткого дедлайну, а викладач не бачить зручного списку саме тих робіт, що "в процесі виправлення". Функціональність:

  1. Auto-Deadline: При натисканні "Return for Revision" викладач встановлює часове вікно (наприклад, 48 годин).
  2. Revision Tracking: Робота отримує унікальний стан UNDER_REVISION.
  3. Iteration Limit: Можливість обмежити кількість спроб здачі (наприклад, не більше 3-х).
  • Лабораторна робота №1d (Ретроспектива інструменту): Читати звіт
  • Лабораторна робота №1e (UML як мова опису не лише для програмування): Моделювання типових сценаріїв студента-програміста. Переглянути діаграми 1e
  • Глосарій: glossary.txt

Архітектура та Моделювання (UML)

Проєкт було перебудовано з монолітної структури на модульну рівневу архітектуру (Layered Architecture).

Повний набір діаграм (Class, Sequence, Activity, Component тощо) доступний тут:

Переглянути UML діаграми (Source & PNG)

Ключові впровадження:

  • Розділення на компоненти (CMake): Логіку винесено в окрему статичну бібліотеку CoreLib, що дозволило відокремити бізнес-правила від GUI.
  • Repository Pattern: Ізоляція роботи з даними через клас NoteRepository.
  • Strategy Pattern: Впровадження інтерфейсу IStorageStrategy для динамічної зміни формату серіалізації.
  • Service Layer: Виділення ExportService та StatisticsService для дотримання принципу SRP (SOLID).

Технічні особливості і бонусні впровадження

Автоматизація та CI/CD

  • GitHub Actions: Налаштовано автоматичний Pipeline для перевірки збірки та автоматичної генерації документації.
  • Doxygen: Технічна документація генерується з коду при кожному коміті. Відкрити документацію (GitHub Pages)

Аналіз продуктивності (Benchmarking)

  • Реалізовано вбудований модуль для порівняння бібліотек nlohmann/json та RapidJSON.
  • Використано фреймворк nanobench.h для отримання точних метрик у наносекундах.

Quality Assurance

  • Unit Testing: Покриття тестів для логіки CoreLib.
  • Logging: Власна система логування (папка utils), що фіксує стан системи у log.txt.

Функціональні можливості

  1. Динамічні схеми: Можливість створювати власні типи нотаток з довільними полями.
  2. Smart Search & Sort: Сортування (AZ/ZA, дата) та фільтрація в реальному часі.
  3. Експорт: Генерація PDF-документів зі складною версткою та зображеннями.
  4. Статистика: Візуалізація активності користувача за допомогою графіків QCustomPlot.
  5. UI/UX: Підтримка тем (Light/Dark), інтернаціоналізація (i18n), закріплення нотаток (Pinning).