prof. cleto azzani ipsia “moretto ”–brescia -italy
TRANSCRIPT
11
profprof. . CletoCleto AzzaniAzzaniIPSIA IPSIA ““MorettoMoretto”” –– BRESCIA BRESCIA -- ITALYITALY
PRELIMINARY PRELIMINARY FEBFEB. 2009. 2009
22
IntroduzioneIntroduzione
�� Il Il nomenome Delphi Delphi sisi éé ispiratoispirato allaalla cittcittàà didi DelfiDelfi, , la localitla localitàà
nella Grecia antica, in cui era possibile consultare nella Grecia antica, in cui era possibile consultare
l'oracolo di Delfil'oracolo di Delfi. Il nome . Il nome èè dovuto al fatto che gli dovuto al fatto che gli
sviluppatori del compilatore stavano realizzando uno sviluppatori del compilatore stavano realizzando uno
strumento in grado di interfacciarsi ai database Oracle strumento in grado di interfacciarsi ai database Oracle
(da cui oracolo di cui il pi(da cui oracolo di cui il piùù famoso famoso èè quello di Delfi).quello di Delfi).
�� Delphi Delphi éé un un linguaggiolinguaggio didi programmazioneprogrammazione orientatoorientato agliagli
oggettioggetti (OBJECT PASCAL), (OBJECT PASCAL), basatobasato sullasulla
programmazioneprogrammazione visualevisuale in cui il programmatore utilizza in cui il programmatore utilizza
una serie di icone per ricreare tutti gli oggetti sullo una serie di icone per ricreare tutti gli oggetti sullo
schermo di Windows.schermo di Windows.
33
StoriaStoria
�� Il Il linguaggiolinguaggio PASCAL (PASCAL (nomenome sceltoscelto per per onorareonorare ililmatematicomatematico e e filosofofilosofo BLAISE PASCAL) BLAISE PASCAL) èè statostato ideatoideatonelnel 1968 1968 daldal profprof. . NiklausNiklaus Wirth del Wirth del politecnicopolitecnico didi ZurigoZurigo. .
�� NelNel 1983 la software house americana Borland 1983 la software house americana Borland International introduce International introduce sulsul mercatomercato ilil linguaggiolinguaggio ““Turbo Turbo PascalPascal””..
�� NelNel 1994, 1994, nascenasce Delphi 1 in Delphi 1 in coincidenzacoincidenza con con ilil ritornoritorno didiBorland al Borland al segmentosegmento deidei linguaggilinguaggi didi programmazioneprogrammazione..
�� Delphi viene presentato come RAD Delphi viene presentato come RAD RapidRapid ApplicationApplicationDevelopmentDevelopment
44
EvoluzioniEvoluzioni e e CuriositCuriositàà
ÈÈ il grande boom di Internet. Delphi 3 porta il supporto per la il grande boom di Internet. Delphi 3 porta il supporto per la creazione di applicazioni Internet con CGI e ISAPI / NSAPI. E creazione di applicazioni Internet con CGI e ISAPI / NSAPI. E 'stato il primo strumento con il supporto per la costruzione di 'stato il primo strumento con il supporto per la costruzione di applicazioni applicazioni multimulti--tiertier (con DCOM), con ambiente RAD (MIDAS)(con DCOM), con ambiente RAD (MIDAS)
19971997
Dopo il lancio di Windows 95, prima versione di Windows a 32 Dopo il lancio di Windows 95, prima versione di Windows a 32 bit, esce Delphi 2 che mantiene la totale compatibilitbit, esce Delphi 2 che mantiene la totale compatibilitàà con la con la versione a 16 versione a 16 bitsbits..La nuova versione migliora in modo significativo la costruzione La nuova versione migliora in modo significativo la costruzione di applicazioni Client/Server.di applicazioni Client/Server.
19951995
Nasce Delphi 1 , versione 16 Nasce Delphi 1 , versione 16 bitsbits per Windows 3.0.per Windows 3.0.
Sistema di sviluppo rivoluzionario: in meno di 3 mesi guadagna Sistema di sviluppo rivoluzionario: in meno di 3 mesi guadagna una considerevole fetta del mercato. Primo una considerevole fetta del mercato. Primo tooltool RAD 100% RAD 100% orientato agli oggetti.orientato agli oggetti.
19941994
55
EvoluzioniEvoluzioni e e CuriositCuriositàà
Delphi 4 ha il sostegno dei piDelphi 4 ha il sostegno dei piùù recenti modelli di mercato, recenti modelli di mercato,
come CORBA e Oracle 8, portando un aumento della come CORBA e Oracle 8, portando un aumento della
produttivitproduttivitàà dell'ambiente di sviluppo, con la possibilitdell'ambiente di sviluppo, con la possibilitàà di di
debugdebug remoto delle applicazioni, e remoto delle applicazioni, e wizardwizard per la costruzione di per la costruzione di
controlli controlli ActiveXActiveX//ActiveFormsActiveForms..
19981998
Il formato XML, novitIl formato XML, novitàà del momento, del momento, èè pienamente supportato pienamente supportato
da Delphi 5 che anticipa i concorrenti nella manipolazione dei da Delphi 5 che anticipa i concorrenti nella manipolazione dei
file XML confermando la sua caratteristica di sostegno di file XML confermando la sua caratteristica di sostegno di
Borland alle varie tecnologie. Borland offre pure una serie di Borland alle varie tecnologie. Borland offre pure una serie di
componenti per l'uso della tecnologia ADO (Microsoft). Gli componenti per l'uso della tecnologia ADO (Microsoft). Gli
strumenti strumenti TeamSourceTeamSource TranslationSuiteTranslationSuite sono anche novitsono anche novitàà di di
questa versione. questa versione.
19991999
66
EvoluzioniEvoluzioni e e CuriositCuriositàà
NET. NET. èè la novitla novitàà del momento. Borland non potrdel momento. Borland non potràà mai lasciare mai lasciare
che questo accada. Delphi 7, mantiene la piena compatibilitche questo accada. Delphi 7, mantiene la piena compatibilitàà
con le versioni precedenti, e ora permette agli sviluppatori di con le versioni precedenti, e ora permette agli sviluppatori di
fornire le loro applicazioni di girare sulla piattaforma NET.fornire le loro applicazioni di girare sulla piattaforma NET.
20022002
La stella del momento La stella del momento èè rappresentata da Linux e Borland rappresentata da Linux e Borland èè il il
primo ad offrire uno strumento RAD nativo "primo ad offrire uno strumento RAD nativo "CrossCross--piattaformapiattaforma". ".
I Web I Web ServicesServices sono stati inoltre potenziati; Delphi 6 sono stati inoltre potenziati; Delphi 6 èè il primo il primo
strumento commerciale ad avere il supporto per queste strumento commerciale ad avere il supporto per queste
tecnologie. Nasce Kylix, Delphi per Linux; ma anche tecnologie. Nasce Kylix, Delphi per Linux; ma anche BizSnapBizSnap, ,
DataSnapDataSnap e e WebSnapWebSnap..
20012001
77
Ambiente DelphiAmbiente Delphi
88
Ambiente DelphiAmbiente Delphi
Questa Questa èè la barra degli strumenti principali per Delphi. Attraverso essala barra degli strumenti principali per Delphi. Attraverso essa si ha lsi ha l’’accesso a accesso a tutte le caratteristiche che consentono di costruire visualmentetutte le caratteristiche che consentono di costruire visualmente la vostra applicazione.la vostra applicazione.
Nella pagina standard, per esempio, si ha lNella pagina standard, per esempio, si ha l’’accesso a oggetti come caselle di testo, accesso a oggetti come caselle di testo, oggetti combo, oggetti combo, radioradio--buttonbutton, box di verifica, memo (raccoglitori di testo) e altro , box di verifica, memo (raccoglitori di testo) e altro ancora.ancora.
��Palette Palette deidei componenticomponenti
99
Ambiente DelphiAmbiente Delphi
�� La La FormForm èè il punto centrale di qualsiasi applicazione Delphi e costituiscil punto centrale di qualsiasi applicazione Delphi e costituisce le l’’area su cui vengono area su cui vengono collocati i vari oggetti via via che lcollocati i vari oggetti via via che l’’applicativo si sviluppa. La applicativo si sviluppa. La formform èè equivalente ad una finestra di equivalente ad una finestra di Windows. In questa finestra, Windows. In questa finestra, èè necessario posizionare i componenti o oggetti (combo, la casellnecessario posizionare i componenti o oggetti (combo, la casella a di riepilogo, ecc) e scrivere il codice di riepilogo, ecc) e scrivere il codice ObjectObject Pascal coinvolto negli eventi di componenti Pascal coinvolto negli eventi di componenti selezionati. Tutto ciò che viene collocato sulla selezionati. Tutto ciò che viene collocato sulla formform, viene registrato in un file (. DFM) allegato al , viene registrato in un file (. DFM) allegato al progetto della applicazione. Anche se questo file progetto della applicazione. Anche se questo file èè registrato in formato binario, esso viene registrato in formato binario, esso viene correttamente aperto e letto da Delphi.correttamente aperto e letto da Delphi.
FORMFORM
1010
AmbienteAmbiente DelphiDelphi
�� CODE EDITORCODE EDITOR
La finestra Code Editor La finestra Code Editor èèesattamente il luogo in cui il esattamente il luogo in cui il programma viene scritto. programma viene scritto. Il codice che gestisce gli Il codice che gestisce gli eventi, che riguardano i vari eventi, che riguardano i vari componenti collocati sulla componenti collocati sulla formform, serve a Delphi per , serve a Delphi per rispondere alle sollecitazioni rispondere alle sollecitazioni delldell’’utente (click su un utente (click su un bottone, cambiamento del bottone, cambiamento del contenuto di una contenuto di una editedit box, box, ecc.). ecc.). Il codice scritto in Il codice scritto in ObjectObjectPascal viene registrato in un Pascal viene registrato in un file con estensione (. PAS), file con estensione (. PAS), che sarche saràà chiamato UNIT.chiamato UNIT.
1111
AmbienteAmbiente DelphiDelphi
�� EE’’ importanteimportante saperesapere chechetuttotutto quelloquello cheche vieneviene scrittoscrittonellanella UNIT UNIT vieneviene decisodecisodalldall’’utenteutente. .
�� Delphi Delphi cici dada unauna manomanoscrivendoscrivendo dada solo la solo la maggiormaggiorparte del parte del codicecodice e e inserisceinserisceneinei puntipunti opportuniopportuni le le istruzioniistruzioni cheche ililprogrammatoreprogrammatore vuolevuoleintrodurreintrodurre. .
1212
AmbienteAmbiente DelphiDelphi�� OBJECT INSPECTOROBJECT INSPECTOR
Questo Questo importantissimoimportantissimostrumentostrumento ausiliarioausiliario didiDelphi Delphi permettepermette didimodificaremodificare gligli attributiattributi deideicomponenticomponenti e e delladella ““formform””usateusate nellanella applicazioneapplicazione. . Alcuni degli attributi o Alcuni degli attributi o
PROPRIETAPROPRIETA’’ potrebbero potrebbero essere: il colore del testo, il essere: il colore del testo, il colore dello sfondo, il tipo di colore dello sfondo, il tipo di carattere e coscarattere e cosìì via. via. Inoltre Inoltre èè attraverso attraverso
““OBJECT INSPECTOROBJECT INSPECTOR””possiamo pianificare quello possiamo pianificare quello che deve accadere quando che deve accadere quando l'utente fa clic su un l'utente fa clic su un pulsante, selezionare pulsante, selezionare un'opzione, relativo alla un'opzione, relativo alla formform, etc. (EVENTI)., etc. (EVENTI).
1313
EventiEventi
�� Gli eventi sono blocchi di istruzioni che vengono associate al Gli eventi sono blocchi di istruzioni che vengono associate al verificarsi di alcune attivitverificarsi di alcune attivitàà oppure a una azione da intraprendere.oppure a una azione da intraprendere.
�� Un linguaggio di programmazione Un linguaggio di programmazione ““orientato agli eventiorientato agli eventi”” non non èènecessariamente una struttura logica dotata di un inizio e di unnecessariamente una struttura logica dotata di un inizio e di una a fine; fine; èè piuttosto una sequenza di comandi, che viene eseguita solo piuttosto una sequenza di comandi, che viene eseguita solo nel momento in cui si verifica un evento. nel momento in cui si verifica un evento.
1414
EventiEventi�� Delphi ha piDelphi ha piùù di 130 eventi predefiniti, che sono associati al di 130 eventi predefiniti, che sono associati al
verificarsi di azioni nelle diverse classi. verificarsi di azioni nelle diverse classi. Un evento può essere associato a :Un evento può essere associato a :
�� il clic o il movimento del mouse;il clic o il movimento del mouse;�� Utilizzo della la tastiera; Utilizzo della la tastiera; �� Operazioni su finestre (apertura, chiusura, creazione, Operazioni su finestre (apertura, chiusura, creazione,
ridimensionamento, spostamento, ...); ridimensionamento, spostamento, ...); �� Errori di esecuzione etc.Errori di esecuzione etc.
1515
EventiEventi
�� EventiEventi comunicomuni::
�� OnClickOnClick: si verifica quando un utente effettua una click con il tasto s: si verifica quando un utente effettua una click con il tasto sinistro inistro del mouse.del mouse.
�� OnCreateOnCreate: si verifica quando l'oggetto viene creato.: si verifica quando l'oggetto viene creato.
�� OnChangeOnChange: si verifica quando il contenuto di una : si verifica quando il contenuto di una EditEdit o di una Memo o di una Memo subisce un cambiamento.subisce un cambiamento.
�� On Active: On Active: si verifica quando il programma attiva l'oggetto per la prima si verifica quando il programma attiva l'oggetto per la prima volta, o quando si torna da un'altra applicazione.volta, o quando si torna da un'altra applicazione.
1616
TipologieTipologie didi DatiDati
1717
TipoTipo IntegerInteger
Le Le tipologietipologie ““integerinteger”” vengonovengono usateusate per per rappresentarerappresentare quantitquantitàà intereintere. .
EsistonoEsistono varivari tipi tipi differentidifferenti didi variabilivariabili intereintere ::
SISI323244--223131 .. +2.. +23131--11LONGINTLONGINT
NONO3232440 .. 20 .. 23232--11CARDINALCARDINAL
SISI323244--223131 .. +2.. +23131--11INTEGERINTEGER
SISI161622--32768 .. +3276732768 .. +32767SMALLINTSMALLINT
SISI8811--128 .. +127128 .. +127SHORTINTSHORTINT
NONO1616220..655350..65535WORDWORD
NONO88110..2550..255BYTEBYTE
SEGNOSEGNOBITBITBYTESBYTESINTERVALLOINTERVALLO--VALORIVALORITIPOTIPO
1818
Ripassiamo !!!Ripassiamo !!!Kilo, mega e giga in ambito DIGITALEKilo, mega e giga in ambito DIGITALE
4G4G1G x 41G x 41024 x 1024 x 1024 x 41024 x 1024 x 1024 x 4221010 221010 221010 2222443232
1G1G1M x 1K1M x 1K1024 x 1024 x 10241024 x 1024 x 1024221010 221010 2210103030
16M16M1M x 161M x 161024 x 1024 x 161024 x 1024 x 16221010 221010 2244332424
1M1M1K x 1K1K x 1K1024 x 10241024 x 1024221010 2210102020
64K64K1024 x 641024 x 64221010 2266221616
32K32K1024 x 321024 x 32221010 22551515
16K16K1024 x 161024 x 16221010 22441414
8K8K1024 x 81024 x 8221010 22331313
4K4K1024 x 41024 x 4221010 22221212
2K2K1024 x 21024 x 2221010 22111111
1K1K102410242210101010
COMBINAZIONICOMBINAZIONIBYTESBYTESN BITN BIT
1919
Tipo RealTipo Real
Le tipologie di dati “Real” sono progettati per rappresentare quantità numeriche dotate di parte frazionaria. In tabella sono riportati i vari tipi “real”:
�� NOTA: Il tipo COMP NOTA: Il tipo COMP èè in realtin realtàà un INTERO grande, e non un numero reale. Il tipo COMP un INTERO grande, e non un numero reale. Il tipo COMP èèstato incluso in questa tabella in quanto esso viene implementatstato incluso in questa tabella in quanto esso viene implementato con le stesse tecniche dei o con le stesse tecniche dei dati dati ““floatingfloating--pointpoint”” (virgola mobile). In effetti, si tratta di un numero intero a 6(virgola mobile). In effetti, si tratta di un numero intero a 64 bit.4 bit.
88Signed 64 bitSigned 64 bit1919--2020--9.2E18..9.2E189.2E18..9.2E18COMPCOMP
10101919--20203.4E3.4E--4932..1.1E49324932..1.1E4932EXTENDEDEXTENDED
881515--16165E5E--324..1.7E308324..1.7E308DOUBLEDOUBLE
4477--881.5E1.5E--45..3.4E3845..3.4E38SINGLESINGLE
661111--12122.9E2.9E--39..1.7E3839..1.7E38REALREAL
BytesBytesCifreCifreSignificativeSignificative
Range Range didi valorivaloriTipiTipi
2020
Tipo Tipo didi datidati ““valutavaluta”” (currency)(currency)
��Tipo Tipo didi datodato usatousato esclusivamenteesclusivamente per per rappresentarerappresentare valorivalori monetarimonetari;;
��Il tipo dati Il tipo dati ““valutavaluta”” ha una precisione di 4 cifre decimali, ed ha una precisione di 4 cifre decimali, ed èè conservato come conservato come un intero a 64 bitun intero a 64 bit
��ÈÈ possibile chiedersi il motivo per cui si dovrebbe usare il tipopossibile chiedersi il motivo per cui si dovrebbe usare il tipo dati valuta dati valuta piuttosto che il tipo dati piuttosto che il tipo dati realreal. Il Tipo dati valuta offre due importanti vantaggi:. Il Tipo dati valuta offre due importanti vantaggi:
��Il tipo valuta ha una maggiore precisione nella rappresentazioneIl tipo valuta ha una maggiore precisione nella rappresentazione di numeri di numeri grandi.grandi.
�� Il tipo dati valuta Il tipo dati valuta èè usato unitamente al usato unitamente al CurrencyFieldCurrencyField e in altri componenti. e in altri componenti. ÈÈcompatibile con i tipi di database nella rappresentazioni di quacompatibile con i tipi di database nella rappresentazioni di quantitntitàà di denaro.di denaro.
2121
TipoTipo didi datidati BooleanBoolean
�� Il tipo di dati Il tipo di dati booleanboolean èè uno dei piuno dei piùù semplici e pisemplici e piùù utilizzati. Variabili utilizzati. Variabili di tale tipologia rappresentano quantitdi tale tipologia rappresentano quantitàà logiche che possono logiche che possono assumere due soli valori: VERO o FALSO.assumere due soli valori: VERO o FALSO.
�� Le variabili di tipo booleano possono contenere valori che derivLe variabili di tipo booleano possono contenere valori che derivano ano da espressioni condizionali; che verranno discusse pida espressioni condizionali; che verranno discusse piùù avanti.avanti.
2222
TipoTipo datidati CarattereCarattere
●Tipo di dato progettato per memorizzare un carattere;
●Delphi permette anche l'uso del sistema di caratteri Unicode.
�Unicode è uno standard che consente di rappresentare e manipolare, in modo coerente, il testo di qualsiasi sistema di scrittura esistente utilizzando 2 bytes.
CarattereCarattere UNICODEUNICODE22WIDECharWIDEChar
CarattereCarattere ANSIANSI11ANSIChar o CharANSIChar o Char
ContenutoContenutoBytesBytesTipo Tipo didi CarattereCarattere
2323
Tipo StringTipo StringIn Delphi, il tipo di dati STRING è, in un certo senso, una concatenazione di caratteri singoli fino ad un massimo di 255. Un altro termine usato per definire il tipo STRING è “array di char” o “array di caratteri”. Nella tabella che segue vengono presentati i 4 tipi STRING disponibili in Delphi.
Le Le stringhestringhe didi carattericaratteri didi lunghezzalunghezza superioresuperiore a 255 a 255 carattericaratteri vengonovengono allocate allocate dinamicamentedinamicamente..
SISIWideCharWideChar~1.5GB~1.5GBWideStringWideString
SI o NOSI o NOANSICharANSIChar~3GB~3GBStringString
SISIANSICharANSIChar~3GB~3GBAnsiStringAnsiString
NONOANSICharANSIChar255255ShortStringShortString
TerminatoreTerminatoreNULL NULL
ContenutoContenutoLunghezzaLunghezzaTipo StringTipo String
2424
TipoTipo RecordRecord
�� Il tipo dati Il tipo dati ““recordrecord”” èè probabilmente il tipo dati piprobabilmente il tipo dati piùù versatile disponibile versatile disponibile in Delphi perchin Delphi perchéé può contenere dati di tipo eterogeneo.può contenere dati di tipo eterogeneo.
�� Non Non èè possibile utilizzare un possibile utilizzare un arrayarray per contenere dati di tipo differente. per contenere dati di tipo differente.
Un Un ArrayArray può contenere solo dati dello stesso tipo.può contenere solo dati dello stesso tipo.
�� ArrayArray[1..50] of Integer; Array[1..20] of Real; Array[1..10] of Boole[1..50] of Integer; Array[1..20] of Real; Array[1..10] of Boolean;an;
��CorrispondeCorrisponde al al costruttorecostruttore didi tipotipo strutturatostrutturato ““structstruct”” del del linguaggiolinguaggio C.C.
2525
typetypeStipendioStipendio = Record= Record
Nome: String;Nome: String;Data_ContData_Cont: : TDateTimeTDateTime;;SalarioSalario: currency;: currency;
end;end;
varvarStipendi_AprileStipendi_Aprile: : StipendioStipendio;;
beginbegin
Stipendi_AprileStipendi_Aprile.Nome.Nome := := ‘‘Paola RossiPaola Rossi’’;;Stipendi_AprileStipendi_Aprile.Data_Cont.Data_Cont := 10/02/1998; // data in := 10/02/1998; // data in formatoformatoStipendi_AprileStipendi_Aprile.Salario.Salario := 2200;:= 2200;
end;end;
Si noti che Si noti che èè necessario utilizzare un punto per separare il nome del record necessario utilizzare un punto per separare il nome del record dal nome del campo. dal nome del campo. ObjectObject Pascal, e linguaggi di programmazione piPascal, e linguaggi di programmazione piùù moderni forniscono un modo pimoderni forniscono un modo piùù semplice per semplice per fare questa operazione, utilizzando lfare questa operazione, utilizzando l’’istruzione istruzione WithWith ::
beginbegin
With With Stipendi_AprileStipendi_Aprile do do beginbegin
Nome := Nome := ‘‘Paola RossiPaola Rossi’’;;Data_ContData_Cont := 10/02/1998;:= 10/02/1998;SalarioSalario := 2200;:= 2200;
end;end;
end;end;
2626
Tipo Tipo EnumerativoEnumerativo
�� Questo tipo consente di creare un elenco organizzato di elementiQuesto tipo consente di creare un elenco organizzato di elementi. . Ad esempio, un tipo enumerativo che descrive il giorno della setAd esempio, un tipo enumerativo che descrive il giorno della settimana può timana può essere introdotto come segue:essere introdotto come segue:
�� typetypeSettimana = (Settimana = (LunediLunedi, , MartediMartedi, , MercolediMercoledi, , GiovediGiovedi, , VenerdiVenerdi, Sabato, , Sabato, Domenica);Domenica);
�� varvargsetgset : Settimana;: Settimana;
�� Per assegnare valori appartenenti al Tipo Settimana alla variabiPer assegnare valori appartenenti al Tipo Settimana alla variabile le gsetgsetbasta semplicemente scrivere:basta semplicemente scrivere:
�� GsetGset : = : = LunediLunedi; ;
�� GsetGset := := MartediMartedi;;
�� etc.etc.
2727
Tipo Tipo ““subintervalssubintervals””
��Il tipo Il tipo ““subintervalssubintervals”” consente di impostare una valida consente di impostare una valida gamma di risposte possibili che un utente può utilizzare in un gamma di risposte possibili che un utente può utilizzare in un programma;programma;
��Un tipo Un tipo ““subintervalssubintervals”” può contenere i seguenti tipi: può contenere i seguenti tipi: booleanboolean, , carattere, intero e tipi enumerativi;carattere, intero e tipi enumerativi;
Type Type
Salario_gamma1 = 500 .. 1000;Salario_gamma1 = 500 .. 1000;
varvar
Salario_DipSalario_Dip : Salario_gamma1;: Salario_gamma1;
2828
Tipo Tipo InsiemeInsieme (Set)(Set)
�� Ad un insieme di elementi viene associato un nome; in questo mAd un insieme di elementi viene associato un nome; in questo modo odo èè possibile possibile effettuare confronti con altri valori per stabilire se essi sonoeffettuare confronti con altri valori per stabilire se essi sono inclusi o esclusi inclusi o esclusi dalldall’’insieme.insieme.
�� Un esempio potrebbe essere un insieme contenente tutte le possUn esempio potrebbe essere un insieme contenente tutte le possibili risposte di un ibili risposte di un carattere a una domanda di tipo Scarattere a una domanda di tipo Sìì/No. Le quattro risposte possono essere incluse in un /No. Le quattro risposte possono essere incluse in un insieme [ 'y', 'Y', 'Noinsieme [ 'y', 'Y', 'No‘‘, 'N']. Una volta definito questo insieme, , 'N']. Una volta definito questo insieme, èè possibile quindi possibile quindi utilizzarlo per vedere se la nostra risposta utilizzarlo per vedere se la nostra risposta èè inclusa o meno nellinclusa o meno nell’’insieme.insieme.
�� Per Per verificareverificare se un se un determinatodeterminato myinputmyinput èè inclusoincluso oppureoppure no in un no in un insiemeinsieme didi valorivaloripredeterminatopredeterminato sisi puòpuò utilizzareutilizzare la la istruzioneistruzione ININ
IfIf MyinputMyinput IN [IN [‘‘yy’’, , ‘‘YY’’, , ‘‘nn’’, , ‘‘NN’’] then ....] then ....
2929
VettoriVettori o Arrayo Array
�� Gli Gli arrayarray o matrici, sono gruppi ordinati di elementi tutti dello stesso o matrici, sono gruppi ordinati di elementi tutti dello stesso tipo.tipo.
�� Esso si avvale di un indice numerico intero che consente lEsso si avvale di un indice numerico intero che consente l’’accesso al singolo accesso al singolo elemento del gruppo.elemento del gruppo.
�� Per dichiarare una variabile come Per dichiarare una variabile come arrayarray, si può procedere come segue:, si può procedere come segue:
�� varvarGiorno_SettimanaGiorno_Settimana : Array [1..7] of string;: Array [1..7] of string;Giorno_MeseGiorno_Mese : Array [1..31] of integer; : Array [1..31] of integer;
Cifre_BCDCifre_BCD : : ArrayArray[1..10] of Byte;[1..10] of Byte;
3030
Esempio di Esempio di ArrayArray caso 1caso 1
Domenica
Sabato
Venerdì
Giovedì
Mercoledì
Martedì
LunedìQuesto vettore (Array) contiene 7 elementi, il 1°elemento è “Lunedì”, il 7°elemento è “Domenica”.
Il primo elemento o elemento di posto 1 viene indicato
Giorno_Settimana[1] = “Lunedì”
Il settimo elemento o elemento di posto 7 viene indicato
Giorno_Settimana[7] = “Domenica”
3131
Esempio di Esempio di ArrayArray caso 2caso 2
[ ]9876543210
Questo vettore (Array) contiene 10 elementi, le cifre numeriche BCD; l’elemento di posto 1 è la cifra 0; …l’elemento di posto 10 è la cifra 9.
Cifre : Array[1..10] of Byte;
3232
Tipo VariantTipo Variant
�� Le variabili di tipo VARIANT possono accettare vari tipi di valoLe variabili di tipo VARIANT possono accettare vari tipi di valori. ri. �� Uno dei principali usi di tipo VARIANT si verifica quando il Uno dei principali usi di tipo VARIANT si verifica quando il
programmatore non sa a priori quale tipo di dati verranno inseriprogrammatore non sa a priori quale tipo di dati verranno inseriti nel ti nel programma. programma.
�� Il tipo VARIANT Il tipo VARIANT èè in grado di supportare tutti i tipi di dati semplici.in grado di supportare tutti i tipi di dati semplici.�� Il codice riportato nella slide che segue presenta lIl codice riportato nella slide che segue presenta l’’uso corretto del uso corretto del
tipo VARIANTtipo VARIANT
3333
Abbiamo una flessibilitAbbiamo una flessibilitàà senza precedenti ma, tuttavia, esistono pure svantaggi nell'usosenza precedenti ma, tuttavia, esistono pure svantaggi nell'uso di di variabili di tipo variabili di tipo VariantVariant..
procedure TForm1.Button1Click(Sender: TObject);procedure TForm1.Button1Click(Sender: TObject);var var
m_valor1, m_valor2, m_valor3 : Variant;m_valor1, m_valor2, m_valor3 : Variant;m_Str1 : String;m_Str1 : String;
BeginBegin
m_valor1 := 12; // m_valor1 := 12; // vieneviene attribuitoattribuito valorevalore INTEGERINTEGERm_valor2 := 5.2; // m_valor2 := 5.2; // vieneviene attribuitoattribuito valorevalore REALREALm_valor3 := m_valor1 * m_valor2;m_valor3 := m_valor1 * m_valor2;m_Str1 := m_valor3; // m_Str1 := m_valor3; // vieneviene attribuitoattribuito al al risultatorisultato ilil valorevalore convertitoconvertito
End;End;
Esempio utilizzo dati tipo VARIANT
3434
PuntatoriPuntatoriI puntatori in Object Pascal hanno lo stesso potere di puntatori in C/C++, ma sono molto meno utilizzati.
Diamo un'occhiata ad alcuni raffronti di sintassi dei puntatori in Delphi e C.
PMessaggio: ^String[40];char* punt_char;
var Puntatore_integer: ^integer;int* Puntatore_int;Esempi
var punt: ^tipo;tipo* nome_variabile;Dichiarazione
Delphi (Pascal)CLINGUAGGIO
3535
PuntatoriPuntatoriPer utilizzare i puntatori è fondamentale rendere il loro punto di riferimento corretto. Un valore “nil” o un puntatore non valido può essere causa di interruzione del programma. Per utilizzare il valore di riferimento da un sottolineato, utilizzare la seguente sintassi:
a^ := a^ + 1;*a =*a + 1;
a := b^;a = *b;Esempi
puntatore^* puntatore;Sintassi
Delphi (Pascal)CLINGUAGGIO
3636
DichiarazioneDichiarazione didi costanticostanti
�� Le costanti servono per memorizzare informazioni o valori che noLe costanti servono per memorizzare informazioni o valori che non n cambiano nel corso del programmacambiano nel corso del programma
�� ConstConstPI = 3.1416;PI = 3.1416;LinguaggioLinguaggio : String = : String = ‘‘DelphiDelphi’’;;giornigiorni : array [0..6] of String[9] = (': array [0..6] of String[9] = ('Domenica',Domenica',‘‘LunedLunedìì',',
‘‘MartedMartedìì',',‘‘MercoledMercoledìì',',‘‘GiovedGiovedìì',',‘‘VenerdVenerdìì','Sabato','Sabato');');
I valori delle costanti vengono inseriti nella fase di compilaziI valori delle costanti vengono inseriti nella fase di compilazione; i valori one; i valori vengono impostati staticamente.vengono impostati staticamente.
3737
DichiarazioneDichiarazione didi VariabileVariabile
�� Il nome della variabile deve essere univoco in ogni blocco del Il nome della variabile deve essere univoco in ogni blocco del programma; può essere lungo fino a 255 caratteri e può essere programma; può essere lungo fino a 255 caratteri e può essere composto da lettere, numeri e underscore "_", ma composto da lettere, numeri e underscore "_", ma èè sempre sempre obbligatorio che il nome inizi con una lettera e non può essere obbligatorio che il nome inizi con una lettera e non può essere una una parola riservata dellparola riservata dell’’ObjectObject Pascal.Pascal.
VARVAR
nome_della_variabilenome_della_variabile [, [, nome_della_variabilenome_della_variabile ...] : tipo;...] : tipo;
N_PersoneN_Persone : Byte;: Byte;
Nome, Nome, CognomeCognome : String;: String;
eta : Integer;eta : Integer;
3838
constconst
w: Word = SizeOf(Byte); w: Word = SizeOf(Byte);
varvar
i: Integer = 8;i: Integer = 8;
j: SmallInt = Ord(j: SmallInt = Ord(‘‘aa’’););
L: Longint = Trunc(3.14L: Longint = Trunc(3.14
typetype
A = array[1..2] of Integer;A = array[1..2] of Integer;
constconst
w: Word = SizeOf(Byte);w: Word = SizeOf(Byte);
varvar
i: Integer = 8;i: Integer = 8;
j: SmallInt = Ord(j: SmallInt = Ord(‘‘aa’’););
L: Longint = Trunc(3.14159);L: Longint = Trunc(3.14159);
x: ShortInt = Round(2.71828);x: ShortInt = Round(2.71828);
B1: Byte = High(A);B1: Byte = High(A);
B2: Byte = Low(A);B2: Byte = Low(A);
C: char = Chr(46);159);C: char = Chr(46);159);
x: ShortInt = Round(2.71828);x: ShortInt = Round(2.71828);
B1: Byte = High(A);B1: Byte = High(A);
B2: Byte = Low(A);B2: Byte = Low(A);
C: char = Chr(46);C: char = Chr(46);
3939
VariabiliVariabili GlobaliGlobali –– VariabiliVariabili localilocali
�� Una variabile si definisce globale se Una variabile si definisce globale se èè visibile e quindi valida in ogni visibile e quindi valida in ogni punto del programma.punto del programma.
�� Una variabile locale Una variabile locale èè visibile e valida unicamente allvisibile e valida unicamente all’’interno di una interno di una procedura o di una funzione in cui viene definita.procedura o di una funzione in cui viene definita.
�� Lo Lo ““ScopeScope”” o area di visibilito area di visibilitàà di una determinata funzione o di una di una determinata funzione o di una determinata variabile; rappresenta la parte del programma entro determinata variabile; rappresenta la parte del programma entro cui cui funzione e variabile risultano note al compilatore.funzione e variabile risultano note al compilatore.
4040
constconstAlgumConstantAlgumConstant = 100;= 100;
varvarAlgumGlobalAlgumGlobal: Integer;: Integer;R: Real;R: Real;
procedure AlgumProc(var R: Real);procedure AlgumProc(var R: Real);varvarLocalReal: Real;LocalReal: Real;beginbegin
LocalRealLocalReal := 10.0;:= 10.0;R := R R := R -- LocalReal;LocalReal;
end;end;
beginbeginAlgumGlobalAlgumGlobal := AlgumConstant;:= AlgumConstant;R := 4.593;R := 4.593;AlgumProc(RAlgumProc(R););
end.end.beginbegin
LocalRealLocalReal := 10.0;:= 10.0;R := R R := R -- LocalReal;LocalReal;
end;end;beginbegin
AlgumGlobalAlgumGlobal := AlgumConstant;:= AlgumConstant;R := 4.593;R := 4.593;AlgumProc(RAlgumProc(R););
end. end.
4141
Caratteristiche dei LinguaggiCaratteristiche dei Linguaggi
““ObjectObject--orientedoriented””�� INCAPSULAMENTO:INCAPSULAMENTO:
�� combinazione dei dati e dei relativi campi finalizzata a nascondcombinazione dei dati e dei relativi campi finalizzata a nascondere i dettagli di ere i dettagli di implementazione. I vantaggi dellimplementazione. I vantaggi dell’’incapsulamento sono la modularitincapsulamento sono la modularitàà e e l'isolamento del codice da altro codice.l'isolamento del codice da altro codice.
�� EREDITARIETAEREDITARIETA’’::�� La capacitLa capacitàà di creare nuovi oggetti che mantengono proprietdi creare nuovi oggetti che mantengono proprietàà e comportamento e comportamento
degli oggetti degli oggetti ““antenatiantenati””. Questo concetto consente di creare una gerarchia di . Questo concetto consente di creare una gerarchia di oggetti VCL che sono dotati di proprietoggetti VCL che sono dotati di proprietàà di tipo generico dai quali vengono poi di tipo generico dai quali vengono poi ereditati altri oggetti dotati di proprietereditati altri oggetti dotati di proprietàà pipiùù specifiche e specializzate.specifiche e specializzate.
�� POLIMORFISMO:POLIMORFISMO:�� Letteralmente polimorfismo significa "molti modi". Il polimorfisLetteralmente polimorfismo significa "molti modi". Il polimorfismo mo èè una tecnica una tecnica
di di programmazioneprogrammazione che consente l'utilizzo di parti di codice sorgente che, pur che consente l'utilizzo di parti di codice sorgente che, pur rimanendo inalterate, generano a rimanendo inalterate, generano a runrun--timetime comportamenti diversi.comportamenti diversi.
�� Il polimorfismo permette di ridefinire, nelle classi derivate, pIl polimorfismo permette di ridefinire, nelle classi derivate, procedure, funzioni, costruttori e rocedure, funzioni, costruttori e proprietproprietàà ecc... presenti nella classe base, ecc... presenti nella classe base, cosicchcosicchèè il loro utilizzo nella classe derivata sia diverso il loro utilizzo nella classe derivata sia diverso da quello nella classe base. da quello nella classe base.
4242
Le Le ClassiClassi
Sono strutture o modelli con cui vengono creati gli oggettiSono strutture o modelli con cui vengono creati gli oggetti
Definizione di una classeDefinizione di una classe<<identificatoreidentificatore> = > = class[(classe_Antenataclass[(classe_Antenata)])]<<attributiattributi e e metodimetodi>>
end;end;
typetypeTAnimalTAnimal = class= class
Nome: string;Nome: string;AltezzaAltezza, Peso: real;, Peso: real;
end;end;
4343
MetodiMetodi
I I Metodi sono procedure e funzioni appartenenti a un determinato Metodi sono procedure e funzioni appartenenti a un determinato oggetto.oggetto.
TypeType
TBoogieNights = classTBoogieNights = class
Dance: Boolean;Dance: Boolean;
procedure DoTheHustle;procedure DoTheHustle;
end;end;
procedure TboogieNights.DoTheHustle;procedure TboogieNights.DoTheHustle;
beginbegin
Dance := True;Dance := True;
end;end;
4444
VisibilitVisibilitàà�� Definisce chi Definisce chi èè autorizzato ad accedere e modificare gli attributi e autorizzato ad accedere e modificare gli attributi e metodi della classe.metodi della classe.�� Nella stessa classe possono esistere attributi e metodi con diNella stessa classe possono esistere attributi e metodi con diverso verso livello di visibilitlivello di visibilitàà..
PublicPublic�� Gli attributi e metodi possono essere utilizzati da qualsiasi Gli attributi e metodi possono essere utilizzati da qualsiasi classe.classe.
PrivatePrivate�� Gli attributi e i metodi possono essere utilizzati solamente dGli attributi e i metodi possono essere utilizzati solamente dalla classe entro cui sono alla classe entro cui sono definiti.definiti.
ProtectedProtected�� Gli attributi e i metodi possono essere utilizzati manipolati daGli attributi e i metodi possono essere utilizzati manipolati dalla classe entro cui sono lla classe entro cui sono definiti o da qualsiasi sottoclasse o nuova classe dichiarata ndefiniti o da qualsiasi sottoclasse o nuova classe dichiarata nella stessa UNIT.ella stessa UNIT.
4545
ISTRUZIONIISTRUZIONI
4646
Assegnazione Assegnazione
Assegnare ad una variabile il risultato di un'espressione, il vaAssegnare ad una variabile il risultato di un'espressione, il valore di un'altra lore di un'altra variabile o di una costante.variabile o di una costante.
SintassiSintassi ::
<<variabilevariabile> := <> := <EspressioneEspressione | | VariabileVariabile | | CostanteCostante>;>;
4747
IstruzioniIstruzioni DecisionaliDecisionali
If...Then...ElseIf...Then...ElseLa istruzione IF è una delle più importanti istruzioni di base nella
programmazione in Object Pascal. Se la espressione logica che segue la frase IF è VERA (True) verranno eseguite le istruzioni collocate dopo la clausola THEN in caso contrario verranno eseguite le istruzioni collocate dopo la clausola ELSE.
Object Pascal prevede pure un tipo di istruzione IF che è dotata di clausola THEN ma è sprovvista di clausola ELSE. In tal caso se la espressione logica che segue la frase IF è VERA (True) verranno eseguite le istruzioni collocate dopo la clausola THEN in caso contrario il controllo del programma passa alle istruzioni che nel programma vengono dopo la IF.
4848
Flow Chart Flow Chart IfIf....ThenThen .. Else.. Else
THEN
NO
ELSE
SI
Elaborazione 1
X > 0 ?
Elaborazione 2 Elaborazione 3
……VieneViene eseguita la Elaborazione 1 poi ci si chiede se X eseguita la Elaborazione 1 poi ci si chiede se X èè maggiore di 0; se la proposizione maggiore di 0; se la proposizione èè vera viene eseguita la Elaborazione vera viene eseguita la Elaborazione
3 in caso contrario viene eseguita la 23 in caso contrario viene eseguita la 2
4949
Flow Chart Flow Chart IfIf....ThenThen
Elaborazione 1
Elaborazione 3
X > 0 ?SINO
THEN
……VieneViene eseguita la Elaborazione 1 poi ci si chiede se X eseguita la Elaborazione 1 poi ci si chiede se X èè maggiore di 0; se la proposizione maggiore di 0; se la proposizione èè vera viene eseguita la Elaborazione vera viene eseguita la Elaborazione
3 in caso contrario il controllo passa all3 in caso contrario il controllo passa all’’istruzione che segue.istruzione che segue.
5050
-- Alternativa Alternativa SempliceSemplice
IF IF <<EspressioneLogicaEspressioneLogica> > THEN THEN <istruzione1><istruzione1>ELSE ELSE <istruzione2> ;<istruzione2> ;
-- Alternativa CompostaAlternativa Composta
IF IF < < EspressioneLogicaEspressioneLogica >>THENTHEN
BEGINBEGIN
<istruzione1>;<istruzione1>;ENDEND
ELSEELSE
BEGINBEGIN
<istruzione2>;<istruzione2>;END;END;
5151
�� -- AlternativaAlternativa SempliceSemplice senzasenza ELSEELSE
�� IF IF <<EspressioneLogicaEspressioneLogica> > �� THEN THEN <<istruzioneistruzione>;>;
�� -- AlternativaAlternativa CompostaComposta senzasenza ELSEELSE
�� IF IF < < EspressioneLogicaEspressioneLogica >>�� THENTHEN�� BEGINBEGIN�� <<listalista istruzioniistruzioni>;>;�� END;END;
5252
�� LL’’istruzione CASE opera sempre in abbinamento ad una istruzione CASE opera sempre in abbinamento ad una ““variabile di variabile di controllocontrollo””. A seconda dei valori che tale variabile assume, il . A seconda dei valori che tale variabile assume, il programma presenta comportamenti diversi. programma presenta comportamenti diversi.
�� LL’’istruzione CASE può essere vista come una IF ad alternative istruzione CASE può essere vista come una IF ad alternative multiple.multiple.
�� LL’’esempio che segue analizza il esempio che segue analizza il VotoFinaleVotoFinale conseguito da uno conseguito da uno studente ad un Esame di Stato; se la Votazione assume il valore studente ad un Esame di Stato; se la Votazione assume il valore 100 100 visualizza il messaggio visualizza il messaggio ““RisultatoRisultato--EccellenteEccellente””, se la Votazione , se la Votazione èècompresa fra 85 e 99 visualizza il messaggio compresa fra 85 e 99 visualizza il messaggio ““RisultatoRisultato--OttimoOttimo””, e cos, e cosììvia dicendo. Nel caso in cui la variabile via dicendo. Nel caso in cui la variabile VotoFinaleVotoFinale assumesse valori assumesse valori esterni allesterni all’’intervallo 0..100 il messaggio segnala intervallo 0..100 il messaggio segnala ““VotoFinale ErratoVotoFinale Errato””..
IstruzioneIstruzione CASECASE
5353
EsempioEsempio IstruzioneIstruzione CASECASE
EsempioEsempio::
Case Case VotoFinaleVotoFinale ofof
100 : 100 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– EccellenteEccellente’’););85..99 : 85..99 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– OttimoOttimo’’););75..84 : 75..84 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– BuonoBuono’’););70..74 : 70..74 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– DiscretoDiscreto’’););60..69 : 60..69 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– SufficienteSufficiente’’););45..59 : 45..59 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– InsufficienteInsufficiente’’););0 .. 44 : 0 .. 44 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– GravementeGravemente InsufficienteInsufficiente’’););else else ShowMessage(ShowMessage(‘‘VotoFinaleVotoFinale ErratoErrato’’););
EndEnd;;
5454
Cicli IterativiCicli Iterativi
�� Iterativo sinonimo di RipetitivoIterativo sinonimo di Ripetitivo�� RankRank: blocco di istruzioni che devono essere ripetute: blocco di istruzioni che devono essere ripetute
�� Il PC ha la capacitIl PC ha la capacitàà di svolgere una grandissima quantitdi svolgere una grandissima quantitààdi elaborazioni in tempi relativamente piccoli. di elaborazioni in tempi relativamente piccoli. �� NB. Non ha senso utilizzare un PC per sviluppare una equazione; NB. Non ha senso utilizzare un PC per sviluppare una equazione; èè pipiùù sensato utilizzarlo sensato utilizzarlo
dove si richiede di risolvere 1000 o pidove si richiede di risolvere 1000 o piùù equazioni.equazioni.
�� Struttura Iterativa FOR Struttura Iterativa FOR (si utilizza quando (si utilizza quando èè noto a priori il numero di volte in noto a priori il numero di volte in cui una determinata sequenza di calcoli va ripetuta)cui una determinata sequenza di calcoli va ripetuta)
�� Struttura Iterativa Struttura Iterativa WhileWhile …… dodo�� Struttura Iterativa Struttura Iterativa RepeatRepeat .. .. UntilUntil
5555
StruttureStrutture RipetitiveRipetitiveIstruzione FORIstruzione FOR
LL’’istruzione FOR permette di eseguire una o piistruzione FOR permette di eseguire una o piùù istruzioni un determinato numero istruzioni un determinato numero
di volte. Il numero di ripetizioni di volte. Il numero di ripetizioni èè controllato talvolta da un valore costante ma picontrollato talvolta da un valore costante ma piùù
spesso da una variabile o da una espressione che ovviamente devespesso da una variabile o da una espressione che ovviamente deve assume assume
valori interi (valori interi (IntegerInteger).).
EsempioEsempio ::
VarVar I : Byte;I : Byte;
BeginBegin
For For I := 1 I := 1 to to 10 10 dodo
BeginBegin
ShowMessageShowMessage ((‘‘Questo Questo èè ilil messaggiomessaggio numeronumero: : ‘‘ + + IntToStrIntToStr(I(I));));
EndEnd;;
EndEnd;;
5656
Flow Chart Flow Chart ForFor I:=1 I:=1 ToTo 10 Do..10 Do..
MESSAGGIO
N° I
1 ---> I
O
I + 1 ---> I
SI
NO
I è > 10
?
5757
IstruzioneIstruzione WHILE WHILE
Forma Forma sintatticasintattica WHILE <WHILE <condizionecondizione> do> do
BeginBegin<RANK><RANK>
End;End;
Fino a Fino a cheche la <la <condizionecondizione> > risultarisulta veravera (True), (True), vieneviene eseguitoeseguito ilil bloccoblocco didiistruzioniistruzioni cheche costituiscecostituisce ilil RANK del RANK del ciclociclo iterativoiterativo..Quando la <condizione> risulta falsa (False), il controllo Quando la <condizione> risulta falsa (False), il controllo passa alle istruzioni passa alle istruzioni che seguono lche seguono l’’istruzione WHILE, il RANK non viene eseguito.istruzione WHILE, il RANK non viene eseguito.La coppia La coppia BeginBegin …… End End èè obbligatoria solamente se il RANK obbligatoria solamente se il RANK èè costituito da costituito da almeno due righe di codice.almeno due righe di codice.
StruttureStrutture RipetitiveRipetitive
5858
EsempioEsempio::
VarVarDigit : Digit : Integer Integer ;;TerminaTermina : : Boolean Boolean ;;
BeginBegin
Digit :=0;Digit :=0;Termina := True;Termina := True;While While Termina Termina dodoBeginBegin
Digit := Digit + 1;Digit := Digit + 1;If Digit = 100 then Termina := False;If Digit = 100 then Termina := False;
EndEnd;;EndEnd..
5959
Flow Chart Flow Chart WhileWhile
I <= 10
???
SI
1 ---> I
NO
I + 1 ---> I
O
MESSAGGIO
N° I
……
I := 1;I := 1;
WhileWhile I <= 10 doI <= 10 do
BeginBegin
WritelnWriteln((‘‘Messaggio n Messaggio n ’’,I);,I);
I := I+1;I := I+1;
End;End;
……
6060
LL’’Istruzione REPEAT .. UNTIL funziona in modo analogo allIstruzione REPEAT .. UNTIL funziona in modo analogo all’’istruzione WHILE. In istruzione WHILE. In veritveritàà esistono solamente due differenze: (1) Le condizioni di ripetizesistono solamente due differenze: (1) Le condizioni di ripetizione ione vengono verificate non allvengono verificate non all’’inizio (istruzione WHILE) ma al termine del ciclo inizio (istruzione WHILE) ma al termine del ciclo iterativo; (2) la coppia REPEAT .. UNTIL funziona da contenitoreiterativo; (2) la coppia REPEAT .. UNTIL funziona da contenitore alla stessa alla stessa stregua della coppia BEGIN END che in questo unico caso non andrstregua della coppia BEGIN END che in questo unico caso non andràà usata.usata.
EsempioEsempio::
VarVar
D : Integer ;D : Integer ;
Fine : Boolean ;Fine : Boolean ;
BeginBegin
D :=0;D :=0;
Fine := False;Fine := False;
RepeatRepeat
D := D + 1;D := D + 1;
If D = 100 Then Fine := True;If D = 100 Then Fine := True;
Until Fine;Until Fine;
End.End.
IstruzioneIstruzione Repeat ... UntilRepeat ... Until
6161
EsempioEsempio::VarVarD : Integer ;D : Integer ;Fine : Boolean ;Fine : Boolean ;
BeginBeginD :=0;D :=0;Fine := False;Fine := False;RepeatRepeatD := D + 1;D := D + 1;If D = 100 Then Fine := True;If D = 100 Then Fine := True;
Until Fine;Until Fine;End.End.
6262
Confronto strutture iterativeConfronto strutture iterative�� FOR C := a FOR C := a ToTo b DO b DO ……�� FOR C := b FOR C := b DowntoDownto a DO a DO ……�� La struttura FOR (ciclo controllato da variabile contatore nel La struttura FOR (ciclo controllato da variabile contatore nel nostro caso C). C assume il valore iniziale a, viene nostro caso C). C assume il valore iniziale a, viene
eseguita leseguita l’’istruzione o le istruzioni che seguono la frase Do; il contatoreistruzione o le istruzioni che seguono la frase Do; il contatore C viene incrementato di 1 unitC viene incrementato di 1 unitàà ((ToTo))
�� REPEAT REPEAT …… UNTIL <condizione>;UNTIL <condizione>;
�� WHILE <condizione> WHILE <condizione> DODOBEGIN BEGIN ……
END;END;
6363
Commenti entro il codice Commenti entro il codice ““sorgentesorgente””
�� I Commenti possono essere inseriti nel programma I Commenti possono essere inseriti nel programma sorgente Pascal o Delphi in uno dei seguenti 3 modi:sorgente Pascal o Delphi in uno dei seguenti 3 modi:
�� Usando le parentesi graffe { commento }Usando le parentesi graffe { commento }�� Usando le sequenze (* commento *)Usando le sequenze (* commento *)�� Doppio Doppio slashslash // commento // commento
�� Delphi accetta tutti e tre i metodi; Turbo Pascal accetta Delphi accetta tutti e tre i metodi; Turbo Pascal accetta solo il primo ed il secondo metodo.solo il primo ed il secondo metodo.
6464
Procedure e Procedure e FunzioniFunzioni
6565
Procedure e Procedure e FunzioniFunzioni�� Una procedura Una procedura èè un segmento di programma che svolge un compito un segmento di programma che svolge un compito
specifico; può venire mandata in esecuzione dal programma specifico; può venire mandata in esecuzione dal programma principale o allprincipale o all’’interno di uninterno di un’’altra procedura o funzione. Ultimato il altra procedura o funzione. Ultimato il proprio compito la procedura restituisce il controllo al programproprio compito la procedura restituisce il controllo al programma ma chiamante. chiamante. (Es.: procedura di stampa; procedura di invio di una e(Es.: procedura di stampa; procedura di invio di una e--mail, etc.)mail, etc.)
�� Una funzione opera nello stesso modo, tranne che per il fatto chUna funzione opera nello stesso modo, tranne che per il fatto che e essa restituisce un valore al essa restituisce un valore al ““programma chiamanteprogramma chiamante”” e e successivamente restituisce il controllo al programma chiamante.successivamente restituisce il controllo al programma chiamante. (Es.: (Es.: funzione calcolo della media, calcolo del logaritmo, funzione funzione calcolo della media, calcolo del logaritmo, funzione UpperCaseUpperCase, etc.), etc.)
�� Le variabili definite allLe variabili definite all’’interno di una procedura o di una funzione interno di una procedura o di una funzione sono dette sono dette ““variabili localivariabili locali””. Queste variabili esistono unicamente . Queste variabili esistono unicamente mentre mentre èè in corso di esecuzione il codice di una procedura o di una in corso di esecuzione il codice di una procedura o di una funzione.funzione.
6666
ManipolazioneManipolazione delledelle stringhestringheCHR (CHR (funzionefunzione))
Restituisce il carattere corrispondente al codice ASCII fornito.Restituisce il carattere corrispondente al codice ASCII fornito.
EsempioEsempio::VarVar
P : TextFile;P : TextFile;
BeginBegin
AssignPrn(PAssignPrn(P););
Rewrite(PRewrite(P););
Writeln(PWriteln(P, chr(12) , , chr(12) , ‘‘Test della stampanteTest della stampante’’););
CloseFile(PCloseFile(P););
End;End;
6767
CONCAT (CONCAT (funzionefunzione))ConcatenaConcatena pipiùù stringhestringhe frafra didi loroloro
EsempioEsempio::varvar
S: string;S: string;beginbegin
S := Concat('ABC', 'DEF'); { 'ABCDEF' }S := Concat('ABC', 'DEF'); { 'ABCDEF' }end;end;
6868
COPY COPY ((proceduraprocedura))
s1 := Copy(s,2,3);s1 := Copy(s,2,3);RestituisceRestituisce unauna sottostringasottostringa s1 a s1 a partirepartire dada unauna stringastringa s, s, iniziandoiniziando
daldal caratterecarattere didi postoposto 2 e per 3 2 e per 3 carattericaratteri..
Ex:Ex:var var
s, s1 : string;s, s1 : string;beginbegin
s := 'ABCDEF';s := 'ABCDEF';s1 := Copy(s, 2, 3) { 'BCD' }s1 := Copy(s, 2, 3) { 'BCD' }
end;end;
6969
DELETE DELETE ((proceduraprocedura))
Elimina parte Elimina parte didi unauna stringastringa partendopartendo dada un un caratterecarattere inizialeiniziale didi cui cui vieneviene fornitafornita unauna posizioneposizione e per un e per un numeronumero stabilitostabilito didi carattericaratteri..
Ex:Ex:varvar
s: string;s: string;beginbegin
s := 'Honest Abe Lincoln';s := 'Honest Abe Lincoln';Delete(s,8,4);Delete(s,8,4);WriteLn(sWriteLn(s); { 'Honest Lincoln' }); { 'Honest Lincoln' }
end.end.
7070
INSERT (INSERT (proceduraprocedura))InserisceInserisce unauna stringastringa origineorigine entroentro unauna stringastringa s a s a partirepartire
dada unauna posizioneposizione inizialeiniziale p.p.
Ex:Ex:varvar
s: string;s: string;beginbegin
s := 'Honest Lincoln';s := 'Honest Lincoln';Insert('AbeInsert('Abe ', s, 8);', s, 8);WriteLn(sWriteLn(s); { 'Honest Abe Lincoln' }); { 'Honest Abe Lincoln' }
end.end.
7171
LENGTHLENGTHFunzioneFunzione LENGTH: LENGTH: RestituisceRestituisce ilil numeronumero didi carattericaratteri cheche costituisconocostituisconounauna stringastringa..
Es:Es:varvar
S : string;S : string;beginbegin
ReadLn(SReadLn(S););WriteLn(length(SWriteLn(length(S));));
end.end.
7272
POSPOS
FunzioneFunzione POS: POS: RestituisceRestituisce la la posizioneposizione didi inizioinizio delladella stringastringas1 s1 entroentro la la stringastringa s2. (s2. (restituiscerestituisce 0 se la 0 se la stringastringa s1 non s1 non vieneviene individuataindividuata))
Es:Es:var var
s: string;s: string;beginbegin
s := ' 123.50';s := ' 123.50';{ Converte { Converte carattericaratteri spaziospazio in in carattericaratteri ““00”” }}while Pos(' ', s) > 0 dowhile Pos(' ', s) > 0 do
s[Poss[Pos(' ', s)] := '0';(' ', s)] := '0';end.end.
7373
UPPERCASE UPPERCASE –– LOWERCASELOWERCASE
FunzioneFunzione Uppercase Uppercase –– RestituisceRestituisce unauna StringaStringa con con letterelettere tuttetuttemaiuscolemaiuscole..
FunzioneFunzione Lowercase Lowercase -- RestituisceRestituisce unauna StringaStringa con con letterelettere tuttetutteminuscoleminuscole..
Es:Es:Uses Sysutils;Uses Sysutils;varvar
s : string;s : string;i : Integer;i : Integer;
beginbeginWrite('DigitareWrite('Digitare unauna stringastringa didi carattericaratteri: ');: ');ReadLn(sReadLn(s););WriteLn('ConvertoWriteLn('Converto in in maiuscolomaiuscolo: ',Uppercase(s));: ',Uppercase(s));ReadlnReadln;;
end.end.
7474
STRSTRprocedure procedure Str(NStr(N [: Width [: Decimals ]]; [: Width [: Decimals ]]; varvar S);S);
TrasformaTrasforma unauna quantitquantitàà numericanumerica N in N in unauna stringastringa didi carattericaratteri numericinumerici S; N S; N puòpuò essereessere un un numeronumero interointero o o realereale; ; possoposso specificarespecificare ilil numeronumerocomplessivocomplessivo didi carattericaratteri (Width) e (Width) e ilil numeronumero didi cifrecifre appartenentiappartenenti allaalla parte parte decimaledecimale (Decimals) ((Decimals) (dopodopo la la virgolavirgola).).
Es:Es:varvar
F : string;F : string;N : integer;N : integer;
beginbeginN:=1492;N:=1492;str(N:7,F);str(N:7,F);writeln(Fwriteln(F); (* ' 1492' *)); (* ' 1492' *)
end.end.
7575
VALVAL
ValVal(s, n, (s, n, codcod) )
Converte Converte unauna stringastringa S in un S in un numeronumero n. La n. La proceduraprocedura VAL VAL restituiscerestituisce un un codicecodice didi erroreerrorecod; se cod cod; se cod èè nullonullo la la conversioneconversione ha ha avutoavuto esitoesito positivopositivo; se cod ; se cod èè diversodiverso dada 0 tale 0 tale valorevalore esprimeesprime la la posizioneposizione in cui la in cui la proceduraprocedura VAL ha VAL ha rilevatorilevato un un caratterecarattere non non appartenenteappartenente a a quelliquelli consentiticonsentiti dada unauna quantitquantitàà numericanumerica..
Es:Es:Program conver;Program conver;varvar
X : string;X : string;Y,Z : integer;Y,Z : integer;
beginbeginX:='9876';X:='9876';Val(X,Y,ZVal(X,Y,Z););writeln(Ywriteln(Y););writeln(Zwriteln(Z););readlnreadln;;
end.end.
7676
TRIM TRIM –– TRIMLEFT TRIMLEFT –– TRIMRIGHTTRIMRIGHT
�� FunzioneFunzione Trim Trim –– EliminaElimina gligli spazispazi a a sinistrasinistra e a e a destradestra delladella stringastringa�� FunzioneFunzione TrimLeftTrimLeft -- EliminaElimina gligli spazispazi a a sinistrasinistra delladella stringastringa�� FunzioneFunzione TrimRightTrimRight -- EliminaElimina gligli spazispazi a a destradestra delladella stringastringa
Es:Es:If Trim(EditNome.Text) = If Trim(EditNome.Text) = ‘’‘’ thenthenBeginBegin
ShowMessage(ShowMessage(‘‘MMancata notifica del nome ancata notifica del nome ’’););EditText.SetFocusEditText.SetFocus;;Exit;Exit;
End;End;
7777
ORDORD
La La FunzioneFunzione ORD ORD RestituisceRestituisce ilil codicecodice ASCII del ASCII del caratterecarattererappresentatorappresentato nellanella variabilevariabile x.x.
Es:Es:
varvarI : integer;I : integer;
beginbeginfor I := 1 to length(C) dofor I := 1 to length(C) doif (ord(C[I]) >= 65) and (ord(C[I]) <= 90)if (ord(C[I]) >= 65) and (ord(C[I]) <= 90)thenthen......
end;end;
7878
ManipolazioneManipolazione NumericaNumerica
ABSABS
La La FunzioneFunzione ABS, ABS, RestituisceRestituisce ilil valorevalore assolutoassoluto didi x. x.
Es:Es:varvar
r: real;r: real;i: Integer;i: Integer;
beginbeginr := Abs(r := Abs(--2.3); { 2.3 }2.3); { 2.3 }i := Abs(i := Abs(--157); { 157 }157); { 157 }
end.end.
xy =
7979
EXPEXP
RestituisceRestituisce ilil valorevalore didi e (e=2.7182818285) e (e=2.7182818285) elevatoelevato allaallapotenzapotenza x. y = ex. y = exx
Es:Es:beginbegin
WriteLn('eWriteLn('e = ',Exp(1.0));= ',Exp(1.0));end.end.
xey =
8080
LNLN
RestituisceRestituisce ilil logaritmo logaritmo naturalenaturale didi x (base e=2.7182818285).x (base e=2.7182818285).
Es:Es:......varvar
I : integer;I : integer;pot, y, x : real; pot, y, x : real;
beginbeginpot := pot := exp(Yexp(Y**ln(Xln(X));));
end;end;......
8181
FRACFRAC
RestituisceRestituisce la parte la parte frazionariafrazionaria didi x (parte x (parte dopodopo la la virgolavirgola))
Es:Es:varvar
S : string;S : string;beginbegin
str(Frac(123.456):7:3,S); { 0.456 }str(Frac(123.456):7:3,S); { 0.456 }Writeln(SWriteln(S););str(Frac(str(Frac(--123.456):7:3,S); { 123.456):7:3,S); { --0.456 }0.456 }Writeln(SWriteln(S););readlnreadln;;
end.end.
8282
INTINT
RestituisceRestituisce la parte la parte interaintera didi x.x.
Es:Es:
var var r: real;r: real;
beginbegin
r := Int(123.456); { 123.0 }r := Int(123.456); { 123.0 }r := Int(r := Int(--123.456); { 123.456); { --123.0 }123.0 }
end.end.
8383
ROUNDROUND
RestituisceRestituisce ilil valorevalore didi x x arrotondatoarrotondato allall’’interointero pipiùù vicinovicino..
Es:Es:
beginbegin
WriteLn(1.4, ' WriteLn(1.4, ' arrotondatoarrotondato ', Round(1.4));', Round(1.4));WriteLn(1.5, ' WriteLn(1.5, ' arrotondatoarrotondato ', Round(1.5));', Round(1.5));WriteLn(WriteLn(--1.4, ' 1.4, ' arrotondatoarrotondato ', Round(', Round(--1.4));1.4));WriteLn(WriteLn(--1.5, ' 1.5, ' arrotondatoarrotondato ', Round(', Round(--1.5));1.5));ReadlnReadln;;
end.end.
8484
TRUNCTRUNCRestituisceRestituisce la parte la parte interaintera didi x x scartandoscartando la parte la parte
decimaledecimale. .
Es:Es:
beginbegin
WriteLn(1.4, ' WriteLn(1.4, ' troncatotroncato ', Trunc(1.4));', Trunc(1.4));
WriteLn(1.5, ' WriteLn(1.5, ' troncatotroncato ', Trunc(1.5));', Trunc(1.5));
WriteLn(WriteLn(--1.4, ' 1.4, ' troncatotroncato ', Trunc(', Trunc(--1.4));1.4));
WriteLn(WriteLn(--1.5, ' 1.5, ' troncatotroncato ', Trunc(', Trunc(--1.5));1.5));
ReadlnReadln;;
end.end.
8585
SQRSQR
RestituisceRestituisce ilil quadratoquadrato didi xx
EsempioEsempio::
writeln (writeln (‘‘Il Il quadratoquadrato didi x vale = x vale = ‘‘ , SRQ(X));, SRQ(X));
8686
SQRTSQRT
RestituisceRestituisce la la radiceradice quadrataquadrata didi xx
Es:Es:beginbegin
WriteLn('5 al WriteLn('5 al quadratoquadrato = ', Sqr(5));= ', Sqr(5));WriteLn(WriteLn(‘‘LaLa radiceradice quadrataquadrata didi 2 = ', Sqrt(2.0));2 = ', Sqrt(2.0));
end.end.
8787
ODDODD
RestituisceRestituisce un un risultatorisultato ““TRUETRUE”” ((verovero) se X ) se X èè un un numeronumerointerointero disparidispari..
Es:Es:
If ODD(X) then If ODD(X) then Write(Write(‘‘X X éé un un numeronumero disparidispari’’););
8888
ManipolazioneManipolazione deidei Tipi Tipi ScalariScalari
PREDPREDFunzione che recupera lFunzione che recupera l’’elemento che precede X in una sequenza di elemento che precede X in una sequenza di
valori valori ““enumeratienumerati”” . Il risultato . Il risultato èè dello stesso tipo del parametro X.dello stesso tipo del parametro X.
Es:Es:{ X { X èè un un caratterecarattere; ; poniamoponiamo ilil caratterecarattere ““CC”” ebbeneebbene ilil caratterecarattere ““BB”” precede o precede o èè ilil
predecessorepredecessore didi ““CC”” nellanella sequenzasequenza deidei carattericaratteri codificaticodificati in ASCII }in ASCII }
varvarx : char;x : char;
beginbeginx:=x:=‘‘CC’’;;write(PRED(xwrite(PRED(x)); { )); { ‘‘BB’’ }}
end.end.
8989
SUCCSUCCFunzione che recupera lFunzione che recupera l’’elemento che segue X in una sequenza di valori elemento che segue X in una sequenza di valori
““enumeratienumerati”” . Il risultato . Il risultato èè dello stesso tipo del parametro X.dello stesso tipo del parametro X.
Es:Es:{ X { X èè un un caratterecarattere; ; poniamoponiamo ilil caratterecarattere ““CC”” ebbeneebbene ilil
caratterecarattere ““DD”” segue o segue o èè ilil successoresuccessore didi ““CC”” nellanellasequenzasequenza deidei carattericaratteri codificaticodificati in ASCII }in ASCII }
varvarx : char;x : char;
beginbeginx:=x:=‘‘CC’’;;write(SUCC(x)); { write(SUCC(x)); { ‘‘DD’’ }}
end.end.
9090
IstruzioniIstruzioni cheche operanooperano sullasullamemoriamemoria
SIZEOFSIZEOFRestituisceRestituisce ilil numeronumero didi bytes bytes occupatioccupati dada unauna determinatadeterminata
variabilevariabile..
Ex:Ex:varvar
s : string[35];s : string[35];beginbegin
write(sizeof(Swrite(sizeof(S)); { 36 })); { 36 }ReadlnReadln;;
end.end.
9191
InterazioneInterazione con con ilil sistemasistema operativooperativo
CHDIRCHDIR
La La proceduraprocedura ChDirChDir modificamodifica la directory la directory correntecorrente..
Ex:Ex:beginbegin
{$I{$I--}}{ cambia la directory { cambia la directory correntecorrente; ; ilil nuovonuovo valorevalore vieneviene trattotratto daldal controllocontrolloEdit1 }Edit1 }
ChDir(Edit1.Text);ChDir(Edit1.Text);if IOResult <> 0 thenif IOResult <> 0 thenShowMessage('DirectoryShowMessage('Directory non non trovatatrovata');');
end;end;
9292
GETDIRGETDIR
RestituisceRestituisce ilil percorsopercorso (path) (path) delladella directory directory correntecorrente relativorelativo ad un ad un drive drive specificatospecificato ((unitunitàà didi default=0,A=1,B=2,...). Questa default=0,A=1,B=2,...). Questa proceduraprocedura restituiscerestituisce ilil risultatorisultato ““--11”” se se ilil drive drive specificatospecificato non non èèpresentepresente nelnel sistemasistema consideratoconsiderato..
Ex:Ex:
varvars : string;s : string;
beginbeginGetDir(0,s); { 0 = Drive GetDir(0,s); { 0 = Drive CorrenteCorrente }}writeln('Drivewriteln('Drive e directory corrente: ' + s);e directory corrente: ' + s);readlnreadln;;
end.end.
9393
Istruzioni di salto incondizionatoIstruzioni di salto incondizionato
-- In In ObjectObject Pascal Pascal èè possibile effettuare un possibile effettuare un ““salto incondizionatosalto incondizionato”” verso un'altra parte verso un'altra parte del programma; ldel programma; l’’istruzione che lo istruzione che lo permette permette èè la la ““GoToGoTo””..
9494
GOTOGOTOL'istruzione GOTO permette di L'istruzione GOTO permette di ““effettuare un salto incondizionatoeffettuare un salto incondizionato”” dalla dalla posizione attuale alla posizione contrassegnata con una etichettposizione attuale alla posizione contrassegnata con una etichetta specifica.a specifica.
Es:Es:VarVar
RispRisp: char;: char;BeginBegin
InizioInizio: : // // etichettaetichetta cheche individuaindividua la la destinazionedestinazione del del saltosalto
Writeln(Writeln(‘‘OkOk’’););Writeln(Writeln(‘‘RipetiamoRipetiamo??’’); ); Readln(RispReadln(Risp););If If RispRisp = = ‘‘SS’’ then GOTO then GOTO InizioInizio;;
End. End.
9595
Istruzioni Break e Continue (salti all'interno di un Istruzioni Break e Continue (salti all'interno di un ciclo iterativo)ciclo iterativo)
Queste istruzioni, ad eccezione di quelle presentate finora, hanQueste istruzioni, ad eccezione di quelle presentate finora, hanno ruolo no ruolo importante accanto alle istruzioni che controllano i importante accanto alle istruzioni che controllano i ““cicli iterativicicli iterativi””. . Essi sono utilizzate solo in due situazioni: Essi sono utilizzate solo in due situazioni:
�� BREAK: quando si vuole interrompere la esecuzione di un ciclo BREAK: quando si vuole interrompere la esecuzione di un ciclo iterativo;iterativo;
�� CONTINUE: quando si vuole far proseguire la esecuzione delle CONTINUE: quando si vuole far proseguire la esecuzione delle istruzioni facenti parte di un ciclo iterativo.istruzioni facenti parte di un ciclo iterativo.
Es:Es:
VarVar
I : Integer;I : Integer;BeginBegin
For For I := 1 I := 1 to to 3 3 do do If (I mod 2) <> 0 then If (I mod 2) <> 0 then ContinueContinue;;For For I := 1 I := 1 to to 3 3 do do If (I mod 2) = 0 then If (I mod 2) = 0 then BreakBreak;;
EndEnd;;
9696
EXITEXITLL’’istruzione EXIT viene usata per forzare listruzione EXIT viene usata per forzare l’’uscita dal blocco corrente. uscita dal blocco corrente. Se il blocco corrente Se il blocco corrente èè il programma principale, la EXIT lo conclude. il programma principale, la EXIT lo conclude. Se il blocco corrente Se il blocco corrente èè annidato allannidato all’’interno di una struttura iterativa (FOR, interno di una struttura iterativa (FOR, REPEAT, WHILE), lREPEAT, WHILE), l’’istruzione EXIT passa il controllo alla istruzione collocata istruzione EXIT passa il controllo alla istruzione collocata immediatamente dopo le istruzioni (FOR, REPEAT, WHILE).immediatamente dopo le istruzioni (FOR, REPEAT, WHILE).Se il blocco corrente Se il blocco corrente èè una procedura o una funzione, luna procedura o una funzione, l’’istruzione EXIT istruzione EXIT provoca l'uscita dalla funzione o dalla procedura e la conseguenprovoca l'uscita dalla funzione o dalla procedura e la conseguente te prosecuzione del programma al di lprosecuzione del programma al di làà del punto in cui del punto in cui èè stata chiamata.stata chiamata.
Es:Es:Procedure Test( X : Integer) ;Procedure Test( X : Integer) ;BeginBeginIf X = 0 then EXIT;If X = 0 then EXIT;............
End;End;
9797
LibrerieLibrerie DLLDLL
9898
Una libreria a collegamento dinamico, o DLL, Una libreria a collegamento dinamico, o DLL, èè una raccolta di una raccolta di routine (piccoli programmi) che possono essere chiamati da altreroutine (piccoli programmi) che possono essere chiamati da altreapplicazioni e altre DLL. Allo stesso modo di una UNIT, una DLL applicazioni e altre DLL. Allo stesso modo di una UNIT, una DLL contiene codice e risorse condivise, che offrono la possibilitcontiene codice e risorse condivise, che offrono la possibilitàà a pia piùùapplicazioni di condividere una singola copia di una routine cheapplicazioni di condividere una singola copia di una routine che essi essi hanno in comune. Il concetto di DLL hanno in comune. Il concetto di DLL èè il cuore della architettura il cuore della architettura intrinseca di Windows, e nella maggior parte dei casi di Windowsintrinseca di Windows, e nella maggior parte dei casi di Windowspuò essere ritenuto una raccolta di DLL. può essere ritenuto una raccolta di DLL.
Utilizzando Delphi, siamo in grado sia di utilizzare che scriverUtilizzando Delphi, siamo in grado sia di utilizzare che scrivere una e una nostra DLL; possiamo chiamare funzioni incorporate nella DLL nostra DLL; possiamo chiamare funzioni incorporate nella DLL magari sviluppate su altri sistemi o in altri linguaggi di magari sviluppate su altri sistemi o in altri linguaggi di programmazione come Visual Basic o C/C++.programmazione come Visual Basic o C/C++.
9999
La DLL (libreria a collegamento dinamico),La DLL (libreria a collegamento dinamico),èè costituita da costituita da una raccolta di routine (piccoli programmi) che possono una raccolta di routine (piccoli programmi) che possono essere utilizzati o richiamati da altre applicazioni e altre essere utilizzati o richiamati da altre applicazioni e altre DLL. DLL.
Una DLL contiene codice e risorse condivise, che consente Una DLL contiene codice e risorse condivise, che consente a pia piùù applicazioni di condividere una singola copia di una applicazioni di condividere una singola copia di una routine che essi hanno in comune. routine che essi hanno in comune.
La DLL La DLL èè alla base della architettura di Windows, che, in alla base della architettura di Windows, che, in massima parte, massima parte, èè costituito da una raccolta di DLL. costituito da una raccolta di DLL.
Attraverso Delphi, Attraverso Delphi, èè possibile scrivere una nostra possibile scrivere una nostra personale DLL; ma personale DLL; ma èè anche possibile richiamare funzioni anche possibile richiamare funzioni o procedure contenute in DLL sviluppate in altri linguaggi o procedure contenute in DLL sviluppate in altri linguaggi di programmazione quali Visual Basic o C/C++.di programmazione quali Visual Basic o C/C++.
100100
BibliografiaBibliografia
FonteFonte PrincipalePrincipale::GrupoGrupo Delphi Delphi (in lingua (in lingua portogheseportoghese))
AutoriAutori: Adriano Machado : Adriano Machado -- Ramon Ramos Ramon Ramos -- Douglas Douglas GavazzaGavazzaStudentiStudenti IngegneriaIngegneria InformaticaInformatica delldell’’UniversitUniversitàà Federale Federale
di di EspiritoEspirito Santo Brasile Santo Brasile http://www.ufes.br/http://www.ufes.br/
Blog: Blog: http://http://delphiproject.blogspot.comdelphiproject.blogspot.com//
EE--mail: mail: [email protected]@gmail.com