Skip to content

Impariamo Xojo: Estendere le classi

Spesso abbiamo a disposizione delle classi che fanno quanto desideriamo, ma non hanno una certa sequenza di operazioni che ci occorre. In questo caso possiamo estendere la classe e ottenere quanto ci serve.

Certo in questo caso potremmo creare una sottoclasse che ci permetta di implementare le operazioni richieste. Però spesso questo comporta problemi nel caso in cui vogliamo avere delle ulteriori sottoclassi.

Nel linguaggio Xojo possiamo ampliare le capacità di una classe (e quindi di tutte le sottoclassi) utilizzando il costrutto extends.

Questi metodi vanno inseriti in un modulo e devono avere visibilità globale.

Il fatto di doverli inserire in un modulo ci permette di classificarli a seconda delle funzionalità e quindi costruirci una libreria di metodi aggiuntivi in relazione alla tipologia di operazioni come ad esempio per la verifica di quanto inserito in un campo, il rispetto di vincoli particolari in un db, e così via.

Un esempio semplice

Prendiamo l’oggetto Sound. Questo oggetto permetti di far ascoltare il suono allegato al progetto come risorsa. Ha diversi metodi per eseguirlo, fermarlo, farlo eseguire in loop o verificare se si sta già eseguendo il suono.

Poniamo di aver associato alla pressione di un pulsante l’esecuzione di un certo suono (ad esempio una risorsa sonora mioSuono).

Ogni volta che premiamo il pulsante facciamo eseguire il metodo Play: ovvero richiamiamo in un punto della Action del pulsante:

mioSuono.Play

Se vogliamo semplicemente far partire il suono questori basta, visto che se premiamo il pulsante prima che il suono sia terminato non succede nulla.

Ma se vogliamo che il suono sia eseguito come effetto della pressione del pulsante dovremmo verificare se il suono è in esecuzione, nel caso fermarlo e poi lanciare la sua esecuzione.

Se è una operazione che vogliamo fare una volta sola non è un problema. Ma se ci ritroviamo a doverla fare in diversi pulsanti e/o magari in diversi progetti è il caso di utilizzare una estensione.

Creiamo un Modulo (ad esempio estensioniBase) e aggiungiamo il seguente metodo:

Public Sub PlayAlways(extends snd as Sound)
  if snd.IsPlaying then snd.Stop
  snd.Play
End Sub

Ora nella Action del pulsante possiamo scrivere:

mioSuono.PlayAlways

e ogni volta che premiamo il pulsante, il suono verrà eseguito dall’inizio.

Le estensioni degli oggetti vengono riconosciute dal sistema di Autocomplete e questo permette di scrivere velocemente il proprio codice.