Novità nel Visual Code
copia linkCreazione ed uso di metodi virtuali
Un documento esteso è a tutti gli effetti un normale documento, con la differenza che eredita le proprietà, le collection ed i comportamenti (metodi ed eventi) di tutti i suoi documenti base. E' quindi possibile utilizzare un documento esteso in tutti i modi e contesti in cui era possibile farlo finora.
I documenti estesi si comportano secondo le regole dell'object-orientation, a cui si fa riferimento per maggiori informazioni. E' quindi possibile creare metodi virtuali che specializzano il comportamento di un oggetto esteso e che vengono risolti direttamente a runtime.
Instant Developer riconosce la presenza di metodi virtuali dal fatto che una classe derivata contiene una procedura o una funzione non privata con lo stesso nome di quella contenuta in una sua classe base. Il modo più semplice per specializzare un metodo in una classe derivata è quindi quello di tirare con il mouse il metodo dalla classe base alla classe derivata, tenendo premuto CTRL+SHIFT. Questa operazione copia il metodo nella classe derivata, compresi i parametri ed il corpo. Dopo averlo copiato sarà possibile modificarne il codice, cancellando o sostituendo quello copiato dal metodo base.

Procedura per la specializzazione di un metodo virtuale in una classe derivata
All'interno di un metodo di una classe derivata e possibile chiamare i metodi della classe base scrivendone il nome e selezionando il token che inizia con base. invece che con this. Solo all'interno di un evento è possibile chiamare l'evento base.

Come chiamare il metodo base da un metodo sovrapposto
E' importante notare che tutte le volte che inserite o cancellate un metodo sovrapposto in una classe, oppure quando modificate la classe base, Instant Developer analizza tutto il codice del progetto e ricollega tutte le chiamate al metodo sovrapposto più vicino al contesto scelto, mostrando un messaggio di avvertimento quando questo avviene. In questo modo sarà possibile rendersi conto di quali modifiche avvengono all'interno dell'intero progetto solamente aggiungendo o togliendo un metodo sovrapposto da una classe.

Dopo aver copiato il metodo Saluta nella classe azienda, lo statement spa.Saluta emette un messaggio di avvertimento: prima avrebbe chiamato Persona.Saluta, dopo chiamerà Azienda.Saluta.
Infine notiamo che non è possibile modificare il nome, il tipo di ritorno ed altre caratterstiche da un metodo sovrapposto all'interno di una classe derivata. E' invece necessario effettuare le modifiche a livello di classe base, ed, in questo caso, esse saranno propagate a tutta la struttura. Le modifiche ai parametri sono invece ammesse, anche se viene lasciato al programmatore il compito di rendere coerenti i parametri ai vari livelli della struttura delle classe.

Aggiungendo un parametro al metodo Saluta base, gli altri metodi sovrapposti avvertono che anche loro dovranno essere sistemati
Grafici delle procedure chiamanti e chiamate
Instant Developer è in grado di creare automaticamente il grafico completo delle chiamate reciproche fra metodi a partire dal un metodo base, analizzando il codice in discesa (procedure chiamate) o in salita (procedure chiamanti).
Questa analisi può essere complicata nel caso di chiamate a metodi virtuali, perché esse vengono risolte solamente a runtime. La soluzione implementata consiste nel considerare tutti i percorsi di codice che potrebbero essere seguiti in seguito all'esecuzione della chiamata virtuale, considerando che potrebbero essere chiamati i metodi sovrapposti di tutte le classi derivate. Questo sistema darà origine a grafici più estesi di quelli effettivamente possibili nella realtà, ma consente di avere una visione più completa possibile delle parti di codice potenzialmente conivolte in un determinato algoritmo.

La chiamata a Persona.Saluta potrebbe in realtà chiamare tutti i metodi virtuali nelle classi derivate in base al tipo di oggetto che a runtime effettuerà la chiamata.
Ultima modifica: 23/03/2021 / Validità: da 7.1.3300