Inizia in questo numero la serie di articoli dedicati alla programmazione ad oggetti. Tale corso ha lo scopo di esporre i concetti di base della OOP per poter realizzare progetti ad oggetti nel modo più semplice possibile. Le lezioni saranno organizzate in modo da rappresentare unità autonome, dove verranno affrontati di volta in volta singoli sotto-argomenti. Visto che questo è solo il numero 0 della rivista, in questa parte esporremo solo una breve introduzione per partire in maniera completa dal prossimo numero.

Il corso avrà un taglio, almeno inizialmente, di tipo teorico, per cui i concetti che esporrò sono generalmente validi per la OOA (object oriented analysis), OOD (object oriented design) e OOP (object oriented programming), che sono le tre fasi della realizzazione di un applicativo (dall'analisi alla progettazione all'implementazione).

La programmazione ad oggetti è stata vista in passato come l'innovazione del secolo che permettesse di realizzare l'impossibile. Questo in parte è forse vero, ma molto si è abusato di OOP, tanto che trovare un buon programmatore OOP risulta compito difficile. Il linguaggio che maggiormente ha diffuso la filosofia di programmazione ad oggetti è stato forse il C++, che però, a detta dei puristi dell'object-oriented, risulta essere troppo sporco e poco elegante per definirlo OO. Molti di coloro che si sono avvicinati alla programmazione in C++ con la speranza di poter programmare ad oggetti solo imparando un linguaggio nuovo si sono scontrati con una dura realtà. Come spesso usa dire Coad (uno dei guru della teoria OOP), la programmazione ad oggetti è una filosofia per pensare il mondo. Fortunatamente (anzi sfortunatamente per i puristi) le sempre maggiori potenzialità del C++ lo hanno reso un linguaggio OOP non puro, e ogni compilatore permette sempre di realizzare programmi ibridi OO-strutturati. Questa caratteristica ha da un lato semplificato la prima stesura di progetti semplici, ma se non usata con cautela ha reso possibile anche la creazione di mostri di difficile gestione.

Con Java le cose cambiano radicalmente, essendo questo un linguaggio pensato per essere totalmente ad oggetti e per rimediare a certe indesiderata del C++. Nato come progetto interno alla Sun, doveva essere un linguaggio moderno che racchiudesse le caratteristiche dei suoi predecessori e rendesse il modo di progettare il lavoro più pulito possibile. Con Java non è possibile non pensare ad oggetti ancora prima di realizzare l'applicativo. Per questo ritengo che, prima di farsi spaventare dalle molte difficoltà di Java, sia necessario avere almeno una base di oggetti, visto che sono il primo ed obbligato passo per iniziare a lavorare.

Quindi cos'è questa OOP? Quali vantaggi possono derivare dal suo utilizzo?

La risposta potrebbe occupare l'intero numero di questa rivista, ma rimanendo entro limiti accettabili potrei dire che gli scopi principali della OOP sono:

  • In fase di design di un progetto, permettere una maggior aderenza alla realtà che ci circonda per poter realizzare poi programmi chiari e che continuino ad essere chiari col crescere (esplodere) delle linee di codice.
  • Riusabilità: questo è il miraggio di ogni persona che programma sin dall'alba dei calcolatori. In parte è stata realizzata ma forse non interamente grazie alla programmazione OO così come la si era pensata inizialmente.

Senza dilungarmi in considerazioni astratte, peraltro non inutili, diciamo, senza un minimo di originalità, che la OOP si basa su tre concetti fondamentali

  • Incapsulamento
  • Ereditarietà
  • Polimorfismo

Sono queste le tre parole magiche che spesso fanno paura e che non sempre sono usate come si deve.

Essendo questo il numero zero di questa rivista ritengo di non addentrarmi oltre con le spiegazioni, per non dover magari ripetere l'inizio della lezione per gli studenti ritardatari :-). Col prossimo numero inizieremo ad addentrarci nella tanto rinomata OOP.