Pascal/Costruttori e distruttori: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
Riga 11: | Riga 11: | ||
<source lang=pascal> |
<source lang=pascal> |
||
USES crt; |
|||
TYPE HelloWorld= Object |
TYPE HelloWorld= Object |
||
PRIVATE |
PRIVATE |
||
Riga 31: | Riga 32: | ||
VAR CiaoMondo:HelloWorld; |
VAR CiaoMondo:HelloWorld; |
||
BEGIN |
BEGIN |
||
CiaoMondo.Init(30,5) |
CiaoMondo.Init(30,5); |
||
CiaoMondo.Stampa; |
CiaoMondo.Stampa; |
||
readln; |
readln; |
||
Riga 40: | Riga 41: | ||
I costruttori in un oggetto non sono ovviamente obbligatori, ma se ne raccomanda l'uso. |
I costruttori in un oggetto non sono ovviamente obbligatori, ma se ne raccomanda l'uso. |
||
==I distruttori== |
|||
Analogamente ai construttori, i distruttori fanno quel che necessita non appena l'oggetto viene distrutto, anche se, la funzione principale di un distruttore è quella di liberare la memoria e renderla disponibile ad altre parti del programma. La parola chiave del Pascal che denota un distruttore è <code>DESTRUCTOR</code> |
|||
Come esempio possiamo ancora considerare il precedente, definendo un distruttore che oltre a liberare le risorse e a cancellare l'istanza dell'oggetto, cancella la frase che era stata scritta nello schermo. |
|||
<source lang=pascal> |
|||
USES crt; |
|||
TYPE HelloWorld= Object |
|||
PRIVATE |
|||
riga,colonna:byte; |
|||
PUBLIC |
|||
Constructor Init(rig,col:byte); |
|||
Procedure Stampa; |
|||
Destructor Done; |
|||
End; |
|||
Constructor HelloWorld.Init; |
|||
BEGIN |
|||
riga:=rig; |
|||
colonna:=col; |
|||
END; |
|||
Procedure HelloWorld.Stampa |
|||
BEGIN |
|||
gotoxy(riga,colonna); |
|||
write('Hello, world!'); |
|||
END; |
|||
Destructor HelloWorld.Done; |
|||
BEGIN |
|||
gotoxy(riga,colonna); |
|||
write(' '); |
|||
END; |
|||
VAR CiaoMondo:HelloWorld; |
|||
BEGIN |
|||
CiaoMondo.Init(30,5); |
|||
CiaoMondo.Stampa; |
|||
ReadLn; {Attende che premiamo INVIO} |
|||
CiaoMondo.Done; {Distruzione, lo schermo è tutto nero} |
|||
ReadLn; |
|||
END. |
|||
</source> |
|||
[[Categoria:Pascal]] |
Versione delle 00:39, 23 giu 2009
Quando un oggetto viene creato, vale a dire allocato nella memoria heap e avente un puntatore come riferimento, dovrà essere opportunamente inizializzato affinchè il programma funzioni come voluto. Un oggetto, dopo essere stato creato, se non servirà più al programma potrà essere distrutto, liberando le risorse occupate dall'oggetto stesso e, se necessario, eseguire le dovute azioni prima della sua eliminazione. La programmazione orientata a gli oggetti fornisce due metodi ad hoc per la costruzione e la distruzione degli oggetti, ovvero i cosiddetti costruttori e distruttori.
I construttori
Una macchina quando deve essere accesa e partire deve essere "manovrata" bene affinchè tutto funzioni secondo la nostra intenzione. Se non è ingranata la prima marcia e se non viene premuta la frizione la macchina potrebbe non partire o spegnere il motore a causa del numero basso di giri non appena viene rilasciata la frizione.
Anche un oggetto, in un programma, se non inizializzato correttamente, potrebbe divenire inutile o malfunzionante ai fini del programma. Il Pascal per riferirsi a un metodo che funge da costruttore, utilizza la parola chiave CONSTRUCTOR
.
Supponiamo di creare un oggetto che stampa su un ambiente testuale la famosa frase "Hello, world!". Inizializziamo l'oggetto con la posiziione dove dovrà essere stampata la frase, e poi utilizziamo il metodo Stampa
per stampare la frase.
USES crt;
TYPE HelloWorld= Object
PRIVATE
riga,colonna:byte;
PUBLIC
Constructor Init(rig,col:byte);
Procedure Stampa;
End;
Constructor HelloWorld.Init;
BEGIN
riga:=rig;
colonna:=col;
END;
Procedure HelloWorld.Stampa
BEGIN
gotoxy(riga,colonna);
write('Hello, world!');
END;
VAR CiaoMondo:HelloWorld;
BEGIN
CiaoMondo.Init(30,5);
CiaoMondo.Stampa;
readln;
END.
Il costruttore Init
inizializza i campi riga
e colonna
secondo i parametri passati, Stampa
sposta il cursore nel punto indicato dai campi riga
e colonna
, e stampa finalmente la frase.
I costruttori in un oggetto non sono ovviamente obbligatori, ma se ne raccomanda l'uso.
I distruttori
Analogamente ai construttori, i distruttori fanno quel che necessita non appena l'oggetto viene distrutto, anche se, la funzione principale di un distruttore è quella di liberare la memoria e renderla disponibile ad altre parti del programma. La parola chiave del Pascal che denota un distruttore è DESTRUCTOR
Come esempio possiamo ancora considerare il precedente, definendo un distruttore che oltre a liberare le risorse e a cancellare l'istanza dell'oggetto, cancella la frase che era stata scritta nello schermo.
USES crt;
TYPE HelloWorld= Object
PRIVATE
riga,colonna:byte;
PUBLIC
Constructor Init(rig,col:byte);
Procedure Stampa;
Destructor Done;
End;
Constructor HelloWorld.Init;
BEGIN
riga:=rig;
colonna:=col;
END;
Procedure HelloWorld.Stampa
BEGIN
gotoxy(riga,colonna);
write('Hello, world!');
END;
Destructor HelloWorld.Done;
BEGIN
gotoxy(riga,colonna);
write(' ');
END;
VAR CiaoMondo:HelloWorld;
BEGIN
CiaoMondo.Init(30,5);
CiaoMondo.Stampa;
ReadLn; {Attende che premiamo INVIO}
CiaoMondo.Done; {Distruzione, lo schermo è tutto nero}
ReadLn;
END.