Italian b4j differenza tra code classe e code module

Giulia Audiola

New Member
ciao ragazzi sono Giulia _ nel piccolo esempio di programma, fa la stessa cosa una moltiplicazione. vorrei capire la differenza tra classe e modulo di codice.
in un progetto più ampio quale usare tra modulo o classe.
 

Attachments

  • code.zip
    2.6 KB · Views: 179

LucaMs

Expert
Licensed User
Longtime User
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:
  1. 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.
  2. 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 :mad::)]


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.
 
Last edited:

udg

Expert
Licensed User
Longtime User
Ciao Giulia e benvenuta.
Ti ringrazio a nome di tutti per quel gentilissimo "ragazzi", ma qui la gran parte fa parte del gruppo "nonnetti" :)
Tu, comunque, continua con ragazzi..heheh

La risposta alla tua domanda direi che l'hai già avuta nei post precedenti.
Lasciami sottolineare il punto che un modulo di codice statico non può gestire eventi.

In pratica tale modulo potrebbe essere utile per una collezione di funzioni sempre disponibili da richiamare con la sintassi modulo.funzione dal resto del programma.
Meglio (per una forma di isolamento e segregazione delle variabili) se ciascuna funzione lavora su parametri ricevuti in input piuttosto che variabili globali.

In un progetto B4xPages non avresti neanche bisogno del modulo di codice statico; lo converti in classe e la instanzi una volta sola nella B4XMainPage, assegnando l'istanza a B4XPages.GlobalContext in modo da renderla disponibile per tutte le altre pagine.

Un consiglio: se provieni da altri linguaggi, non perdere tempo nel cercare di piegare B4X alle tue abitudini; meglio abbracciare da subito la sua filosofia ed impostazione e seguire le pratiche comuni ampiamente discusse nel forum. Il risultato sarà enorme supporto da parte della community e una velocità sbalorditiva di realizzazione dei progetti.
 

LucaMs

Expert
Licensed User
Longtime User
In un progetto B4xPages non avresti neanche bisogno del modulo di codice statico; lo converti in classe e la instanzi una volta sola nella B4XMainPage, assegnando l'istanza a B4XPages.GlobalContext in modo da renderla disponibile per tutte le altre pagine.
Vai troppo avanti e un po' fuori tema
Un consiglio: se provieni da altri linguaggi,
Se fosse così, non avrebbe posto la domanda, conoscerebbe già le classi.
 

Giulia Audiola

New Member
nonnetti grazie _ due al prezzo di una 25 anni. ma le mie basi di informatica sono quelle di un esame universitario con python qualche funzione e variabili tuple come le liste di bxj4
classi moduli ,difficile per me lasciare alle spalle le poche nozioni universitarie e appassionarmi alla programmazione per un progetto su smart phone
ciao belli e alla prossima domanda
 

micro

Well-Known Member
Licensed User
Longtime User
Benvenuta Giulia.
Star hai trovato la tua pitonessa... 😄
Ora c'è qualcuno che può rispondere a qualche tuo quesito su phyton
Ma conoscendoti (purtroppo non di persona) credo che stia già a buon punto.
Oppure hai abbandonato?
Scusate l'OT
 

Star-Dust

Expert
Licensed User
Longtime User
Benvenuta Giulia.
Star hai trovato la tua pitonessa... 😄
Ora c'è qualcuno che può rispondere a qualche tuo quesito su phyton
Ma conoscendoti (purtroppo non di persona) credo che stia già a buon punto.
Oppure hai abbandonato?
Scusate l'OT
Vado in può fuori tema. Ho proseguito esaminando molti sorgenti trovato in rete. L'ultimo che ho studiato è quello che in realtà serviva a me e ho avuto difficoltà con una libreria che nonostante installata poi volte quando mando in esecuzione il sorgente mi segnala l'errore dell'assenza della libreria.

Questo è un errore che molti hanno riscontrato e ognuno per un problema diverso, ho seguito tutti i tutorial al riguardo ma nessuno ha dato l'esito richiesto.

Comunque Python è interpretato e quindi non risolverebbe il mio problema maggiore di rilasciare un EXE unico funzionante.
Credo dovrò tornare a VB.NET
 

udg

Expert
Licensed User
Longtime User
Perchè "nonnetti" ?
Leggi l'inizio del post #4 :)
Anche se ora, con quel nonnetti, si è aggiudicata l'appellativo de "la nipotina" :D
 

amorosik

Expert
Licensed User
Vado in può fuori tema. Ho proseguito esaminando molti sorgenti trovato in rete. L'ultimo che ho studiato è quello che in realtà serviva a me e ho avuto difficoltà con una libreria che nonostante installata poi volte quando mando in esecuzione il sorgente mi segnala l'errore dell'assenza della libreria.

Questo è un errore che molti hanno riscontrato e ognuno per un problema diverso, ho seguito tutti i tutorial al riguardo ma nessuno ha dato l'esito richiesto.

Comunque Python è interpretato e quindi non risolverebbe il mio problema maggiore di rilasciare un EXE unico funzionante.
Credo dovrò tornare a VB.NET

Ma perche', con vb-net ti basta un exe unico e funzionante?
Ed il dot net framework 'ndo lo mettiamo?
Mica c'e' di serie su tutti i sistemi operativi dove un programma dot net puo' girare
 

Star-Dust

Expert
Licensed User
Longtime User
Ma perche', con vb-net ti basta un exe unico e funzionante?
Ed il dot net framework 'ndo lo mettiamo?
Mica c'e' di serie su tutti i sistemi operativi dove un programma dot net puo' girare
Diciamo che con V.Net mi produco un Auto-Installante e che il .Net oramai tutti i sistemi windows lo hanno per una qualsiasi applicazione.
Con Python devi fare installare non solo l'esecutore ma anche le librerie che a volte si ha difficoltà.
 
Top