La sintassi di Objective-C per la creazione di una classe è molto semplice. Si presenta di solito in due parti:
L’interfaccia della classe è di solito memorizzata nel file NomeClasse.h, e definisce le variabili di istanza e metodi pubblici. Mentre l’implementazione si trova nel file NomeClasse.m che contiene il codice vero e proprio dei metodi, spesso definisce i metodi privati che non sono disponibili per i clienti della classe.
Progettare l’interfaccia di una classe
Ecco come si presenta un’interfaccia. La classe è chiamata Foto, quindi il file è chiamato Foto.h:
[code lang=”obj-c”]
#import <Cocoa/Cocoa.h>
@interface Photo : NSObject {
NSString* caption;
NSString* photographer;
}
@end
[/code]
Innanzitutto, abbia importato Cocoa.h per caricare la classe base da cui deriveremo la nostra. La direttiva #import impedisce che vengano inclusi file più volte.
L’ @interface ci dice che questa è la dichiarazione della classe Foto. I due punti (:) specificano la superclasse, NSObject ovviamente.
All’interno delle due parentesi graffe ci sono due variabili d’istanza: caption e photographer. Sono entrambi NSString ma potrebbero essere qualsiasi tipo di oggetto, incluso id.
Alla fine il simbolo @end termina la dichiarazione della classe.
Aggiungiamo i metodi
Andiamo ad aggiungere alcuni metodi getter per le variabili istanziate. Ricorda però che i metodi in Obj-C solitamente non hanno il prefisso “get” ma semplicemente il nome della variabile. Un singolo trattino (-) prima del metodo indica un metodo d’istanza, Un più (+) indica un metodo di classe.
Di default il compilatore assume che il metodo ritorni un oggetto id e che tutti gli input siano id. Quindi anche se il codice potrebbe essere corretto aggiungiamo sempre il tipo di dato da ritornare:
[code lang=”obj-c”]
#import <Cocoa/Cocoa.h>
@interface Photo : NSObject {
NSString* caption;
NSString* photographer;
}
– (NSString*) caption;
– (NSString*) photographer;
@end
[/code]
Ed infine aggiungiamo anche i setter. Ovviamente non dovranno ritornare alcun valore…quindi specifichiamoli a void.
[code lang=”obj-c”]
#import <Cocoa/Cocoa.h>
@interface Photo : NSObject {
NSString* caption;
NSString* photographer;
}
– (NSString*) caption;
– (NSString*) photographer;
– (void) setCaption: (NSString*)input;
– (void) setPhotographer: (NSString*)input;
@end
[/code]
Successivamente dovremo scrivere il file di implementazione Foto.m …ma lo vedremo successivamente.