Pascal/Override, metodi virtuali e classi astratte: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
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

Indice del libro

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

...