OOP isn’t bad - types are better than primitives, and subtyping is a useful way to evolve an API and allow customization. The “bad parts” are often just bad design choices (deep object hierarchies, unintended inheritance patterns).