Болезнь “ООП головного мозга”

47f2ab15c9692b62e46c0f9f05912080.png

(Объектно-Ориентированное Помешательство)

Описание:
Заразное ментальное расстройство, поражающее программистов, чрезмерно увлекающихся объектно-ориентированным программированием (ООП) и паттернами проектирования. Симптомы включают неспособность писать простой код, чрезмерное усложнение архитектуры и патологическую потребность во внедрении фабрик, стратегий и синглтонов даже там, где они не нужны.

Симптомы:

1. Клиническая полиморфофилия

  • Больной не может написать простой метод, не завернув его в десяток интерфейсов и абстракций.

  • Любая функция превращается в класс с тремя уровнями наследования.

Пример:

Вместо `print («Hello, World!»)` больной пишет:

class Message:
    def get_text(self):
        pass

class HelloWorldMessage(Message):
    def get_text(self):
        return "Hello, World!"

class MessagePrinter:
    def print(self, message: Message):
        print(message.get_text())

printer = MessagePrinter()
printer.print(HelloWorldMessage())

«Зато гибкость!» — уверяет больной.

2. Синдром «Фабрики фабричных фабрик»

  • Каждая новая сущность создаётся исключительно через фабричные методы или фабрики.

  • Больной испытывает тревогу, если объект создаётся без фабрики.

Пример:

class Car:
    pass

class CarFactory:
    def create_car(self):
        return Car()

class CarFactoryFactory:
    def create_factory(self):
        return CarFactory()

factory = CarFactoryFactory().create_factory()
car = factory.create_car()

Больной гордится «гибкостью» системы, хотя коллеги в шоке.

3. «Наследовать — значит существовать»

  • Пациент не может создать сущность без наследования.

  • Даже простые структуры данных превращаются в сложные иерархии.

Пример:

class Animal:
    def make_sound(self):
        pass

class Mammal(Animal):
    pass

class Primate(Mammal):
    pass

class Human(Primate):
    def make_sound(self):
        print("Hello, World!")

person = Human()
person.make_sound()

На вопрос «Зачем столько уровней?» больной отвечает: «На будущее, для расширяемости!»

4. Обсессивное применение паттернов проектирования

  • Пациент не может писать код без применения какого-либо паттерна.

  • Даже самые простые задачи решает через стратегию, декоратор или мост.

  • Отрицает существование кода, написанного без паттернов.

Пример:

Вместо простого условия:

if user.role == "admin":
    grant_access()

Больной пишет:

class RoleStrategy:
    def grant_access(self):
        pass

class AdminRole(RoleStrategy):
    def grant_access(self):
        grant_access()

strategy = AdminRole()
strategy.grant_access()

«Так ведь SOLID!» — гордо заявляет больной.

5. Полное отрицание процедурного и функционального программирования

  • Больной считает, что процедурный код — это признак непрофессионализма.

  • Лямбды, функции и даже простые скрипты вызывают у него физическое отвращение.

  • Каждая функция превращается в метод класса, даже если ей это не нужно.

Пример:

def add(a, b):
    return a + b

Пациент переписывает на:

from abc import ABC, abstractmethod

# Абстрактный класс для чисел
class Number(ABC):
    @abstractmethod
    def get_value(self):
        pass

# Конкретная реализация чисел
class Integer(Number):
    def __init__(self, value: int):
        self.value = value

    def get_value(self):
        return self.value

# Абстрактный класс калькулятора
class Calculator(ABC):
    @abstractmethod
    def add(self, a: Number, b: Number) -> Number:
        pass

# Конкретная реализация калькулятора
class BasicCalculator(Calculator):
    def add(self, a: Number, b: Number) -> Number:
        return Integer(a.get_value() + b.get_value())

# Использование
num1 = Integer(5)
num2 = Integer(10)
calculator = BasicCalculator()

result = calculator.add(num1, num2)
print(result.get_value())  # Выведет: 15

«Объектно-ориентированный подход!» — уверяет больной.

Методы лечения:

1. Шоковая терапия: заставить пациента написать проект на чистом C или Go.

2. Функциональное программирование: вводить в рацион элементы Haskell и Elixir.

3. Чтение кода Кена Томпсона и Роберта Мартина: помогает осознать, что хороший код — это не про количество классов.

4. Детокс: временный запрет на DI-контейнеры и фабрики.

5. Терапия процедурными скриптами: написать полезный скрипт в 10 строк, осознать, что это работает, и заплакать.

Прогноз:

  • В лёгких случаях пациенты могут вернуться к нормальному программированию.

  • В тяжёлых случаях остаются архитекторами на Java и требуют рефакторинга даже у домашнего ToDo-списка.

Заключение:

«ООП головного мозга» — опасное расстройство, приводящее к избыточной сложности кода. Если ваш коллега пишет адаптер для вывода «Hello, World!», немедленно вызывайте специалиста!

PS: Текст полностью написан ChatGPT, но он настолько хорош, что не мог не поделиться))

© Habrahabr.ru