CREATE PRIVATE...CREATE STATIC

Da Gambas-it.org - Wikipedia.
Versione del 28 set 2008 alle 06:00 di 213.203.155.10 (Discussione)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

CREATE PRIVATE, CREATE STATIC


[Traduzione dalla pagina ufficiale di Gambas]

Queste due parole chiave, inserite all'inizio del codice di una classe, indicano all'interprete Gambas che la classe non può essere istanziata. Questa modalità viene usata per la costruzione di classi, padri di altre classi.

Come già menzionato nella pagina Gli Oggetti e le Classi, una classe può essere derivata da un'altra classe superiore, ereditandone le caratteristiche pubbliche e le funzionalità. Lo scopo di questa logica fà parte del concetto di oggetto (o classe), comune a tutti i linguaggi orientati agli oggetti.

Come anche in altri articoli, non voglio qui avviare una discussione sul concetto di classe, ma in qualche modo cercherò di spiegare il funzionamento di alcune caratterische di Gambas, collegando questo ad alcuni riferimenti e concetti generali.

Una classe, o oggetto, può essere considerato in modo modo semplice, come una collezione di caratteristiche che ne contraddistinguono l'uso all'interno di un programma. Come per un variabile, una volta creata e istanziata a livello procedura, assume un contenuto e una forma in memoria reali, altrettanto viene fatto per una classe. Una classe può contenere vari tipi di elemento, da semplici variabili a funzioni complesse; ogni volta che l'oggetto viene creato, in realtà vengono creati in memoria tutti i suoi elementi (private e pubblici). Al programma, poi, verrà ritornato il puntamento (o riferimento) in memoria del nuovo oggetto. L'utilizzo di una variabile, o una funzione, che fà parte dell'oggetto, può essere fatta tramite il puntamento al nome stesso della variabile/funzione, passando prima per il puntamento iniziale della classe:


 DIM NuovaClasse AS Window       'dichiarazione di una classe di tipo Window
 ...
 NuovaClasse = NEW Window()      'creazione della classe in memoria
 ...
 NuovaClasse.Resize(x,y)         'utilizzo di un metodo (o funzione) della nuova classe
 ...
 NuovaClasse.Caption = "Titolo"  'utilizzo di una proprietà della nuova classe
 ...
 DIM NuovoPuntatore AS Window
 NuovoPuntatore = NuovaClasse    'creazione di un nuovo puntatore a una classe esistente

La logica degli oggetti permette di definire una serie di caratteristiche distinte legate all'oggetto stesso.

Se associamo questa logica al mondo reale, possiamo fare un semplice esempio: immaginiamo di descrivere una matita (o lapis), utilizzando una classe chiamata "Matita":


'CLASS Matita

 INHERITS Object
 PUBLIC LunghezzaMatita AS Integer

Nota: E' da tener presente che in Gambas, tutti gli oggetti (o classi) derivano dalla classe base Object, mentre per gli oggetti di tipo grafico esiste la sotto classe specializzata Control.

Ritornando all'esempio, abbiamo definito una classe Matita, derivata dalla classe base Object. Da quest'ultima ne riceve tutte le caratteristiche, tra qui quelle fondamentali di creazione e distruzione dell'oggetto stesso. Alla classe Matita abbiamo aggiunto, rispetto a Object, la proprietà LunghezzaMatita, che nel nostro semplice esempio definisce la particolarità del nuovo oggetto; in questo caso LunghezzaMatita ha lo scopo di definire, appunto, la dimensione della matita. In questo modo non abbiamo fatto altro che definire un oggetto specializzato, ma ancora non ha tutti i requisiti. Noi sappiamo che in realtà esistono matite di ogni genere e colore, per cui occorre definire una nuova definizione dell'oggetto Matita, in modo che corrisponda ad un oggetto reale. Supponiamo di voler creare una Matita che può assumere diversi colori:


'CLASS MatitaColorata

 INHERITS Matita
 PUBLIC Colore AS Color

In questo esempio abbiamo creato un nuovo oggetto "MatitaColorata", derivandola dalla classe superiore "Matita". Questa nuova classe eredita la proprietà pubblica LunghezzaMatita della classe superiore, ma aggiunge un'ulteriore proprietà: Colore. La bellezza di questa logica è che non dobbiamo scrivere nuovamente il codice per creare la matita, perchè il codice è già incluso nella classe superiore, e la classe figlia lo eredita in modo automatico. La nuova classe è diventata una classe specializzata della classe Matita.

Uno degli scopi fondamentali della logica a oggetti, è proprio quella di non dover scrivere più volte lo stesso codice, e un oggetto può essere riutilizzato più volte per situazioni diverse. In questo modo possiamo creare oggetti diversi, derivati da una stessa fonte, ma che hanno specializzazioni diverse.

Ritornando alle parole chiave CREATE PRIVATE e CREATE STATIC; ammettiamo per un momento che la classe base Matita non può essere direttamente utilizzata, perchè non equipaggiata delle necessarie caratteristiche di funzionalità di una vera matita (non sappiamo neppure se ha la punta...). Dato che questa classe base non può essere utilizzata direttamente, diciamo a Gambas di bloccarla, e di renderla utile solo per la creazione di classi inferiori:


'CLASS Matita

 INHERITS Object
 CREATE PRIVATE
 PUBLIC LunghezzaMatita AS Integer

La frase "CREATE PRIVATE" informa l'interprete di Gambas, che la classe Matita non può essere nè creata, nè istanziata all'interno del programma.