Passaggio 1: le classi sono strutture con funzioni. È utile mescolare i dati con le funzioni.
Passaggio 2: in una classe si limita la visibilità di funzioni e variabili. Di solito avrete alcune funzioni pubbliche che sono l '"interfaccia" della classe. Il vantaggio di nascondere le cose è che puoi cambiarle senza che l'utente della tua classe debba cambiare. Finché conservi l'interfaccia pubblica, sei pronto. Rende anche più facile per le persone utilizzare la classe in quanto non si confondono nel tentativo di comprendere i dettagli privati e possono concentrarsi sull'interfaccia pubblica.
Passaggio 3: puoi ereditare campi e funzioni da una classe genitore. Questo può aiutare a prevenire alcune duplicazioni tra diversi sottotipi. Puoi anche sostituire la funzionalità delle funzioni ereditate, se lo desideri. L'ereditarietà è una delle funzioni meno utili di OOP, ma è così.
Passaggio 4: il polimorfismo consente di creare software "collegabile". Per aggiungere funzionalità, puoi creare una nuova classe che soddisfi un'interfaccia con le sue funzioni. Si crea la classe e si inserisce una sorta di plug-in. Non si apportano modifiche al codice del flusso di lavoro. Senza OOP avresti molte affermazioni "if-elseif-elseif" nel tuo flusso di lavoro per eseguire azioni diverse per cose diverse. Con OOP quelle se le istruzioni scompaiono perché chiami il metodo del tuo oggetto. La funzione dell'oggetto esegue ciò che ha bisogno di fare polimorficamente.
Ad esempio hai una classe "Motore". Ha figli "DirectXEngine", "OpenGLEngine". Il tuo gioco funziona bene per anni. Poi, 5 anni dopo, qualcuno fa un nuovo motore e tu vuoi sostenerlo nel tuo gioco. Crei una classe "SomeNewEngine" e si inserisce nel tuo videogioco. Supporta completamente il nuovo motore senza modifiche al codice del flusso di lavoro. Tutto quello che dovevi fare era creare una nuova classe. Tutto quello che devi testare (in teoria) è che le funzioni della tua nuova classe soddisfano l'interfaccia. (ma in realtà non è sempre possibile conformare le cose alla stessa interfaccia ...)
Passaggio 5: la comprensione del polimorfismo non è limitata a OOP. È possibile ottenere il comportamento polimorfico dalla programmazione generica. Considera una funzione "aggiungi"
T add(T val1, T val2) {
return val1 + val2;
}
Funziona sia che passi in float, ints, doubles, stringhe, ecc. Anche se l'implementazione dell'aggiunta di questi tipi è molto diversa. Questo è polimorfismo a livello di codice sorgente. Se pensi all'operatore "+" come un comportamento supportato da tutti i tipi, allora tutti si conformano all'interfaccia "+".
È possibile concettualizzare tutti i comportamenti come funzioni. Che si tratti di una funzione reale o di una sintassi della lingua come +, -,%, ecc.
Fai un ulteriore passo avanti e rimuovi tutta la sintassi dalla lingua. Ora sei al punto in cui ogni funzione che crei è "la lingua". Crei la tua lingua mentre programmi nella tua lingua. Supportate tutti i paradigmi di programmazione ma non siete paradigmi. OOP diventa una definizione irrilevante di alcune tecniche che fanno parte del mondo naturale.