Java: ООП
Теория: Полиморфизм
Проблема
При разработке программного обеспечения часто возникает необходимость создания кода, который может обрабатывать различные типы данных и объектов. Однако, если код не спроектирован с учетом масштабируемости, он может стать громоздким и трудным для поддержки
Одним из примеров такой проблемы является обработка различных типов фигур в геометрических расчетах
Создадим два класса, представляющие геометрические фигуры:
и метод, который будет выполнять геометрические расчеты
Проблема этого кода заключается в том, что его сложно масштабировать. Если нам нужно добавить новый тип фигуры, например, круг, то нам придется изменить метод getTotalArea()
Сделаем это, добавим еще одну фигуру — круг
Расширим метод так, чтобы он мог работать еще и с кругами
Если мы добавим еще 10 типов фигур, то метод getTotalArea() станет очень большим и сложным, и нам придется изменять его каждый раз, когда мы добавляем новый тип фигуры
Решение
Сделаем интерфейс, который будут реализовывать геометрические фигуры
Откорректируем классы, чтобы они реализовывали этот интерфейс
Изменим метод для подсчета площади
Теперь метод getTotalArea() может обрабатывать любые фигуры, реализующие интерфейс Shape. В результате наших изменений мы получили более гибкий и масштабируемый код, который позволяет легко добавлять новые типы фигур без изменения метода getTotalArea()
Игры разума
Проблема этого кода заключается в том, что для добавления новой игры необходимо каждый раз изменять класс Example2 и добавлять новый случай в методах getGameDescription() и generateQuestion(). Это может привести к дублированию кода и усложнению класса, что затрудняет его поддержку и расширение.
Чтобы решить эту проблему, можно создать интерфейс для игр, который будет иметь методы getDescription() и generateQuestion(). Тогда каждый класс игры будет реализовывать этот интерфейс
Создадим интерфейс:
Доработаем классы игр, чтобы они реализовывали интерфейс
Теперь мы можем упростить код в классе Example2



