Originariamente inviato da verardoelvis
Ritornando all'esempio che ho scritto prima...che utilità avrebbe in questo caso l'interfaccia se i prototipi me li devo riscrivere?
è questo che non capisco, l'utilità.
Le interfacce non servono per scrivere meno, ma hanno una funzionalità specifica nell'OOP (che VB6 non supporta).
Occorre conoscere i principi dell'OOP per comprendere gli esempi; tuttavia, proviamo a indicarne uno.
Supponi di aver tanti controlli visuali: le classi dai quali essi derivano sono diverse a seconda della natura del controllo (pulsante, casella di testo e così via).
E' possibile definire un'interfaccia ICanPaint, ad esempio, che abbia il metodo Paint; tale interfaccia rappresenta un oggetto in grado di tracciarsi sullo schermo.
Ciascuna classe che rappresenta un controllo, completamente diverso l'uno dall'altro, può implementare tale interfaccia definendo un "corpo" per il metodo Paint e scrivendo al suo interno le istruzioni necessarie per il disegno.
Supponendo di avere nella gestione del video una routine che permetta di tracciare un controllo sullo schermo passandolo come parametro, che tipo dovrebbe essere utilizzato per riuscire ad identificare tutti i controlli in grado di disegnarsi? Se il tipo fosse un Button, si escluderebbero TextBox e gli altri controlli, non compatibili.
Basta introdurre un parametro per il metodo Paint di un ipotetico oggetto Screen che sia di tipo ICanPaint: significa che, indipendentemente dall'oggetto che viene passato, tralasciando la classe a cui appartiene, se tale oggetto implementa l'interfaccia richiesta - cioè definisce i metodi appropriati, in questo caso Paint - è possibile chiamare tali metodi.
Per scriverla in una specie meta codice...
codice:
Interface ICanPaint
Method Paint()
End Interface
Class Button Implements ICanPaint
Method Paint()
...
End Method
End Class
Class TextBox Implements ICanPaint
Method Paint()
...
End Method
End Class
...
Class Screen
Method PaintControl(APaintableControl: ICanPaint)
APaintableControl.Paint()
End Method
End Class
Sostanzialmente, un metodo che richieda come parametro un'interfaccia non discrimina gli oggetti in base alle caratteristiche della classe di appartenenza, ma bensì - prescidendo dalla classe - discrimina gli oggetti per quello che sanno fare.
Se conosci Java è hai utilizzato Swing gestendo gli eventi attraverso le classi "Listener", dovresti essere già a conoscenza di cosa sia un'interfaccia, a cosa serve, quali vantaggi comporta e come si utilizza.
Ciao!