programmazione

lazarus Lazarus è un ambiente di sviluppo integrato (IDE) open source per il linguaggio di programmazione Pascal, in particolare per il dialetto Object Pascal. Basato sul compilatore Free 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.

home page

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;

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.

Riga 10: procedure TMyClass.SetValue(AValue: Integer);

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.

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;  

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.