Eu sugeriria que a característica mais importante da programação orientada a objetos é a do gerenciamento da complexidade .
O cérebro humano só pode conter tantos conceitos de uma só vez - vem à mente o limite frequentemente mencionado de lembrar 7 +/- 2 itens independentes.
Quando estou trabalhando em um sistema de 600kloc no trabalho, não consigo segurar tudo na cabeça de uma só vez. Se eu tivesse que fazer isso, estaria limitado a trabalhar em sistemas muito menores.
Felizmente, não preciso. Os vários padrões de design e outras estruturas que usamos nesse projeto significam que não preciso lidar com todo o sistema de uma só vez - posso pegar peças individuais e trabalhar nelas, sabendo que elas se encaixam no aplicativo mais amplo de maneiras bem definidas.
Todos os conceitos importantes de OO fornecem maneiras de gerenciar a complexidade.
Encapsulamento - deixe-me lidar com uma API externa que me fornece vários serviços, sem se preocupar em como esses serviços são implementados.
Abstração - deixe-me concentrar nas características essenciais e ignorar o que não é relevante.
Composição - deixe-me reutilizar componentes que já foram criados em novas combinações
Polimorfismo - deixe-me solicitar um serviço sem me preocupar com como diferentes objetos podem fornecê-lo de maneiras diferentes.
Herança - deixe-me reutilizar uma interface ou implementação, fornecendo apenas as partes diferentes do que foi anteriormente.
Princípio de responsabilidade única - vamos manter o objetivo de cada objeto claro e conciso, para que seja fácil argumentar sobre
Princípio de Substituição de Liskov - não vamos criar armadilhas um para o outro, introduzindo dependências estranhas
Princípio Aberto / Fechado - vamos permitir extensão e modificação de maneiras que não exijam o risco de quebrar o código existente
Injeção de Dependência - vamos elevar a composição ao próximo nível e montar os componentes muito mais tarde.
Desenvolvimento orientado a interface - vamos levar a abstração para o próximo nível e depender apenas da abstração, nunca de uma implementação concreta.