CISA FotoGallery

Statistiche

Tot. visite contenuti : 914068
Home Articoli tecnici HowTo Polimorfismo delle classi

Polimorfismo delle classi

Se stai scrivendo un programma con molte cassi, che hanno un’interfaccia simile (intesa come metodi e proprietà), dovresti approfondire le conoscenze sul polimorfismo.

Vediamo una breve traccia.

Il termine polimorfismo, significa "multiforme" ed in una programmazione orientata agli oggetti si riferisce alla capacità di definire più di una classe con la stessa interfaccia.
Per ora supponiamo di scrivere un programma per guidare un veicolo, e pensiamo di avere :

Classe AUTO
Classe TIR

Entrambe le classi esporrano i metodi:

Velocità()
Frenata()

Questo potrebbe essere l’occasione per usare e capire il Polimorfismo.
Per iniziare seguiamo questi 3 passi per definire una Classe Padre chiamata VEICOLO:

1. Aggiungiamo un nuovo Modulo di Classe al progetto.
2. Rinominiamola VEICOLO.
3. Aggiungiamo il seguente codice al modulo di classe:


Option Compare Database
Option Explicit

Public Sub Velocità(Valore As Integer)

End Sub

Public Sub Frenata(Valore As Integer)

End Sub




Quanto abbiamo inserito definisce l’interfaccia, praticamente 2 metodi chiamati Velocità e Frenata con i rispettivi argomenti.
L’interfaccia potrebbe includere anche proprietà ed altri metodi, ma per semplificazione ci limitiamo a queste.
Notare che i metodi e proprietà, se ce ne sono, sono vuoti, senza codice, capiremo perché in seguito.

Ora seguiamo questi 3 passi per creare una classe che implementa l’interfaccia VEICOLO:
1. Aggiungiamo un nuovo Modulo di Classe al progetto.
2. Rinominiamolo in "AUTO".
3. Ora inseriamo il codice seguente in cima al modulo:
 


Option Compare Database
Option Explicit
Implements VEICOLO



Quando nel modulo della classe AUTO aprite la Lista Oggetti (comboBox in alto a SX della finestra) vedrete nella lista l’oggetto VEICOLO, e selezionandolo potrete accedere ai membri della sua interfaccia, quindi Velocità e Frenata, attraverso l’elenco delle procedure (combobox in alto a DX della finestra).
Se selezionate uno dei metodi da inserire nel nostro modulo di Classe AUTO, il metodo ereditato è ancora vuoto.
Solo ora si può aggiungere il codice necessario alla Classe AUTO all’interno dei Metodi per la funzionalità specifica.
Si può fare la stessa cosa con la classe TIR ovviamente, ma anche se avessimo MOTOCICLETTA o BICICLETTA
Ognuna di queste classi è libera di implementare metodi differenti.

La classe AUTO ad esempio potrà avere una velocità superiore di una BICICLETTA e la classe MOTOCICLETTA potrà frenare più bruscamente di un TIR

Ad esempio si può chiamare il metodo obj.Velocità(25) in tutti gli oggetti indipendentemente dal tipo di oggetto chiamante(nel nostro caso le Classi "AUTO", "BICICLETTA", "TIR" .....)
Nell’interfaccia possono esserci più metodi, in quanto gli oggetti che la implementeranno possono avere esigenze differenti, ad esempio la Classe "AUTO", "TIR" e "MOTOCICLETTA" potrebbero avere il metodo "Consumo", oppure "Passeggeri" non richiesto per la classe "BICICLETTA", quindi la nostra interfaccia esporrà i nuovi metodi:
 


Public Sub Consumo(Valore As Single)

End Sub

Public Sub Passeggeri(Valore As Byte)

End Sub



L’importante è che la classe che implementa l’interfaccia implementi tutti i metodi esposti, nel nostro caso la classe "BICICLETTA" implementerà anche il metodo "Consumo" e "Passeggeri" ma senza usarlo in quanto non necessario.
 




NOTE SUL DEMO:

Tale tecnica è una soluzione diversa rispetto a quella proposta da Sv in questo caso: Vedi

La differenza sta nell'utilizzo in questo caso del polimorfismo, nella tecnica di Sv di una classe Withevents.

Sfruttando l’ereditarietà nella Classe (Oggetto Label) e assegnando alla classe Interfaccia l’oggetto che la erediterà:


 



Private Sub btn_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

' .......

' Questa istruzione definisce l’ereditarietà tra il parent della LABEL
' (quindi la FORM e la Classe Interfaccia)

Set IT = btn.Parent

'Questa riga chiama il metodo dell’interfaccia che essendo implementata
' nella Classe_Form realizzerà una sorta di CallBack.

IT.MouseMove btn, Button, Shift, X, Y
Set IT = Nothing

End Sub

 

Attachments:
Download this file (220.zip)Allegato90 Kb