Differenze tra le versioni di "Variabile del tipo di una Classe specifica creata"

Da Gambas-it.org - Wikipedia.
 
(8 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Possiamo gestire le proprietà di una particolare Classe, da noi creata, dichiarandole mediante la parola '''Property''' oppure anche mediante sole variabili pubbliche.
+
Come è noto, è possibile creare via codice una particolare Classe, fornita di ''Proprietà'', ''Metodi'' ed ''Eventi''. <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
  
In ogni caso una Classe ''specifica'', appositamente creata, può sostituire una ''Struttura'', in quanto si riserva una quantità di memoria determinata dal tipo di variabili da esse formata.
+
=Variabili del tipo della Classe specifica creata=
 
 
 
 
 
 
=Classe con dichiarazione mediante la parola chiave ''Property''=
 
Possiamo creare una Classe specifica attribuando le sue proprietà interne mediante la parola chiave ''Property''. Questa parola chiave consente di dichiarare una proprietà di una Classe specifica creata dall'utente.
 
 
 
Leggiamo dalla guida ''in linea'':
 
''In automatico una volta dichiarata una proprietà, l'editor di Gambas crea una funzione per la lettura e una subroutine per la scrittura della proprietà stessa.
 
''Se invece opzionalmente viene utilizzata la parola chiave facoltativa READ, allora la proprietà così creata diventa a sola lettura, e l'editor di Gambas non crerà la subroutine di scrittura.
 
''Una volta dichiarata nella classe specificata, una proprietà deve essere implementata. Si tratta in pratica di scrivere del codice nella funzione che legge la proprietà.
 
''E se la proprietà non è a sola lettura, e cioè la si può anche scrivere, di scrivere del codice anche nella subroutine di scrittura.
 
''Il nome della funzione per la lettura, è il nome della proprietà seguito da un carattere di sottolineatura e dalla parola Read.
 
''Questa funzione così composta non necessita di argomenti e deve restituire un valore il cui tipo sia lo stesso dichiarato nella proprietà.
 
''Il nome della subroutine di scrittura, è il nome della proprietà seguito da un carattere di sottolineatura e dalla parola Write.
 
''Questa subroutine essendo tale non ritorna ovviamente niente, ma prende un argomento (uno solo) che gli viene passato che deve essere dello stesso tipo dichiarato nella proprietà
 
''per poterlo poi assegnare alla funzione Read di lettura eventualmente elaborato.''
 
 
 
 
 
Per dichiarare una ''proprietà''  è necessario utilizzare la parola chiave '''Property'''. '''|[[#Note|1]]|'''
 
 
 
'''Property''' Nome As Tipo
 
definisce una proprietà in lettura/scrittura
 
 
 
'''Property''' Read Nome as Tipo
 
definisce una proprietà in sola lettura.
 
 
 
 
 
Alla proprietà viene poi associato un simbolo dello stesso tipo per contenerne il valore.
 
 
 
 
 
Facciamo un esempio.
 
Supponiamo di avere una classe ''Automobili'', per ciascuna automibile bisognerà gestire diversi parametri:
 
<BR>- Colore
 
<BR>- Cilindrata
 
<BR>- Modello
 
...
 
 
 
definiremo quindi la Classe ''Automobile'' così come segue:
 
<FONT color=#006400>' ''Definisco le properità''</font>
 
'''Property''' Colore As Integer 
 
'''Property''' Modello As String 
 
'''Property''' Cilindrata As String 
 
 
 
 
'''Property''' Read Allestimento As String 
 
 
 
<FONT color=#006400>' ''Definisco i simboli associati alle proprietà...''</font>
 
'''Private''' $Colore As Integer
 
'''Private''' $Modello As String 
 
'''Private''' $Cilindrata As String 
 
'''Private''' $Allestimento As String 
 
 
 
 
'''Public''' Sub _new(versione As String) 
 
 
  $Allestimento = versione 
 
 
'''End''' 
 
 
 
 
 
<FONT color=#006400>' ''...e funzioni utilizzate per gestire le proprietà:''</font>
 
'''Private''' Function Colore_Read() As Integer 
 
  Return $Colore 
 
'''End''' 
 
 
 
'''Private''' Sub Colore_Write(Value As Integer) 
 
  $Colore = Value 
 
'''End''' 
 
 
 
 
 
'''Private''' Function Modello_Read() As String 
 
  Return $Modello 
 
'''End''' 
 
 
 
'''Private''' Sub Modello_Write(Value As String) 
 
  $Modello = Value 
 
'''End''' 
 
 
 
 
 
'''Private''' Function Cilindrata_Read() As String 
 
  Return $Cilindrata 
 
'''End''' 
 
 
 
'''Private''' Sub Cilindrata_Write(Value As String) 
 
  $Cilindrata = Value 
 
'''End''' 
 
 
 
'''Private''' Function Allestimento_Read() As String
 
  Return $Allestimento 
 
'''End'''
 
 
 
 
 
 
 
=Classe con dichiarazione di sole semplici variabili pubbliche=
 
In modo più semplice è possibile creare una Classe specifica, da gestire poi ovviamente con una relativa variabile, con dichiarazione di sole semplici variabili ''pubbliche''.
 
 
 
Leggiamo, infatti, dalla guida ''in linea'' relativa alla parola ''Property'':
 
''E' possibile evitare l'utilizzo delle proprietà con delle variabili pubbliche dichiarate all'interno della Classe.
 
''Tutto ciò se pur più semplice ed ammesso e meno complesso presenta lo svantaggio che in qualsiasi parte del programma sia possibile modificare i valori senza nessun controllo,
 
''o meglio il controllo deve essere fatto prima infrangendo il meccanismo dell'incasplulamento.
 
''Se questo per piccoli programmi è accettabile non lo è per programmi più corposi. Infatti implementando le proprietà, è possibile controllare che la coerenza dei dati sia tale
 
''in tutte le situazioni al di la della consistenza del programma.
 
 
 
==Impostazione ed elementi interni della Classe particolare==
 
Creiamo innanzitutto la nostra Classe particolare, che per esempio chiameremo "Clcreata.Class, e contenente quattro variabili: una di tipo Byte, una di tipo Integer, un'altra di tipo Stringa ed una di tipo Button.
 
 
 
Al suo interno scriveremo semplicemente le dichiarazioni di quelle quattro variabili come ''Pubbliche'':
 
'''Public''' vB As Byte
 
 
'''Public''' vI As Integer
 
 
'''Public''' v$ As String
 
 
'''Public''' bu As Button
 
 
 
 
 
Nella Classe principale "FMain.Class" andiamo ad utilizzare la Classe particolare da noi creata. Tale uso lo vedremo nei paragrafi che seguono appresso.
 
 
 
 
 
==Variabili del tipo della Classe specifica creata==
 
 
La variabile per gestire le proprietà, oggetti, etc di una Classe ''particolare'' da noi creata deve essere del tipo di detta Classe ''particolare'':
 
La variabile per gestire le proprietà, oggetti, etc di una Classe ''particolare'' da noi creata deve essere del tipo di detta Classe ''particolare'':
 
+
  <FONT color=gray>' ''Dichiariamo la variabile del tipo della Classe specifica:''</font>
  <FONT color=#006400>' ''Dichiariamo la variabile del tipo della Classe specifica:''</font>
 
 
   Private <FONT color=#B22222>vrCl</font> As Clcreata
 
   Private <FONT color=#B22222>vrCl</font> As Clcreata
 
   
 
   
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
With <FONT color=#B22222>vrCl</font> = New Clcreata
 
  .vB = 1
 
  .vI = 1001
 
  .v$ = "prova" & .vB
 
End With
 
 
   
 
   
 +
  With <FONT color=#B22222>vrCl</font> = New Clcreata
 +
    .vB = 1
 +
    .vI = 1001
 +
    .v$ = "prova" & .vB
 +
  End With
 
   
 
   
  <FONT color=#006400>' ''Gestiamo ora la variabile di tipo Button, crandone un paio:''</font>
+
  <FONT color=gray>' ''Gestiamo ora la variabile di tipo Button, crandone un paio:''</font>
 
   
 
   
 
   With vrCl.bu = New Button(Me) As "bu"
 
   With vrCl.bu = New Button(Me) As "bu"
Riga 155: Riga 33:
 
   End With
 
   End With
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub bu_Click()
+
  Public Sub bu_Click()
 
   
 
   
 
   With vrCl
 
   With vrCl
Riga 168: Riga 46:
 
  Print Last.Text
 
  Print Last.Text
 
   
 
   
  '''End'''
+
  End
 +
 
 
   
 
   
 +
==Utilizzare una Classe particolare con una variabile di tipo ''Variant''==
 +
Possiamo caricare anche in una variabile di tipo ''Variant'' le Proprietà e gli elementi che costituiscono la nostra Classe particolare creata:
 +
Public Sub Button1_Click()
 
   
 
   
+
  Dim xx As Variant
==Utilizzare una Classe particolare con una variabile ''Variant''==
 
Possiamo caricare anche in una variabile di tipo ''Variant'' le proprietà e gli elementi che costituiscono la nostra Classe particolare creata:
 
 
'''Public''' Sub Button1_Click()
 
 
Dim xx As Variant
 
 
   
 
   
 
   With xx = New Clcreata
 
   With xx = New Clcreata
Riga 183: Riga 59:
 
     .vI = 1900
 
     .vI = 1900
 
     .v$ = "prova" & .vB
 
     .v$ = "prova" & .vB
End With
+
  End With
 
   
 
   
With xx
+
  With xx
  Print .vB
+
    Print .vB
  Print .vI
+
    Print .vI
  Print .v$
+
    Print .v$
End With
+
  End With
 
   
 
   
  '''End'''
+
  End
 
 
 
 
  
==Uso di una variabile del dipo della Classe particolare e di una variabile ''Variant''==
 
  
'''Public''' Sub Button1_Click()
+
==Uso di una variabile del tipo della Classe particolare e di una variabile di tipo ''Variant''==
 +
Public Sub Button1_Click()
 
   
 
   
 
   Dim rr As Clcreata
 
   Dim rr As Clcreata
 
   Dim vv As Variant
 
   Dim vv As Variant
 
   
 
   
    With rr = New Clcreata
+
  With rr = New Clcreata
      .vB = 1
+
    .vB = 1
      .vI = 1001
+
    .vI = 1001
      .v$ = "prova" & .vB
+
    .v$ = "prova" & .vB
    End With
+
  End With
 
   
 
   
 +
<FONT color=gray>' ''Trasferiamo i valori da una variabile all'altra:''</font>
 +
  ali = rr
 
   
 
   
<FONT color=#006400>' ''Trasferiamo i valori da una variabile all'altra:''</font>
+
  With ali
    ali = rr
+
     Print .vB
+
    Print .vI
     With ali
+
    Print .v$
      Print .vB
+
  End With
      Print .vI
 
      Print .v$
 
    End With
 
 
   
 
   
  '''End'''
+
  End
 
 
  
  
Riga 226: Riga 98:
  
 
Nella Classe principale "FMain.Class" andiamo ad utilizzare la Classe particolare da noi creata, semplicemente creandone una variabile array e caricando i valori negli elementi di tale variabile array:
 
Nella Classe principale "FMain.Class" andiamo ad utilizzare la Classe particolare da noi creata, semplicemente creandone una variabile array e caricando i valori negli elementi di tale variabile array:
 
+
  <FONT color=gray>' ''Dichiara due variabili di tipo classe "Clval":''</font>
  <FONT color=#006400>' ''Dichiara due variabili di tipo classe "Clval":''
+
  ' ''una come array con numero di elementi non definito:''</font>
+
  Private clval1 As New Clcreata[]  <FONT color=gray>' ''una come array con numero di elementi <U>non</u> definito''</font>
'''Private''' clval1 As New Clcreata[]
 
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   Dim a As Byte
 
   Dim a As Byte
   Dim clval2 As Clcreata  <FONT color=#006400>'...''ed un'altra ordinaria:''</font>
+
   Dim clval2 As Clcreata  <FONT color=gray>'...''e un'altra ordinaria''</font>
 
   
 
   
 +
  For a = 0 To 99
 +
<FONT color=gray>' ''assegna i valori ai campi della variabile di tipo classe "Clval":''</font>
 +
    With clval2 = New Clcreata
 +
      .vB = a
 +
      .vI = 1000 + CInt(a)
 +
      .v$ = "prova " & Str(a)
 +
    End With
 +
    clval1.Add(clval2)
 +
  Next
 
   
 
   
  For a = 0 To 99
+
  End
 
<FONT color=#006400>' ''assegna i valori ai campi della variabile di tipo classe "Clval":''</font>
 
  With clval2 = New Clcreata
 
    .vB = a
 
    .vI = 1000 + CInt(a)
 
    .v$ = "prova " & Str(a)
 
  End With
 
 
 
  clval1.Add(clval2)
 
 
 
Next
 
 
'''End'''
 
 
   
 
   
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
   
 
   
Dim a As Byte
+
  Dim a As Byte
 
   
 
   
  <FONT color=#006400>' mostra in console i risultati:</font>
+
  <FONT color=gray>' ''Mostra in console i risultati:''</font>
 
   For a = 0 To 99
 
   For a = 0 To 99
 
     With clval1[a]
 
     With clval1[a]
Riga 266: Riga 133:
 
   Next
 
   Next
 
    
 
    
  '''End'''
+
  End
 
 
 
 
 
 
=Utilizzare nella Classe specifica creata le proprietà ed i tipi di variabili di un'altra Classe=
 
Per utilizzare, senza doverle dichiarare nuovamente, le proprietà e tipi di variabili appartenenti ad un'altra Classe, si farà uso del concetto di ''Eredità''.
 
 
 
La Classe, della quale si vogliono sfruttare proprietà e tipi di variabili è la Classe ''Padre''; la Classe che utilizzerà, ''ereditandole'' appunto, quelle proprietà e tipi di varibili della Classe ''Padre'', è la Classe ''Figlia''. |[[#Note|2]]|
 
 
 
Per ottenere l'eredità di proprietà, metodi e tipi di variabili di una Classe ''Padre'', si dovrà scrivere nella Classe ''Figlia'' come sua prima istruzione la parola chiave:
 
'''Inherits''' ''nome_Classe_Padre''
 
  
  
  
 
=Note=
 
=Note=
[1] Seguiremo in questo paragrafo, per quello che riguarda l'uso della parola chiave ''Property'', quanto descritto in analoga discussione nel forum di [http://www.gambas-it.org/smf/index.php Gambas-it.org] dall'utente ''[http://www.gambas-it.org/smf/index.php?action=profile;u=161 sotema]''.
+
[1] Al riguardo vedere la seguente pagina: [[Creare da codice una Classe specifica]]
 
 
[2] Bisogna fare ricordare che Gambas non permette di usare l'ereditarietà in una ''Form''. L'oggetto ''Form'' eredita la classe ''Window''; e così, tentando di ereditare una ''Form'', si otterrà l'errore di doppia eredità (''Cannot inherit twice'').
 

Versione attuale delle 05:25, 21 giu 2024

Come è noto, è possibile creare via codice una particolare Classe, fornita di Proprietà, Metodi ed Eventi. [nota 1]

Variabili del tipo della Classe specifica creata

La variabile per gestire le proprietà, oggetti, etc di una Classe particolare da noi creata deve essere del tipo di detta Classe particolare:

' Dichiariamo la variabile del tipo della Classe specifica:
 Private vrCl As Clcreata


Public Sub Button1_Click()

 With vrCl = New Clcreata
   .vB = 1
   .vI = 1001
   .v$ = "prova" & .vB
 End With

' Gestiamo ora la variabile di tipo Button, crandone un paio:

 With vrCl.bu = New Button(Me) As "bu"
   .X = 10
   .Y = 10
   .W = 100
   .H = 100
   .Text = "Bu"
 End With

 With vrCl.bu = New Button(Me) As "bu"
   .X = 200
   .Y = 10
   .W = 100
   .H = 100
   .Text = "Bu2"
 End With

End


Public Sub bu_Click()

 With vrCl
   Print .vB
   Print .vI
   Print .v$
 End With

Print Last.Text

End


Utilizzare una Classe particolare con una variabile di tipo Variant

Possiamo caricare anche in una variabile di tipo Variant le Proprietà e gli elementi che costituiscono la nostra Classe particolare creata:

Public Sub Button1_Click()

 Dim xx As Variant

 With xx = New Clcreata
   .vB = 19
   .vI = 1900
   .v$ = "prova" & .vB
 End With

 With xx
   Print .vB
   Print .vI
   Print .v$
 End With

End


Uso di una variabile del tipo della Classe particolare e di una variabile di tipo Variant

Public Sub Button1_Click()

 Dim rr As Clcreata
 Dim vv As Variant

 With rr = New Clcreata
   .vB = 1
   .vI = 1001
   .v$ = "prova" & .vB
 End With

' Trasferiamo i valori da una variabile all'altra:
 ali = rr

 With ali
   Print .vB
   Print .vI
   Print .v$
 End With

End


Variabile array di tipo di una Classe creata

Possiamo gestire le proprietà di una particolare Classe, da noi creata, anche mediante una variabile array.

Nella Classe principale "FMain.Class" andiamo ad utilizzare la Classe particolare da noi creata, semplicemente creandone una variabile array e caricando i valori negli elementi di tale variabile array:

' Dichiara due variabili di tipo classe "Clval":

Private clval1 As New Clcreata[]   ' una come array con numero di elementi non definito


Public Sub Form_Open()
 Dim a As Byte
 Dim clval2 As Clcreata  '...e un'altra ordinaria

 For a = 0 To 99
' assegna i valori ai campi della variabile di tipo classe "Clval":
   With clval2 = New Clcreata
     .vB = a
     .vI = 1000 + CInt(a)
     .v$ = "prova " & Str(a)
   End With
   clval1.Add(clval2)
 Next

End


Public Sub Button1_Click()

 Dim a As Byte

' Mostra in console i risultati:
 For a = 0 To 99
   With clval1[a]
     Print .vB
     Print .vI
     Print .v$
   End With
 Next
 
End


Note

[1] Al riguardo vedere la seguente pagina: Creare da codice una Classe specifica