Borland Delphi 4
di Pino Navato
 

LogoL'ambiente di sviluppo della Inprise (ex Borland) è giunto alla quarta versione. L'azienda produttrice ha cambiato nome per evidenziare il fatto che ora si rivolge soprattutto al mercato enterprise, tuttavia accanto al nome di Delphi è stato mantenuto il marchio che lo ha reso famoso: Borland.

Anche la v4 di Delphi è disponibile in diversi allestimenti, Standard, Professional e Client/Server per meglio venire incontro alle esigenze di diversi tipi di utenti; a questi si aggiungerà il Delphi Enterprise, spesso citato nei manuali ma ancora assente nel sito del produttore.
Noi abbiamo provato il Delphi Professional esaminandone i seguenti aspetti:


Il CD

Il CD nel quale viene distribuito il prodotto contiene 547 MB di dati. La funzione autorun ci presenta una finestra dalla quale è possibile avviare l'installazione di 3 diversi software: l'ambiente di sviluppo, l'InstallShield Express 2.02 (ovvero il generatore di installazioni, qui in versione custom, cioè ridotta, per Delphi 4) e il Local InterBase 5.1.1 (una versione ridotta del server SQL leggero ed efficiente dell'Imprise).
Tuttavia il contenuto del CD non si esaurisce qui: al suo interno troviamo anche i manuali originali in inglese in formato PDF (è inclusa la v3.01 di Acrobat reader) e una FAQ in formato html, il Delphi 1.02 per creare applicazioni a 16 bit (le versioni successive alla 1.02 producono solo codice a 32 bit), un demo di C++ Builder (semplici filmati AVI con alcuni documenti Word) e i browser di Netscape e Microsoft; c'è inoltre la solita cartella RunImage contenente tutto il Delphi 4 in forma decompressa, utile per una installazione "di fortuna" basata sull'uso del CD-ROM.


L'ambiente di sviluppo

L'IDE è stato oggetto di interessanti modifiche. Innanzi tutto ci sono il nuovo Code Explorer e le funzioni Module Navigation e Code Browsing che permettono di spostarsi all'interno del codice con una facilità senza precedenti. Il Code Explorer è un treeview che appare accanto alla classica finestra per l'editing del sorgente (vedi figura);Editor e Code Explorer
al suo interno troviamo un elenco gerarchico di tutti gli identificatori globali presenti in una unit: le classi con i loro membri, le interfacce, le variabili e le costanti, le procedure e le unit utilizzate dal modulo corrente. Per ogni gruppo di elementi c'è un nodo dell'albero con numerosi sottonodi. Il Code Explorer è utile in diversi modi: fornisce una visione d'insieme del contenuto di una unit, permette di spostarsi con la semplicità di un doppio click nel punto in cui è definito qualsiasi identificatore e permette di editare al suo interno per aggiungere o rinominare un elemento.
La funzione Module Navigation consente di saltare dal prototipo di un metodo situato nella sezione interface di un modulo al suo codice nella sezione implementation (e viceversa) mediante semplici combinazioni di tasti (Ctrl-Shift-Up oppure Ctrl-Shift-Down). Nella stessa scia si inserisce il Code Browser: quando il mouse si trova su un identificatore basta premere il tasto Ctrl e quel nome si trasforma in un link sul quale si può cliccare per saltare alla sua dichiarazione; inoltre nell'angolo superiore destro dell'editor troviamo i tasti Back e Forward tipici di un browser per Internet. Insomma è stato fatto tutto il possibile per far sì che il programmatore non debba mai più scorrere il sorgente avanti e indietro con i tasti cursore o la scroll bar alla disperata ricerca del codice di una routine: ora si può saltare a colpo sicuro fino alla riga cercata.

Tooltip Symbol InsightSempre per quanto riguarda l'editing, c'è da dire che le le funzioni di Code Insight sono state ampliate con l'aggiunta di Tooltip Symbol Insight e di Class Completion. Ogni volta che il mouse si ferma su un identificatore nel'editor o su un componente in una form, Tooltip Symbol Insight visualizza un piccolo hint contenente la dichiarazione di quell'elemento (vedi figura).
Per quanto riguarda Class Completion, la sua utilità può essere facilmente spiegata con un esempio. Scrivendo il codice seguente nella sezione interface

  type TMyButton = class(TButton)
    public
      property Size: Integer;
  end;

e premendo semplicemente Ctrl-Shift-C, Delphi lo completa in questo modo:

  type TMyButton = class(TButton)
    private
      FSize: Integer;
      procedure SetSize(const Value: Integer);
    public
      property Size: Integer read FSize write SetSize;
  end;

ed inoltre aggiunge questo codice nella sezione implementation:

  { TMyButton }
  procedure TMyButton.SetSize(const Value: Integer);
  begin
    FSize := Value;
  end;

Ma le novità non sono finite: nell'elenco dobbiamo ancora annotare il fatto che tutte le finestre sono ora dockable e quindi l'ambiente può essere personalizzato con una libertà prima impensabile; inoltre il project manager adesso può gestire un intero gruppo di progetti correlati (ad esempio un eseguibile e le sue DLL).

Un discorso a parte lo merita il debugger integrato poiché le novità sono veramente numerose. E' stato aggiunto il supporto per il debugging multi-processo mediante un potenziamento delle finestre Module View e Thread View che sono diventate multi-process aware.Il Debug Inspector E' ora disponibile una finestra Inspector che permette di analizzare e modificare lo stato di qualsiasi oggetto; abbiamo inoltre una finestra Event Log che fornisce un resoconto di tutti gli eventi notevoli (messaggi, caricamento e scaricamento di moduli, eccezioni e breakpoint); una finestra CPU e una per l'ispezione delle variabili locali. La finestra Module View è ora divisa in tre parti ed elenca, oltre ai nomi dei moduli, anche i file sorgenti per il modulo selezionato e i nomi delle routine esportate.
I breakpoint di Delphi 4 sono ancora più flessibili di quanto non fossero in Delphi 3 perché non sono più vincolati all'esecuzione di una specifica riga di codice: si può avere un'interruzione anche quando viene eseguita un'istruzione ad un indirizzo di memoria assegnato (Address Breakpoint), quando viene modificata un'area di memoria (Data Breakpoint) o infine quando viene caricato un modulo (Module Load Breakpoint).


Le novità del linguaggio

Una novità di notevole interesse è costituita dagli array dinamici che, in quanto tali, possono essere ridimensionati a piacere e possono anche essere di forma non rettangolare. Pensate, ad esempio, ad una matrice con una colonna molto più lunga delle altre e avrete subito un'idea del risparmio di memoria a costo zero.
Prima di utilizzare gli array dinamici raccomando di leggere attentamente l'help o i manuali (o anche soltanto questo articolo!) perché la loro implementazione è un po' insidiosa e può indurre in errore. Questi array, infatti, sono implementati mediante "reference counting": la variabile array è un puntatore ad un'area di memoria assegnata dinamicamente alla quale è associato un contatore che tiene traccia del numero di array allocati in quella stessa area di memoria. Se, ad esempio, A e B sono array dinamici, l'istruzione B := A fa sì che B punti allo stesso blocco di memoria di A (non viene effettuata alcuna copia) e che il contatore venga incrementato di 1. Se ora modifichiamo un elemento di B, questa modifica si riflette anche su A (e viceversa). Anche le già note stringhe dinamiche utilizzano il reference counting ma, per evitare il problema appena descritto, lo associano al copy-on-write (la stringa da modificare viene copiata automaticamente in un'altra area di memoria e il vecchio contatore viene decrementato). Dunque non bisogna pensare che gli array dinamici siano implementati allo stesso modo delle stringhe dinamiche: lo sono solo per metà.

Altre due novità sono l'overloading dei metodi e i parametri di default, caratteristiche da sempre presenti nel C++ e in Java ma finora estranee al Pascal. L'overloading, in particolare, consiste nella possibilità di dichiarare più metodi con lo stesso nome a condizione che l'elenco dei parametri sia diverso.

Un'altra innovazione, più elementare ma non meno interessante, è l'introduzione di nuovi tipi di dato. Finalmente fa la sua comparsa il tipo LongWord (un intero senza segno a 32 bit) atteso da anni per sanare quella curiosa asimmetria tipica del Pascal in cui gli interi a 32 bit erano disponibili soltanto in versione signed mentre quelli a 8 e a 16 bit esistevano anche in versione unsigned. Insieme al tipo LongWord compaiono gli interi a 64 bit, ma solo in versione signed: sì, un'altra asimmetria che speriamo venga sanata in tempi più brevi.

Infine un'ultima novità, più sofisticata, tanto che non è opportuno approfondirla in questa sede, è la possibilità di delegare l'implementazione di un'interfaccia ad una proprietà di una classe.


Le novità della VCL

La Visual Component Library di Delphi 4 (la grossa gerarchia di classi su cui si basa la programmazione in Delphi) è stata ulteriormente arricchita.
Prima di tutto bisogna citare il nuovo componente ActionList la cui importanza risulta evidente se si considera che è stato inserito nel foglio Standard della component palette ed è la prima volta che questo foglio viene ampliato. Una ActionList permette di centralizzare elegantemente la gestione di controlli che hanno funzioni equivalenti, ad esempio un bottone di una tool bar e la voce di menu corrispondente. Una azione è semplicemente un comando impartito dall'utente agendo su un controllo (ad esempio un click su un bottone). I controlli della VCL hanno ora una nuova proprietà chiamata Action che permette di collegarli ad una delle azioni di una ActionList; stabilito questo collegamento diventa possibile, ad esempio, disattivare in un colpo solo tutti i controlli corrispondenti a quell'azione.

Le classi TControl e TWinControl sono state modificate per implementare il docking, inoltre TControl ha due nuove proprietà molto utili: Anchors e Constrains che intervengono quando una form viene ridimensionata.
E' stato aggiunto il supporto per l'Intellimouse e per i monitor multipli di Windows 98, ci sono il PageScroller e le Flat Scrollbars di Windows 98 e il componenente Control Bar simile alle toolbar di Office.
La serie di componenti per Internet è stata totalmente rinnovata e al posto degli OCX troviamo ora componenti nativi Delphi.


Altre novità

Sul versante DBMS la maggior parte delle innovazioni è confinata nella versione Client/Server che implementa il supporto per MIDAS, CORBA, MTS, Oracle 8 ed Informix 9: si tratta certamente delle novità più importanti per quei professionisti che sviluppano applicazioni di grosso calibro. Nella versione Professional, invece, le novità di rilievo sono il supporto per Access 97 e la possibilità di creare, rinominare e cancellare tabelle direttamente dal form designer.

Per quanto riguarda l'internazionalizzazione delle applicazioni, fa la sua comparsa un utile Resource DLL WizardIl Resource DLL Wizard che esamina un progetto e genera tutti i file necessari per la creazione di una DLL contenente quelle risorse che devono essere modificate in base alla lingua del programma. Le form di questa DLL possono poi essere editate (e quindi tradotte) nell'IDE anche senza il codice sorgente mentre per le risorse di tipo stringa è stato creato un nuovo editor apposito. Peccato che questa stessa versatilità non sia riscontrabile nella Custom Edition dell'InstallShield Express che supporta solo l'inglese e quindi per avere le altre lingue, o anche solo l'italiano, bisogna rimettere mano al portafogli.

Tra i miglioramenti riguardanti ActiveX citiamo il supporto per il formato TypeLib 2 e un wizard per la creazione di oggetti COM, inoltre l'Automation wizard fornisce il supporto opzionale per la gestione degli eventi.


I manuali e l'help

La copia del prodotto giunta in redazione era priva di manuali cartacei e quindi abbiamo concentrato la nostra attenzione su quelli in lingua inglese contenuti nel CD. Si tratta di 3 volumi intitolati Quick Start (72 pagine), Object Pascal Language Guide (236 pagine), e Developer's Guide (968 pagine); oltre a questi ci sono i manuali di InterBase (5 volumi per un totale di 1464 pagine).
Il primo dei 3 manuali sul Delphi descrive l'uso e la personalizzazione dell'IDE, fornisce una panoramica delle potenzialità di Delphi e guida il lettore passo dopo passo nella scrittura del suo primo programma (un semplice database browser già visto nella v3 di Delphi ed ora arricchito con alcuni nuovi componenti della VCL).
Il secondo volume è diviso in due parti. La prima parte, Basic Language Description, fornisce informazioni per lo più già note anche per chi non ha mai usato Delphi ma conosce il buon vecchio Borland Pascal: rispetto a quest'ultimo ci sono alcuni nuovi tipi di dato e qualche reserved word in più. La seconda parte, Special Topics, parla dell'uso di DLL, package e interfacce, di gestione della memoria e uso di codice assembler inline.
Il terzo volume è il più ricco e interessante. E' diviso in 5 parti, dai titoli autoesplicativi:

  • Programming with Delphi
  • Developing database applications
  • Writing distributed applications
  • Creating custom components
  • Developing COM-based applications

Da notare che alcuni capitoli fanno riferimento a caratteristiche disponibili solo nella versione Client/Server di Delphi, giusto per far venire l'acquolina in bocca a chi ha comprato una versione più economica del prodotto.
La qualità dei manuali è ottima: la lettura procede piacevole, veloce e senza intoppi; non resta che sperare che la traduzione italiana sia all'altezza dell'edizione inglese. Si nota la mancanza di un volume dedicato alla VCL, ormai documentata solo nell'help.

L'help on line è molto più ricco dei manuali, e infatti questi ultimi rimandano in varie occasioni all'help per gli approfondimenti. E' ormai lontano il tempo in cui gli help si limitavano a dire "Ulteriori informazioni a pagina X del manuale"!
Ad installazione ultimata troviamo nel menu Avvio, sotto la voce Programmi\Borland Delphi 4\Help, ben 22 link che fanno riferimento a file HLP. Il contenuto di alcuni di questi file ricalca fedelmente quello dei manuali ma sono presenti quegli approfondimenti che lì mancavano. Troviamo inoltre gli help file dell'SDK di Microsoft, indispensabili per i programmatori più esperti perché contengono informazioni sulle API Win32, MAPI, OLE, OpenGL ed altro ancora.


Indirizzi utili

Sui siti Inprise in Italia e in America sono presenti numerose pagine dedicate a Delphi; qui di seguito vi propongo i link a quelle che mi sembrano più importanti.

 

Scheda del prodotto
 Nome:
 Produttore:
 Referente italiano:
 Requisiti principali:
 Prezzi (IVA escl.):
Delphi 4 Professional
Inprise Corporation
I.S.S.
16 MB RAM, 160 MB HD

Primo acquisto: 
Upgrade:
Educational x1:
Educational x10:
Educational >30: 
1.460.000
559.000
559.000
1.460.000
clicca qui