Вопрос:

Вы разрабатываете графическое приложение в С++, где каждое окно – это объект класса Window. Необходимо централизованно управлять созданием всех объектов с возможностью выбора стиля (тема, цветовая схема) и контролировать их жизненный цикл, предотвращая прямой доступ к конструктору. Укажите подход, нарушающий принципы инкапсуляции и мешающий централизованному управлению созданием объектов.

Ответ:

Решение:

Задача состоит в том, чтобы найти подход, который нарушает инкапсуляцию и мешает централизованному управлению созданием объектов класса Window. Централизованное управление и предотвращение прямого доступа к конструктору обычно достигаются с помощью паттернов проектирования, таких как Фабричный метод или Абстрактная фабрика, или статических методов-фабрик.

Рассмотрим предложенные варианты:

  • Использование Window w("Light") с прямым вызовом конструктора: Прямой вызов конструктора нарушает принцип инкапсуляции, так как он напрямую обращается к внутреннему состоянию объекта и не позволяет централизованно управлять процессом создания.
  • Использование Window::create("Light") – статического метода-фабрики: Статический метод-фабрика инкапсулирует логику создания объекта и предоставляет централизованный способ его получения, что соответствует условию задачи (контроль создания). Поэтому этот вариант не нарушает принципы.
  • Применение unique_ptr для контроля над временем жизни окна: unique_ptr используется для управления памятью и временем жизни объекта, но сам по себе не влияет на процесс его создания и не нарушает инкапсуляцию.
  • Создание окон через шаблон «Фабричный метод»: Фабричный метод — это порождающий паттерн проектирования, который предоставляет интерфейс для создания объектов в суперклассе, но позволяет подклассам изменять тип создаваемых объектов. Он как раз и предназначен для централизованного управления созданием объектов и соблюдения инкапсуляции.

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

Ответ: Использование Window w("Light") с прямым вызовом конструктора снижает контроль и нарушает инкапсуляцию.

Подать жалобу Правообладателю