Gli algoritmi descrivono cosa dovrebbe fare il computer. Struttura descrive come viene presentato l'algoritmo [nel codice sorgente]. OOP è uno stile di programmazione che sfrutta certe strutture "object oriented".
I libri algoritmici evitano spesso OOP perché sono focalizzati sull'algoritmo, non sulla struttura. Frammenti di codice che fanno molto affidamento sulla struttura tendono ad essere degli esempi scarsi da inserire in un libro di algoritmi. Allo stesso modo, i libri OOP spesso evitano gli algoritmi perché ingombrano la storia. Il punto di forza di OOP è la sua fluidità, e ancorarlo a un algoritmo lo fa apparire più rigido. Riguarda più il focus del libro che altro.
Nel codice della vita reale, userete entrambi affiancati. Non potete risolvere i problemi del computer senza algoritmi, per definizione, e troverete difficile scrivere algoritmi senza struttura ( OOP o altro).
Come esempio di dove si confondono, prendi la programmazione dinamica. In un libro di algoritmi, descriveresti come prendere un set di dati omogeneo in una matrice e utilizzare la programmazione dinamica per arrivare a una soluzione. In un libro OOP, potresti imbatterti in una struttura come Visitor, che è un modo per fare algoritmi arbitrari attraverso un insieme di oggetti eterogenei. L'esempio del libro DP potrebbe essere pensato come un visitatore molto semplice che opera su oggetti in un ordine generalmente bottom-up. Il modello Visitor può essere considerato lo scheletro di un problema DP, ma manca la carne e le patate. In realtà, troverai che spesso hai bisogno di entrambi insieme: usi il pattern Visitor per gestire l'eterogeneità tra i tuoi set di dati (DP è pessimo) e usi DP all'interno della struttura di Visitor per organizzare il tuo algoritmo per minimizzare il runtime (Visitatore non specifica un algoritmo).
Vediamo anche algoritmi che funzionano sopra i modelli di progettazione. I suoi esempi più difficili da pronunciare in un piccolo spazio, ma una volta che hai una struttura, inizi a voler manipolare quella struttura e usi gli algoritmi per farlo.
Are there some problems which can only be presented and solved by OOP?
Questa è una domanda più difficile a cui rispondere di quanto pensi sia. Per il primo ordine, non vi è alcun motivo computazionale per cui è necessario OOP per risolvere qualsiasi problema. La semplice dimostrazione è che ogni programma OOP viene compilato fino all'assemblaggio, che è un linguaggio decisamente non OOP.
Tuttavia, nello schema di cose più grande, la risposta inizia a essere timidi verso sì. raramente sei limitato semplicemente dalle metodologie di calcolo. Il più delle volte ci sono cose come le esigenze di business e le capacità di sviluppo che fanno parte dell'equazione. Molte applicazioni oggi non potrebbero essere scritte senza OOP, non perché l'OOP sia in qualche modo fondamentale per il compito, ma perché la struttura fornita da OOP era essenziale per mantenere il progetto in linea e al budget.
Questo non significa che non abbandoneremo mai OOP in futuro per qualche nuova struttura divertente. Si limita a dire che è uno degli strumenti più efficaci nella nostra casella degli strumenti per una porzione sorprendentemente ampia di attività di programmazione là fuori oggi. I problemi futuri possono indurci ad avvicinarci allo sviluppo usando strutture diverse. Per uno, mi aspetto che le reti neurali richiedano un approccio di sviluppo molto diverso, che potrebbe non essere "Orientato agli oggetti".
Non vedo OOP scomparire nel prossimo futuro a causa del modo in cui pensano i progettisti dell'algoritmo. Ad oggi, il solito schema è che qualcuno progetta un algoritmo che non fa leva su OOP. La comunità di OOP si rende conto che l'algoritmo non si adatta alla struttura di OOP, e in realtà non ne ha bisogno, quindi avvolgono l'intero algoritmo in una struttura OOP e iniziano a usarlo. Considera boost::shared_ptr
. Gli algoritmi di conteggio dei riferimenti che riposano all'interno di shared_ptr
non sono molto favorevoli all'OOP. Tuttavia, il pattern non è diventato popolare fino a quando shared_ptr
ha creato attorno a sé un wrapper OOP che espone le funzionalità degli algoritmi in un formato strutturato OOP. Ora è così popolare che è diventato l'ultima specifica per C ++, C ++ 11.
Perché è così tanto successo? Gli algoritmi sono ottimi per risolvere i problemi, ma spesso richiedono un sostanziale investimento iniziale di ricerca per capire come usarli. Lo sviluppo orientato agli oggetti è molto efficace nel confezionare tali algoritmi e fornire un'interfaccia che richiede meno investimenti iniziali da apprendere.