Newsgroup: it.comp.lang.visual-basic
Titolo: Funzioni dentro le classi

Ho visto in diversi progetti che nella classe oltre alle property Let e Get
ci sono anche delle funzioni
Perchè si preferisce mettere le funzioni nella classe invece di metterle
dentro un modulo?
Deborah!

"Deborah"  ha scritto:

Perchè il modulo non dovrebbe avere visione di tutti i metodi/membri della
classe (andrebbero dichiarati tutti 'private' tranne quelli indispensabili).
Inoltre la classe deve essere autosufficiente: non dovrebbe dipendere da un
modulo.
un termoPilucco che predica bene e razzola malissimo.

 
Aggiungo che usare una classe solo con Let e Get non serve a molto.
La classe la crei proprio perche' ti serve un "oggetto" su cui definire 
delle proprieta' ed a cui far eseguire dei metodi (funzioni).
Es. classe rettangolo:
proprieta': base, altezza
metodi: area, perimetro, diagonale
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 metodi: area, perimetro, diagonale
ma l'esempio è fuorviante ;)
l'area è un caso scolastici di proprietà a sola lettura, appunto perché
setti base e altezza e leggi l'area, calcolata. Stesso discorso per
perimetro e diagonale
Esempi di metodi per l'oggetto rettangolo del tuo esempio potrebbero essere
Ruota (cambia base/altezza) oppure Resize(x,y).
-- 
Ciao, Silv:o)

 "emmexx" dice giustamene
se poi si volesse trovare un pelo di fiiiiiiiiiiiiiiiiiiiii<biiiip>
i metodi sarebbe meglio che fossero non funzioni ma procedure...ossia che
non ritornino nulla : "auto-conclusive"!
infatti potresti (visto che si parla di teoria) non essere in un ambiente
che ti consente di fare
a= Classe.CalcolaAmmortamento(Capitale, anni)
....e senza incazzarsi anche:
Classe.calcolaAmmortamento Capitale, anni
se il risultato lo assegni a proprietà cade anche questa eccezione.
ma solo per trovare un pelino inesistente.....in VB!
;-)
-- 
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 New Entry nel bestiario!
:-)

 a= Classe.CalcolaAmmortamento(Capitale, anni)
In .net invece funziona proprio cosě:
le proprietŕ non dovrebbero avere argomenti (tranne che quelle definite 
Default che in realtŕ solo le proprietŕ indicizzate, come ad es. la 
prop. Fields di un Recordset), in questi casi meglio usare delle 
funzioni con prefisso Get, Create, Compute in modo che si capisca che il 
metodo fa qualcosa e restituisce anche un valore.
E devo dire che risulta molto piů chiaro il codice.
Ciao

mmm.... era troppo bello ritenere che avessi capito tutto delle classi.
Faccio un esempio pratico cosi capisco meglio :(
Lavoratore.OreLavorate ha sia una Get e sia un Let.
Questa classe è dichiarata a livello di Modulo come Public e prenderà il
valore inserito dall'utente da una textbox
scriverò quindi ( a livello di modulo o nel form)
Lavoratore.OreLavorate = txtOreLavorate
 queste ore prima di andare in pasto ad alcune procedure devono essere
modificate. Io ora come ora la Funzione che mi modifica questo dato l'ho
messa dentro una Funzione che è presente dentro un modulo.
Da quello che sto leggendo, sempre se ho capito bene, questa Funzione la
devo mettere dentro la classe stessa, o pensandoci bene, direttamente dentro
la Property Get della proprietà OreLavorate giusto?
Deb

Deborah wrote:

Ci spieghi cosa vuoi fare stavolta?
E guai a te se ti vedo ancora fare una cosa del genere:
Lavoratore.OreLavorate = txtOreLavorate
!!!
Ciao

Il 31/03/2004 19.55, Deborah scrisse:

L'idea che sta dietro l'utilizzo delle classi e la programmazione ad 
oggetti e' che l'oggetto raggruppa in se' una serie di funzionalita'. 
Nella fase di analisi del problema tu decidi che ti sarebbe comodo avere 
  una classe lavoratore con delle proprieta' e dei metodi o funzioni.
Da un punto di vista pratico e' meglio che tutto il codice che riguarda 
quella classe si trovi nella classe stessa, in modo che:
- l'intellisense ti aiuta nella scrittura del codice
- se devi rivedere, controllare, debuggare, il codice sta tutto insieme
- se devi utilizzare la classe in un altro progetto ti basta fare 
riferimento solo al file .cls di quella classe e non ad uno o piu' moduli.
Sfortunatamente all'interno della Property Let puoi anche inserire delle 
"funzioni". Questo non e' negativo a priori, ma dal punto di vista della 
pulizia del codice ( e mentale ) sarebbe meglio distinguere proprieta' e 
metodi. E' anche vero che in realta' la distinzione e' abbastanza labile 
perche' in una proprieta' puoi inserire del codice equivalente ad una 
funzione, cosi' come in un metodo puoi inserire del codice che modifica 
il valore di una proprieta'.
Sta quindi a te scrivere del codice che sia comprensibile e funzionale.


dentro un modulo?
Riepilogando ... per questione di logica progettuale o di efficienza.
ErPotenza ... che aveva voglia di scrivere e di chiarirsi le idee.
Ciao!

...

Se le funzioni sono pubbliche prendono il nome di metodi. Le proprietà
definiscono le caratteristiche, gli attributi dell'oggetto definito
dalla classe; i metodi i suoi comportamenti, le funzionalità che
offre: il tuo nome è Deborah (propretà) e lavori (metodo).
Se le funzioni sono private, esse servono unicamente ai "fabbisogni"
della classe stessa e non avrebbe senso renderle pubbliche e
disponibili ad altre entità (moduli, form) dello stesso progetto:
altrimenti è probabile che si finisca con l'identificare un'entità (il
modulo) che fornisce un servizio ben specifico (la funzione): ecco che
allora si è delineata la possibilità di definire una nuova classe
piuttosto che un modulo.
Spero di aver reso l'idea pur in poco spazio e di aver dato lo spunto
per un approfondimento.
Ciao,
Moreno

 Lavoratore.OreLavorate = txtOreLavorate
Non ricominciamo eh! :))
Devo per forza scrivere cosi per associare il valore di txtOreLavorate alla
proprietą .OreLavorate perchč se scrivo il contrario non funziona!!
Mi lavo i denti e provo a spiegare il mio dubbio!
Debby!

 Lavoratore.OreLavorate = txtOreLavorate
Se devo associare il valore di txtOreLavorate alla proprietà
Lavoratore.OreLavorate in questo modo
funziona mentre se lo scrivo al contrario no!

 funziona mentre se lo scrivo al contrario no!
Ooooooo-oh!
1) I numeri NON DEVONO essere stringhe
2) NON DEVI associare una stringa a un numero
3) DEVI usare le proprietà: così sembra che assegni una TextBox a una 
stringa
Ciao

 Ooooooo-oh!
Ti odio sempre di più.... :)))
Debby

 Debby
Il prossimo meeting non sarà il solito meeting.
Un matrimonio. ;-)

 Un matrimonio. ;-)
Sono i testimoni che non mi ispirano alcuna fiducia ;)
Ciao

[Zanna = 
circa_z...@virgilio.it
 in
c4h7jt$2g9s5t$
4...@ID-184808.news.uni-berlin.de
] ha scritto:

Tranquillo, siamo gente seria. Verremo con la cravatta.
Nudi, ma con la cravatta. :-P

 per un approfondimento.
Si grazie ora la teoria l'ho capita speriamo bene.... chissà  quanto passo
fino al prossimo intoppo
Grazie a tutti Deb
PS
Matrimonio? Testimoni?
Chi si sposa?
:))

 :))
Vieni al meeting, vero?! :o)