Реалізуйте консольний застосунок, використовуючи патерн Спостерігач, який:
- Друкує “hello world” (або будь-який інший текст) в консолі.
- і спостерігає за рухом миші: Коли курсор заходить в область консольного вікна, колір тексту в консолі змінюється, а поточний час записується в лог файл з тегом «Enter». Коли курсор полишає область консольного вікна, колір тексту в консолі змінюється на оригінальний і поточний час записується у лог з тегом “Leave”. Ви можете захардкодити шлях до лог файлу або розмістити його в той же директорії що й exe файл.
Всі завдання мають задовольняти таким вимогам:
- Використовуйте розумні вказівники для управління пам’яттю. Можете використовувати самописні гварди (guards) або рішення з stl/boost для інших видів ресурсів.
- Використовуйте контейнери з stl: vector, map, list і т.д., за потреби.
- Використовуйте винятки (exceptions) для обробки помилок. Забезпечте посилену (strong) гарантію безпеки і не забудьте про best practices.
- Продумайте архітектуру застосунку: інтерфейси, відповідальність класів (не забудьте про принцип єдиної відповідальності). Оскільки ми обговорювали ООП і патерни проектування, архітектура є важливою частиною домашньої роботи. Ви маєте показати наскільки Ви засвоїли як працюють патерни і ООП.
- Розподіліть класи по файлах. Це також важлива частина декомпозиції. Можна розмістити декілька класів в один файл, якщо це відповідає логіці застосунку, але не мішайте усе в main.cpp.