Newsgroup: it.comp.lang.visual-basic
Titolo: Classi...

Salve a tutti. Sto scrivendo in VB6 un oggetto COM che controlli un
modem GSM e che funzioni da interfaccia da interfaccia verso alter
applicazioni (anche ASP).
Ho un problema con le classi in vb che non so come risolvere (non sono
molto esperto della pura programmazione ad oggetti).
Ho una classe che definisce un oggetto modem, e una serie di altre
classi tra cui una che descrive l'oggetto sms.
L'oggetto sms viene istanziato nella classe modem.
L'oggetto modem viene istanziato in un form (per comodità al momento),
mettendo a disposizioni, fra le altre, le proprietà relative
all'oggetto sms.
Quindi nel form imposto le proprietà della porta e del modem
(modem.portsettings.CommPort, modem.PortSettings.BPS, etc.) e quelle
degli sms (con modem.sms.text, modem.sms.recipient, etc.); la classe
sms pero' dovrebbe richiamare un metodo dell'oggetto modem istanziato.
L'intenzione è quella di offrire la possibilità di impostare i
parametri dell'sms con modem.sms.text = "testo",
modem.sms.recipient="+390000000" e poi di inviarlo con modem.sms.send
con quest'ultimo metodo che pero' deve richiamare dalla classe modem
una funzione che effettivamente mandi l'sms (i comandi di gestione del
modem stanno nella classe modem). E' possibile?
Grazie per l'attenzione...
D.

 modem stanno nella classe modem). E' possibile?
Si, è possibile ma non è affatto elegante (IMHO).
Secondo me dovresti usare la classe SMS non come parte integrante della
classe Modem, ma come un oggetto che la classe Modem utilizza:
La Sub di invio dovrebbe essere nella classe Modem:
Public Function SendSMS(SMSObj as SMS) As Boolean
Poi nell'applicazione:
Dim ModemGSM as Modem
Dim MioSMS as SMS
Set ModemGSM = New Modem
Set MioSMS = New SMS
With MioSMS
   .Text = "Pippo"
   .Recipient = "+390000..."
End With
ModemGSM.SendSMS MioSMS
Ciao.
Daniele.

 Daniele.
Ciao Daniele,
grazie per la risposta. Pero' non trovi che sia più significativo
"modemgsm.miosms.send" ?
Saluti,
D.

 "modemgsm.miosms.send" ?
Secondo me no, soprattutto perchè il metodo Send usa metodi della
classe ModemGSM e quindi è più logico implementarlo in questa classe.
Inoltre, visto che in VB non esiste ereditarietà, dovresti usare delle
interfacce per evitare che il lavoro diventi orrendo.
Anche io ho creato un Ax per la gestione di modem GSM, ed il mio metodo
Send può inviare indifferentemente SMS, chiamate voce e chiamate dati.
Ma è solo il mio parere.
Ciao.
Daniele.

 Daniele.
Daniele,
avevo pensato anche io ad un'interfaccia... pero'... ehm... potresti
farmi un esempio per cortesia?
Saluti,
D.

 classe ModemGSM e quindi è più logico implementarlo in questa classe.
Sono d'accordo.
Send è un'azione specifica del modem e non di un sms, che al contrario 
*viene* spedito.
L'sms non è un componente di modem, quindi la proprietà modem.sms non ha 
senso.
Ciao 

 farmi un esempio per cortesia?
Fidati, non ti andare ad impelagare li per una cosa simile...non ne
vale la pena.
Ora, io non conosco le specifiche del tuo progetto ma, ti serve davvero
un oggetto SMS? Non puoi semplicemente fare:
Public Sub SendSMS (NumTel As String, Text As String)
Ciao.
Daniele.

 Daniele.
Accolgo il consiglio e ringrazio per l'aiuto. Ho un altro dubbio
riguardo al progetto: il componente dovrà anche leggere sms e,
all'occorrenza postare numero e testo ad una pagina ASP. Mi conviene
integrare questa funzione nell'AX, oppure demandare il tutto ad
un'applicazione server?
Saluti,
D.