\articolo{MOOS - Modular and Object Oriented System}{Rocco Coluccelli}
\index{Colluccelli!articolo di}

\paragrafo{MOOS e linguaggio ARexx}

Cominciamo subito col dire che MOOS\index{MOOS} non \`e un prodotto
software, ma un progetto di studio che si sviluppa in pi\`u fasi
concorrenti e che coinvolge principalmente il linguaggio ARexx\index{ARexx}
e le sue applicazioni. Spendiamo poche parole per definire, dal punto di
vista pratico, questo linguaggio di programmazione. L'ARexx \`e un
linguaggio di alto livello espressamente creato per la programmazione
generale di task, per estendere le potenzialit\`a del sistema operativo e
per l'integrazione di applicazioni. \`E lo strumento pi\`u versatile per
aiutare l'utente nella risoluzione dei suoi problemi quotidiani. Per il
programmatore alle prime armi, ARexx \`e un linguaggio tanto facile da
apprendere quanto potente ed \`e anche un'utile introduzione a molte
tecniche di programmazione molto sofisticate. Per l'utilizzatore pi\`u
esperto ARexx fornisce tutti gli strumenti utili alla completa integrazione
dei propri strumenti di lavoro. L'uso oculato e attento di questo
linguaggio permette di estendere le funzionalit\`a del proprio ambiente di
lavoro ben oltre l'immaginabile.


\paragrafo{Cosa significa MOOS e come si articola}

MOOS deve la sua denominazione alle prime problematiche che sono state
affrontate e alle soluzioni sviluppate per ciascuna di esse. Ovvero come
sfruttare la caratteristica del linguaggio ARexx di vedere i suoi stessi
script come funzioni esterne. In altre parole, tra i tanti strumenti di cui
pu\`o avvalersi, l'ARexx permette la facile scrittura di piccoli programmi
che possono essere usati, a tutti gli effetti, come procedure all'interno
di altri script. In quest'ottica sono state valutate attentamente molte
soluzioni che hanno portato alla formulazione di alcune regole utili a
ottimizzare e facilitare il lavoro di preparazione e sviluppo di moduli
esterni da combinare assieme. Chiariamo subito che quelli che chiameremo
``moduli\index{moduli}'' sono sempre funzioni esterne, ma con la
caratteristica pi\`u utile della riusabilit\`a.


\paragrafo{MOOS: Moduli e Oggetti}

Come \`e stato appena sottolineato, parleremo di ``moduli\index{moduli}'' e
``oggetti\index{oggetti}'' sempre facendo riferimento a script ARexx usati
come funzioni esterne. La distinzione deriva dall'aggiunta riusabilit\`a e
dal livello di astrazione raggiunto. In alcuni casi, infatti, ci si pu\`o
accostare parecchio a certi concetti tipici della programmazione a oggetti.
Facciamo qualche esempio banale per chiarire meglio questi concetti. Una
procedura che contenga comandi per la porta ARexx di un dato programma non
\`e usabile in tutti i contesti (altri programmi con comandi ARexx
differenti) e non pu\`o essere considerata un ``modulo'' in senso ampio.
Pu\`o per\`o capitare che la stessa procedura trovi applicazione in pi\`u
macro ARexx per il medesimo programma. Possiamo allora chiamarla ``modulo''
in senso ristretto al suo dominio di applicabilit\`a (gli script per quel
programma). Ancora, alcune procedure possono essere richiamate nel medesimo
contesto e presentare funzionalit\`a differenti in base alle propriet\`a
degli oggetti con cui si troveranno a interagire o semplicemente reagiranno
a particolari direttive esterne (metodi). In quest'ultimo caso possiamo
dire di esserci avvicinati alla filosofia OOP\index{OOP}. L'uso e
l'integrazione di questi concetti nella scrittura di programmi ARexx \`e
uno degli obiettivi di MOOS.


\paragrafo{MOOS e divulgazione}

Le altre fasi di sviluppo di MOOS sono anche molto diverse tra loro. Una
\`e quella che ha coinvolto la ben nota rivista italiana Amiga Magazine che
ha aperto una rubrica dove vengono prodotti alcuni dei risultati raggiunti
a scopo divulgativo e didattico. Una delle idee iniziatrici del progetto
MOOS era e rimane quella di tracciare delle linee guida. L'obiettivo pi\`u
ambizioso \`e quello di mettere in condizione chiunque di prendere possesso
di uno strumento qual'\`e il linguaggio ARexx. A questo scopo sono stati
prodotti numerosi esempi a mostrare la semplicit\`a con cui possono essere
affrontati e risolti i problemi pi\`u disparati. Per questa stessa ragione
\`e stato scelto di non identificare MOOS con una collezione di script,
ovvero un prodotto, ma si deve invece pensare al servizio che esso pu\`o
offrire a chi lo richieda.


\paragrafo{Collaborazione e sviluppo}

Analizzando l'insieme di comandi disponibili alla porta ARexx di decine di
programmi, dalle pi\`u piccole utility alle applicazioni di maggior peso,
sono state messe in evidenza diverse lacune e incongruenze. Senza dover
richiamare la documentazione presente sui ROM Kernel Manual circa la
implementazione di una interfaccia ARexx per un qualunque programma, \`e
comunque possibile studiare l'efficacia e la completezza della stessa in
ambito operativo. Sono state strette collaborazioni con alcuni sviluppatori
di pacchetti software in ordine al potenziamento e all'estensione del set
di comandi ARexx di base alle rispettive porte dei loro programmi. Da
questa esperienza sono sorti nuovi spunti e possono essere avviati tutta
una serie di progetti volti a una standardizzazione globale di molti
aspetti a partire dalla struttura stessa dei programmi applicativi. Una
oculata suddivisione interna, sacrificando l'ottimizzazione spinta, porta a
una separazione pi\`u semplice degli strumenti base che fornisce il
programma. Questi strumenti devono essere resi pilotabili in ogni loro
funzionalit\`a tramite l'interfaccia ARexx. Questo \`e uno dei presupposti
fondamentali che potranno garantire la perfetta ``usabilit\`a''
dell'interfaccia ARexx risultante.


\paragrafo{MOOS e MUIRexx}

Un'altra area di ricerca in cui \`e sfociato il progetto MOOS vede lo
studio delle nuove possibili estensioni al linguaggio ARexx. Prime tra
tutte il MUIRexx\index{MUIRexx}. Per completezza \`e bene riassumere
brevemente cos'\`e il MUIRexx. Trattasi di un pacchetto software che
provvede ad aggiungere numerose estensioni e funzioni a quello che \`e il
set di base offerto dal linguaggio ARexx. Le pi\`u interessanti sono senza
dubbio quelle che permettono la costruzione e la gestione di GUI con una
naturalezza e velocit\`a che non ci si aspetterebbe mai da un linguaggio
interpretato. Con la collaborazione di altri sviluppatori, sono allo studio
nuove classi di oggetti da affiancare a quelle gi\`a esistenti. In aggiunta
a queste sono state prese in considerazione altre soluzioni per estendere
il gi\`a nutrito set di oggetti disponibili mediante classi ``custom''
realizzate facendo uso degli strumenti messi a disposizione dallo stesso
MUIRexx.


\autore{Rocco Coluccelli}{}

\citazione{\selectlanguage{english}
Telling the future by looking at the past assumes that conditions remain
constant. This is like driving a car by looking in the rearview
mirror.}{Herb Brody}
