💀
Второй курс РПО
Разработка программных модулей
Разработка программных модулей
  • Модели разработки
  • Ошибки и отладка программ
  • Средства разработки алгоритмов
    • Основные принципы и стадии тестирования
  • Сложностные классы
  • Эмуляторы операционных систем
  • Сложность сортировки
  • Уровни тестирования
  • Задание №1
  • Регрессионное тестирование
  • Тестирование «белым ящиком»
  • Как делать оценку сложности?
  • Алгоритмы и сложность
  • Тестирование "белым ящиком" №2
  • Сложность алгоритмов
  • Тестирование "белым ящиком" №3
  • Тестирование "Чёрным ящиком»" №1
  • Тестирование "Черным ящиком" №2
  • Оценка сложности эвристических алгоритмов
  • Принципы ООП
  • Тестирование "Черным ящиком" №3
  • КТ - В3
  • Модульное тестирование
    • С кодами
  • Модульное тестирование
  • Абстрактные классы и интерфейсы в Python
  • Структуры в Python по аналогии с C++
    • Диалоги гениев
  • Делегаты в Python
    • Ещё более не смешные диалоги
  • Регулярные выражения в Python от простого к сложному
  • Python: Коллекции
  • Параметризованные классы (шаблоны)
  • Указатели и операции со списками в Python
  • Интеграционное тестирование
  • Работа с классами. Перегрузка методов
  • Определение операций в классе.
  • Создание наследованных классов
  • Интеграционное тестирование
  • Работа с объектами через интерфейсы
  • Использование стандартных интерфейсов
  • Работа с типом данных "Структура"
  • Коллекции. Параметризованные классы
  • Использование регулярных выражений
  • Операции со списками
  • Что такое паттерны проектирования?
  • Шпаргалка по шаблонам проектирования
    • [Habr] Шпаргалка
  • UML-диаграммы проектирования
  • Использование основных шаблонов.
  • Использование каких то там шаблонов
  • 15-я Практическая
  • 16-я Практическая
  • Graphviz Online
  • 17-я Практическая
  • Введение в теорию программирования: Объектно-ориентированный подход
  • Документирование софта и стандарты
  • C# Ввод и вывод
  • Оптимизация кода: просто о главном
  • Автоматизация разработки технической документации
  • Автоматизированное документирование и первичные данные
  • ADO.NET что это?
Powered by GitBook
On this page
  • Практическая работа №14: Использование основных шаблонов
  • 1. Посредник (Mediator)
  • 2. Фасад (Facade)

Использование каких то там шаблонов

17.02.2025

PreviousИспользование основных шаблонов.Next15-я Практическая

Last updated 3 months ago

Практическая работа №14: Использование основных шаблонов

В данной работе рассматриваются два шаблона проектирования: Посредник и Фасад. Приведены их описания, схемы взаимодействия и примеры кода.

1. Посредник (Mediator)

Описание

Шаблон Посредник используется для управления взаимодействием между объектами, уменьшения связности кода и упрощения изменений. Вместо того чтобы объекты общались напрямую, они взаимодействуют через посредника.

Схема

Пример кода

#include <iostream>
#include <vector>

class Admin;

class Mediator {
public:
    virtual void Send(std::string message, Admin* admin) = 0;
};

class Admin {
protected:
    Mediator* mediator;
public:
    Admin(Mediator* mediator) : mediator(mediator) {}
    virtual void Receive(std::string message) = 0;
};

class Player : public Admin {
public:
    Player(Mediator* mediator) : Admin(mediator) {}
    void Send(std::string message) {
        mediator->Send(message, this);
    }
    void Receive(std::string message) override {
        std::cout << "Player received: " << message << std::endl;
    }
};

class Donation : public Admin {
public:
    Donation(Mediator* mediator) : Admin(mediator) {}
    void Receive(std::string message) override {
        std::cout << "Donation received: " << message << std::endl;
    }
};

class ConcreteMediator : public Mediator {
private:
    std::vector<Admin*> admins;
public:
    void AddAdmin(Admin* admin) {
        admins.push_back(admin);
    }
    void Send(std::string message, Admin* sender) override {
        for (auto admin : admins) {
            if (admin != sender) {
                admin->Receive(message);
            }
        }
    }
};

int main() {
    ConcreteMediator mediator;
    Player player(&mediator);
    Donation donation(&mediator);

    mediator.AddAdmin(&player);
    mediator.AddAdmin(&donation);

    player.Send("Donation received!");
    return 0;
}

Разбор кода

  • Mediator — интерфейс для посредника.

  • Admin — базовый класс, представляющий участников.

  • Player и Donation — конкретные классы, взаимодействующие через посредника.

  • ConcreteMediator — реализует посредника и управляет связями между участниками.

  • main() — демонстрирует взаимодействие между объектами через посредника.

2. Фасад (Facade)

Описание

Шаблон Фасад предоставляет унифицированный интерфейс для сложной системы классов. Он скрывает детали реализации и облегчает использование системы.

Схема

Пример кода

#include <iostream>

class GradeJournal {
public:
    void SetQuarter1Grade() {
        std::cout << "Оценка за 1 четверть выставлена." << std::endl;
    }
    void SetQuarter2Grade() {
        std::cout << "Оценка за 2 четверть выставлена." << std::endl;
    }
    void SetFinalGrade() {
        std::cout << "Итоговая оценка выставлена." << std::endl;
    }
};

class GradeFacade {
private:
    GradeJournal journal;
public:
    void FillGrades() {
        journal.SetQuarter1Grade();
        journal.SetQuarter2Grade();
        journal.SetFinalGrade();
    }
};

int main() {
    GradeFacade facade;
    facade.FillGrades();
    return 0;
}

Разбор кода

  • GradeJournal — класс, содержащий методы для выставления оценок.

  • GradeFacade — фасад, скрывающий сложность взаимодействия с GradeJournal.

  • main() — демонстрирует упрощенный вызов всех методов через фасад.