Skip to content

andreymuch/OOP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Структура проекта

Проект содержит 7 лабораторных работ по объектно-ориентированному программированию на C++.
Каждая лабораторная работа демонстрирует различные концепции ООП и паттерны проектирования.


🧩 Детальный анализ лабораторных работ

Lab 1: Вычисление объема коробки

Простая программа для расчета объема параллелепипеда.
Файлы: box_capacity.h:1-5, main.cpp:1-9

Тестирование:
Использует Google Test с тестами для положительных, нулевых, отрицательных значений и чисел с плавающей точкой.
Файл: test_main.cpp:1-26


Lab 2: Класс Money

Реализация класса для работы с денежными суммами, хранящими данные в массиве unsigned char.

Основные возможности:

  • Конструкторы копирования и перемещения
  • Арифметические операции (сложение, вычитание)
  • Операции сравнения
  • Оператор присваивания удален, используются методы assign() и moveAssign()

Файлы:
Money.h:8-37, main.cpp:1-24

Тестирование:
Покрывает конструкторы, арифметические операции, сравнения и операторы присваивания.
Файл: test_main.cpp:5-75


Lab 3: Иерархия геометрических фигур

Реализация абстрактного класса Figure и его наследников (Trapezoid, Rhombus, Pentagon).

Базовый класс: Figure.h:1-17

Функциональность:

  • Вычисление центра фигуры
  • Вычисление площади (через operator double())
  • Ввод/вывод фигур
  • Работа с массивом фигур через класс Array

Файл: main.cpp:10-43

Тестирование:
Тестирует конструкторы копирования/перемещения, операторы присваивания и операции с массивом.
Файл: test_main.cpp:9-109


Lab 4: Шаблонная версия геометрических фигур

Переработанная версия Lab 3 с использованием шаблонов для обобщения типов координат.

Базовый шаблонный класс: Figure.h:1-31
Использование: main.cpp:10-54

Тестирование:
Аналогично Lab 3, но с шаблонными типами.
Файл: test_main.cpp:9-109


Lab 5: Кастомный аллокатор памяти и стек

Реализация собственного менеджера памяти и структуры данных Stack с использованием PMR (Polymorphic Memory Resources).

Файлы:

  • Кастомный аллокатор: custom_memory_resource.h:9-56
  • Stack с итераторами: stack.h:6-89
  • Пример использования: main.cpp:11-40

Тестирование:
Покрывает базовые операции стека, работу с сложными типами, поведение пустого стека и итераторы.
Файл: test_main.cpp:14-80


Lab 6: Паттерн Visitor для NPC

Реализация игровой системы с NPC (Orc, Bear, Squirrel) с использованием паттерна Visitor для боевой системы.

Базовый класс: NPC.h:1-26

Основная функциональность:

  • Создание NPC через фабрику (NPCFactory)
  • Боевая система через BattleVisitor
  • Сохранение/загрузка через FileManager
  • Логирование в консоль и файл

Использование: main.cpp:17-107

Тестирование:
Тестирует фабрику NPC, боевую систему и сохранение/загрузку.
Файл: test_main.cpp:6-43


Lab 7: Многопоточная версия NPC

Расширение Lab 6 с добавлением многопоточности для одновременного перемещения NPC и ведения боев.

Основные функции:

  • Многопоточная функция: func.h:122-194
  • Функция перемещения NPC: func.h:43-71
  • Визуализация карты: func.h:19-41

Использование: main.cpp:8-13

Тестирование:
Тестирует создание 50 NPC, проверку позиций и многопоточные бои.
Файл: test_main.cpp:7-62


⚙️ Технологический стек

  • Язык программирования: C++ (современные стандарты: auto, unique_ptr, shared_ptr, move-семантика)
  • Система сборки: CMake (компиляция через CMake Tools в VSCode)
  • Фреймворк тестирования: Google Test

Паттерны и технологии:

  • Шаблоны (templates)
  • Полиморфизм и виртуальные функции
  • RAII и умные указатели
  • PMR (Polymorphic Memory Resources)
  • Паттерн Visitor
  • Паттерн Factory
  • Многопоточность (std::thread, std::mutex, std::condition_variable)

🧪 Тестирование

Каждая лабораторная работа (кроме Lab 6, где тесты находятся в отдельной папке test/) содержит файл test_main.cpp в корне директории лабораторной.
Все тесты используют Google Test и покрывают:

  • Конструкторы (обычные, копирования, перемещения)
  • Операторы присваивания
  • Основную функциональность классов
  • Граничные случаи

📂 Notes

Архитектура проекта:

  • Проект демонстрирует прогрессивное изучение концепций ООП — от простых функций до сложных многопоточных систем.
  • Отсутствие папки .vscode подтверждено — все настройки VSCode хранились локально.
  • Компиляция выполнялась через CMake Tools в VSCode (наличие папки CMakeFiles/).
  • Структура каждой лабораторной стандартизирована:
    • src/ — исходный код
    • test_main.cpp — тесты
  • В Lab 6 тесты вынесены в отдельную папку test/.

Эволюция кода:

  • Lab 1–2: Базовые концепции и работа с классами
  • Lab 3–4: Полиморфизм и шаблоны
  • Lab 5: Управление памятью и PMR
  • Lab 6–7: Паттерны проектирования и многопоточность

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published