Newsgroup: it.comp.lang.visual-basic
Titolo: Piccoli problemi di classi

La mia intenzione è fare 3 collezioni, una nidificata nell'altra: una
collezione colDocuments, composta da alcune proprietà e da una collezione
colTracks, composta da alcune proprietà e da una collezione colEvents.
Graficamente:
(miaApp)
+---colDocuments
       +---colTracks
              +---colEvents
Ho provato quindi a tradurre la mia idea in codice tramite Class Builder,
con il quale ho creato 3 classi clsDocument, clsTrack e clsEvent, nidificate
come sopra: ecco ciò che mi visualizza:
(miaApp)
+---clsDocument                (icona classe)
 |     +---clsTrack                 (icona classe)
 |            +---clsEvent          (icona classe)
+---colDocuments              (icona collezione)
       +---clsDocument         (icona proprietà)
        |     +---clsTrack          (icona classe)
        |            +---clsEvent   (icona classe)
       +---colTracks               (icona collezione)
              +---clsTrack          (icona proprietà)
               |     +---clsEvent   (icona classe)
              +---clsTrack          (icona classe)
                     +---clsEvent   (icona proprietà)
E' successo quindi tutto questo casino, e io, come uno che per la prima
volta si avvicina a quello strumento satanico chiamato Class Builder, non ci
ho capito (né ci capisco tuttora) un'H.
E sappiate anche che mi sto scervellando da almeno 2 ore e mezza prima
dell'ora che vedete nel messaggio.
Io avevo intenzione di fare una cosa semplice semplice come ha fatto la
Mammasoft ad es. con Excel 97 VBA:
Application
+---Workbooks                  (icona collezione)
       +---Workbook             (icona proprietà o classe)
       +---Worksheets          (icona collezione)
              +---Worksheet     (icona proprietà o classe)
        e così via...
Adesso ditemi, o guru della OOP: è giusto come ho detto di fare a Class
Builder o ho sbagliato qualcosa? E se ho sbagliato qualcosa, cosa?
Rispondete, avrete fatto il fioretto del giorno.
--
E.G. er Cicca

Ho provato quindi a tradurre la mia idea in codice tramite Class Builder,
Da quel che ho capito io di class builder e che non gestisce molto bene le
modifche, ti conviene (se non hai giafatto cosi') di fare tutto in una
passata ex-novo, oppure come faccio io me le scrivo a manina (eventualmente
con l'inizializzazione di CB con poi un lavoraccio di sistemazione)
Ciao Stefano Castiglioni

Rispondete, avrete fatto il fioretto del giorno.
Preferisco la spada...
--
Roal Zanazzi
z...@iol.it

 wrote:
  a) CDocuments.cls        ( insieme di ogg. b )
      b) CDocument.cls      ( singolo oggetto   )
  c) CTracks.cls               ( insieme di ogg. d )
      d) CTrack.cls             ( singolo oggetto   )
  e) CEventTrack.cls        ( insieme di ogg. f )
      f) CEventsTrack.cls   ( singolo oggetto   )
 b = Classe per la creazione di 1 oggetto CDocument
       con le sue proprieta' e metodi
 a = Insieme di oggetti (b), dovrebbe occuparsi
     della gestione dei singoli oggetti quindi
     creazione, eliminazione, enumerazione, etc...
     di oggetti (b), il che tradotto significa che
     dovrebbe possedere dei metodi .Add, .Remove,
     .Count etc...
     Normalmente la classe 'insieme' utilizza
     il tipo di dato VB Collection per memorizzare
     i singoli oggetti.
 d = come (b) ma per clsTrack
 c = come (a) ma per (d)
 f = come (b) ma per clsEventsTrack
 e = come (a) ma per (f)
 Queste classi andrebbero create separatamente, meglio
 senza l'utilizzo del class builder.
 Se invece desideri usarlo, fallo solo per la creazione
 dell'oggetto singolo e poi per la creazione di un
 insieme di questo ma non per unire (a)-(c)-(e) tra loro.
 Puoi' ad esempio utilizzare il class builder per
 creare (a) e poi per creare (b) che e' un insieme
 di (a), idem  (c/d) ed (e/f).
 Come collegare gli oggetti-insieme tra loro ?
  - Nella classe CDocuments devi creare una
    variabile di modulo privata di tipo CTracks:
       Dim mobjT as CTracks
  - Nella routine Class_Initialize di CDocuments la istanzi:
       Set mobjT = New CTracks
  - E nella routine Class_Terminate di CDocuments la annulli con:
       Set mobjT = Nothing
  - Dopo di che crei una property get in CDocuments per
    esporre come proprieta' l' oggetto-insieme CTracks :
       Public Property Get Tracks() As CTracks
        Set Tracks = mobjT
       End Property
 
    Di solito si crea solo la Get, quella di
    lettura, e non la Let/Set che sono di
    scrittura, anche perche' la creazione
    e la distruzione dell'oggetto CTracks
    sono a cura della classe CDocuments.
 
  - Fatto cio' dopo la creazione dell'oggetto
    CDocuments potrai accedere a CTracks
    e quindi a tutti i suoi metodi/proprieta'
    nel seguente modo:
       objDocuments.Tracks.xxx
 Quanto esposto sopra vale anche per l'inserimento
 della classe-insieme CEventsTrack all'interno
 di CTracks.
 Se possiedi una classe Applicativo esegui gli stessi
 passaggi inserendo un riferimento di CDocuments in
 CAppl.
 Non mi e' molto chiaro cio' che intendi ottenere
 pero' se un insieme di CTrack e' legato ad un
 singolo oggetto CDocument il riferimento a CTracks
 deve essere all'interno della classe CDocument
 e non in CDocuments.
 Ciao,   fabrizio.

Chiedo scusa mi e' scappato un indice
 objDocuments.Tracks.xxx
deve essere sostituito con :
objDocuments(x).Tracks.xxx
ove x e' la key della Collection.
Ciao,   fabrizio.