Le classi sono schemi di oggetti, che contengono membri come campi e metodi. Il modulo introduce la definizione relativa a proprietà, eventi, variabili e procedure dei suoi membri. I moduli non possono essere istanziati come le classi.
Uhm... non so dove tu abbia pescato quel link, Filippo, ma quella pagina non mi piace proprio
Giusto per dirne una, il titolo è "Differenza tra modulo e classe" ma poi il video che contiene si intitola "Differenza fra classi e gruppi"; anche il resto non è che sia chiarissimo. Inoltre, parla anche di interfacce che, come sai, non esistono in B4X.
Sperando che mi passi l'
inc. l'arrabbiatura per una parte di un mio progetto che ha smesso di funzionare, generando errori inconcepibili ?, provo a spiegare la differenza nel modo più semplice e sintetico possibile.
Modulo di codice.
Esiste fin dall'inizio, ovvero dall'avvio dell'applicazione, e fino al termine di questa. I suoi metodi (le Sub) e le sue variabili dichiarate come pubbliche sono
subito accessibili da qualunque altro punto del progetto. Non può gestire eventi.
Modulo di classe.
E' una sorta di prototipo, di modello.
Due paragoni con oggetti della vita reale:
- Il modello di carta della sarta. Nessuno indosserà questo, ovviamente; la sarta creerà N abiti basandosi sul modello e questi abiti saranno indossati. Stessa cosa la classe che, come il modello di carta della sarta, non verrà mai usato direttamente (né si potrebbe usare, concretamente) ma verrano create variabili-oggetto utilizzando la classe, come gli abiti partendo dal modello di carta.
- Gli stampini per fare biscotti al forno. Una classe è come lo stampino: nessuno se lo magna ?; si mangiano, invece, i biscotti che avranno la forma dello stampino. Ecco, la classe è come lo stampino: si useranno variabili-oggetto create in base alla classe e si userano queste viariabili, non direttamente la classe (che, ripeto, non è proprio possibile usare direttamente).
Quindi, concretamente, si scrive un modulo di classe (lo chiamiamo direttamente classe), che avrà metodi (le Sub) pubblici e privati, così come variabili pubbliche e private, poi in altri "luoghi" (Activity, B4XPage, altre classi, moduli di codice) si dichiarano variabili-oggetto che sono basate su quella classe (i biscotti!):
Poniamo che la classe si chiami clsPersona:
Dim OggettoPersona As clsPersona
OggettoPersona.Initialize
OggettoPersona.Nome = "GianUgoFilppo" <--- una variabile (o proprietà) pubblica della classe
OggettoPersona.Muoviti <--- un metodo pubblico (Sub) della classe
[Per ora, dato il nervosismo, questo è il massimo che sono riuscito a fare
]
P.S. Lo scopo dei due tipi di modulo è abbastanza chiaro: il modulo di codice serve a fornire funzioni a tutto il progetto, quello della classe è poter creare oggetti dello stesso tipo ma con caratteristiche diverse (ad esempio potrò avere 5 OggettoPersona ma ognuno avrà il valore della proprietà Nome diverso da ogni altro oggetto, uno di questi oggetti si "muoverà" (vedi esempio sopra) mentre altri staranno fermi, etc.