MokaByte
Numero 33 - Settembre 99
|
|||
|
|
|
|
|
Emmanuele Sordini |
|
|
Fin dal momento in cui le tastiere e i monitor soppiantarono le schede perforate ed altri “preistorici” dispositivi, per molti anni l’unica compagna di avventure dell’operatore era stata una sola: la riga di comando del terminale. Il suo “dominio”, si può dire, continuò per quasi tutti gli anni ’80: nella seconda metà di questi alcune case informatiche, pioniera la Apple con il Macintosh, introdussero sul mercato sistemi operativi nei quali l’interazione con l’utente avveniva non solo con il famoso prompt, ma anche con interfacce grafiche di uso estremamente più confortevole soprattutto ai meno esperti. Fu così, quindi, che il mouse diventò un arredo familiare della nostra scrivania: due click e via, si otteneva subito ciò che solo poco tempo prima avrebbe richiesto una lunga sequenza di istruzioni dalla sintassi non sempre intuitiva |
||||||||||||||||||||||||||||||||||||||||||||||||||
Gli
ultimi anni ’80 videro anche il consolidarsi del sistema tutto grafica
e suoni della Commodore, il famoso Amiga nelle sue varie versioni, e nel
frattempo anche i sistemi UNIX, con la nascita di X-Windows si stavano
muovendo in tale direzione. Mancavano all’appello soltanto i computer MS-DOS
compatibili, che per la diffusione già allora molto elevata rappresentavano
un mercato estremamente appetibile: e infatti nel 1990, con l’introduzione
di Windows 3.0, anche per i possessori del PC la vita diventò un
po’ più semplice.
Il resto è storia: le varie versioni di Windows hanno fatto la fortuna della Microsoft, e ogni sistema operativo che oggi sia in uso possiede la propria interfaccia grafica più o meno evoluta e/o amichevole: anzi, si può dire che vi sia in atto, con grande spinta da parte della cosiddetta multimedialità e del grande aumento nella potenza di calcolo disponibile a parità di costo, una battaglia a colpi di colori, luci e suoni. La gara, sempre aperta, verso la realizzazione di software sempre più interattivo nei confronti dell’utente ha evidentemente favorito il proliferare di una moltitudine di strumenti di sviluppo e di librerie grafiche che, con un minimo sforzo, permettono di assemblare molto rapidamente anche applicazioni piuttosto complesse. Quest’articolo non ha sicuramente la pretesa di descrivere tutto lo scibile di un mondo estremamente complicato ed in rapidissima evoluzione: tuttavia, si vogliono esaminare da vicino le caratteristiche principali di tre ambienti e/o librerie grafiche scelte perché in questo momento di grande attualità, ognuna per motivazioni leggermente differenti. Esse sono:
MotifAlla base della libreria Motif è X-Windows, un sistema software che permette al programmatore di creare interfacce grafiche: estremamente completo e ben collaudato, esso è lo standard industriale per le piattaforme UNIX, ognuna delle quali (incluso Linux) lo integra all’interno della propria dotazione di base. Supporta in modo nativo la comunicazione e lo scambio di dati via rete in configurazione Client/Server e la possibilità di gestire l’output grafico su più di un monitor.La libreria Motif è in realtà la parte più ad alto livello di una gerarchia logica e funzionale abbastanza complicata: la Figura 1 potrà essere d’aiuto per comprenderne il funzionamento. La parte più
a basso livello è costituita dalle librerie grafiche Xlib, che forniscono
le primitive necessarie per manipolare entità e concetti grafici
elementari (aree grafiche, coordinate, punti, linee, finestre), dispositivi
di I/O (mouse, tastiera) e tutti gli eventi ad essi collegati. Teoricamente,
già con Xlib si potrebbe fare qualunque cosa, a prezzo però
di un codice troppo lungo e complicato: anche il ciclo principale di gestione
degli eventi, quasi sempre mascherato al programmatore, qui sarebbe a suo
carico. Con un paragone, si può dire che le Xlib siano allo stesso
piano di ciò che l’assembly rappresenta nel panorama dei linguaggi
di programmazione.
Microsoft Foundation ClassesMFC è una libreria sviluppata dalla Microsoft per scrivere applicazioni in ambiente Windows (sia 9X, sia NT) e in linguaggio C++. E’ di fatto integrata con gli ambienti di sviluppo prodotti dalla Microsoft stessa, ed in particolar modo il Visual C++, compresa l’ultima versione 6.MFC, di cui vediamo
uno schema in Figura 2, è completamente OO: esiste, come in Java,
il concetto di una classe capostipite di tutte le altre, e dotata di attributi
e metodi molto generici: in Java essa si chiama semplicemente Object, in
MFC CObject. Di base, è nata allo scopo di mascherare come wrapper
le primitive dell’SDK (Software Development Kit) di Windows, il cui uso
è piuttosto macchinoso anche per risolvere problemi relativamente
semplici; un’applicazione scritta con MFC fornisce anche il supporto per
la gestione completa del ciclo principale degli eventi. Per fare un parallelo
con il sistema X-Windows, MFC svolge la funzione di Xt e Motif, appoggiandosi
sull’SDK che si pone sullo stesso piano delle Xlib; in un programma OO
scritto con le librerie della Microsoft l’uso dell’SDK sarà estremamente
sporadico, se non addirittura completamente da evitare.
SwingSwing è sicuramente l’ultima nata nel panorama della grafica per GUI: la sua concezione risale al 1997. A partire dalla la versione 1.1, Java possedeva già una libreria per la gestione dei componenti, denominata AWT (Abstract Windowing Toolkit), che costituiva già una fonte di componenti piuttosto completa. Il codice di AWT, tuttavia, ricorre pesantemente ai metodi nativi e ai componenti tipici del sistema su cui Java si trova, e pertanto questo intimo legame rende il comportamento dei componenti troppo dipendente dall’implementazione particolare e dagli eventuali bachi; questo problema è di per sé un ostacolo non da poco nei confronti della portabilità che è da sempre uno dei cavalli di battaglia di Java. Inoltre, il legame con la piattaforma limita anche di molto la libertà di gestione dell’aspetto grafico (look and feel), ponendo molti problemi se si vuole che un’applicazione abbia le stesse caratteristiche estetiche ed operatività senza dipendere dal sistema operativo. Come vedremo, nell’implementazione per i vari dialetti di UNIX AWT si basa su Xt e Motif, mentre per Windows si basa sul suo SDK.Per risolvere tutte queste problematiche, vennero introdotte le classi JFC. Si tratta di una collezione di API (Application Programming Interface) comprendenti:
Innanzitutto,
i componenti di Swing sono classificabili in due tipi distinti:
Swing fornisce allo sviluppatore, come già era il caso di MFC e Xt/Motif, ampio supporto a meccanismi di base, quali il loop principale degli eventi; le classi di utilità che MFC contiene sono già incluse nel linguaggio Java stesso, per lo più nel pacchetto java.util. La struttura di Swing è completamente orientata agli oggetti, essendo scritta in Java che lo è per sua stessa natura. In questa libreria sono messi in pratica numerosi concetti piuttosto recenti ed avanzati di Design Patterns (v. [ 14 ] e [ 15 ]). Un primo esempio è costituito dal cosiddetto Model-View-Controller (MVC): concettualmente, si scinde la rappresentazione di un componente grafico con dei dati da visualizzare nella vista grafica (View e/o Controller) e nel su4o modello (Model), che determina anche il o i filtri che devono essere applicati ai dati della struttura interna per essere visualizzati. Questa distinzione di ruoli, corrispondente nel codice a classi ben distinte consente, a fronte di una difficoltà di apprendimento forse un po’ superiore, una incredibile flessibilità nel costruire GUI personalizzate. Un esempio di componente che segua questa impostazione è la tabella JTable, nella quale la specializzazione di classi (per la griglia, per le colonne, le righe, la modalità di selezione e illuminazione delle celle, etc) raggiunge una granularità estremamente elevata. Una differenza importante rispetto a MFC e Xt/Motif è nella gestione degli eventi mutuata da AWT, che possiede lo stesso sistema a partire dal JDK 1.1: essa non è effettuata tramite callback o metodi ereditati, bensì tramite delega a classi specializzate, dette Listener (ascoltatore di evento). Ad ogni oggetto a cui interessi gestire un evento (ad esempio la pressione di un tasto) viene associata una nuova istanza di ascoltatore, il quale possiede un metodo da implementare per definire il comportamento nel caso che quel dato evento si verifichi. Questa metodologia rende più flessibile e pulito il codice e la gerarchia stessa delle classi, poiché si evita il trasferimento per ereditarietà di molti metodi vuoti. Un grande punto di forza di Swing risiede nel controllo del Look and Feel, che non ha eguali né in Xt/Motif (in cui, come si è già visto, il grado di configurabilità è comunque notevole) né, tantomeno, in MFC. Ognuno dei componenti (principalmente leggeri, quali bottoni, etichette, etc.) possiede una UI (User Interface), la quale è una classe con opportuni metodi che permette di specificare con grande flessibilità il comportamento e l’aspetto di un componente. A questo modo, lo sviluppatore è in grado perfino di costruire uno stile completamente personalizzato; ovviamente ciò richiede un lavoro abbastanza lungo. Swing fornisce già alcuni look and feel preconfezionati, che sono quello classico indipendente dalla piattaforma, detto Metal (il meglio supportato dalla Sun), e poi uno per ciascuna delle piattaforme grafiche più diffuse su cui Java gira: Mac, Motif e Windows. A riprova della flessibilità di questo sistema, i look and feel sono “mescolabili”: un’applicazione che gira su Windows può essere “travestita”come se girasse sotto Motif. Esistono tuttavia alcune limitazioni imposte da copyright, secondo cui ad esempio la Microsoft ha vietato che il look and feel tipico di Windows fosse usato con programmi Java che non siano eseguiti in tale ambiente. Inoltre, il look and feel, sia fornito da Swing sia personalizzato, è pluggable, cioè può essere “inserito” (o attivato) sia in fase di inizializzazione sia in fase di esecuzione di un applicativo. ConclusioniNelle sezioni precedenti abbiamo discusso su quali fossero gli aspetti più importanti delle tre librerie esaminate. A questo punto, molti si porranno la fatidica domanda su chi sia il vincitore: la risposta è in realtà nessuno, e non è salomonica ma è motivata da diverse considerazioni.Nella tabella esposta qua sotto abbiamo raccolto una lista di caratteristiche salienti (unione degli insiemi di tutte e tre le librerie) e confrontato la loro presenza presso ognuna delle tre; questo dovrebbe aiutare il lettore, con un colpo d’occhio, a farsi un’idea.
Da questo confronto
emerge senz’altro (se non ce ne fosse bisogno di ribadirlo!) che, almeno
finora, le due librerie native sono indiscusse dominatrici ognuna nella
rispettiva piattaforma, dal punto di vista della velocità di esecuzione,
dimensione degli eseguibili e occupazione di risorse.
BibliografiaSu tutte e tre le librerie oggetto di questo articolo la bibliografia e la documentazione reperibile sia in forma cartacea sia su Internet è estremamente varia. In questa sede, pertanto, ci si limita a fornire una scelta delle fonti ritenute di maggiore interesse.Sull’argomento X-Windows, Xt e Motif: [ 1 ] D. Young,
The X-Window System – Programming and Applications with Xt (Motif Edition),
ed. Prentice-Hall PTR
Considerata per
scontata la conoscenza del linguaggio Java, ci limitiamo a indicare alcuni
riferimenti su AWT e Swing:
Sull’argomento Design Patterns si consigliano i seguenti due testi: [ 14 ] E. Gamma
et al. (“Gang of Four”), Design Patterns, ed. Addison-Wesley
alcuni riferimenti sulla programmazione in Windows, Visual C++ e le Microsoft Foundation Classes: [ 16 ] . Vari,
Microsoft Visual C++ Library Reference (VC++ 5.0), Vol. 1 e 2, ed. Microsoft
Press
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Emmanuele
Sordini è nato a Genova nel 1972. Laureato in Ingegneria
Informatica presso l'Università di Genova con una tesi di simulazione
sul traffico navale nel Porto di Trieste, attualmente lavora a Genova presso
Ansaldo Segnalamento Ferroviario SpA come progettista e
sviluppatore software nel campo dell'automazione ferroviaria. Campi di interesse professionale: linguaggi OO e non (C, C++, Java) e tecniche OOP/OOD (UML, Design Patterns). Può essere contattato via e-mail all'indirizzo vega@ulisse.it |
|
||
|
||
MokaByte ricerca
nuovi collaboratori
|
||
|