La programmazione a oggetti (o programmazione “orientata agli oggetti“) è ormai affermata e trova sempre maggiore successo nell’ambito della progettazione e dello sviluppo del software. Si tratta di un modo di pensare in modo astratto ad un problema, utilizzando concetti del mondo reale piuttosto che concetti legati al computer. In tal modo si riescono a comprendere meglio i requisiti di progetto, si ottengono delle soluzioni più chiare e ne risultano sistemi software in cui la manutenzione è decisamente più facile.
Gli oggetti costituiscono il costrutto fondamentale di tale filosofia. Un oggetto è una singola entità che combina sia strutture dati che comportamenti: i dati sono visti come proprietà dell'oggetto e le procedure per accedere ai dati ed effettuare elaborazioni sono viste come metodi (le “vecchie” funzioni).
Gli oggetti, in sostanza, possono essere visti come dei mattoni che possono essere assemblati e che hanno un alto potenziale di riutilizzo. Infatti uno dei benefici principali ed uno dei motivi per cui è stata sviluppata la programmazione ad oggetti è proprio quello di favorire il riutilizzo del software sviluppato.
La programmazione a oggetti non è una prerogativa del C++, anzi è trasversale alla quasi totalità dei linguaggi moderni, e risulta sempre più preponderante rispetto alle altre tecniche di modellazione e di realizzazione del software.
In questa guida, approfondiremo molti degli aspetti di questa tecnica contestualmente all'introduzione di molte delle parole chiave e dei costrutti propri del C++. Tuttavia chi volesse approfondire fin da subito gli aspetti teorici ed avere una visione d'insieme può consultare la guida generale ai principi della programmazione orientata agli oggetti, disponibile su questo sito.
Da un punto di vista storico, è bene sottolineare che la diffusione di questo paradigma al di fuori degli ambiti di ricerca accademici è stata in qualche modo agevolata dall'apparizione di C++ nel panorama dei linguaggi di programmazione. Non si può quindi non riconoscere un forte legame tra le due cose, al punto che la conoscenza di C++ può essere importante per la comprensione dei principi generali della programmazione a oggetti.
Tuttavia, come vedremo già sin dalle prime lezioni, a differenza di altri linguaggi come Java o C#, C++ ha un forte legame con tecniche di programmazione antecedenti, come la programmazione procedurale, vista la sua diretta parentela con il linguaggio C.
Cosa comporta questo nell'ottica di voler avvalersi dei principi generali della programmazione a oggetti in C++? Semplicemente il fatto che in C++ è più facile violare le regole del paradigma, pur avendo a disposizione tutti gli strumenti per applicarle.
Sebbene la programmazione a oggetti permetta di raggiungere un elevato livello di concettualizzazione, non è infatti semplice applicarne i principi in una maniera che consenta effettivamente di preservare la validità di tutte le sue promesse, soprattutto la riusabilità e l'espandibilità del software, che sono le più importanti.
Sotto quest'ottica, C++ è probabilmente uno dei linguaggi più usati e allo stesso tempo fraintesi, tuttavia è anche il più vicino ai livelli prestazionali dei linguaggi appartenenti alla generazione precedente, pur integrando i benedifici della moderna programmazione a oggetti.