Programmazione Orientata ad Oggetti
SuperCollider così come altri software segue un paradigma di programmazione chiamato Object Oriented Programming. Tutte le entità presenti in questo tipo di linguaggio sono chiamate oggetti e questi sono generalmente istanze di qualche classe programmata in precedenza da James McCartney o da altri sviluppatori. Conseguentemente, per programmare SuperCollider dobbiamo anche noi conoscere e seguire i principi di questo paradigma e gli elementi principali sul quale è fondato. Questi, semplificando notevolmente sono: classi, istanze, metodi e messaggi e servono sia per descrivere un oggetto che per fargli compiere alcune azioni.
Classi
La Classe di un oggetto contiene la sua descrizione astratta, le eventuali istruzioni per costruirlo e le operazioni che possono essere eseguite su di esso o meglio che può eseguire. Pensiamo per esempio a un oggetto reale come una porta. Un’ipotetica classe Porta potrebbe contenere le seguenti informazioni:
- E’ un’apertura in un muro.
- Possiede due parametri variabili: larghezza ed altezza (variabili d’istanza).
- E’ possibile effettuare su di essa due operazioni: aprirla e chiuderla (metodi).
In SuperCollider tutte le classi cominciano con una lettera maiuscola e sono di colore Blu.
Istanze
Se la classe Porta è stata definita (da noi o dai programmatori del software), è possibile creare una o più porte derivate da essa, ognuna con caratteristiche diverse (più o meno larghe, più o meno alte). Ogni nuova porta sarà una nuova istanza della classe Porta e si differenzierà dalle altre grazie all’assegnazione di valori differenti alle variabili d’istanza che nel caso specifico sono: larghezza e altezza.
Metodi e messaggi
Infine abbiamo già visto che è possibile richiedere a una classe o a un’istanza di compiere delle azioni che devono essere obbligatoriamente previste e descritte all’interno della classe. Questa descrizione è chiamata metodo. La richiesta di effettuare l’azione avviene attraverso un messaggio, o meglio quando un’istanza o una classe ricevono un messaggio specifico, collegano questo messaggio al relativo metodo interno. Se ad esempio un’istanza della classe Porta riceve il messaggio Porta.apri si apre solamente se questa azione è descritta al suo interno come metodo. Ora dovrebbe essere più chiara anche la differenza tra functional notation e receiver notation già affrontata alla fine del Capitolo precedente. Infine abbiamo visto che negli Help files di alcuni oggetti sono presenti sia metodi di classe (Class Methods) che metodi d’istanza (Instance Methods). Questo perchè nella scrittura del codice possiamo utilizzare alcuni oggetti sia come classi che come istanze e, a seconda dei casi potremo richiamare dei metodi piuttosto che altri. A chiosa di questo paragrafo una breve terminologia generale in inglese riguardante i linguaggi OOP che può tornare utile nella lettura di manuali dedicati.
Terminologia inglese
- Object. Qualcosa che possiede dei dati che rappresentano lo stato di un oggetto e la descrizione di una serie di operazioni che possono essere effettuate sull’oggetto stesso.
- Message. Una richiesta a un oggetto di compiere un operazione.
- Receiver. L’oggetto al quale è inviato il messaggio.
- Class. Una descrizione dello stato e del comportamento di un insieme di oggetti.
- Method. Una descrizione delle operazioni necessarie a implementare un messaggio per una classe specifica.
- Instance. Una copia degli oggetti descritti da una classe.
- Instance Variable. Una parte dello stato interno di un oggetto.