Basi di OOP e sue implementazioni in AmigaE (Parte 1)
La Programmazione Orientata agli Oggetti (OOP) rappresenta la naturale evoluzione di altre tecniche di programmazione, come la programmazione strutturata e quella procedurale. Le varie metodologie di programmazione evolutesi in questi anni, hanno sempre cercato di incapsulare dati non essenziali al programmatore in strutture invisibili in modo da ridurre al minimo la possibilità di errore. Facendo un esempio, una procedura o una funzione chiamata Test() potrebbe richiedere in input alcuni parametri, e dovrebbe essere compito della procedura stessa di assicurare un corretto funzionamento anche in situazioni critiche (ad es. parametri non validi, mancanza di memoria ecc..)
Caratteristica della programmazione procedurale è la relativa semplicità del debug: se i risulati ottenuti dalla procedura Test() non sono corretti, il problema risiede solo nella procedura Test() stessa. Quindi un programmatore è in grado di correggere facilmente eventuali errori. A patto che non scriva un intero programma in una sola volta e poi tenti di debuggarlo...
La OOP rappresenta la naturale evoluzione della programmazione procedurale. Anche se quello che sto per dire non è del tutto corretto, un oggetto potrebbe essere visto come una struttura di dati (le struct del C, gli OBJECTs di E, i NEWTYPE del BLITZ) associata ad una serie di funzioni mirate alla manipolazione dei dati contenuti nella struttura stessa. La mia definizione di cosa sia un oggetto è sicuramente troppo semplicistica ma, in definitiva, la programmazione a oggetti si limita a questo. I vantaggi però non sono così semplicistici...
Dal punto di vista del programmatore, un oggetto può essere visto come un vero e proprio programma a sè stante, con le sue variabili globali e locali (le prime incluse nella definizione dell'oggetto, le altre nelle varie funzioni/procedure di manipolazione dei dati dell'oggetto stesso), le sue funzioni e le sue routine di inizializzazione e distruzione (la main() del C e di E). Scrivendo un oggetto, il programmatore si comporta esattamente come se stesse scrivendo un programma. Tutti i dati verranno manipolati all'interno dell'oggetto stesso, e sta al programmatore decidere cosa rendere visibile e cosa invece tenere chiuso all'interno dell'oggetto.
Un oggetto, come abbiamo già detto, è formato da una parte strutturale di dati (le variabili) ed un'altra di funzioni legate all'oggetto stesso, che permettono la manipolazione dei dati. Sia le variabili all'interno dell'oggetto che le funzioni stesse, possono essere rese visibili o invisibili dall'implementatore dell'oggetto ai futuri utilizzatori dell'oggetto stesso: in definitiva, è chi crea l'oggetto che decide se determinate caratteristiche dell'oggetto devono essere sfruttabili da altri, oppure rimanere interne all'oggetto stesso.
Questa caratteristicha della OOP, permette di creare delle vere e proprie "scatole nere" (gli oggetti), che svolgono determinate funzioni correttamente e che possono (e devono) essere utilizzate da altri programmatori senza preoccuparsi molto di come siano effettivamente state create.
Personalmente, ho scritto molti oggetti che mi permettono operazioni particolari sui dati o su particolari caratteristiche del Sistema Operativo di Amiga... e di alcuni non so più con precisione cosa facciano. Più o meno è così che dovrebbe essere per tutti: un oggetto deve essere chiuso in sè stesso ed assicurare funzionalità.
continua nel prossimo numero...
Scritto da: Fabio Rotondo e-mail: fsoft@intercom.it C.so Vercelli 9 28100 Novara ITALY tel: (ITA) - (0)321 459676