Credo che possa essere visto come il linguaggio più orientato agli oggetti che esista al mondo. Non è possibile scrivere del codice se non si crea un oggetto dove metterlo dentro.
La programmazione orientata ad oggetti è una moda molto in voga ultimamente, ma chi ne parla raramente sa quanto renda molto più complicata la programmazione nella maggior parte dei linguaggi di programmazione.
Oggi andremo con ordine e vedremo cosa è la programmazione ad oggetti e come implementarla in maniera rigorosa in Livecode. Premetto che l'utente medio, grazie a Livecode, programma ad oggetti in maniera veloce senza accorgersene.
La programmazione ad oggetti richiede una classe cioè un modello da cui derivare delle copie da personalizzare. Le copie sono chiamate oggetti.
Come esempio creiamo un pulsante, il pulsante sarà la nostra classe. Tutte le copie del pulsante saranno gli oggetti.
Torniamo al nostro pulsante, la programmazione ad oggetti impone che dobbiamo fornire degli attributi e dei metodi. Gli attributi sono delle variabili che contengo valori, e in livecode basta aggiungere del proprietà personalizzate al pulsante (custom properties). Aggiungiamo tre attributi: attributo1, attributo2 e controllo; a quest'ultimo diamo il valore false.
I metodi sono le funzioni per interagire con i dati della classe. Essi li possiamo avere con SetProp, GetProp, e i classici messaggi degli oggetti. La programmazione ad oggetti impone che i dati non siano visibili e modificabili direttamente, ma che bisogna passare attraverso i metodi; questa regola è detta incapsulamento.
Facciamo che il nostro oggetto sia un totalizzatore. Creiamo un metodo che metta nell'attributo1 il numero di volte che è stato usato l'oggetto, mentre nell'attributo2 sommi ogni volta un numero a quelli precedenti. La proprietà controllo ci servirà ad evitare di poter modificare gli attributi direttamente. Ecco il codice del pulsante:
setprop attributo1 nuovoValore
if the controllo of me then
set the attributo1 of me to nuovoValore
else
answer "Per la legge dell'incapsulamento, non puoi impostare il valore direttamente"
end if
end attributo1
setprop attributo2 nuovoValore
if the controllo of me then
set the attributo2 of me to nuovoValore
else
answer "Per la legge dell'incapsulamento, non puoi impostare il valore direttamente"
end if
end attributo2
getprop attributo1
if the controllo of me then
return (the attributo1 of me)
else
answer "Per la legge dell'incapsulamento, non puoi leggere il valore direttamente"
end if
end attributo1
getprop attributo2
if the controllo of me then
return (the attributo2 of me)
else
answer "Per la legge dell'incapsulamento, non puoi leggere il valore direttamente"
end if
end attributo2
on somma numero
set the controllo of me to true
put the attributo1 of me into cont
add 1 to cont
set the attributo1 of me to cont
put the attributo2 of me into totale
put totale + numero into totale
set the attributo2 of me to totale
set the controllo of me to false
answer "Hai usato questo messaggio " & cont & " volte. Il totale dei numeri che hai fornito fin'ora è " & totale
end somma
Quindi lanciando somma 3 otteniamo:
Un'altra proprietà della programmazione ad oggetti è l'ereditarietà, cioè gli oggetti copiato portano dietro tutti i dati e le funzioni dell'oggetto padre e in più si possono aggiungere altre funzioni, metodi e attributi. Tutte queste cose in Livecode avvengono con un semplice copia e incolla.
Come vedete, volendo Livecode supporta tutte le proprietà dei linguaggi ad ad oggetti. Liveocde è un linguaggio di altissimo livello, chiamato anche il sacro Graal della programmazione, quindi forzarsi ad usare la programmazione ad oggetti è solo un passo indietro invece che uno in avanti.
La letteratura in informatica è piena di esempi che mostrano come la programmazione a oggetti porti più svantaggi che vantaggi, ed è di qualche utilità solo per linguaggi di basso livello.
Se comunque siete dei patiti della programmazione ad oggetti, esiste una libreria specifica per usare tutta una serie di comandi come se stesse programmando ad oggetti in C: http://www.exformedia.se/downloads/oopengine/