Я бы предположил, что наиболее важной характеристикой объектно-ориентированного программирования является управление сложностью.
Человеческий мозг может одновременно удерживать только столько концепций - на ум приходит часто цитируемый предел запоминания 7+/-2 независимых элементов.
Когда я работаю над 600-цикловой системой на работе, я не могу держать в голове все сразу. Если бы мне пришлось это делать, я бы ограничился работой над гораздо меньшими системами.
К счастью, мне не приходится этого делать. Различные паттерны проектирования и другие структуры, которые мы использовали в этом проекте, означают, что мне не нужно иметь дело со всей системой сразу - я могу брать отдельные части и работать над ними, зная, что они вписываются в более широкое приложение четко определенными способами.
Все важные концепции ОО предоставляют способы управления сложностью.
Инкапсуляция - позволяет мне иметь дело с внешним API, который предоставляет мне различные услуги, не заботясь о том, как эти услуги реализованы.
Абстракция - позволяет мне сосредоточиться на существенных характеристиках и игнорировать то, что не имеет значения.
Композиция - позволяет мне повторно использовать уже созданные компоненты в новых комбинациях.
Полиморфизм - позволяет мне запрашивать услугу, не беспокоясь о том, что разные объекты могут предоставлять ее по-разному.
Наследование - позволяет мне повторно использовать интерфейс или реализацию, предоставляя только те части, которые отличаются от предыдущих.
Принцип единой ответственности - позволяет четко и ясно определить назначение каждого объекта, чтобы было легко рассуждать о нем.
Принцип замещения Лискова - давайте не будем ставить друг другу ловушки, вводя странные зависимости.
Принцип открытости/закрытости - давайте разрешим расширение и модификацию таким образом, чтобы не рисковать сломать существующий код.
Инъекция зависимостей - давайте выведем композицию на новый уровень и соберем компоненты вместе гораздо позже.
Интерфейсно-ориентированная разработка - давайте выведем абстракцию на новый уровень и будем зависеть только от абстракции, никогда от конкретной реализации.
Рекомендую посмотреть эти видео для лучшего погружения в вопрос: