Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6 ?] - Ereditarietà, Poliformismo, ecc...

Ciao a tutti !
Stavo parlando con un amico a proposito di VB e devo dire che
stavolta mi sono sentito molto ma molto ignorante ! :(
Questo ragazzo mi ha infatti chiesto se in VB6 esistono queste "cose":
Ereditarietà
Poliformismo
Definizione di classi
Gestione di classi figlie
Loro implementazione dal lato programmatore
Overloading di funzioni
Costruttori e distruttori.
Visto che non ho saputo rispondere in modo convincente ed invece
vorrei proprio farlo (anche perchè da buon programmatore vorrei
imparare ciò che non so), qualcuno di voi sarebbe così gentile da
dedicarmi un po' del suo tempo e spiegarmi abbastanza approfonditamente
di che cosa stiamo parlando ?
Spero di non arrecarvi troppo disturbo, ma stavolta ci tengo in modo
molto particolare !!! :):):)
--
'''®foolbrain®'''
Visual Basic Programmer
Database Designer & Manager
ICQ 88912631
Y! foolbrain_2fb

 ha scritto nel messaggio
news:9imisk$jj47s$1...@ID-61455.news.dfncis.de...


 lo sara' 
VB.NET
, quando uscira'....
Beh, la mia Beta2 è già attiva da un po' e devo dire che le differenze ci
sono ! ;)


 Costruttori e distruttori.
La OOP nasce con l'intento di fornire i meccanismi (semplici ed
economici) per il riutilizzo del codice gia' scritto.
L'ereditarieta' e' uno di questi meccanismi.
Posso creare una nuova classe (classe derivata) che si basi su una
classe preesistente (classe base), copiando il codice di
quest'ultima e quindi modificarne solo le parti che ritengo
opportuno.
Se la classe base ha un metodo pubblico Pippo, anche la classe
derivata avra' un metodo Pippo, che svolgera' le stesse
operazioni. La classe derivata non puo' pero' accedere ai membri
(dati e/o
funzioni) privati della classe base. In caso mi serva (ed e'
spessissimo cosi') posso ridefinire le funzioni membro della classe
derivata in modi che abbiano un comportamento diverso di quelle
della classe base.
VB offre supporto solo all'ereditarieta' di interfaccia (con la
keyword Implements), ovvero dalla classe base vengono ereditati solo
i *nomi* dei membri della classe base, ma non il codice associato a
quei nomi, ovvero l'ereditarieta' di implementazione.
VB.NET
 offrira' supporto anche all'ereditarieta' di implementazione.
Il polimorfismo (e non poliformismo) e' la capacita' di richiamare
una funzione membro di una classe base su una classe derivata senza
conoscere al momento della compilazione ma solo a run-time il tipo
di questa classe.
Questo e' possibile anche in VB grazie all'ereditarieta' di
interfaccia.
Un esempio (perdona la banalita' del codice e dei nomi):
'classe animale -- classe base
public sub Parla()
    'solo interfaccia
end sub
'classe gatto -- classe derivata
implements Animale
private sub Animale_Parla()
    msgbox "Miao"
end sub
'classe cane -- classe derivata
implements Animale
private sub Animale_Parla()
    msgbox "Bau Bau"
end sub
'in un form
private sub FaiParlareAnimale(byref pet as animale)
    pet.parla
end sub
Il compilatore non sa di che classe sia pet, il tipo di pet puo'
essere risolto solo a run-time, pero' verra' richiamato il metodo
giusto a seconda dell'oggetto che verra' passato alla funzione.
Costruttore e distruttore sono funzioni di una classe che vengono
chiamate dal compilatore al momento di creare e distruggere un
istanza di quella classe e servono per inizializzarla (costruttore)
e per rilasciare le risorse da essa utilizzate (distruttore). In VB
esistono ma sono implementati come eventi, class_initialize equivale
(piu' o meno) al costruttore e class_terminate al distruttore.
Essendo eventi non e' possibile passare parametri al costruttore. In
VB.NET
 le classi avranno costruttori e distruttori come "normali"
funzioni, per cui sara' possibile creare costruttori che ricevano
parametri.
L'overloading di funzioni e' la possibilita' di creare piu' funzioni
(anche costruttori) con lo stesso nome, ma con numero e/o tipo di
parametri diversi. Saranno poi il tipo ed il numero di parametri
passati ad indicare al compilatore quale funzione chiamare.
VB non fornisce supporto per l'overloading. 
VB.NET
 invece
permettera' l'overloading delle funzioni.
Es.
sub pippo()
    msgbox "pippo senza parametri"
end sub
sub pippo(byval a as integer)
    msgbox "pippo con 1 parametro integer"
end sub
sub pippo(byval a as integer, byval b as integer)
    msgbox "pippo con 2 parametri integer"
end sub
sub pippo(byval a as string)
    msgbox "pippo con 1 parametro string"
end sub
'ora e' possibile richiamare pippo
pippo("Ciao")
    'oppure
pippo()
    'oppure
pippo(3)
    'oppure
pippo(3, 5)
Il C# (
VB.NET
 no) permette pure l'overloading degli operatori (+, -,
=, ecc..), in modi che sia possibile utilizzarli con le classi che
creiamo.
Spero di essere stato abbastanza chiaro.
Ciao.

 Lo si puo' definire "basato su oggetti", ma sono due concetti diversi.
agree al 100%
--
Fibia "Sakamoto" FBI
E-mail: 
fibi...@hotmail.com
ICQ UIN 63586057
Sito Personale: 
http://www.geocities.com/fibiafbi
VB Simple: 
http://vbsimple.virtualave.net
Membro #25 delle Mitiche Brigate Takahashi sezione Sud

 due concetti diversi.
Concetti diversi non e' giusto, infatti essere object based e' una
condizione necessaria (ma non sufficiente) per essere object
oriented. Quindi ogni linguaggio OO e' a sua volta OB (ma non il
contrario).
Direi piuttosto che OO e' evoluzione di OB.
Ciao.

> Costruttori e distruttori.
RZ> OmyGodOmyGodOmyGodOmyGod
RZ> No.
Oddio,  esistono gli  eventi Initialize  e Terminate,  ma non  mi pare
siano  ridefinibili. Ovvero,  non puoi  passare parametri  in  fase di
creazione.   Ho visto  che invece  i metodi  della  triade Get/Let/Set
permettono l'uso di indicizzazioni...
RZ> Tirando le somme: VB NON e' un linguaggio di programmazione ad oggetti.
RZ> Lo si puo' definire "basato su oggetti", ma sono due concetti diversi.
Io  conoscevo il  termine "a  componenti". Tutt'altra  musica rispetto
alla programmazione OO.
Ho i dubbio che il modo migliore per fare una subclass di un controllo
ocx sia passare per ATL...
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

......[cut]

 No, non esiste in VB.
Di operatori no... Di funzioni sě... :)
Tipo... iif...
Puoi overlodarla creando una funzione public in un modulo tipo:
Public Function iif(Domanda as boolean, SeEVero as variant,SeEFalse as
variant) as variant
                Ciao
                        Allanon

Grazie 1000 a tutti quanti !
In modo particolare ad H.P.L.
Ora mi sento meno ignorante, ho capito un bel po' di cosette
in più rispetto alla settimana passata.


 Il risultato finale, comunque, e' diverso  ;-)
Notevolmente diverso!
Ciao.

 programmazione oggetto?
Mi dispiace, non ho nulla che non sia legato ad uno specifico
linguaggio.
Prova a fare una ricerca con Google.
Ciao.