Suggerirei che la caratteristica più importante della programmazione orientata agli oggetti sia quella di gestione della complessità .
Il cervello umano può contenere così tanti concetti contemporaneamente: mi viene in mente il limite spesso quotato di ricordare 7 +/- 2 elementi indipendenti.
Quando lavoro su un sistema da 600kloc al lavoro, non riesco a tenere tutto in mente in una volta. Se dovessi farlo, sarei limitato a lavorare su molto sistemi più piccoli.
Fortunatamente, non è necessario. I vari modelli di design e altre strutture che abbiamo utilizzato in quel progetto significano che non devo occuparmi dell'intero sistema in una sola volta: posso raccogliere singoli pezzi e lavorarci sopra, sapendo che si adattano all'applicazione più ampia in modi ben definiti.
Tutti i concetti di OO importanti offrono modi per gestire la complessità.
Incapsulamento : permettimi di gestire un'API esterna che mi fornisce vari servizi, senza preoccuparti di come vengono implementati tali servizi.
Abstraction - lascia che mi concentri sulle caratteristiche essenziali e ignori ciò che non è rilevante.
Composizione : consentimi di riutilizzare componenti che sono già stati creati in nuove combinazioni
Polymorphism : permettimi di chiedere un servizio senza preoccuparti di come diversi oggetti potrebbero fornirlo in modi diversi.
Ereditarietà : lascia che riutilizzi un'interfaccia o un'implementazione, fornendo solo i pezzi che sono diversi da quelli precedenti.
Principio di responsabilità singola : consente di mantenere lo scopo per ciascun oggetto chiaro e conciso, quindi è facile ragionare
Principio di sostituzione di Liskov - non poniamo trappole l'una per l'altra introducendo dipendenze dispari
Principio Aperto / Chiuso - consentiamo l'estensione e la modifica in modi che non ci impongono di rischiare di rompere il codice esistente
Iniezione di dipendenza : prendiamo la composizione al livello successivo e assembliamo i componenti molto più tardi.
Sviluppo orientato all'interfaccia - prendiamo l'astrazione al livello successivo e dipendiamo solo dall'astrazione, mai da un'implementazione concreta.