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