💀
Второй курс РПО
Разработка программных модулей
Разработка программных модулей
  • Модели разработки
  • Ошибки и отладка программ
  • Средства разработки алгоритмов
    • Основные принципы и стадии тестирования
  • Сложностные классы
  • Эмуляторы операционных систем
  • Сложность сортировки
  • Уровни тестирования
  • Задание №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. Строитель (Builder)
  • 2. Прототип (Prototype)

15-я Практическая

17.02.2025

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

Last updated 3 months ago

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

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

1. Строитель (Builder)

Описание

Шаблон Строитель используется для пошагового создания сложных объектов. Он позволяет создавать разные представления объекта без изменения его кода.

Схема

Пример кода

#include <iostream>
#include <string>

class Product {
public:
    std::string partA;
    std::string partB;
    void Show() {
        std::cout << "Product parts: " << partA << ", " << partB << std::endl;
    }
};

class Builder {
public:
    virtual void BuildPartA() = 0;
    virtual void BuildPartB() = 0;
    virtual Product* GetResult() = 0;
};

class ConcreteBuilder : public Builder {
private:
    Product* product;
public:
    ConcreteBuilder() { product = new Product(); }
    void BuildPartA() override { product->partA = "Part A"; }
    void BuildPartB() override { product->partB = "Part B"; }
    Product* GetResult() override { return product; }
};

class Director {
public:
    void Construct(Builder* builder) {
        builder->BuildPartA();
        builder->BuildPartB();
    }
};

int main() {
    Director director;
    ConcreteBuilder builder;
    director.Construct(&builder);
    Product* product = builder.GetResult();
    product->Show();
    delete product;
    return 0;
}

2. Прототип (Prototype)

Описание

Шаблон Прототип позволяет копировать объекты без привязки к их конкретным классам, используя механизм клонирования.

Схема (примерная текстовая визуализация)

Пример кода

#include <iostream>
#include <string>

class Prototype {
public:
    virtual Prototype* Clone() const = 0;
    virtual void Show() const = 0;
};

class ConcretePrototype : public Prototype {
private:
    std::string name;
public:
    ConcretePrototype(std::string n) : name(n) {}
    Prototype* Clone() const override { return new ConcretePrototype(*this); }
    void Show() const override { std::cout << "Prototype name: " << name << std::endl; }
};

int main() {
    ConcretePrototype original("Original");
    Prototype* clone = original.Clone();
    clone->Show();
    delete clone;
    return 0;
}