La programmazione a oggetti (in inglese OOP object oriented programming) è un paradigma (uno stile di programmazione) rivoluzionario nel mondo dell'informatica dato che consente al programmatore di riportare il comportamento degli oggetti nel suo programma, infatti le azioni che un oggetto può fare si chiamano metodi e le caratteristiche diventano attributi. Prendiamo per esempio l'oggetto macchina tutte le auto sono macchina ma non tutte hanno le stesse caratteristiche, è facile intuire che non tutte sono gialle, non tutte hanno 5 posti e così via, ma tutte servono a una stessa azione, la guida.

La programmazione a oggetti e strettamente legata alle classi, infatti la classe è una descrizione astratta degli oggetti che contiene (implementa) attributi e metodi. Definita la classe possiamo affermare che ogni oggetto necessariamente appartiene ad una classe, quindi non vi è oggetto che non appartenga ad una classe. In Delphi tutte le classi derivano da una stessa classe capostipite denominata Tobject, quindi diciamo che tutte le classi in Delphi ereditano dal Tobject*1 quello che ci interessa è sapere che tutti i metodi e gli attributi che appartengono alla classe padre (nel nostro caso il Tobject) saranno anche nella classe figlia senza doverle implementare nuovamente. Ogni sviluppatore in Delphi usa gli oggetti anche se alcuni non si rendono conto, ma un bottone è un oggetto di classe Tbutton, una edit e un oggetto di classe Tedit, la stessa form è una classe Tform, quando noi posizioniamo un oggetto sulla form in realtà quel'oggetto viene stanziato questo lo fa l'IDE in automatico, ebbene per poter creare un oggetto bisogna prima stanziarlo cioè dichiararlo in precedenza*2. Ma per poter stanziare bisogna prima creare la classe:

Creando una nuova unit (con nome: Unit2) in Delphi ci verrà presentata così:

unit Unit2; 

interface

uses
  Classes, SysUtils; 

implementation

end. 

Se noi volessimo cambiare il nome della unit da Unit2 ad Automobile dovremo cambiare anche nella sezione unit il nome che da Unit2 diventerà Automobile. Se volessimo dichiarare una classe TAuto dovremo scrivere all'interno del Interface: il seguente codice:

TAuto = class

end;

questa scrittura ricorda la dichiarazione dei record. Ogni classe può ma non necessariamente deve contenere attributi e metodi privati, al contrario una classe deve contenere almeno un'attributo od un metodo pubblico altrimenti la classe non ha senso. Diciamo che nella nostra visiona la classe dovrebbe essere come una scatola nera (la famosa blackbox) di cui il programmatore che la utillizza non conosce né può modificare ciò che sta all'interno ma sa che applicando certi ingressi (modificando attributi o accedendo a metodi) il suo comportamento varia. Con il commando private diciamo alla classe che quel attributo/metodo non potrà essere modificato/visto dall'esterno ma la cosa più importante è che può accedere a tutti quei altri attributi/metodi della classe pubblici o private quali siano, al contrario con il comando pubblic si rende pubblico l'attributo/metodo quindi visibile dall'esterno. Per fare ciò diciamo che nella nostra classe dovremmo implementare un'attributo pubblico colore, un attributo privato max_veloc, due metodi pubblici Setmax_veloc e Getmax_veloc*3 e un metodo costruttore crea che prende in input il colore. Il metodo costruttore è un metodo speciale che ci consente di creare l'oggetto non è obbligatorio dichiararlo poiché come ho detto tutti gli oggetti in Delphi ereditano dal capostipite Tobject attributi e metodi uno tra questi è il metodo costruttore, quindi se non sarà dichiarato possiamo usare il metodo costruttore Create del Tobject. La necessità di crearsi un metodo costruttore avviene quando creato l'oggetto bisogna azzerare attributi, come nel nostro esempio auto bisogna passare al metodo costruttore il colore di tipo stringa, dato che ogni macchina necessariamente deve avere un colore.

Il tutto all'interno della nostra unit Automobile sarà:

unit Automobile; 

interface

uses
  Classes, SysUtils; 

TAuto = class
	constructor Crea (colore :string);
	private max_veloc:integer;
	public colore:string;
	public SetMax_veloc(max_veloc :integer);
	public Getmax_veloc : integer;	
end;

implementation

end. 

Per implementare i metodi andremo nella parte implementation e sarà necessario scrivere il commando public/private/constructor seguito da NomeDellaClasse.NomeMetodo(Parametri);

constructor TAuto.Crea(colore:string);
begin
end;

public TAuto.SetMax_veloc(max_veloc :integer);
begin
end;

public TAuto.Getmax_veloc : integer;
begin
end;

con questa abbiamo implementato i 3 metodi. Adesso vogliamo che tramite il metodo SetMax_veloc modifichiamo l'attributo max_veloc. Osserviamo come il nome del parametro formale coincide col nome del'attributo max_veloc, nel metodo SetMax_veloc diciamo che il parametro formale nasconde l'attributo e per accedere all'attributo bisogna richiamare la classe con il comando self quindi avremo*4:

public TAuto.SetMax_veloc(max_veloc :integer);
begin
if max_veloc > 1 then begin
	self.max_veloc := max_veloc;
end;
end;

Con self.max_veloc richiamo l'attributo max_veloc. Il metodo GetMax_veloc ci deve restituire il valore dell'attributo max_veloc e avremo:

public TAuto.Getmax_veloc : integer;
begin
	Getmax_veloc := max_veloc; 
end;

Qui mettere max_veloc o self.max_veloc è pratticamente la stessa cosa dato che non c'è alcun parametro formale che nasconde l'attributo. In tutto avremo:

unit Automobile; 

interface

uses
  Classes, SysUtils; 

TAuto = class
	constructor Crea (colore :string);
	private max_veloc:integer;
	public colore:string;
	public SetMax_veloc(max_veloc :integer);
	public Getmax_veloc : integer;	
end;

implementation

constructor Crea(colore:string);
begin
self.colore := colore;
end;

public TAuto.SetMax_veloc(max_veloc :integer);
begin
if max_veloc > 1 then begin
	self.max_veloc := max_veloc;
end;
end;

public TAuto.Getmax_veloc : integer;
begin
	Getmax_veloc := max_veloc; 
end;
end. 

Adesso creata la classe possiamo nel nostro progetto aggiungere agli uses la nostra unit Automobile e possiamo stanziare un'oggetto Auto di tipo Tauto che nella sezione var della unit1(o comunque la mainUnit) possiamo dichiarare: Auto:Tauto; Per creare l'oggetto dobbiamo tramite un metodo che potrebbe essere quello del FormCreate digitare il seguente codice:

Auto := Tauto.Crea('giallo');

quindi NomeOggetto := NomeClasse.MetodoCostruttore(Parametri); Adesso possiamo usare il nostro oggetto Auto, possiamo cambiargli il colore con Auto.colore := 'colore', e cambiargli la velocità massima tramite il metodo SetMax_Veloc nel seguente modo: Auto.SetMax_veloc(velocità)

 

*1 L'ereditarietà non verra spiegata in questo articolo, ma vi saranno dei cenni..

*2 Alcuni linguaggi di programmazione come Java permettono il stanziamento e la creazione di un oggetto nello stesso momento, anche se in realtà questo avviene in momenti diversi Es: Scanner input = new Scanner(System.in); con Scanner input stanziamo l'oggetto di classe Scanner e con