Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[VB] A proposito di classi e strutture

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[VB] A proposito di classi e strutture

Messaggioda DilanDog » ven giu 30, 2006 10:42 am

Se qualcuno come me programma da un po' di tempo in Basic e derivati conoscerà bene il concetto di struttura, o "tipi" (type), non fosse altro per il salvataggio dei dati sui cosiddetti files ad accesso "random" in cui ogni record corrisponde ad una struttura.
Ora che sto introducendo sempre più la programmazione tramite classi in vecchi progetti che facevano largo uso di strutture ed accesso ai dati tramite la modalità precedentemente descritta, mi ritrovo con un problema diciamo fastidioso: le strutture di dati non si possono passare come argomenti ad una procedura di classe nè si possono avere associate ad una variabile di ritorno da una funzione. L'unico modo per avere accesso dentro ad una classe è quello di rendere la struttura e relativa variabile associata visibile a livello globale [cry]

Esempio:

Codice: Seleziona tutto
'Modulo globale
TYPE Struct
a as integer
b as integer
c as integer
END TYPE

'Funzione all'interno di una classe
Public function MiaFunc() as Struct '-> Ritorna errore
public Sub MiaSub(St as Struct) '-> Ritorna errore


Questa cosa purtroppo costringe a replicare tutte le variabili di una struttura con una classe che espone altrettante proprietà, il che oltre ad essere un lavoro "in più", rallenta notevolmente l'esecuzione quando si caricano centinaia di record da un file binario utilizzando appunto un'array di strutture.

Solo io ho questo problema? Non vi è mai capitato di dover incrociare classi e variabili a struttura? Come avete risolto? Ma soprattutto....sono riuscito a spiegarmi??? [boxed]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda Silver Black » ven giu 30, 2006 11:11 am

All'interno di una classe non funziona, sicuro? perché all'esterno funziona perfettamente il passaggio di una variabile RECORD... [sbigot]

(ma non dovevi passare a Delphi per la OOP? Anche perché se stai riscrivendo tutto tanto vale...)
Sergio Pappalardo aka Silver Black
https://www.silvercybertech.com
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1148
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Italia

Messaggioda DilanDog » ven giu 30, 2006 1:05 pm

Silver Black ha scritto:All'interno di una classe non funziona, sicuro? perché all'esterno funziona perfettamente il passaggio di una variabile RECORD... [sbigot]


Si, esce l'errore "Only public user defined types defined in public object modules can be used as parameters..." ecc. ecc. che tra l'altro letteralmente tradotto vorrebbe dire che solo gli UDT definiti in moduli pubblici possono essere passati come parametri....e in effetti quelli che tento di passare lo sono! Peccato che non funziona lo stesso [:(!] Ho letto altre lamentele dello stesso tipo su altre community.

Silver Black ha scritto:(ma non dovevi passare a Delphi per la OOP? Anche perché se stai riscrivendo tutto tanto vale...)


Magari...purtroppo sto cercando di imparare Delphi per mio interesse personale, ma sul lavoro la politica aziendale prevede "only visual basic forever", e non ti dico per far accettare al titolare un certo tipo di programmazione un po' più strutturata che fatica ogni volta! Fosse per lui scriverebbe ancora tutto in un'unica pagina con gosub e goto a non finire! Ed ogni volta che "perdo tempo" a riscrivere pezzi di codice senza aggiungere nulla di nuovo ma semplicemente per mettere ordine prima di poter finalmente eseguire la "vera" modifica richiesta me lo trovo dietro a chiedere "che stai a fa?" [sedia]
Giusto ieri stava scrivendo un programmino per automatizzare il suo plastico di trenini (eh, il duro lavoro degli imprenditori.... [:-D] ) e mi ha chiesto come si faceva ad inserire in un ciclo for: tentando di spiegargli che forse era meglio strutturare il tutto in modo diverso, utilizzando un timer di sistema, mi ha detto "no, no, no, usando un ciclo do:loop con un timer che esce quando sono passati i dieci secondi!" [sbigot]
E tu vuoi parlare di Delphi e programmazione ad oggetti ad un personaggio del genere??? [:-D]
Purtroppo qui la filosofia è "intanto che funzioni, poi si vedrà". E intanto io sto imparando Delphi per migrare verso nuovi orizzonti..... [fischio] Ma nel frattempo mi serve la pagnotta e quindi faccio quel che posso con VB
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano


Messaggioda Silver Black » ven giu 30, 2006 2:13 pm

DilanDog ha scritto:Si, esce l'errore "Only public user defined types defined in public object modules can be used as parameters..." ecc. ecc. che tra l'altro letteralmente tradotto vorrebbe dire che solo gli UDT definiti in moduli pubblici possono essere passati come parametri....e in effetti quelli che tento di passare lo sono! Peccato che non funziona lo stesso [:(!] Ho letto altre lamentele dello stesso tipo su altre community.


Ma concordi con me che con le sub/function normali funziona? perché a me funzioan.

Magari...purtroppo sto cercando di imparare Delphi per mio interesse personale, ma sul lavoro la politica aziendale prevede "only visual basic forever"


Forever? Ma è MS che lo ha già abbandonato, state sviluppando con una cosa MORTA. Questo lo sa il tuo capo?

Purtroppo qui la filosofia è "intanto che funzioni, poi si vedrà". E intanto io sto imparando Delphi per migrare verso nuovi orizzonti..... [fischio] Ma nel frattempo mi serve la pagnotta e quindi faccio quel che posso con VB


Fai bene, almeno se ti prepari con Delphi avrai un paracadute semmai un giorno dovessi saltare dall'aereo in caduta libera... [fischio]

P.S.
Comunque io lavoro in proprio e non ho un capo... aaah sapessi come si sta bene!!! [:-D]
Sergio Pappalardo aka Silver Black
https://www.silvercybertech.com
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1148
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Italia

Messaggioda DilanDog » ven giu 30, 2006 2:34 pm

Silver Black ha scritto:
Ma concordi con me che con le sub/function normali funziona? perché a me funzioan.


Si, nelle sub e function normali funziona regolarmente, l'errore esce se la struttura è effettivamente privata di quel modulo, giustamente. L'incongruenza è solamente nelle procedure all'interno delle classi


Forever? Ma è MS che lo ha già abbandonato, state sviluppando con una cosa MORTA. Questo lo sa il tuo capo?


Si, ma la cosa non gli tange, nel senso che l'importante è quello che vede il cliente non quello che c'è dietro, e al cliente che sia fatto in VB o in "cipperimerlo" poco gli importa. Poi che nel medio/lungo termine ci si metta il triplo del tempo e che sia maggiore il rischio di errore non è importante, no? [boxed] Sicuramente prima o poi si troverà ad un punto di non ritorno, ma per come stanno le cose e per il nostro tipo di mercato credo che vada in pensione prima di arrivarci [:-D] E' principalmente un problema di mentalità sbagliata, e la testa non gliela cambia nessuno.

P.S.
Comunque io lavoro in proprio e non ho un capo... aaah sapessi come si sta bene!!! [:-D]


....work in progress [fischio]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda Silver Black » ven giu 30, 2006 3:13 pm

DilanDog ha scritto:Si, nelle sub e function normali funziona regolarmente, l'errore esce se la struttura è effettivamente privata di quel modulo, giustamente. L'incongruenza è solamente nelle procedure all'interno delle classi


Ah, ok, almeno questo è un punto saldo.
Un altro punto a sfavore della OOP in Vb insomma... [:p]

Si, ma la cosa non gli tange, nel senso che l'importante è quello che vede il cliente non quello che c'è dietro, e al cliente che sia fatto in VB o in "cipperimerlo" poco gli importa. Poi che nel medio/lungo termine ci si metta il triplo del tempo e che sia maggiore il rischio di errore non è importante, no? [boxed]


Lungimirante... [NHP]

....work in progress [fischio]


Grande!!! [brindisi]
Sergio Pappalardo aka Silver Black
https://www.silvercybertech.com
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1148
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Italia


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising