Ho fatto un programma stile cad che mi permette di disegnare (tramite
GUI) diverse figure geometriche sullo schermo, la mia appliacazione ha
una classe base che si chiama FIGURA che a sua volta ha alcune cose
che mi servono per tutte le figure che disegno (esempio colore linea).
Altre sottoclassi ereditano figura, esempio:
LINEA, ARCO, QUADRATO, etc... --> Inherits figura
Ho implementato il tutto all'interno di una dll, per utilizzarla devo
dichiarare diversi oggetti:
dim a as new linea
dim b as new arco
dim c as new quadrato
Non è possibile utilizzare (implementandolo) un oggetto che possa
gestire tutte le figure?
esempio:
dim pippo as new figura (non sono sicuro di poter utilizzare la classe
base figura)
pippo.linea(10,10,100,10) (Linea è un metodo
dell'oggetto LINEA)
pippo.arco(10,10,100,100,10,200) (Arco è un metodo
dell'oggetto ARCO)
Posso farla una cosa del genere?
Oppure devo implementare un'altro oggetto che eredita tutte le classi
(ARCO,LINEA,QUADRATO....)?
Grazie per l'attenzione, spero di essere stato abbastanza chiaro,
semmai chiedete e cercherò di esprimermi meglio.
Ciao, Marcelo
Nicola
Hai ragione, provo così e vedo se mi viene qualcosa...
In effetti non hai nemmeno bisogno di dira al metodo Draw che figura
disegnare; se ogni classe derivata fa l'override del metodo base,
ciascuna istanza sa gia' a che forma corrisponde; per rendere tutto
ancora più generico, anche le coordinate dei vari metodi non trattarle
come parametri singoli, ma raggruppali in una classe base
CoordinateFigura, per esempio può avere solo X e Y rappresentando
quindi un punto e da questa deriverai CoordinateLinea, CoordinateArco
ecc...
A questo punto il tuo metodo base sarà sempre uguali per tutti, da
qualche parte ti serve solo una funzione che restituisce Figura ma
che, sulla base di (immagino) una scelta fatta dall'interfaccia
utente, istanzierà l'oggetto specifico derivato.
Es:
Sub DrawButton_Click (...) Handles DrawButton.Click
Dim f As Figura
f = getFiguraCorrente
f.Draw
End Sub
Function getFiguraCorrente As Figura()
Dim result As Figura
Select Case <una qualche scelta dell'utente>
Case 1
'qui ad esempio passiamo le coordinate al costruttore il quale
'internamente costruisce una istanza derivata da
CoordinateFigura
result = New Linea(<coordinate>)
Case 2
'come sopra
result = New Arco(<coordinate>)
End Select
return result
End Function