Autore Topic: Moduli: Simboli, riferimento e significato di statico  (Letto 914 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Moduli: Simboli, riferimento e significato di statico
« il: 01 Settembre 2016, 15:23:53 »
Per facilitare future ricerche questa discussione è stata divisa, ne è stato cambiato il titolo dell'oggetto, per comprendere a cosa si riferisce vedere questa discussione

Con riferimento alla parola chiave Me ti segnalo questa pagina della nella nostra WIKI:
(cerca al suo interno il paragrafo: ME - Riferimento a se stesso)
http://www.gambas-it.org/wiki/index.php?title=Gli_Oggetti_e_le_Classi
laddove si evidenzia che solo per le Classi "si può avere un riferimento allo stesso oggetto con ME.".
« Ultima modifica: 16 Febbraio 2017, 20:02:07 da Gianluigi »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #1 il: 01 Settembre 2016, 16:34:48 »
Rimane il fatto che secondo logica in un modulo non si dovrebbero scatenare gli eventi, guisto? e invece:

Poniamo questo nella classe del form:
Codice: [Seleziona]
Public Sub Form_Open()
 
  Mporca.Miseria

End

Quindi creiamo un modulo nominandolo "Mporca" e inseriamo questo codice:
Codice: [Seleziona]
Private hMappaPesi As GridView
 
Public Sub Miseria()
 
  Dim i, e As Integer 
 
  hMappaPesi = New GridView(FMain) As "MappaPesi"
 
  With hMappaPesi
    .Header = 3
    .W = 410
    .h = 200
    .X = (FMain.W - .W) / 2
    .Y = (FMain.H - .H) / 3
    .Rows.Count = 10
    .Columns.Count = 3
    .Columns.Width = 120
    .Columns[0].Text = "Primo Dato"
    .Columns[1].Text = "Secondo Dato"
    .Columns[2].Text = "Terzo Dato"
    For i = 0 To 9
      For e = 0 To 2
        hMappaPesi[i, e].Text = "Dato in R" & CStr(i + 1) & "C" & CStr(e + 1)
      Next
    Next
   
  End With
 
End

Public Sub MappaPesi_Arrange() 
 
  Message("Cosa succede. Sono in un modulo e sto funzionando come in una classe!?")
 
End

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #2 il: 01 Settembre 2016, 19:04:28 »
Rimane il fatto che secondo logica in un modulo non si dovrebbero scatenare gli eventi, guisto? e invece:
.......
......
Ottima osservazione, che richiede una precisazione.

Un Modulo è incapace di sollevare un proprio Evento mediante la parola chiave Event, poiché la risorsa dell'Evento non gli appartiene. Ciò però non impedisce che al suo interno possano essere sollevati Eventi appartenenti a delle Classi.
Ciò spiega perché hai potuto sollevare l'evento della GridView, la quale non è, né appartiene al Modulo (cha fa da mero... "ospitante"), ma è invece essa un Oggetto appartenente (come "individuo che sembra esistere in concreto", utilizzabile) di una Classe, e di questa esso partecipa.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #3 il: 02 Settembre 2016, 11:16:41 »

Un Modulo è incapace di sollevare un proprio Evento mediante la parola chiave Event, poiché la risorsa dell'Evento non gli appartiene. Ciò però non impedisce che al suo interno possano essere sollevati Eventi appartenenti a delle Classi.
Ciò spiega perché hai potuto sollevare l'evento della GridView, la quale non è, né appartiene al Modulo (cha fa da mero... "ospitante"), ma è invece essa un Oggetto appartenente (come "individuo che sembra esistere in concreto", utilizzabile) di una Classe, e di questa esso partecipa.

Giusto un modulo non può essere istanziato, non può creare il proprio osservatore ecc. ecc. quindi può solo “partecipare” agli eventi pubblici di altre classi.
Questo, del poter partecipare agli eventi altrui, non lo avevo mai considerato, ho sempre usato i moduli per ordinare il codice in blocchi omogenei di metodi per rispondere alle richieste provenienti dalle classi, la classe che sfrutta il modulo, mai avrei notato di poter fare il contrario.
;D Pertanto devo proprio ringraziare il silente Top Fuel per il suo indicibile errore :P

 :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #4 il: 02 Settembre 2016, 12:11:29 »
Giusto un modulo non può essere istanziato, non può creare il proprio osservatore ecc.
A mio modesto giudizio, per comprendere a pieno il concetto di "istanza" di una Classe, è opportuno, come si fa in filosofia, comprendere l'etimo della predetta parola, che proveniendo dal latino "in + sto", vuol significare stare in, e quindi "stare nel (mondo)", starci, "esistere nella (realtà)".
Una Classe in quanto Modello non esiste nel/sul mondo, ossia concretamente, è semplicemente un predicato astratto.
Se la Classe si fa concreta, si in-stanzia, ossia si in-pone nella realtà concreta del programma, diventa gestibile in modo effettivo, virtualmente tangibile: diventa un Oggetto. L'Oggetto si pone, sta nel mondo del programma informatico con una sua individualità definita e condizionata da funzionalità e caratteristiche che rimandano necessariamente alla sua Classe di appartenenza.
« Ultima modifica: 03 Settembre 2016, 18:56:41 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #5 il: 02 Settembre 2016, 14:20:03 »
Citazione
A mio modesto giudizio, per comprendere a pieno il concetto di "istanza" di una Classe...
Bella lezione Vuott!
Questo argomento, che dovrebbe essere posto prima di tutte le lezioni, permette di comprendere (e quindi capire), in modo figurato la costruzione astratta della programmazione a oggetti!
È quello che cerco sempre e trovo poco poco.
 :-*
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #6 il: 02 Settembre 2016, 14:48:19 »
Questo argomento, che dovrebbe essere posto prima di tutte le lezioni, permette di comprendere (e quindi capire), in modo figurato la costruzione astratta della programmazione a oggetti!
È quello che cerco sempre e trovo poco poco.
Sante parole !   

« Ultima modifica: 02 Settembre 2016, 15:34:54 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #7 il: 03 Settembre 2016, 16:09:21 »
Se non scateno un putiferio non sono contento. :D :D
Ho capito, devo modificare un pò di roba. :)
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #8 il: 03 Settembre 2016, 19:32:28 »
Se non scateno un putiferio non sono contento. :D :D
Devo dire che sulla questione relativa alla presunta incapacità di un Modulo di avere propri Oggetti, rappresentati da rispettive variabili, io devo fare marcia indietro.   :-[

Parto da questa esatta precisazione di Gianluigi:
Gambas ti sta dicendo che cerca un contenitore e invece riceve una classe.
In effetti, Gambas non dice che la parola Me non è applicabile ad un Modulo, bensì che hai tentato - scrivendo all'interno di Modulo - di impostare come "Parent " della GridView un Me che non è e non si riferisce ad un Contenitore: ma che è il Modulo medesimo.

Dunque va ricordato e sottilineato che la parola Me può riferirsi comunque anche ad un Modulo.

Questione degli Oggetti di Modulo:
ho dovuto elimare le righe ove affermavano che un Modulo è incapace di istanziarsi come Oggetto, rappresentato da una propria variabile.
Infatti propongo l'esempio che segue.

Nel Modulo secondario, chiamato Module1, scriviamo questo codice:
Codice: [Seleziona]
Public Function Prova_1(n As Integer) As Integer
 
  Dim a As Integer
 
    a = Me.Prova_2(n)   '  Utilizzo anche la parola chiave "Me" ! ...che si riferisce dunque al Modulo secondario "Module1"
 
  Return a + 100
 
End


Public Function Prova_2(c As Integer) As Integer
 
  Return c * 10
 
End

In un Modulo (si può ovviamente utilizzare anche un'apposita Classe) principale poniamo questo codice:
Codice: [Seleziona]
Public Sub Main()

  Dim mn1 As New Module1   ' Creiamo un "Oggetto" del Modulo chiamato "Module1" '
  Dim i As Integer

   i = mn1.Prova_1(10)

  Print i

End

Funziona tutto.
« Ultima modifica: 03 Settembre 2016, 20:27:31 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #9 il: 03 Settembre 2016, 20:14:54 »
Prova a proporre (da bravo ambasciatore) questa cosa nella M.L. e vediamo cosa ti dicono. :)
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #10 il: 03 Settembre 2016, 20:28:00 »
Sì, ci stavo pensando anch'io: la questione va chiarita bene.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #11 il: 03 Settembre 2016, 20:40:48 »
Sì, ci stavo pensando anch'io: la questione va chiarita bene.

Fermi tutti, qui si sta facendo confusione, il codice che hai postato non dimostra affatto l'istanziazione del modulo.
Perché un oggetto sia istanziato deve poter rispondere all'istanziazione che si ottiene con la sub _new dell'oggetto stesso.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #12 il: 03 Settembre 2016, 20:57:35 »
il codice che hai postato non dimostra affatto l'istanziazione del modulo.
Perché un oggetto sia istanziato deve poter rispondere all'istanziazione che si ottiene con la sub _new dell'oggetto stesso.
Quindi quanto affermato precedentemente era giusto ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #13 il: 03 Settembre 2016, 21:02:28 »

Quindi quanto affermato precedentemente era giusto ?

Secondo me si.
Si potrebbe chiedere a Minisini come mai puoi ottenere un riferimento ad un modulo con la procedura dell'istanziazione, che se non erro è pratica non corretta trattandosi di classe statica.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #14 il: 04 Settembre 2016, 14:17:56 »
Sapete cosa vi dico? Che non ci capisco più niente, credevo che... e invece...

Codice: [Seleziona]
Public Sub Main()

  Dim hclasse As New Class1("Ma come!")

End
E in Class1:
Codice: [Seleziona]
Create Static

Public Sub _new(sPippo As String)
 
  Print sPippo
 
End
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro