Pascal/Override, metodi virtuali e classi astratte: differenze tra le versioni
Nuova pagina: {{Pascal}} Verranno ora introdotti alcuni concetti avanzati del paradigma OOP. ==Override== Nella programmazione orientata agli oggetti è possibile ridefinire un metodo che è stato ... |
Nessun oggetto della modifica |
||
Riga 29: | Riga 29: | ||
END. |
END. |
||
</source> |
</source> |
||
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 <code>inherited</code> 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'''. |
|||
<source lang=pascal> |
|||
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. |
|||
</source> |
|||
L'effetto del programma sopra sarà di stampare entrambi messaggi, ovvero quello della funzione originale e della funzione ridefinita, grazie all'istruzione <source lang=pascal>inherited StampaMsg</source>. |
|||
==I metodi virtuali e le classi astratte== |
|||
... |
|||
[[Categoria:Pascal]] |
Versione delle 21:36, 23 giu 2009
Verranno ora introdotti alcuni concetti avanzati del paradigma OOP.
Override
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
...