Differenze tra le versioni di "Gestire Funzioni come oggetti"

Da Gambas-it.org - Wikipedia.
Riga 61: Riga 61:
  
 
==''Funzioni'' e ''Procedure'' poste in altra Classe o Modulo==
 
==''Funzioni'' e ''Procedure'' poste in altra Classe o Modulo==
Il Modulo o la Classe specifica deve avere, come intestazione, la parola chiave "''Create''". Inoltre, le ''Funzioni'' e le ''Procedure'', presenti in Moduli o in Classi specifiche, saranno rappresentate dal metodo speciale ''_call()'', che viene appunto dichiarato quando l'oggetto è usato come una funzione.
+
Vediamo ora il caso in cui la ''Funzione'' da richiamare, sia posta in una ''Classe'' o in un ''Modulo'' diverso da quelli principali. In ogni caso alle rispettive variabili di tipo ''Oggetto'' dovranno essere assegnati i ''Moduli'' e le ''Classi'' secondarie.
 +
 
 +
 
 +
====Esempio in ambiente grafico====
 +
In un'applicazione in ambiente ''grafico'' il ''Modulo'' o la ''Classe'' specifica deve avere, come intestazione, la parola chiave "''Create''". Inoltre, le ''Funzioni'' e le ''Procedure'', presenti in ''Moduli'' o in ''Classi'' specifiche, saranno rappresentate dal metodo speciale ''_call()'', che viene appunto dichiarato quando l'oggetto è usato per richiamare una funzione.
  
 
Le ''Funzioni'' e ''Procedure'' presenti in una Classe specifica possono essere chiamate anche mediante il metodo ''Object.Call()''. In tal caso non si utilizzerà il metodo speciale ''_call()'' .
 
Le ''Funzioni'' e ''Procedure'' presenti in una Classe specifica possono essere chiamate anche mediante il metodo ''Object.Call()''. In tal caso non si utilizzerà il metodo speciale ''_call()'' .
Riga 118: Riga 122:
 
     Object.Call(obCl, "ClSub", Null)
 
     Object.Call(obCl, "ClSub", Null)
 
      
 
      
 +
'''End'''
 +
 +
 +
 +
====Esempio con applicazione ''a riga di comando''====
 +
In un'applicazione ''a riga di comando'', invece, il ''Modulo'' secondario, contenente la Funzione da richiamare, non necessita della parola chiave ''Create''. Inoltre, nel ''Modulo'' principale alla variabile di tipo ''Oggetto'' andrà assegnato il ''Modulo'' secondario.
 +
 +
 +
Mostriamo un esempio, nel quale il ''Modulo'', assegnato alla variabile di tipo ''Oggetto'' e contenente la Funzione da richiamare, sia il seguente:
 +
'''Public''' Function Somma(a As Integer, b As Integer) As Integer  <FONT Color=gray>' ''<--- La Funzione deve essere dichiarata come "Pubblica"''</font>
 +
 +
  Dim i As Integer
 +
 
 +
  i = a + b
 +
 
 +
  Return i
 +
 
 +
'''End'''
 +
Mentre Il ''Modulo'' principale è il seguente:
 +
'''Public''' Sub Main()
 +
 +
  Dim i As Integer
 +
  Dim ob As Object
 +
 
 +
  ob = <FONT Color=#B22222>Module1</font>
 +
 
 +
  i = Object.Call(ob, "Somma", [3, 4])
 +
   
 +
  Print i
 +
 
 +
'''End'''
 +
 +
 +
Nel caso, invece, si abbia una ''Classe'' secondaria, sarà necessario semplicemente aggiungere all'interno di detta ''Classe'' specifica secondaria la parola chiave ''Create''.
 +
 +
Supponiamo che la ''Classe'' secondaria sia chiamata "''Class1''", e sia la seguente:
 +
<FONT Color=#B22222>Create</font>
 +
 +
 +
'''Public''' Function Somma(a As Integer, b As Integer) As Integer  <FONT Color=gray>' ''<--- La Funzione deve essere dichiarata come "Pubblica"''</font>
 +
 
 +
  Dim i As Integer
 +
 
 +
  i = a + b
 +
 
 +
  Return i
 +
 
 +
'''End'''
 +
Mentre Il ''Modulo'' principale è il seguente:
 +
'''Public''' Sub Main()
 +
 +
  Dim i As Integer
 +
  Dim ob As Object
 +
 
 +
  ob = <FONT Color=#B22222>Class1</font>
 +
 
 +
  i = Object.Call(ob, "Somma", [3, 4])
 +
   
 +
  Print i
 +
 
 
  '''End'''
 
  '''End'''

Versione delle 12:52, 27 mar 2016

Funzioni e Procedure, presenti in Moduli o in Classi specifiche, possono essere gestite e chiamate come oggetti, siano esse interne alla medesima Classe (o Modulo) di quella della funzione chiamante, oppure poste in una Classe (o Modulo) diversa da quella della funzione chiamante.


Funzioni e Procedure poste all'interno della medesima Classe o Modulo della funzione chiamante

Si tratta di assegnare il nome identificativo della Funzione o della Procedura ad una variabile di tipo Oggetto, con la quale effettuare la chiamata con il metodo Object.Clall() .

Esempio in ambiente grafico

Mostriamo un semplice esempio con applicazione in ambiente grafico:

Public Sub Form_Open()
 
 Dim i As Integer
 Dim ob As Object
   
  ob = FMain   ' E' possibile usare anche "Me" anziché FMain
  
  i = Object.Call(ob, "Somma", [3, 4])

  Print i
  
End


Public Function Somma(a As Integer, b As Integer) As Integer   ' <--- La Funzione deve essere dichiarata come "Pubblica"
  
 Dim i As Integer
 
  i = a + b
 
  Return i
 
End


Esempio con applicazione a riga di comando

Mostriamo un semplice esempio con applicazionea riga di comando:

Public Sub Main()
 
 Dim i As Integer
 Dim ob As Object
   
  ob = Me
  
  i = Object.Call(ob, "Somma", [3, 4])

  Print i
  
End


Public Function Somma(a As Integer, b As Integer) As Integer   ' <--- La Funzione deve essere dichiarata come "Pubblica"
  
 Dim i As Integer
 
  i = a + b
 
  Return i
 
End


Funzioni e Procedure poste in altra Classe o Modulo

Vediamo ora il caso in cui la Funzione da richiamare, sia posta in una Classe o in un Modulo diverso da quelli principali. In ogni caso alle rispettive variabili di tipo Oggetto dovranno essere assegnati i Moduli e le Classi secondarie.


Esempio in ambiente grafico

In un'applicazione in ambiente grafico il Modulo o la Classe specifica deve avere, come intestazione, la parola chiave "Create". Inoltre, le Funzioni e le Procedure, presenti in Moduli o in Classi specifiche, saranno rappresentate dal metodo speciale _call(), che viene appunto dichiarato quando l'oggetto è usato per richiamare una funzione.

Le Funzioni e Procedure presenti in una Classe specifica possono essere chiamate anche mediante il metodo Object.Call(). In tal caso non si utilizzerà il metodo speciale _call() . La chiamata di Funzioni e Procedure possono essere effettuate con il metodo Object.Call() anche se esse sono presenti in un Modulo; ma in tal caso non deve essere presente nel Modulo la parola chiave "Create".

Mostriamo un esempio, nel quale si avrà un applicativo composto anche da un Modulo e da una Classe specifica, ciascuno contenente una funzione.

Il Modulo, che chiamaremo Module1, sarà così scritto:

Create


Public Function _call(i As Integer) As Integer
 
  Return i * 10
 
End


La Classe specifica, che chiameremo Class1, sarà così scritta:

Create


Public Function _call(s As String) As String
 
  Return s & " 10 = "
 
End


Public Procedure ClSub()
 
  Print "Procedura chiamata con 'Object.Call()'"
 
End


Mentre la Classe principale dell'applicativo sarà la seguente:

Public Sub Form_Open()

  Chiamata(Class1, Module1)

End


Public Procedure Chiamata(obCl As Object, obMod As Object)

  Dim i As Integer
  Dim s As String
  
   s = obCl("7 x")
   
   i = obMod(7)
   Print s; i

' Chiamata di Funzione qui con il metodo "Object.Call()":
   Object.Call(obCl, "ClSub", Null)
   
End


Esempio con applicazione a riga di comando

In un'applicazione a riga di comando, invece, il Modulo secondario, contenente la Funzione da richiamare, non necessita della parola chiave Create. Inoltre, nel Modulo principale alla variabile di tipo Oggetto andrà assegnato il Modulo secondario.


Mostriamo un esempio, nel quale il Modulo, assegnato alla variabile di tipo Oggetto e contenente la Funzione da richiamare, sia il seguente:

Public Function Somma(a As Integer, b As Integer) As Integer   ' <--- La Funzione deve essere dichiarata come "Pubblica"

 Dim i As Integer
 
  i = a + b
  
  Return i
  
End

Mentre Il Modulo principale è il seguente:

Public Sub Main()

 Dim i As Integer
 Dim ob As Object
  
  ob = Module1
  
  i = Object.Call(ob, "Somma", [3, 4])
   
  Print i
  
End


Nel caso, invece, si abbia una Classe secondaria, sarà necessario semplicemente aggiungere all'interno di detta Classe specifica secondaria la parola chiave Create.

Supponiamo che la Classe secondaria sia chiamata "Class1", e sia la seguente:

Create


Public Function Somma(a As Integer, b As Integer) As Integer   ' <--- La Funzione deve essere dichiarata come "Pubblica"
 
 Dim i As Integer
 
  i = a + b
  
  Return i
  
End

Mentre Il Modulo principale è il seguente:

Public Sub Main()

 Dim i As Integer
 Dim ob As Object
  
  ob = Class1
  
  i = Object.Call(ob, "Somma", [3, 4])
   
  Print i
  
End