Newsgroup: it.comp.lang.visual-basic
Titolo: Visual Basic e OO

Ciao,
VB 6 e' un linguaggio OO, Object based o Class based?
Insomma VB 6 ha il polimorfismo, l'ereditarieta' e l'incapsulamento?


"No" e' un po' troppo categorico.
VB6 non ha ereditarieta', mentre supporta sia l'incapsulamento che il
polimorfismo tramite interfacce.
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 l'incapsulamento che il polimorfismo tramite interfacce.
Ancora una piccola precisazione: il VB ha l'ereditarietà di
interfaccia, ma non ha l'ereditarietà di implementazione.
Ciao.
--
BSD is for UNIX-lovers -- linux is for Windows-haters.

 interfaccia, ma non ha l'ereditarietà di implementazione.
Giusto, e gia' che ci sono ne approfitto per colmare una lacuna: nella mia
conoscenza "non scolastica" dell'OOP, sono sempre stato portato a
considerare il polimorfismo e l'ereditarietà di interfaccia come sinonimi...
e' cosi', oppure c'e' una qualche differenza, a livello teorico ma anche
pratico?


 differenza, a livello teorico ma anche pratico?
Sono due cose differenti anche se strettamente legate.
Mediante l'ereditarietà viene definita una relazione fra due
(o più classi). Si parla di ereditarietà d'interfaccia se la
classe derivata eredita solo l'interfaccia della classe base,
ereditarietà d'implementazione se eredita anche i dati e le
funzioni membro della classe base (con il loro codice) e li
può utilizzare come se fossero i propri.
Il polimorfismo è una caratteristica di cui viene dotata
l'ereditarietà, e consiste (nel VB, in altri linguaggi i
termini sono leggermente diversi) nel rendere possibile per
un'interfaccia di potersi riferire ad una qualunque classe che
la implementa, e garantire la corretta identificazione del
tipo reale e quindi avere comportamenti diversi a runtime.
Cerco di spiegarmi meglio (so di non essere molto chiaro) con
un esempio (banale e stra-abusato):
premetto che *non* mi piace per nulla il prefisso I che spesso
si vede mettere davanti all'interfaccia; se occorre mettere
una I per comprendere nel contesto che si tratta di
un'interfaccia è perché *non* si è scelto un nome
sufficientemente esplicativo.
<code>
'file Animale.cls
public sub Verso()
    'solo interfaccia
end sub
'... altri metodi
'file Gatto.cls
implements Animale 'questa è l'ereditarietà d'interfaccia.
private sub Animale_Verso()
    MsgBox "Miaowww!!!"
end sub
'file Cane.cls
implements Animale 'questa è l'ereditarietà d'interfaccia.
private sub Animale_Verso()
    MsgBox "Bau Bau!!!"
end sub
'codice che utilizza le classi:
dim pippo as Animale
set pippo = new Gatto
pippo.verso 'Miaowww!!!
set pippo = new Cane
pippo.verso 'Bau Bau!!!
</code>
Questo sopra è il polimorfismo. Pippo istanza della classe
(interfaccia) Animale, può comportarsi a runtime sia come
Gatto che come Cane, perché entrambe la classi hanno
implementato la classe (interfaccia) Animale.


 Neppure la mia è una coniscenzacolastica dell'OOP...
Umhh!! Non so da cosa sia venuta fuori questa 'roba' qui, ma
volevo dire conoscenza scolastica...


 un esempio (banale e stra-abusato):
[SNIP]
Ok, il comportamento mi e' noto... mi chiedevo quando usare un termine
piuttosto che l'altro e se poteva esistere ereditarieta' di interfaccia
senza polimorfismo o viceversa.... mi sembra di poter dire che il primo si
applica nella *definizione* delle classi, e l'altro nell'*utilizzo* delle
stesse


 delle stesse
Sì, esatto.


 dinamico che è necessariamente legato all'ereditarietà.
E quello dinamico a runtime...
