habrahabr

Болезнь «ООП головного мозга»

  • пятница, 31 января 2025 г. в 00:00:12
https://habr.com/ru/articles/877844/

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

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

Симптомы:

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!”, немедленно вызывайте специалиста!

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

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Действительно ли существует такая болезнь?
59.69% Да, иногда встречаюсь465
12.32% Я сам тяжело болен96
27.98% Автор просто не понимает ООП и не знает паттернов проектирования, пытаясь казаться умнее других!!!218
Проголосовали 779 пользователей. Воздержались 125 пользователей.