Ответ
Это принцип открытости/закрытости (Open/Closed Principle, OCP). Его суть в том, что классы должны быть открыты для расширения новой функциональности, но закрыты для модификации существующего кода. На практике в C++ это достигается через наследование и полиморфизм, а также с помощью шаблонов (стратегия, посетитель).
Пример из моего опыта: В проекте системы рендеринга у нас был базовый класс Drawable. Когда потребовалось добавить новый тип графического объекта (например, частицы), мы не стали изменять существующий код отрисовки, а создали новый класс ParticleSystem, унаследованный от Drawable.
class Drawable {
public:
virtual ~Drawable() = default;
virtual void render(const RenderContext& context) const = 0;
};
class Mesh : public Drawable {
std::vector<Vertex> vertices;
public:
void render(const RenderContext& context) const override {
// Код отрисовки меша
}
};
// НОВЫЙ ТИП - РАСШИРЕНИЕ БЕЗ ИЗМЕНЕНИЙ
class ParticleSystem : public Drawable {
std::vector<Particle> particles;
public:
void render(const RenderContext& context) const override {
// Код отрисовки системы частиц
}
};
// Функция отрисовки сцены осталась НЕИЗМЕННОЙ
void renderScene(const std::vector<std::unique_ptr<Drawable>>& objects) {
for (const auto& obj : objects) {
obj->render(currentContext);
}
}
Таким образом, мы расширили функциональность, не затрагивая и не рискуя сломать уже работающий код.