OOP non è importante per se stesso, ma per ciò che ne consegue. Qualcosa che riguarda la capacità di astrarre e isolare, raggruppare le cose insieme espone solo le parti che sono necessarie per interagire insieme.
Questa è una tecnica di ingegneria comune chiamata "modularizzazione", che consente di creare sistemi complessi come aggregazione di quelli più semplici, senza occuparsi di ogni singolo dettaglio ad alto livello e che richiedono che i componenti siano sostituibili, anche senza che siano esattamente i stesso.
Questi "concetti di ingegneria" sono stati tentati di essere mantenuti nello sviluppo del software dal momento in cui il prodotto software era diventato più grande della "capacità di singolo sviluppatore", richiedendo così un modo per far lavorare gli sviluppatori su pezzi indipendenti e lasciare che interagire insieme.
Detto questo, quei principi non si trovano necessariamente solo in OOP (se la teoria del calcolo è valida, ci sono infiniti metodi possibili per arrivare a quei risultati).
OOP è semplicemente un tentativo riuscito di mettere insieme queste cose, dando a quei termini generali (come moduli, incapsulamento, sostituzione) definizioni più precise ed elaborata concettualizzazione su quelle definizioni (schemi) che possono adattarsi ai linguaggi di programmazione.
Pensa a OOP prima non come una " caratteristica del linguaggio " ma come un " lessico comune " che avvicina gli ingegneri del software alla progettazione del software.
Il fatto che un determinato linguaggio abbia o meno primitivi che impongono direttamente quel lessico garantendo, ad esempio, che una "capsula" non venga aperta inavvertitamente da chi non dovrebbe farlo è un aspetto secondario della progettazione di OOP. Ecco perché anche i grandi progetti C sono spesso "gestiti come" OOP, anche se la lingua stessa non offre alcun supporto diretto a questo.
Il vantaggio di tutto ciò che non è riconoscibile fino a quando le dimensioni di un progetto non rimangono nella capacità del singolo sviluppatore di comprendere e tracciare tutto ciò che fa (in effetti, in quelle situazioni può anche essere visto come "sovraccarico") o in un piccolo gruppo che sviluppa qualcosa in un breve periodo. E questa è la ragione principale per cui i giovani che hanno studiato OOP in termini di "caratteristica del linguaggio" spesso interpretano erroneamente producendo codice mal progettato.
Il modo in cui OOP si adatta alle lingue dipende da come i designer linguistici interpretano il principio OOP nel loro costrutto.
Quindi "incapsulamento" in C ++ diventa "membri privati" (e una "capsula" diventa una classe), "sostituzione" diventa funzione virtuale o modello parametrizzazione / specializzazione ecc., Mentre in D una capsula è un "modulo" (e la sostituzione va attraverso classi ecc.), rendendo così determinati paradigmi o modelli direttamente disponibili in una determinata lingua e non in un'altra e così via.
Ciò che i recruiter cercano di porre una domanda OOP è semplicemente verificare la tua capacità di astrarre e concedere la progettazione del software per progetti e sviluppi futuri di grandi dimensioni. OOP, per loro è solo un "dizionario" che entrambi sapevano che tu e loro conoscete in modo da poter parlare di altre cose più generali o concretizzare in una specifica implementazione.