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