Решения задачи с Ulearn

Приветствую всех, если у вас проблема с решением этой задачи пишите, оно у меня есть!

Практика «Геометрия-2»

Давайте теперь предположим, что в предыдущей задаче новых геометрических примитивов добавлять мы не собираемся. Зато собираемся добавлять новые методы для работы с уже имеющимися — они могут вычислять объем, площадь поверхности, рассчитывать точку пересечения объекта с прямой и т.д.

В этом случае часто используется шаблон Visitor. Изучите этот шаблон по википедии.

Определите интерфейс IVisitor и реализуйте его в двух классах DimensionsVisitor и SurfaceAreaVisitor, для рассчёта размеров (ширина, высота) и площади поверхности фигур.

В класс Body добавьте абстрактный метод Accept(IVisitor visitor).

Автоматизированные тесты проверяют лишь базовые требования. Проверить, что вы всё сделали правильно можно самостоятельно так:

  1. В реализациях Visitor не должно быть ни одного приведения типов и ни одного if-а. Именно этой простотой решение с Visitor-ом лучше исходного с длинным if-else.
  2. Работа с каждой фигурой должна оказаться в отдельном методе. А значит даже если добавится новая фигура, будет меньше возможностей случайно внести ошибку в обработку старых фигур.
  3. Компилятор должен контролировать, что вы не забыли обработать ни одну из фигур: если вы забудете написать один из методов, программа даже не скомпилируется.
  4. В интерфейсе IVisitor, в классе Body и всех его подклассах не должно быть никакого упоминания площади поверхности, размеров или конкретных классов Visitor-ов. А значит при добавлении новых рассчетов, эти классы не нужно будет модифицировать.
  5. Для добавления нового метода работы с фигурами, должно быть достаточно добавить новый класс Visitor-а.

Стоимость решения этой задачи всего 100 рублей, закажи решения у меня 🙂

Внимание! Решение было обновлено в 2021

Обновлено: 22.05.2021 — 07:46

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.