Lazarusè
un ambiente di sviluppo integrato (IDE) open source per il
linguaggio di programmazionePascal,
in particolare per il dialettoObject
Pascal.
Basato sul compilatoreFree
Pascal,
Lazarus è cross-platform, funzionando su Windows, macOS, Linux e
altri sistemi operativi. È spesso paragonato a Delphi, in quanto
offre una programmazione visuale con una vasta libreria di
componenti per creare applicazioni desktop con interfaccia grafica
(GUI) in modo rapido e intuitivo. Lazarus è ideale per lo sviluppo
di software multipiattaforma, mantenendo la semplicità e la potenza
del Pascal moderno.
Programmazione Orientata agli Oggetti in Lazarus (Pascal)
Pubblicato il: 5-2-2025
Ultima Modifica: 7-2-2025
La programmazione orientata agli oggetti (OOP) è un paradigma di programmazione che utilizza "oggetti" per rappresentare dati e metodi. In Lazarus (Pascal), l'OOP è supportata attraverso l'uso di classi e oggetti.
Definizione di una Classe
Una classe è un modello per creare oggetti. Ecco un esempio di una semplice classe in Pascal:
type
TMyClass = class
private
FValue: Integer;
public
procedure SetValue(AValue: Integer);
function GetValue: Integer;
end;
procedure TMyClass.SetValue(AValue: Integer);
begin
FValue := AValue;
end;
function TMyClass.GetValue: Integer;
begin
Result := FValue;
end;
Codice copiato!
Spiegazione Riga per Riga
Riga 1: type
La parola chiave typein Pascal inizia la definizione di un nuovo tipo di dato. In questo caso, stiamo definendo una classe.
Riga 2: TMyClass = class
Qui stiamo definendo una nuova classe chiamata TMyClass. La parola chiave class indica che stiamo creando una classe, che è un costrutto fondamentale nella programmazione orientata agli oggetti.
Riga 3: private
La sezione private della classe contiene membri (campi e metodi) che sono accessibili solo all'interno della classe stessa. Questo incapsula i dati e protegge l'accesso diretto dall'esterno.
Riga 4: FValue: Integer;
Qui stiamo dichiarando un campo privato chiamato FValue di tipo Integer. Questo campo sarà utilizzato per memorizzare un valore intero all'interno della classe.
Riga 5: public
La sezione public della classe contiene membri che sono accessibili dall'esterno della classe. Questi metodi forniscono un'interfaccia per interagire con la classe.
Riga 6: procedure SetValue(AValue: Integer);
Stiamo dichiarando un metodo pubblico chiamato SetValue che accetta un parametro AValue di tipo Integer. Questo metodo sarà utilizzato per impostare il valore del campo privato FValue.
Riga 7: function GetValue: Integer;
Stiamo dichiarando un metodo pubblico chiamato GetValue che restituisce un valore di tipo Integer. Questo metodo sarà utilizzato per ottenere il valore del campo privato FValue.
Riga 8: end;
La parola chiave end; chiude la definizione della classe TMyClass.
Qui stiamo implementando il metodo SetValue della classe TMyClass. Questo metodo accetta un parametro AValue di tipo Integer.
Riga 11: begin
La parola chiave begin inizia il blocco di codice del metodo SetValue.
Riga 12: FValue := AValue;
Questa istruzione assegna il valore del parametro AValue al campo privato FValue. In altre parole, imposta il valore interno della classe.
Riga 13: end;
La parola chiave end; chiude il blocco di codice del metodo SetValue.
Riga 15: function TMyClass.GetValue: Integer;
Qui stiamo implementando il metodo GetValue della classe TMyClass. Questo metodo restituisce un valore di tipo Integer.
Riga 16: begin
La parola chiave begin inizia il blocco di codice del metodo GetValue.
Riga 17: Result := FValue;
Questa istruzione assegna il valore del campo privato FValue alla variabile Result, che è il valore restituito dal metodo GetValue.
Riga 18: end;
La parola chiave end; chiude il blocco di codice del metodo GetValue.
Creazione di un Oggetto
Per creare un oggetto da una classe, è necessario dichiarare una variabile di tipo classe e poi creare l'oggetto utilizzando il costruttore Create.
var
MyObject: TMyClass;
begin
MyObject := TMyClass.Create;
try
MyObject.SetValue(10);
WriteLn('Il valore è: ', MyObject.GetValue);
finally
MyObject.Free;
end;
end.
Codice copiato!
Spiegazione Riga per Riga
Riga 1: var
La parola chiave var in Pascal inizia la sezione di dichiarazione delle variabili. Qui stiamo dichiarando una variabile che verrà utilizzata nel programma.
Riga 2: MyObject: TMyClass;
Stiamo dichiarando una variabile chiamata MyObject di tipo TMyClass. TMyClass è una classe definita precedentemente nel programma.
Riga 3: begin
La parola chiave begin inizia il blocco di codice principale del programma. Tutte le istruzioni eseguibili sono racchiuse tra begin e end..
Riga 4: MyObject := TMyClass.Create;
Qui stiamo creando un'istanza della classe TMyClass e assegnandola alla variabile MyObject. Il metodo Create è un costruttore che inizializza l'oggetto.
Riga 5: try
La parola chiave try inizia un blocco di codice protetto. Questo blocco è utilizzato per gestire eventuali eccezioni che potrebbero verificarsi durante l'esecuzione del codice.
Riga 6: MyObject.SetValue(10);
Stiamo chiamando il metodo SetValue dell'oggetto MyObject e passando il valore 10 come parametro. Questo metodo imposta il valore interno dell'oggetto.
Riga 7: WriteLn('Il valore è: ', MyObject.GetValue);
Qui stiamo utilizzando la procedura WriteLn per stampare un messaggio sulla console. Il messaggio include il valore restituito dal metodo GetValue dell'oggetto MyObject.
Riga 8: finally
La parola chiave finally inizia un blocco di codice che viene eseguito sempre, indipendentemente dal fatto che si verifichi un'eccezione o meno. Questo blocco è utilizzato per garantire che le risorse vengano liberate correttamente.
Riga 9: MyObject.Free;
Stiamo chiamando il metodo Free sull'oggetto MyObject per liberare la memoria allocata per l'oggetto. Questo è importante per evitare perdite di memoria.
Riga 10: end;
La parola chiave end; chiude il blocco di codice try-finally.
Riga 11: end.
La parola chiave end. chiude il blocco di codice principale del programma e indica la fine del programma.
Ereditarietà
L'ereditarietà permette di creare una nuova classe basata su una classe esistente. Ecco un esempio:
type
TMyDerivedClass = class(TMyClass)
public
procedure DisplayValue;
end;
procedure TMyDerivedClass.DisplayValue;
begin
WriteLn('Il valore è: ', GetValue);
end;
Codice copiato!
Spiegazione Riga per Riga
Riga 1: type
La parola chiave type in Pascal inizia la definizione di un nuovo tipo di dato. In questo caso, stiamo definendo una nuova classe derivata.
Riga 2: TMyDerivedClass = class(TMyClass)
Stiamo definendo una nuova classe chiamata TMyDerivedClass che eredita dalla classe TMyClass. Questo significa che TMyDerivedClass avrà tutti i membri (campi e metodi) di TMyClass e potrà aggiungerne di nuovi o sovrascriverne alcuni.
Riga 3: public
La sezione public della classe contiene membri che sono accessibili dall'esterno della classe. In questo caso, stiamo dichiarando un nuovo metodo pubblico.
Riga 4: procedure DisplayValue;
Stiamo dichiarando un metodo pubblico chiamato DisplayValue che non accetta parametri e non restituisce alcun valore. Questo metodo sarà utilizzato per visualizzare il valore memorizzato nella classe.
Riga 5: end;
La parola chiave end; chiude la definizione della classe TMyDerivedClass.
Riga 7: procedure TMyDerivedClass.DisplayValue;
Qui stiamo implementando il metodo DisplayValue della classe TMyDerivedClass. Questo metodo non accetta parametri e non restituisce alcun valore.
Riga 8: begin
La parola chiave begin inizia il blocco di codice del metodo DisplayValue.
Riga 9: WriteLn('Il valore è: ', GetValue);
Questa istruzione utilizza la procedura WriteLn per stampare un messaggio sulla console. Il messaggio include il valore restituito dal metodo GetValue, che è ereditato dalla classe base TMyClass.
Riga 10: end;
La parola chiave end; chiude il blocco di codice del metodo DisplayValue.