Newsgroup: it.comp.lang.visual-basic
Titolo: programmazione ad oggetti... non mi è chiaro

Salve a tutti,
Sono un neofita della programmazione, ho sempre utilizzato VB per svago.
Ora ho provato VB.net 2003 ed ho appreso che il linguaggio è ora
orientato agli oggetti.
Ho cercato della documentazione in rete, ma ho difficoltà a carire
effettivamente di cosa si tratta. Ho visto per esempio che anche
un'operazione che in precedenza era banale, come visualizzare un form per
esempio con load nomefrm o nomefrm.show in VB.net va articolato in una
maniera diversa.
Sono molto interessato ad apprendere questo linguaggio, ma per prima cosa
dovrei cercare di capire le basi.
Potete in modo semplice spiegarmi cosa vuol dire programmazione ad oggetti
e quale sia la differenza con la programmazione classica? In modo che poi
possa comprendere al meglio la documentazione che trovo in rete.
Grazie 1000 a chiunque vorrà aiutarmi

 possa comprendere al meglio la documentazione che trovo in rete.
Nessuna spiegazione sarà mai esauriente quanto un libro su OOP, o anche 
di uno su 
vb.net
.
Ad ogni modo cosa non ti è chiaro? Il concetto di classe?
-- 
Emanuele Torrenti
http://torrenti.altervista.org

 Ad ogni modo cosa non ti è chiaro? Il concetto di classe?
Si, proprio questo.
Non capisco se la classe e' un insieme di tipi di dati o altro. Ho capito
che l'oggetto e' la classe + i metodi(??) ma nel dettaglio la classe non
so cosa sia.
Grazie
(mi consigli qualche libro ??)

 so cosa sia.
Nulla di tutto cio'.
L'oggetto è un'istanza della classe, la quale è un tipo di dato 
contenente campi e metodi che agiscono sui campi della classe stessa 
oppure su altri oggetti.
Di solito chi fa esempi del genere utilizza una generica classe Persona. 
Poi dichiara vari Peppino, Giovanni, Carletto che sono oggetti di tipo 
Persona. Ciascun Peppino etc ha un nome, cognome, indirizzo...
(e ancora non abbiamo parlato di ereditarietà...)


 so cosa sia.
nu...
Attenzione, in questo campo i termini usati sono molto importanti se non si 
vuole far confusione.
"oggetto" è generalmente sinonimo di "istanza della classe".
La "classe" definisce proprietà e coportamenti che avranno gli oggetti.
Per dirla breve, in OOP ogni soggetto attivo nel problema è identificabile 
dall'istanza di una determinata classe.
Questo ti permette di avere (in linea teorica) una maggiore linearità nel 
design dell'app e un rapporto più chiaro tra i suoi vari pezzi.
Chiaro, no? :)
Ciao 

 e quale sia la differenza con la programmazione classica?
Te lo spiego a modo mio, e cioè in maniera volutamente imprecisa/inesatta ma
strasemplice (così avrei voluto che qualcuno me l'avesse spiegata anni fa
:-)
Un programma a oggetti, te lo puoi immaginare come un insieme di cubetti,
ogni cubetto prende il nome di classe.
Una classe è quasi identica ad un modulo tradizionale che conosci, infatti
non è altro che un listato con del codice e delle funzioni private (ad uso
interno) o pubbliche (che qui prendono il nome di metodi ma che non sono
altro che le vecchie Public Sub e Public Function).
Al contrario di un modulo classico di VB, però la classe, non è utilizzabile
dal programma fino a che questa non viene istanziata. Cosa vuol dire? Vuol
dire che, di per se, la classe non è attiva, è solo un modello che puoi
utilizzare per creare degli oggetti fatti a sua immagine e saranno questi
poi che dovrai utilizzare (immagina che la classe sia uno stampino con cui
puoi stampare uno o più oggetti).
Traducendo in pratica, questo vuol dire che, nel codice del Form dovrai
prima creare un oggetto...
Dim MioOggetto as object
e poi indicare la classe che ti interessa...
Set MioOggetto = New NomeDellaClasse
In questo modo quell'oggetto diventerà quella classe (per essere più esatti
diventerà un'istanza di quella classe) e tu potrai utilizzarne le funzioni
(metodi).
Per cui, se nella tua classe c'è una funziona pubblica tipo:
Public Function CheOreSono() as long
La potrai utilizzare richiamando:
OraAttuale = MioOggetto.CheOreSono
Come avrai capito la procedura può essere eseguita con più oggetti, che
vengono tutti detti "Istanze" di quella Classe.
L'istanza di una classe, quando non ti serve più può essere distrutta
semplicemente rilasciando l'oggetto...
Set MioOggetto = Nothing
Ricapitolando:
Una Classe non è altro che uno stampino.
Quello che si utilizza non è la Classe, ma solo un oggetto stampato a
immagine della classe, che viene detto Istanza della Classe.
Un'altra importante differenza tra una classe e un modulo standard è che, in
essa, non è possibile dichiarare variabili o tipi che siano visibili al di
fuori della stessa, questa è una limitazione voluta e serve per rendere la
classe quanto più possibile indipendente dal resto del programma impedendo
gli intrecci tipici della programmazione tradizionale.
Vedendo le cose più dall'alto puoi subito vedere alcuni vantaggi di questo
modo di programmare:
Le classi infatti, una volta create, sono come delle scatole chiuse,
riutilizzabili in differenti tipi di progetti e quindi ben collaudate.
Sebbene nel breve periodo possa sembrare un sistema complicato, alla lunga,
questo modo di programmare, riduce i tempi di sviluppo e soprattutto i bug.
Per quel che riguarda VB6 non c'è quasi nient'altro da aggiungere, tranne lo
studio delle proprietà (cerca nell'help "Property Let" e "Property Get"),
che, in fondo, non sono altro che un tipo particolare di Public
Function/Sub.
Per quel che riguarda NET invece ci sarebbe molto altro da dire
(ereditarietà, membri statici etc), ma quello che ho scritto qui è solo un
punto di partenza :-D