Sign in Join
Wiki copytemporary

Object Oriented Programming with Free Pascal and Lazarus/it: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Object Oriented Programming with Free Pascal and Lazarus/it

OldNewLine
1+Esistono molte guide eccellenti su Pascal, ma questa guida tenta di coinvolgere ulteriormente il principiante , nella programmazione orientata agli oggetti o [[Glossary|Object-Oriented Programming]], che è un'estensione dello standard pascal, offerta da Turbo pascal, Delphi e FreePascal/Lazarus.
2+
3+Un [[Glossary|Object]] è un'estensione della struttura standard pascal detta [record](http://wiki.lazarus.freepascal.org/Record)
4+
5+La programmazione Pascal in testo standard è adatta alla creazione di applicazioni che, come le applicazioni Unix tradizionali,sono adatte per fare una cosa e per farla molto bene.
6+
7+Ciò che un programma fa può essere un'azione veramente complicata ,e può offrire all'utente molte opzioni di menu, ma è essenzialmente ristretta ad obbedire a comandi che l'utente digita da tastiera e a listare le sue risposte sul terminale o sulla stampante.
8+
9+Per poter produrre una [[Glossary|Graphical User Interface (GUI)]] usualmente si utilizza una sorta di Metodo di programmazione orientata agli oggetti (spesso facendo uso di [[Glossary|C]] o di una delle sue varianti, o Visual Basic, o una delle [[Glossary|OO]] varianti di Pascal quali [[Glossary|FreePascal]] con o senza [[Glossary|Lazarus]]).
10+
11+In una GUI all'utente vengono presentate schermate con un gran numero di immagini organizzate in modo strutturato, consistenti in un'insieme di strumenti o [[Glossary|Widgets]] che sono associati con varie azioni quali
12+
13+- selezioni da menu,
14+- aperture o salvataggio files ,
15+- connessioni ad Internet,
16+- esecuzioni di calcoli numerici, etc.
17+
18+L'utente dovrà muovere il mouse o qualche altro puntatore o strumento sullo schermo, per selezionare le azioni che saranno eseguite in risposta al click del mouse o ai tasti premuti.
19+
20+I sistemi per offrire una complessa interfaccia grafica possono essere scritti in Pascal standard o quasi qualsiasi altro linguaggio di programmazione, ma è molto più facile l'utilizzo di un sistema orientato agli oggetti, in cui ogni oggetto grafico sullo schermo può avere tutte le sue proprietà e le sue procedure e funzioni connesse con il suo uso conglobate in una struttura comune.
21+
22+## Oggetti - una analogia con il mondo reale
23+
24+Consideriamo le analogie di un campione di sangue prelevato in un ospedale o in uno studio medico.
25+
26+### Campione di sangue
27+
28+Il campione fisico è certamente un oggetto o **object**; ed ha , associato con esso una quantità di informazioni,documenti ed altri oggetti fisici.
29+
30+- **Provetta**, del tipo determinato dal test che si dovrà eseguire.
31+
32+- **Metodica** (o *metodo*, *procedura operativa standard*) utilizzata dall'infermiera o dal tecnico di laboratorio che prelevano e processano il campione
33+ - che tipo di provetta si dovrà usare,
34+ - come processare il campione
35+ - come conservarlo prima di consegnarlo al laboratorio.
36+
37+- **Etichetta** sulla provetta con i dettagli per
38+ - identificare il campione
39+ - Nome e cognome e data di nascita del paziente
40+ - data e ora del prelievo
41+ - analisi richieste.
42+
43+- **Modulo di richiesta** che accompagna il campione per il laboratorio cui il campione è diretto
44+ - ID Campione
45+ - ID del medico richiedente
46+ - quali analisi il medico richiede e
47+ - anamnesi e dettagli completi del paziente
48+ - La possibile diagnosi di cui si richiede conferma.
49+
50+Una copia delle richiesta viene conservata nella cartella clinica per ricordare al medico di attendersi risultati entro un periodo di tempo adeguato.
51+
52+- In laboratorio - **metodi locali** per determinare
53+ - come il campione deve essere analizzato,
54+ - Quale strumento usare,
55+ - come lo strumento dovrà operare e come dovrà essere calibrato,
56+ - come il risultato dovrà essere memorizzato formattato e
57+ - presentato al medico.
58+
59+L'effettivo*'risultato*' è un dato che il medico usa per formulare la diagnosi, e una copia dei risultati è archiviata nella cartella clinica del paziente.
60+
61+Il campione fisico può essere conservato per riferimento,per test di conferma o ulteriori test, o potrà essere smaltito in ottemperanza alle norme per lo smaltimento dei campioni biologici o mediante incenerimento, ci sarà un metodo per descrivere questo procedimento.
62+
63+Non è necessario che il medico dica tutti i dettagli operativi e le istruzioni di lavoro ogni qualvolta che un campione viene prelevato; anzi,egli può avere ben poche conoscenze di come il campione verrà processato dal laboratorio.
64+
65+I dettagli dei vari processi sono***ereditati** dai precedenti processi dei campione in analisi ,ossia a priori si è stabilito il metodo di processo del campione - ci sarà un piano generico per l'intera sequenza, e insieme abbiamo potuto pensare al campione di sangue,a tutti i suoi documenti e dati, e la metodica di base, come a un complesso* 'oggetto'''.
66+
67+Nella mente del medico, il campione di sangue è visto come un'unica entità, come i suoi risultati, e per gli infermieri e tecnici il campione, la provetta, l'etichetta e le condizioni di conservazione anch'esse sono identificate come se fossero una sola entità.
68+
69+Traduzione da completare.....
70+
71+### Un'altro esempio- Automobile
72+
73+Se non vi piace l'esempio del campione di sangue,lo stesso tipo di ragionamento può essere applicato all'automobile consegnata al garage per una riparazione. Ciò potrebbe consistere in
74+
75+- Il veicolo fisico
76+- i documenti in possesso del proprietario: Libretto di circolazione (comprese targhe), le assicurazioni, le ricevute per l'acquisto, i pezzi di ricambio, le riparazioni, ecc
77+- il consumo di carburante
78+- i conducenti autorizzati ad utilizzare il veicolo, con le loro patenti di guida
79+- gli interventi di manutenzione registrati presso il garage
80+- metodi o procedure da seguire per la verifica e la manutenzione di routine
81+- metodi da seguire per le riparazioni non di routine, ecc
82+- informazioni di fatturazione per il cliente
83+
84+## Esempi di programmazione
85+
86+Basta con questa introduzione, fatta di esempi del mondo reale! Dobbiamo procedere con l'obiettivo principale: la programmazione FreePascal
87+
88+Dobbiamo considerare la creazione di un semplice modulo con pochi controlli per una applicazione in FreePascal / Lazzaro.
89+
90+<div class="floatleft">
91+
92+<figure>
93+<img src="ObjectInspector-TForm.png" title="ObjectInspector-TForm.png" />
94+<figcaption>ObjectInspector-TForm.png</figcaption>
95+</figure>
96+
97+</div>
98+
99+<div class="floatright">
100+
101+<figure>
102+<img src="BlankForm.png" title="BlankForm.png" />
103+<figcaption>BlankForm.png</figcaption>
104+</figure>
105+
106+</div>
107+
108+Richiamando la IDE di Lazarus, al programmatore viene presentato un modello vuoto "Form" in progettazione, in cui egli dovrà porre oggetti e vari controlli.
109+
110+Si noti che il Form vuoto precostituito è già un oggetto, con le proprie caratteristiche, come la posizione (in alto e sinistra), le dimensioni (altezza e larghezza), il colore, il font di default per l'aggiunta di testo ecc
111+
112+------------------------------------------------------------------------
113+
114+Se un controllo Button, un tasto, viene immesso sul Form (tipo TButton), questi avrà una serie di proprietà, che possono essere esaminate nella finestra Object Inspector .
115+
116+Molte delle proprietà hanno nomi simili a quelle del Modulo 'Form', questo è dovuto al fatto che molte proprietà sono*'ereditate*' da parte di alcuni comuni antenati di classe, che definiscono le proprietà come sono definite e gestite dalle classi discendenti.
117+
118+Così come per le proprietà, l'Object Inspector offre una scheda denominata*'Eventi*', che dà accesso ai gestori di eventi 'Event Handlers' che sono metodi per gestire tali eventi, come un clic del mouse su un pulsante (OnClick) o alcuni cambiamento di posizione, le dimensioni o altre proprietà (OnChange).
119+
120+L'immagine fisica del pulsante nel Modulo o Form, insieme con tutte le sue proprietà e metodi di gestione, dovrebbe essere considerato come una singola entità o*'oggetto*' in Pascal.
121+
122+<div class="floatleft">
123+
124+<figure>
125+<img src="ObjectInspector-TButton.png" title="ObjectInspector-TButton.png" />
126+<figcaption>ObjectInspector-TButton.png</figcaption>
127+</figure>
128+
129+</div>
130+
131+<div class="floatright">
132+
133+<figure>
134+<img src="FormWithButton.png" title="FormWithButton.png" />
135+<figcaption>FormWithButton.png</figcaption>
136+</figure>
137+
138+</div>
139+
140+<div class="floatright">
141+
142+<figure>
143+<img src="Source_FormWithButton1.png‎" title="Source_FormWithButton1.png‎" />
144+<figcaption>Source_FormWithButton1.png‎</figcaption>
145+</figure>
146+
147+</div>
148+
149+## Object-Oriented Extensions to standard Pascal
150+
151+La struttura Pascal di tipo record viene estesa per definire un
152+
153+### Object
154+
155+Un oggetto è uno speciale tipo di record. Il record contiene tutti i campi che sono dichiarati nella definizione dell'oggetto (proprio come un convenzionale record), ma ora le procedure e le funzioni possono essere dichiarate come se fossero parte del record e si richiamano come puntatori ai metodi associati con il tipo di oggetto.
156+
157+Ad esempio, un oggetto può contenere una serie di valori reali, una matrice,unitamente con un metodo di calcolo della media.
158+
159+`Type`\
160+`  Average = Object`\
161+`    NumVal: Integer;`\
162+`    Values: Array [1..200] of Real;`\
163+`    Function Mean: Real; { calculates the average value of the array }`\
164+`  End;`
165+
166+Gli oggetti possono "ereditare" campi e metodi da oggetti "madre". Ciò significa che questi campi e metodi possono essere usati come se fossero incluse negli oggetti dichiarati come un oggetto figlio.
167+
168+Inoltre, viene introdotto un concetto di visibilità : i campi, le procedure e le funzioni possono essere dichiarati come pubblici, protetti o privati. Per impostazione predefinita, i campi e metodi sono pubblici, e possono essere esportati al di fuori delle attuali unit. Campi o metodi protetti sono disponibili solo per gli oggetti discendenti dal corrente oggetto antenato. Campi e metodi dichiarati privati sono unicamente accessibili nella unit corrente: il loro scopo è limitato all'implementazione della corrente unit.
169+
170+### Class
171+
172+Gli oggetti molto spesso non sono usati da se stessi in FreePascal and Lazarus; invece le classi sono largamente usate. La Classe è definita quasi alla stessa stregua di un oggetto, ma è un puntatore ad un oggetto piuttosto che l'oggetto stesso.
173+
174+Tecnicamente, questo significa che la classe è assegnata "on the Heap of a program", mentre l'oggetto viene assegnato in Stack. Ecco un semplice esempio di dichiarazione di una classe:
175+
176+`{-----------------------------------------}`\
177+`{example of Class declaration from the LCL}`\
178+`{-----------------------------------------}`\
179+` TPen = class(TFPCustomPen)`\
180+` private`\
181+`   FColor: TColor;`\
182+`   FPenHandleCached: boolean;`\
183+`   FReference: TWSPenReference;`\
184+`   procedure FreeReference;`\
185+`   function GetHandle: HPEN;`\
186+`   function GetReference: TWSPenReference;`\
187+`   procedure ReferenceNeeded;`\
188+`   procedure SetHandle(const Value: HPEN);`\
189+` protected`\
190+`   procedure DoAllocateResources; override;`\
191+`   procedure DoDeAllocateResources; override;`\
192+`   procedure DoCopyProps(From: TFPCanvasHelper); override;`\
193+`   procedure SetColor`\
194+`        (const NewColor: TColor; const NewFPColor: TFPColor); virtual;`\
195+`   procedure SetFPColor(const AValue: TFPColor); override;`\
196+`   procedure SetColor(Value: TColor);`\
197+`   procedure SetMode(Value: TPenMode); override;`\
198+`   procedure SetStyle(Value: TPenStyle); override;`\
199+`   procedure SetWidth(value: Integer); override;`\
200+` public`\
201+`   constructor Create; override;`\
202+`   destructor Destroy; override;`\
203+`   procedure Assign(Source: TPersistent); override;`\
204+`   property Handle: HPEN read GetHandle write SetHandle; deprecated;`\
205+`   property Reference: TWSPenReference read GetReference;`\
206+` published`\
207+`   property Color: TColor read FColor write SetColor default clBlack;`\
208+`   property Mode default pmCopy;`\
209+`   property Style default psSolid;`\
210+`   property Width default 1;`\
211+` end;`
212+
213+Si noti che questa classe è definita come un istanza di un altra classe **madre** o **antenato** (**'TFPCustomPen) da cui**eredita''' tutte le sue proprietà e metodi.Ha alcuni campi propri, raggruppati sotto
214+
215+- **private** - questo significa che gli elementi qui definiti, sono disponibili o visibili da altre classi procedure o funzioni definite all'interno della stessa unit di programma (questo esempio è da*Graphics*, così che una qualsiasi delle altre classi, come *TBitMap*,*TPicture* etc nella stessa unità è in grado di farne uso.Esse sono generalmente variabili locali (eg *FColor*, *FPenHandleCached*) o metodi usati localmente(*GetHandle*, *SetHandle*) ma possono essere usate o possono riferirvi voci dichiarate in sezioni **protected** or **public**.
216+- **protected** - questo significa che le voci definite qui sono solo disponibili o visibili da classi che discendono da quella classe **antenata**,ed eredita le sue proprietà o metodi
217+- **public** - questo significa che le voci definite qui sono solo disponibili per qualunque unit che includa la unit corrente in essa con la clausula [[Glossary|Uses]]
218+- **published** - è simile alla sezione **public**, ma il compilatore genera anche il tipo di informazioni che è necessario per lo streaming automatico di queste classi. Spesso la lista delle voci appare nel Object Inspector di Lazarus; se non compare una lista **published**,tutti i campi **public** appaiono normalmente in the Object Inspector.
219+
220+### Methods
221+
222+Un metodo è esattamente come una procedura standard o una funzione, ma può avere qualche **directives**.
223+
224+Alcuni dei metodi di definizione di cui sopra sono etichettati con la direttiva **virtual**; altri sono etichettati con la direttiva **override**.
225+
226+- **virtual** significa che il tipo o il grado effettivo di un metodo non è noto al momento della compilazione,ma è stato selezionato in run-time a seconda di ciò che effettivamente richiama il sotto-programma sul momento. It could be considered a place-holder in the definition of the class.
227+- **override** means that at run-time the locally given definition can take the place of a definition inherited from an ancestor class, particularly if it was **virtual**. If you particularly want to use the method defined in the ancestor class, it is sometimes necessary to call it specifically with the **inherited** clause.
228+
229+Methods with no virtual or override directive are **static** methods (the usual kind in Pascal). Those with a virtual or override directive are **dynamic**.
230+
231+Special instances of methods are:
232+
233+- **create** - a **constructor** for a class, which takes care of allocating memory, collecting together all the information needed and configuring/initializing the various properties.
234+- **destroy** - a **destructor** for a class, which removes all the parts of the class from the system in an orderly and logical way, and returns all its resources for the system to re-use.
235+
236+### Properties
237+
238+Properties are just like ordinary fields in a conventional Pascal record, but they can have **read** and/or **write** specifiers.
239+
240+- **read** specifier is a field, or a function that returns a result of the correct type for the property. In the example above, the property *Color* has a read specifier *FColor*, which is a local variable containing the value to be used. If a property has a **read** but no **write** specifier, it is read-only.
241+- **write** specifier is a field, or a procedure that will store the value of the property in a specific location. In the example above, *Color* has a write specifier *SetColor* that is a procedure (defined in the **protected** section) for writing the color value to some specified location. If a property has a **write** but no **read** specifier, it is write-only.
242+- **default** - note that it is possible to set a **default** value for a property. For example, *Color* here is given the default value *clBlack*, or black, at the time of creation. It could subsequently be given a different value, by a programming assignment statement, or in the Object Inspector.
243+
244+## Further information
245+
246+This has only scratched the surface of the topic. For more details, readers are strongly recommended to read the [FreePascal](http://lazarus-ccr.sourceforge.net/fpcdoc/ref/ref.html) manuals, especially Chapters 5 (**Objects**) and 6 (**Classes**)
247+
248+--Kirkpatc 11:04, 20 July 2008 (CEST)
249+
250+------------------------------------------------------------------------
251+
252+[[Console Mode Pascal]]
253+
254+---
255+*From the Free Pascal wiki, page "Object Oriented Programming with Free Pascal and Lazarus/it", as it stood on 2015-06-19 after a change by FTurtle, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history