Болезнь «ООП головного мозга»
- пятница, 31 января 2025 г. в 00:00:12
(Объектно-Ориентированное Помешательство)
Описание:
Заразное ментальное расстройство, поражающее программистов, чрезмерно увлекающихся объектно-ориентированным программированием (ООП) и паттернами проектирования. Симптомы включают неспособность писать простой код, чрезмерное усложнение архитектуры и патологическую потребность во внедрении фабрик, стратегий и синглтонов даже там, где они не нужны.
Симптомы:
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, но он настолько хорош, что не мог не поделиться ))