MokaByte Numero 33  -  Settembre  99
Swing Motif MFC 
di 
Emmanuele
Sordini
Librerie grafiche a confronto


 

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:
 
  1. Xt/Motif, librerie dell’ambiente grafico di UNIX X-Windows, sistema operativo che ultimamente forse ha perso un po’ di smalto, ma che si trova ancora sulla cresta dell’onda per la sua provata versatilità e affidabilità;
  2. MFC, o Microsoft Foundation Classes, sviluppate dalla Microsoft e concepite solo per applicazioni in ambiente Windows, che sostanzialmente ha preso il primato in quanto a base installata;
  3. JFC (Java Foundation Classes) e Swing, la libreria di Java per applicazioni grafiche sviluppata dalla SUN in collaborazione con Netscape e altre aziende. Swing rappresenta, per la sua completezza e l’adozione di avanzati concetti di Object Oriented Design, un notevole passo in avanti nel panorama delle librerie grafiche.


Verranno qui analizzate le principali differenze di questi tre ambienti grafici, sempre dal punto di vista di Java. Per una descrizione in dettaglio delle librerie Swing, si rimanda il lettore alla sezione dei riferimenti, ed in particolare agli articoli comparsi nei mesi scorsi su Mokabyte. Nella trattazione delle caratteristiche principali si lascia inoltre Swing volutamente per ultima, poiché essa trae vantaggio da alcune caratteristiche che le altre due intrinsecamente possiedono.
 

 
 

Motif

Alla 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.
 
 
Figura 1 - Architettura del sistema grafico di UNIX X-Windows, Xt e Motif

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.
Ad un livello intermedio si colloca la libreria Xt Intrinsics. Essa è stata concepita per dare ai programmatori tutti i tipi di entità grafiche che siamo abituati a vedere in un sistema a finestre. Il componente generico (finestra, bottone, menù, etc.) è chiamato Widget, e la sua gestione tramite le primitive fornite dalle Xlib è completamente mascherato allo sviluppatore, alla pari di alcune funzioni di base, come il già citato ciclo degli eventi di un’applicazione.
Ad un livello più elevato si collocano librerie che basandosi su Xt definiscono insiemi di componenti con funzionalità abbastanza specializzate. Abbiamo quindi diverse librerie in commercio, come Openlook, Athena e Motif, che in realtà è quella di gran lunga più apprezzata e diffusa. Come appare anche dalla Figura 1, la compenetrazione di Xt e Motif è molto spinta, tanto che le primitive da esse fornite sono chiamate nell’ambito della stessa applicazione semplicemente a seconda del bisogno e di quali componenti si intenda usare per fornire le funzionalità richieste. Anche se dalla figura è visibile (e lecito) il ricorso diretto a primitive di Xlib, questo sarà limitato solamente a casi  particolari. 
Le librerie Xt e Motif possiedono una struttura che concettualmente collima con una filosofia orientata agli oggetti: tuttavia, esse sono scritte in C semplice, e sono a loro volta concepite per essere usate in programmi C, che è il linguaggio base di UNIX. Quindi, in linea teorica, usando queste librerie non si possono scrivere programmi in linguaggi OO; per Motif esistono delle implementazioni in C++ (es. Motif++), le quali però di fatto si limitano a costituire una mascheratura (wrapper) delle versioni scritte in C. Queste caratteristiche di design possono talvolta costituire un ostacolo alla realizzazione di applicazioni completamente OO.
Il supporto al Look and Feel (cioè, l’aspetto estetico) è, con X-Windows e quindi Xt e Motif, estremamente completo, sia nei confronti di una singola applicazione, sia per gruppi di applicazioni definibili dal programmatore. Nei cosiddetti file di risorse, i quali altro non sono che file di testo con un’opportuna codifica, si possono specificare aspetto, dimensioni e colori anche del singolo componente (widget); l’unico problema è che risulta molto difficile, al contrario di Swing (come si vedrà), modificare la veste grafica di un’applicazione durante l’esecuzione della stessa, in quanto la configurazione specificata nei file di risorse viene letta soltanto in fase di partenza. 
La gestione degli eventi asincroni (es. input dall’utente come la pressione di un tasto) è effettuata tramite le callback. Una callback è una routine in C con una intestazione formale (prototipo) ben precisa: nel codice se ne passa l’indirizzo e l’evento associato ad un determinato componente, e il sistema provvederà ad eseguirla allo scatenarsi di quel preciso evento. 
Il codice scritto in Motif / Xt / Xlib è sostanzialmente portabile su qualunque piattaforma UNIX che rispetti il protocollo di X-Windows.

 

 

Microsoft Foundation Classes

MFC è 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. 
Figura 2 - Schema della gerarchia di MFC nel contesto di un'applicazione Windows

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. 
Da un punto di vista strutturale, i componenti delle GUI sono visti come altrettante classi legate fra loro da una complessa ma coerente gerarchia di ereditarietà; la libreria mette a disposizione anche una serie di classi di utilità e contenitori generici, quali stringhe, liste, etc.
Il codice scritto con MFC non è, almeno allo stato attuale, portabile su nessun’altra piattaforma diversa da Windows; le applicazioni che ne scaturiscono però sono veloci e compatte. Per questo motivo il binomio MFC + Visual C++ appare allo stato attuale come la migliore combinazione per ottenere buoni risultati e poter gestire applicazioni di una certa dimensione e a tutti i livelli di interazione con il sistema operativo. Ultimamente, tuttavia, il fiato di Visual Basic si fa sentire, essendo quest’ultimo probabilmente il modo più veloce per ottenere risultati funzionanti e gradevoli all’operatore, soprattutto in progetti medio-piccoli. 
Il sistema di gestione degli eventi è la versione object oriented delle callback di Motif. In questo caso, ogni classe ha alcuni metodi riservati (molti dei quali tramandati tramite ereditarietà) aventi nomenclatura convenzionale del tipo On<evento>; se lo sviluppatore è interessato a gestire un determinato evento, allora dichiara una sottoclasse del componente fornito dalla libreria (es. bottone), e provvederà a personalizzare il metodo implementandolo con codice opportuno.
Infine, MFC è strettamente integrata con altri package sviluppati dalla Microsoft stessa, che fornisce ampio supporto per i database e ODBC, per la comunicazione e lo scambio di dati anche via rete fra processi (COM/DCOM), etc. Quindi vi sono ottime potenzialità per creare applicazioni versatili e complete.

 

 

Swing

Swing è 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:
 
  • AWT;
  • 2D API;
  • Accessibility API;
  • Swing, su sui concentreremo la nostra attenzione.


Swing è scritta interamente in Java, quindi il codice è veramente indipendente dalla piattaforma; infatti non ne esiste una distribuzione per ogni sistema, come invece accade per il JDK, ma la medesima può essere utilizzata dappertutto. Un diagramma logico della struttura di Swing in relazione alle altre componenti del sistema è visibile in Figura 3, che si presta ad alcune considerazioni piuttosto interessanti.
 
 
Figura 3 - Architettura del sistema AWT-Swing nei confronti di un'applicazione e dello strato nativo del sistema

Innanzitutto, i componenti di Swing sono classificabili in due tipi distinti:
 

  • Heavyweight (Componenti “pesanti”): sono pochi e i più fondamentali (Frame, Window, Dialog) e si chiamano così poiché in pratica sono gli stessi di AWT, che vengono mappati direttamente sul corrispondente componente nativo (denominato peer);
  • Lightweight (Componenti “leggeri”): sono la maggior parte, e sono definiti estendendo AWT, che comunque già non li mappa direttamente sul componente nativo.
Ovviamente, i componenti leggeri consentono una maggiore flessibilità e indipendenza dalle problematiche poste dall’ambiente grafico fornito dalla piattaforma, e costituiscono la vera forza di AWT e quindi di Swing. In generale, buona norma è quella di mescolare il meno possibile i due tipi di componenti; quindi il ricorso a AWT può esserci ma dev’essere circoscritto e limitato a componenti non pesanti (v. articolo sull’argomento in [ 13 ]). 
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.
 
 
 
 

Conclusioni

Nelle 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.
 
 
 
 
CARATTERISTICA BENEFICI Xt/MOTIF MFC SWING
Struttura / design completamente OO? Qualità e riutilizzo del codice, espansione ordinata NO

(solo "concettuale")

SI SI
Supporto/interazione diretta con l’ambiente nativo? Performance (velocità, compattezza) e sfruttamento delle potenzialità del sistema SI SI NO

(esclusa, ovvio, JNI)

Supporto per servizi di base (es. loop degli eventi)? Comodità in più per lo sviluppatore SI SI SI
Classi di utilità generiche (es. insiemi, liste)? Comodità in più per lo sviluppatore NO SI NO (fornite da Java stesso)
Uso di design patterns (es. MVC) Migliorano lo sviluppo OO e la flessibilità della libreria e del codice NO NO SI
Gestione degli eventi tramite delegation? Codice e gerarchia delle classi più pulite NO NO SI
Look and feel configurabile e pluggable? Enorme flessibilità per l’aspetto e le operatività anche su piattaforme diverse SI

(buon grado di personalizzabilità, ma solo su UNIX)

NO

(configurab. Alquanto limitata)

SI (sicuramente la più completa delle tre)
Supporto diretto per lo scambio di dati via rete e applicazioni grafiche client/server? Flessibilità e scalabilità delle applicazioni (multiutenza) SI NO NO

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.
MFC è forse la migliore combinazione per ottenere buoni risultati sotto Windows specie per progetti medio-grandi per la capacità di sfruttare le potenzialità del C++, e rappresenta un notevole (ma obbligato) passo avanti nei confronti dell’SDK di Windows; tuttavia, grazie alla sua intuitività d’uso Visual Basic sta incalzando. Sono degne di una seppure breve nota le librerie sviluppate dalla Borland (ora Inprise) per Windows, prima ObjectWindows (sulle varie versioni di Borland C++ a partire dalla versione 3.1), e poi la libreria che è il cuore dell’odierno C++ Builder; si tratta in ambedue i casi di ottimi prodotti, cui il mercato però non ha riservato il successo che avrebbero meritato.
Il trio Xlib/Xt/Motif è un ambiente che ha dalla sua parte la solidità ormai provata e il supporto alla comunicazione client-server, con prestazioni ottime su tutte le piattaforme UNIX; tuttavia, risente del design un po’ antiquato e il fatto che non sia veramente object-oriented ne ha forse un po’ appannato lo smalto.
Che dire di Swing? Dal punto di vista della flessibilità, configurabilità e delle scelte di carattere progettuale è sicuramente la migliore delle tre. Questo è dovuto sia alla sua giovane età, che ha permesso l’applicazione di concetti emersi soltanto in tempi piuttosto recenti, e sia al fatto che Java è intrinsecamente un ottimo linguaggio orientato agli oggetti che per molti aspetti costituisce un indubbio passo avanti rispetto al C++ per chiarezza e pulizia del codice. 
Naturalmente, Swing non è esente da problemi. Innanzitutto, il suo design innovativo richiede uno sforzo di comprensione iniziale senz’altro superiore alle altre due librerie. Più importante ancora, il linguaggio Java stesso e Swing a maggior ragione sono ancora tecnologie giovani, che solo recentemente hanno cominciato ad assestarsi, perciò i bachi sono ancora numerosi e le performance ancora molto deludenti; la lentezza è notevole e l’occupazione di memoria anche di un ordine di grandezza superiore ad un programma nativo con le stesse funzionalità. E’ chiaro che in un futuro molto prossimo le migliorie apportate e l’aumento di potenza di calcolo a parità di costi renderanno Swing e Java ancora più appetibili. Questi ultimi affiancheranno senza offuscarle le proprie potenzialità a quelle dei linguaggi nativi, nel perseguimento del duplice obiettivo di migliore comodità per lo sviluppatore e migliore qualità e versatilità delle applicazioni per l’utente finale.
 
 
 
 

Bibliografia 

Su 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
[ 2 ] Vari, The Xlib Programming Guide, ed. O’ Reilly
[ 3 ] Vari, The Xlib Reference Guide, ed. O’ Reilly
[ 4 ] Vari, The Xt Intrinsics Programming Guide, ed. O’ Reilly
[ 5 ] Vari, The Xt Intrinsics Reference Guide, ed. O’ Reilly
[ 6 ] Sito Internet: www.motifzone.com

Considerata per scontata la conoscenza del linguaggio Java, ci limitiamo a indicare alcuni riferimenti su AWT e Swing:
[ 7 ] D. Geary, Graphic Java 2- Mastering the JFC, Vol.I – AWT, ed. Prentice-Hall PTR
[ 8 ] D. Geary, Graphic Java 2- Mastering the JFC, Vol.II – Swing, ed. Prentice-Hall PTR
[ 9 ] Sempre di D. Geary e SUN, nella stessa colonna dei due precedenti si segnalano Vol.III – Advanced Swing, e Vol. IV – 2D API, anche se il loro raggio d’azione si spinge al di la’ dell’ambito del presente articolo.
[ 10 ] M. Campione, K. Walrath et al., The Java Tutorial (Sezioni AWT e Swing), disponibile su Internet da www.javasoft.com
[ 11 ] B. Eckel, Thinking in Java, ed. Prentice-Hall PTR
[ 12 ] M. Carli, Corso di Swing su Mokabyte (1998-1999), distribuito su vari numeri di Mokabyte e disponibili anche per download da www.mokabyte.it
[ 13 ] Sito Internet di JavaSoft su Swing, www.javasoft.com/jfc, e la sua sottosezione The Swing Connection (www.javasoft.com/jfc/tsc), ricca di documentazione, aggiornamenti e articoli tecnici.

Sull’argomento Design Patterns si consigliano i seguenti due testi:

[ 14 ] E. Gamma et al. (“Gang of Four”), Design Patterns, ed. Addison-Wesley
[ 15 ] M. Grand, Design Patterns in Java - Vol. 1, ed. Wiley

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 
[ 17 ] J. Prosise, Programming Windows with MFC, ed. Microsoft Press
[ 18 ] C. Petzold, Programming Windows: The Definitive Guide to the Win32 API, ed. Microsoft Press
[ 19 ] D. Chapman, Visual C++ 6 – Guida Completa, ed. Apogeo
 

   
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 rivista web su Java

MokaByte ricerca nuovi collaboratori
Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it