Часть 1: Вспоминаем основы С++

Цель: повтор основных элементов и синтаксиса C++.

Краткое содержание:

  • Указатели и работа с динамической памятью
  • Функции / методы
  • Модификаторы видимости
  • Структуры
  • Классы и объекты
  • Конструкторы / деструкторы, листы инициализации

Часть 2: Введение в ООП

Цель: знакомство с основными принципами ООП.

Знакомство с ключевыми принципами ООП:

  1. Инкапсуляцией;
  2. Наследование
  3. Полиморфизм

Новые элементы синтаксиса:

  • Дружественные функции и классы
  • Статические члены класса
  • Перегрузка функций и операторов
  • Шаблоны

Часть 3: Применение ООП в практическом решении задач

Цель: закрепление знаний и навыков, полученных на прошлых занятиях.

Часть 4: Паттерны проектирования (3-4 занятия)

Принципы проектирования:

MVC (Model-View-Controller)

MVC разделяет приложение на три компонента: Model, View и Controller. Модель отвечает за управление данными и бизнес-логику, Вид отображает интерфейс пользователю, а Контроллер обрабатывает пользовательский ввод и взаимодействует с Моделью и Видом. Этот паттерн используется для того, чтобы отделить логику приложения от его интерфейса, повышая масштабируемость и удобство поддержки продукта в будущем.

Задача: разработать систему управления каталогом товаров.

  1. Упрощенный вариант (консольное приложение):

    • Создать консольное приложение, позволяющее пользователям управлять каталогом товаров.
    • Модель хранит данные о товарах (название, цена, количество).
    • Контроллер обрабатывает ввод пользователя.
    • Вид отображает данные в консоли.
  2. Усложненный вариант (GUI с использованием Qt):

    • Приложение с графическим интерфейсом, где пользователи могут просматривать и редактировать товары.
    • Модель хранит данные в виде списка.
    • Вид предоставляет интерфейс на основе Qt, позволяющий управлять товарами через формы и таблицы.

MVP (Model-View-Presenter)

MVP схож с MVC, но отличается тем, что вся логика управления сосредоточена в Presenter. Модель отвечает за данные и логику приложения, Вид — за отображение интерфейса, а Презентер связывает их, обеспечивая взаимодействие.

Задача: система управления заявками на ремонт.

  1. Упрощенный вариант (консольное приложение):

    • Создать консольное приложение для создания и управления заявками.
    • Модель хранит информацию о заявках.
    • Презентер обрабатывает взаимодействие между моделью и представлением.
  2. Усложненный вариант (GUI с использованием Qt):

    • Приложение с графическим интерфейсом для управления заявками.
    • Модель и Презентер обеспечивают корректное взаимодействие с пользователем.

Порождающие паттерны

Фабричный метод

Задача: создать систему для логистической компании, которая генерирует транспортные средства.

  • Абстрактный класс транспортного средства.
  • Реализация создания грузовика, самолета и корабля через фабричный метод.
  • Одиночка
  • Прототип

Структурные паттерны

Адаптер

Задача: интеграция старой платежной системы с новым API.

  • Старый интерфейс для операций с оплатами и балансом.
  • Создать адаптер, позволяющий новому API работать с устаревшей системой.
  • Компоновщик
  • Декоратор

Поведенческие паттерны

Наблюдатель

Задача: создать систему уведомлений для пользователей новостного сайта.

  • Подписчики получают уведомления о новых новостях.
  • При добавлении новости все подписчики должны быть уведомлены.
  • Стратегия
  • Состояние

Часть 5: Проверка усвоенного материала

  1. Моделирование магазина добавление и удаление товаров.
  2. Управление транспортом учет транспортных средств и пробега.
  3. Банковская система: управление счетами через текстовый интерфейс.
  4. Игра "Крестики-нолики".

Задания могут быть выполненны в обычном и усложненном варианте. Обычный вариант - консольная программа. Для усложненного варианта необходимо реализовать графический интерфейс с использованием Qt или ImGui.