Reportage “Presentazione Borland Delphi 2005 (Milano)”

di Marco Breveglieri

In questo reportage ho tentato di riassumere i tratti salienti di quanto è stato detto e mostrato nella presentazione ufficiale in anteprima di Borland Delphi 2005 a Milano il giorno 4 novembre 2004.

Spero che possa tornare utile a chi deve assistere alla presentazione “in quel di Roma” prevista per il giorno 11 novembre: leggendo, chiunque potrà farsi un'idea dei contenuti della presentazione per concentrarsi maggiormente sui dettagli non riportati in questo testo e ponendo domande che siano “inedite”, sfruttando al meglio il tempo a disposizione di ciascun relatore per rispondere.

Prefazione

La presentazione di Delphi 2005 si è svolta all'Excelsior Hotel Gallia, un hotel – all'apparenza sfarzoso – che si trova esattamente a fianco della stazione di Milano.

Nei momenti che hanno preceduto l'inizio della presentazione, un nutrito gruppo di partecipanti si è riunito davanti all'ingresso dell'hotel; alcuni si conoscevano già e hanno iniziato a conversare del più e del meno, magari proseguendo eventuali discorsi avviati durante il pranzo, mentre per altri – me incluso – l'evento è stato un'occasione per conoscere persone con cui avevo intrattenuto, sino ad allora, rapporti professionali solamente attraverso le community virtuali costituite dai gruppi di discussione di “Delphi&Dintorni” e dal newsgroup “it.comp.lang.delphi”.

Borland SDO: lo sviluppo software...oggi

Il seminario si è aperto con un'introduzione di Gabriele Giacomelli, Sales Engineer di Borland Italia, riguardante SDO (Software Delivery Optimization), filosofia che è parte integrante della revisione apportata da Borland alla propria “mission” aziendale.

SDO deriva da un'analisi dell'attività di sviluppo del software al giorno d'oggi, che evidenzia un approccio maggiormente scientifico, tendenzialmente più inquadrato e meno “artigianale” alla progettazione, realizzazione, rilascio e manutenzione di progetti software; inoltre, sempre più aziende scelgono di costruirsi “in casa” le soluzioni software in grado di soddisfare le proprie esigenze.

Un diagramma ha messo in evidenza i “constraint” che influiscono sul ciclo di sviluppo del software, a partire dalla richiesta inoltrata dal cliente fino al momento del deploy (e oltre): tempi di realizzazione, feature richieste, numero di sviluppatori a disposizione e così via. Ciascuno di questi aspetti può essere tradotto in un puro e semplice...costo.

Da un'indagine condotta, parrebbe che il 30% dei progetti software avviati non vadano a buon fine, proprio per una gestione inefficiente dei requisiti precedentemente elencati e descritti; tra le cause più frequenti, l'offerta di strumenti di sviluppo eterogenei, la difficile scelta della “giusta tecnologia” tra le più disparate, la scarsa fluidità del passaggio di informazioni tra gli sviluppatori e, spesso, la definizione errata dei requisiti dedotti da una conversazione poco efficiente con il cliente finale.

La “mission” di Borland è rivolta ora a fornire una completa gamma di prodotti con lo scopo di ridurre l'incidenza dei costi apportati dai “constraint”, in modo ponderato, misurato e ripetibile, ampliando la visione complessiva del ciclo di sviluppo del software (e non solo dal punto di vista dello sviluppo in senso stretto): questa è SDO, che porta molti benefici tra cui un maggior controllo delle previsioni temporali (consegna puntuale del software), maggiore qualità del prodotto (fornendo esattamente le funzionalità richieste, nulla di più, nulla di meno)...concludendo, meno denaro sperperato inutilmente e raggiungimento della massima soddisfazione del cliente.

Delphi 2005 è la soluzione Borland per lo sviluppo di applicazioni basata su SDO che massimizza l'esperienza degli sviluppatori Delphi acquisita negli anni.

Per maggiori informazioni su SDO, è possibile consultare il sito Borland all'indirizzo www.borland.com/software_delivery/.

Le novità dell'IDE unificato per dotNET e Win32

Delphi 2005 viene proposto come lo strumento di sviluppo completo per la piattaforma Microsoft Windows. Creato da sviluppatori per sviluppatori, la nuova versione di Delphi presenta nuove funzionalità incentrate soprattutto sull'incremento della produttività, considerata il “punto focale”, sia a livello personale che di team, grazie anche alla possibile integrazione con altri prodotti Borland come StarTeam e CaliberRM.

In questa sessione, Marco Cantù ha confermato che Delphi 2005 rappresenta la release più significativa dai tempi del rilascio della versione “1”, presentando attraverso slide e dimostrazioni pratiche alcune delle nuove “feature” di cui è dotato il nuovo ambiente di sviluppo integrato (IDE).

Innanzitutto, si tratta di un IDE completamente rivisitato rispetto a quello su cui si basavano i precedenti ambienti Delphi (quelli esclusivamente dedicati a Win32), che sostanzialmente costituivano solo un'evoluzione dell'implementazione dell'IDE di Delphi 1.

L'IDE è ora “multitarget”, cioè in grado di supportare più linguaggi e piattaforme (Delphi Win32, Delphi.NET e C#), che possono essere racchiuse all'interno di uno stesso gruppo di progetti (Project Group) del quale è possibile lanciare addirittura un “build eterogeneo”; del resto, anche l'IDE di Delphi si appoggia contemporaneamente a più tecnologie.

Aprendo il classico menu “New Item”, è possibile avere un'idea dell'enorme varietà di tipi di progetti e file che si possono creare: applicazioni, librerie e package, basate sulle tecnologie VCL, VCL.NET, Windows Forms e Web Forms (ASP.NET), incluse le applicazioni basate su ECO II (tecnologia presentata in seguito da Jason Vokes).

Le finestre di cui è composto l'IDE sono state riorganizzate per migliorare l'uso dello spazio disponibile adottando un nuovo layout “docked” che, eventualmente, può essere ripristinato alla modalità “undocked” per gli sviluppatori più nostalgici (solo per VCL e VCL.NET, dopo aver riavviato l'applicazione).
La Structure View è un esempio di ottimizzazione dello spazio: rappresenta in un'unica finestra informazioni di diversa natura in base alla risorsa che si sta modificando: funge da Object TreeView durante la progettazione di elementi visuali e da Code Explorer quando si modifica il codice sorgente.
Durante la progettazione visuale, è possibile trascinare componenti e controlli dalla Palette dei Componenti all'interno del “contenitore” desiderato. Durante la scrittura del codice, la Palette elenca modelli (Code Template) che possono essere inseriti in un determinato punto del sorgente ricorrendo ancora al “drag&drop”; è possibile compiere anche l'operazione inversa, cioè trascinare un blocco di codice selezionato dal Code Editor sulla Palette per creare un nuovo modello da riutilizzare.

La tecnologia Error Insight controlla periodicamente il codice sorgente e segnala gli errori individuati mostrandoli all'interno della Structure View. La tecnologia Help Insight visualizza sottoforma di tooltip, talvolta “navigabili”, la “posologia” di classi, metodi e proprietà utilizzate.

L'IDE presenta molte feature interessanti di “code refactoring”. Assegnando un valore ad una variabile non dichiarata, Delphi propone una finestra di dialogo per l'inserimento automatizzato della dichiarazione, proponendo il tipo che ritiene più appropriato (comunque modificabile) in base ad un'analisi del contesto; tale funzionalità è disponibile sia per le variabili locali, sia per i campi delle classi.

Una funzione di “search & replace” (cerca e sostituisci) intelligente è in grado di rinominare tutti i riferimenti ad un determinato simbolo (nome di classe, metodo, variabile, ecc.) presenti nel gruppo di progetti aperto.

Una funzionalità di “editing sincronizzato” (SyncEdit) permette di modificare contemporaneamente tutte le occorrenze di un particolare identificatore all'interno di un blocco di codice selezionato.

Inoltre, Delphi è capace di ricercare e individuare automaticamente le unit che contengono una determinata classe cui si fa riferimento nel codice, aggiungendola alla clausola uses se necessario.

Tra le funzionalità più potenti citiamo l'estrazione di metodi, che si rivela particolarmente utile quando ci si trova nelle condizioni di dover scomporre un metodo di dimensioni rilevanti estraendo un blocco di istruzioni da inserire poi in un nuovo metodo separato; selezionando una parte di codice, Delphi è in grado di analizzare l'uso delle variabili locali e dei parametri nel contesto specifico e di creare un nuovo metodo di cui viene mostrata un'anteprima dell'implementazione...basta digitare il nome e il gioco è fatto: il nuovo metodo viene creato e la sua chiamata viene inserita nel punto del corpo del metodo originale da cui proviene.

E' possibile selezionare differenti codifiche per il salvataggio dei file sorgenti, in modo da poter disporre di simboli particolari nella definizione di stringhe di testo o per fare uso di caratteri accentati nella dichiarazione di identificatori (una possibilità del tutto inedita in Delphi 7 e versioni precedenti).

Attraverso la finestra “History” è possibile visualizzare le differenze tra il file presente nel buffer di modifica e le versioni dello stesso file precedentemente salvate su disco; questa funzionalità può essere integrata con il software Borland StarTeam.

Oltre ad un IDE rinnovato, Delphi 2005 include anche un nuovo compilatore e un debugger potenziato: la vista CPU mostra ora, per i progetti basati sul dotNET Framework, il codice sorgente, il codice IL e il codice nativo generato “Just In Time”; si tratta di una funzionalità avanzata (per esigenze decisamente specifiche), ma non è presente attualmente in nessun altro ambiente. Molto più interessante la possibilità di visualizzare i valori delle variabili locali (Local Variables) per ciascun “stack frame”, risalendo lo stack delle chiamate e ricostruendo quindi l'intero percorso di esecuzione del codice (che ha portato, ad esempio, alla generazione di un'eccezione), verificando singolarmente i valori di ciascun parametro e variabile locale per ciascun elemento presente nella “catena” delle chiamate.

Il linguaggio Delphi presenta anch'esso alcune novità. Per quanto riguarda Delphi.NET, è stata migliorata la gestione dei namespace i quali possono essere finalmente suddivisi in più unit (più file sorgenti). E' possibile utilizzare la nuova sintassi for...in, che corrisponde al “for...each” di C#, per enumerare oggetti contenuti all'interno di un altro oggetto che supporta tale tipologia di accesso, sfruttabile anche da classi completamente nuove realizzate dagli sviluppatori.

Il compilatore supporta ora la chiamata di funzioni inline. Le funzioni di dimensioni ridotte spesso richiedono più CPU per essere chiamate di quanta ne serva per l'esecuzione del codice vero e proprio di cui sono costituite; dichiarando inline tali funzioni, il compilatore inserisce direttamente il codice implementativo nel punto in cui esse vengono richiamate, aumentando di un fattore presumibilmente trascurabile le dimensioni del file eseguibile finale, ma riducendo drasticamente i tempi di esecuzione.

Alcune delle feature introdotte in Delphi.NET sono state riversate nel linguaggio per la piattaforma Win32, la sintassi “for...in”, le funzioni inline, i “nested type” (tipi all'interno di altri tipi), gli indicatori di visibilità strict private e strict protected (per far sì che i membri di una classe siano “privati veraci”, inaccessibili anche da classi presenti nella stessa unit), la dichiarazione di classi sealed (dalle quali non è possibile derivare) e altro ancora.

Il suggerimento finale è quello di scaricare la versione trial di Delphi 2005 non appena essa sarà disponibile sul sito Borland e... “giocarci” per scoprire tutte le funzionalità che, per questioni di tempo, non è stato possibile affrontare durante la presentazione “live” dell'anteprima; la trial sarà presto scaricabile a questo indirizzo: http://www.borland.com/products/downloads/download_delphi.html.

ECO II e ASP.NET

Questa sessione è stata condotta da Jason Vokes che ha speso alcune parole (in inglese, ma lentamente), sulla tecnologia ECO II e lo sviluppo di applicazioni ASP.NET, tecnologie già utilizzabili in Delphi 8 che sono state ulteriormente potenziate in Delphi 2005.

In merito allo sviluppo di applicazioni ASP.NET, Borland ha incluso in Delphi 2005 nuovi componenti “DB Web Control”; si tratta di controlli che rispecchiano da vicino il funzionamento tipico dei controlli “data aware”, tanto familiari agli sviluppatori Delphi, offrendo però simili funzionalità nella costruzione di pagine Web in grado di estrarre attraverso la connessione ad un database dati di vari tipi, dai più semplici ai più complessi, inclusi stream di audio e video.

Jason Vokes ha dimostrato tali capacità a livello pratico ricostruendo un'applicazione simile al celebre progetto “FishFact”, ma in grado di presentare i dati attraverso pagine Web, senza scrivere una sola riga di codice, visualizzando immagini oltrechè informazioni puramente testuali, anche durante la fase di progettazione (a designtime).

Un simile approccio consente allo sviluppatore di concentrarsi sui componenti e controlli di cui intende servirsi in base al risultato che desidera ottenere, focalizzando l'attenzione sull'interconnessione tra tali elementi senza dover scendere nei dettagli implementativi.

Delphi 2005 include ora un Deploy Manager in grado di automatizzare il processo di distribuzione dei file del progetto verso l'ambiente di produzione (ad esempio, un server Web) o, in alternativa, verso l'ambiente gestito da un membro del team di sviluppo incaricato di eseguire i dovuti test sull'applicazione Web; il Deploy Manager conosce perfettamente i file che devono essere distribuiti e supporta l'uso di varie modalità di trasferimento (XCOPY, FTP e così via) con la possibilità di aggiungere manualmente eventuali file aggiuntivi (ad esempio, archivi zip, eseguibili e altro ancora).

La seconda parte della sessione è stata dedicata a ECO II, evoluzione della tecnologia ECO che ha visto la luce in Delphi 8. Per chi non conosce di cosa si tratta, ECO è un tool di modellazione visuale che ha lo scopo primario di ridurre la scrittura di codice per la rappresentazione delle classi cui appartengono gli oggetti con cui l'applicazione deve lavorare.

Gli sviluppatori Delphi sono sempre stati abituati a “maneggiare” oggetti; oltre a facilitare la creazione di classi, ECO ha inoltre la responsabilità di migliorare il rapporto tra gli oggetti e il loro “storage” persistente, evitando allo sviluppatore la frustrazione dello scontro con i dettagli tecnici delle singole piattaforme di accesso ai dati, lasciandolo così pienamente concentrato sulla “business logic” che governa l'applicazione. Inoltre, la rappresentazione delle classi del modello sottoforma di Class Diagram in linguaggio UML offre una visuale più intuitiva (rispetto al codice “nudo e crudo”) delle caratteristiche dei package, delle classi contenute in essi e delle relazioni che legano queste ultime, favorendo la presentazione del diagramma concettuale a tecnici non prettamente incaricati dello sviluppo vero e proprio del software, come analisti di mercato, clienti, progettisti e così via.

ECO II supporta ora “ECO Space” multipli; un ECO Space è lo “spazio virtuale” in cui gli oggetti appartenenti al modello vengono creati a runtime per poter essere manipolati. ECO II è pienamente utilizzabile per applicazioni Web Forms (ASP.NET) oltrechè per applicazioni desktop (Windows Forms).

E' una tecnologia puramente basata sul dotNET Framework, tuttavia non è supportata da VCL.NET; tecnicamente, è possibile sfruttare ECO II per produrre assembly da riutilizzare all'interno di un'applicazione VCL.NET, ma in tal caso si deve rinunciare al supporto visuale offerto da Delphi per lavorare agevolmente con questa tecnologia.

Jason Vokes ha proseguito la sua presentazione di ECO II attraverso un'applicazione dimostrativa ASP.NET, generando un modello attraverso il “reverse engineering” di un datatase esistente, sottolineando la possibilità di aggiungere alle classi del modello attributi e operazioni come avviene genericamente con altri OPF tra i più conosciuti; in seguito, Jason ha generato una maschera di dettaglio per modificare i dati di un singolo record...ahem...oggetto selezionato. :-)

Concludendo, ECO II è un ottimo strumento per ottenere una corretta ed efficace separazione tra il modello (business logic), lo strato di persistenza (persistence layer, a sua volta indipendente dal database sottostante) e lo strato di presentazione (presentation layer, ottenuto sfruttando WinForms oppure WebForms).

Purtroppo, non sono in grado di scendere ulteriormente nel dettaglio descrittivo dell'applicazione mostrata perchè la distanza dallo schermo (e forse la mia scarsa capacità visiva) mi ha impedito di leggere i nomi dei componenti utilizzati; inoltre, era molto difficile dedurre tali nomi dalle parole dello stesso Vokes poiché identificava ciascun controllo e componente con l'espressione “this guy”. ;-)
Tuttavia, sul sito della Community di Borland (http://community.borland.com) ci sono parecchi tutorial ed esempi per saperne di più.

RAD for ADO.NET

Nella “staffetta” di presentazione di Delphi 2005, Vokes ha ceduto il “testimone” a Gabriele Giacomelli che ha fatto una carrellata delle tecnologie RAD presenti nella nuova versione di Delphi per quanto riguarda l'accesso ai dati con VCL.NET e, successivamente, ADO.NET nello specifico.

Per quanto riguarda le applicazioni basate su VCL.NET, oltre alla libreria dbExpress (che ha subito qualche revisione) ritroviamo ora anche la libreria dbGo for ADO, quindi ulteriori possibilità di “porting” delle vecchie applicazioni Win32 per facilitare la migrazione, se necessaria, alla piattaforma dotNET. Davvero duri a morire, sono presenti anche i componenti BDE, esplicitamente forniti senza alcuna miglioria al codice o “bug fixing”, tali e quali rispetto alle versioni incluse nelle precedenti distribuzioni di Delphi.

Per quanto riguarda le tecnologie di accesso ai dati per la piattaforma ADO.NET, di particolare interesse è la tecnologia BDP (Borland Data Provider), già presente in Delphi 8.

Le classi fornite da Microsoft per l'accesso ai dati legano lo sviluppatore ad una gerarchia specifica che dipende dal database scelto per la propria applicazione; volendo scegliere un database differente, occorre reperire o acquistare dal produttore le classi necessarie. In alternativa, è possibile ricorrere alle tecnologie OLE DB e ODBC; tuttavia, l'interoperabilità con lo standard COM inciderebbe molto negativamente sulle prestazioni.

BDP fornisce invece un accesso generico ai database più diffusi; per ciascuno di essi esiste un driver completamente “managed”; le differenze tra i diversi database vengono mascherate, ma non appiattite: è comunque consentito l'accesso a funzionalità particolari e specifiche.

L'IDE di Delphi 2005 incorpora il Data Explorer, una finestra che consente la visualizzazione dei database registrati per i formati e le piattaforme supportate, la creazione e l'eliminazione di tabelle, la copia di dati da una tabella ad un'altra, il drag&drop di elementi su form e pagine Web (per la costruzione rapida di maschere di “data entry”) e tante altre funzionalità che non è stato possibile esaminare per mancanza di tempo.

Molto interessante la presenta dei componenti DataSync e DataHub in grado di sfruttare le funzionalità di Remoting del dotNET Framework per realizzare un'architettura n-tier; sostanzialmente, utilizzando un RemoteServer e una RemoteConnection, è possibile trasportare un DataSet da un'applicazione ad un'altra, separando lo strato di accesso e “fornitura” dei dati, visuale oppure no, dallo strato di presentazione...ma questo è solo uno dei tanti esempi di utilizzo, poiché è possibile trasportare attraverso il servizio di Remoting qualsiasi componente.

Per motivi sconosciuti, qualcosa è andato storto durante la dimostrazione (magari perchè si trattava di una versione “preview”?)...ad ogni modo, sul sito Borland è disponibile un documento che descrive dettagliatamente come si utilizzano i componenti per ottenere il Data Remoting: http://community.borland.com/article/0,1410,32718,00.html.

Success stories

In questa brevissima sessione, Claudio Piffer, capo progetto e software developer dell'azienda DeltaDator (http://www.deltadator.it), ha presentato il progetto “CumixNet” per la gestione remota di impianti di cottura e conservazione di alimenti. E' la realizzazione di un'applicazione Windows a partire da un'applicazione modello preesistente (per DOS), incaricata del controllo e della gestione di un impianto cui è interfacciata via RS232 ed Ethernet.

Si trattava di “convertire” l'applicazione introducendo però nuove funzionalità legate, tra le altre cose, alla multiutenza e allo scarico automatico delle informazioni prelevate dalla strumentazione.

Per realizzare la soluzione software è stato adottato Delphi 7; un'applicazione incaricata di gestire la base dati usando DBISAM, attraverso l'uso dei componenti Indy, forniva dati alle applicazioni terminali facendo uso di socket di rete.

In seguito, sono sorte nuove esigenze in merito all'applicazione (la frase “l'appetito vien...mangiando” nella slide ha perfettamente riassunto il concetto): è stata richiesta la possibilità di consultare dati attraverso un dispositivo palmare; la soluzione di rappresentare le informazioni attraverso una pagina Web ASP.NET richiedeva la ricerca di uno strumento in grado di fornire informazioni comprensibili a questa tecnologia. Così, utilizzando Delphi 7 è stato creato un Web Service in grado di serializzare una “memory table” di Delphi tramutandola in una DataTable (dotNET) in formato XML che, restituita dal Web Service richiamando un apposito metodo, veniva poi interpretata e utilizzata direttamente dalla pagina ASP.NET per visualizzarla nel browser eventualmente incorporato nel dispositivo palmare.

Q & A

Al termine della presentazione, Gabriele Giacomelli e Marco Cantù hanno risposto ad alcune domande dei partecipanti. E' stata segnalata inoltre la nascita di BugIT: come recita l'introduzione riportata nella pagina iniziale del sito (http://www.bugit.it/): “il BugIT (Borland User Group Italiano) è il luogo di incontro degli utilizzatori dei prodotti Borland. Gli sviluppatori, gli architetti software o i semplici curiosi si scambiano informazioni, impressioni, suggerimenti e così via. In più, la redazione del BugIT si occupa di inserire aggiornamenti e notizie che riguardano il mondo degli utenti Borland”.

Riporto di seguito alcune delle domande proposte dal pubblico a Cantù e a Giacomelli, quelle che ho ritenuto più significative (o meglio, che ho fatto in tempo ad annotare), assieme alle risposte fornite.

Conclusione

Nonostante alcune immancabili difficoltà nel viaggio di ritorno, ho seguito con molto interesse questa presentazione in anteprima delle novità offerte da “DiamondBack”, che ho finalmente potuto vedere in azione dal vivo, dopo aver passato interi giorni a documentarmi dettagliatamente a riguardo sulla carta. :-)

E' stata particolarmente costruttiva la possibilità di discutere di alcuni particolari tecnici dal vivo, con entusiasti (e simpatici) partecipanti dei newsgroup “Delphi oriented”. ;-)

Le feature del nuovo ambiente sembrano essere davvero promettenti. Personalmente, attenderò con ansia l'uscita della versione trial sperando di modificare la mia soddisfazione ancora “provvisoria” in una definitiva e consapevole scelta di proseguire lo sviluppo di applicazioni Windows con Delphi. Nel frattempo, mi accontenterò di indossare la simpatica maglietta ricevuta in omaggio...