In effetti, la definizione delle variabili, segue la logica usata nei linguaggi tipo il C (non C++), che deve essere fatta all'inizio di una classe (o funzione), e mai in mezzo al codice operativo.
Riguardo ai punti di domanda:
1) la dichiarazione non è, di per sè, la creazione effettiva di una variabile (o oggetto, è lo stesso...), a meno che non venga usata la sintassi:
in questo caso, la parola NEW, oltre a dire all'interprete che tipo di variabile verrà trattata all'interno della funzione, ne viene creata pure un'istanza ovvero, verrà creata veramente, occupando un'effettiva area di memoria.
2) la referenziazione di una variabile di tipo base (es. Integer) avviene proprio durante la sua dichiarazione con DIM, e impostata ad un valore di default, dipendente dal tipo di variabile (es. Integer=0, Boolean=FALSE, ecc.); per gli oggetti il comportamento è un pò diverso, dato che questi sono componenti complessi, per cui è necessario crearli in memoria, prima di utilizzarli. Se mentre la creazione di un riferimento ad un oggetto istanziato può corrispondere ad un valore NULL (magari perchè cancellato, oppure azzerato da programma), se si prova a utilizzare una variabile oggetto, anche se dichiarata, senza averla istanziata, si avrà un errore, e il programma andrà in crash.
3) l'esecuzione del codice di oggetto non viene eseguito alla creazione dello stesso, a eccezione di alcuni metodi che, se inseriti nel codice, verranno applicati secondo la loro natura, come ad esempio il metodo "_new()". Una descrizione di questi metodi l'ho inserita nel wiki qualche tempo fà, dagli un'occhiata.
4) il concetto di PUBLIC e PRIVATE, come per STATIC, PROPERTY, e anche READ, penso di averlo descritto un pò nel wiki, per cui prima dagli un'occhiata, poi magari se hai dubbi, cercherò di dissolverli.
5) l'esecuzione del codice avviene in maniera sequenziale all'interno di una stessa funzione (o procedura), ma la logica di come vengono chiamate le funzioni, o i metodi e gli eventi di una classe, dipende dal tipo di programma che stai costruendo. Ti faccio un esempio...
In qualsiasi linguaggio, esistono due macro gruppi di classi: procedurali e di interfaccia. Il primo gruppo comprende tutte quelle metodologie e logiche, che non necessitano di un supporto o di un colloquio con l'utente; il secondo gruppo, invece , comprende tutti quegli oggetti che interagiscono con l'utente (mouse, tastiera, ecc.), oppure ad eventi particolari (es. un timer). Per quest'ultimo gruppo, quindi, sono previste funzionalità adatte all'intercettazione di questi eventi, che richiamano di norma un particolare metodo, dipendentemente dalla tipologia dell'evento stesso; è ovvio pensare che, per un click del mouse, il metodo che ne riceve la chiamata, sappia a quale posizione dello schermo è stato effettuato il click (x,y), per cui alla funzione che viene chiamata verranno passate le coordinate del click.
Per ora mi fermo qui...
Se hai dubbi, il forum è qui apposta... :-)