Pascal/Override, metodi virtuali e classi astratte
Verranno ora introdotti alcuni concetti avanzati del paradigma OOP.
Override
[modifica | modifica sorgente]Nella programmazione orientata agli oggetti è possibile ridefinire un metodo che è stato ereditato dall'oggetto padre. Il metodo ovviamente dovrà avere lo stesso nome e lo stesso numero e tipo di parametri.
Facciamo subito un esempio:
TYPE TA = Object
Procedure StampaMsg;
End;
TB = Object (A)
End;
Procedure A.StampaMsg;
BEGIN
writeln("Messaggio del metodo originale.");
END;
Procedure B.StampaMsg; {Override}
BEGIN
writeln("Questo invece è il messaggio del metodo ridefinito.");
END;
VAR A:TA;
B:TB;
BEGIN
A.StampaMsg; {metodo originale}
B.StampaMsg; {metodo ridefinito}
readln;
END.
Molte volte però si ha l'esigenza di creare un'estensione del metodo originale, in modo che possa fare altro e di più. Il Turbo Pascal ammette la parola riservata inherited
per includere nel metodo la routine compresa nel metodo originale.
Riferendoci all'esempio di cui sopra, possiamo modificarlo per mostrare un possibile utilizzo della parola chiave inherited.
TYPE TA = Object
Procedure StampaMsg;
End;
TB = Object (A)
End;
Procedure A.StampaMsg;
BEGIN
writeln("Messaggio del metodo originale.");
END;
Procedure B.StampaMsg; {Override}
BEGIN
inherited StampaMsg; {qui il compilatore include la routine del metodo dell'oggetto padre}
writeln("Questo invece è il messaggio del metodo ridefinito.");
END;
VAR A:TA;
B:TB;
BEGIN
B.StampaMsg; {metodo ridefinito}
readln;
END.
L'effetto del programma sopra sarà di stampare entrambi messaggi, ovvero quello della funzione originale e della funzione ridefinita, grazie all'istruzione
inherited StampaMsg
.
I metodi virtuali e le classi astratte
[modifica | modifica sorgente]Un metodo è chiamato virtuale quando non è definito nell'oggetto dove è stato dichiarato. Quindi la sua presenza sarà appunto virtuale.
Una classe che contiene metodi virtuali è chiamata classe astratta poiché, non avendo i metodi virtuali definiti, la stessa non può essere istanziata, cioè non possiamo creare un oggetto che contiene metodi astratti. Una classe astratta servirà come modello per altre classi che erediteranno da lei.