In generale, nella programmazione orientata agli oggetti, una classe Š una definizione astratta dei (1.) tipi di dati e delle (2.) azioni che su quei dati possono essere eseguite. Queste ultime sono comunemente definite come i metodi relativi all'oggetto.
Mentre le classi descrivono i vari tipi di oggetti solo a livello astratto, gli oggetti realmente esistenti in un programma sono chiamati istanze di una data classe.
Prendiamo per esempio un oggetto programma WPS: ogni oggetto programma Š una istanza della classe WPProgram, definita attraverso la WPS. I (1.) dati propri dell'oggetto programma sono, tra gli altri, l'eseguibile ad esso associato (per es. "CMD.EXE"), mentre i (2.) metodi (che possono essere eseguiti su questi dati) sono l'avvio dell'eseguibile (cliccando su di esso due volte o scegliendo "Apri" dal menu contestuale) o la modifica dell'eseguibile nel blocco appunti impostazioni. Anche se i metodi non sono "visibili" attraverso l'interfaccia utente, essi sono utilizzati continuamente, ogni volta che si fa qualcosa con la WPS. Volendoli descrivere con un altro termine, che forse Š pi— familiare, i metodi si possono pi— o meno considerare come l'Interfaccia Programmatore Applicazione (API) verso l'oggetto. Per fare un altro esempio, relativo alla programmazione REXX: ogni volta che si usa uno degli oggetti stringa impostazione per modificare i dati di un oggetto, si sta richiamando un certo metodo per usarlo sull'oggetto.
Dato che sono definiti metodi specifici per ogni classe, i metodi che si possono richiamare su di un certo oggetto dipendono dalla sua classe di appartenenza. Non li ho mai contati tutti, ma per la sola classe WPObject, la pi— elementare delle classi WPS, sono definiti pi— di 100 metodi.
Quel che rende cosŤ flessibile (e popolare) la programmazione orientata agli oggetti Š il fatto che si possono definire relazioni tra le classi. Per comprendere questo aspetto Š importante chiarire i seguenti due concetti:
Prendiamo un esempio dalla Workplace Shell: la classe Desktop ("WPDesktop") deriva dalla normale classe cartella ("WPFolder"); la Scrivania Š cosŤ solo un tipo particolare di cartella.
Questo fa sŤ che la Scrivania abbia, di base, tutte le propriet… cartteristiche di una cartella: vi si possono mettere all'interno degli oggetti, ordinarne il contenuto, visualizzarla per dettagli o ad albero e cosŤ via. La classe Desktop fornisce per• anche delle funzioni aggiuntive: il menu contestuale contiene pi— voci (come "Chiusura" e "Impostazione del sistema"), il blocco appunti impostazioni ha pi— pagine e cosŤ via. Quindi, la Scrivania eredita le caratteristiche delle cartelle, ad esse ne aggiunge di proprie, mentre alcune altre vengono eliminate: per es., la Scrivania attiva non si pu• chiudere e non ha una barra del titolo.
La WPS implementa una struttura ad albero per cui tutti gli oggetti sono raggruppati logicamente ed interdipendenti. Ad un livello di astrazione pi— alto, tutti le classi oggetti della WPS discendono da UNA SINGOLA CLASSE ("WPObject"), che fornisce le funzioni di base proprie di tutti gli oggetti della Scrivania: tra le altre, la possibilit… di aprire menu contestuali e blocchi appunti impostazioni. Una organizzazione del genere Š tipica della programmazione orientata agli oggetti: la classe antenato delle altre Š normalmente chiamata "classe radice" di una "gerarchia di classi".
La WPS, partendo da WPObject, costruisce un albero completo di classi che va sotto il nome di gerarchia classi WPS. La sezione "Classi WPS" nell'oggetto Elenco classi WPS di &xwp; d… un quadro di insieme di questo albero di classi.
Una gerarchia cosŤ concepita ha il vantaggio di permettere di modificare tutte le classi semplicemente
modificando la classe di origine (lo svantaggio, dal punto di vista di chi programma, sta nel fatto che
costruire una tale gerarchia richiede in anticipo un'enorme pianificazione dei dati e dei metodi da assegnare
alle singole classi, che in seguito pu• anche dimostrarsi non abbastanza lungimirante. Per•, una volta
realizzata la gerarchia con sufficiente criterio - come Š il caso, grazie ad IBM, della WPS - i vantaggi
sono innumerevoli).
Uno dei molti possibili esempi di questo meccanismo ci Š dato dalla voce di menu "Aiuto", presente nel menu contestuale di tutti gli oggetti WPS. Selezionando la voce "Aiuto generico" viene utilizzato il metodo wpDisplayHelp, introdotto dalla classe radice WPS, WPObject, e che permette a tutti gli oggetti della Scrivania di mostrare l'aiuto in linea; viene inizializzato il gestore dell'aiuto &os2;, si apre la finestra dell'aiuto, ecc. Ogni classe WPS per•, grazie al polimorfismo, pu• sostituire le proprie pagine di aiuto a quelle definite da WPObject. CosŤ, scegliendo "Aiuto" nel menu contestuale di una cartella, si avr… un aiuto differente da quello che si otterrebbe dal menu contestuale di un oggetto programma.
Questo Š possibile perch‚ la WPS utilizza il System Object Model (SOM) di IBM, un complesso sistema che fornisce interfacce per la programmazione "object-oriented" anche tra moduli di codice differenti, persino indipendentemente dal linguaggio di programmazione. Il SOM Š tanto potente perch‚ le classi sono rese disponibili e mantenute a livello di esecuzione e non di compilazione.
E' cosŤ, per inciso, che viene creato l'elenco delle classi WPS: all'avvio della Scrivania vengono generate tutte le classi (che, nel SOM, sono anch'esse degli oggetti, ma questa Š un'altra questione...) e solo dopo di ci• si stabiliscono le relazioni che le legano tra loro. In questa maniera Š possibile realizzare modifiche senza bisogno dell'intervento di IBM, autrice delle classi originali.
Aggiungo ora un'opinione personale: tutto questo rende tuttora &os2; un unicum nel mondo
dei computer. Mentre altre delle sue prerogative, come ad es. l'efficiente multitasking,
non sono pi— sua esclusiva (anche Linux, per restare nell'esempio, ha un buon multitasking),
l'interfaccia utente di &os2; Š ancora insuperata da ogni altro sistema operativo di
mia conoscenza, Windows 9x in particolare.