Gli oggetti sono definiti attraverso le loro classi.
La definizione di una classe comprende la dichiarazione delle variabili istanza e un insieme di metodi
La classe è il modello per la creazione di uno o più oggetti
’oggetto è l’istanziazione in memoria della classe
Il compilatore crea un oggetto per ogni definizione di classe. A partire da quell’oggetto (class object) è possibile costruire tutti gli oggetti di quel tipo, cioè le istanze di quella data classe.
In Objective-c le classi e gli oggetti sono entrambi oggetti.
Le informazioni vengono compilate e memorizzate in strutture dati disponibili al runtime ,Il compilatore crea un oggetto class object che rapresenta la classe.
Metodi di Classe
Class Object ha accesso a tutte le informazioni relative alla classe, è come se fosse il prototipo e come tale non è un’istanza.
Non è caratterizzato da variabili sue, ma solo da metodi appositamente creati per sè: metodi di classe.
Tali metodi svolgono funzioni relative alla classe, sono quindi privi all’interno della loro implementazione di qualsiasi riferimento all’instanza (self).
Metodi di Istanza
Al contrario, i metodi di istanza sono i metodi propri dell’oggetto in quanto istanza e come tali possono quindi fare uso del proprio riferimento (self).
Le istanze rispondono ai metodi istanza:
-(id)init;
-(int)speed;
-(void)start;
-(void)stop;
I metodi di classe sono individuati dal segno – , mentre i metodi di istanza sono individuati dal segno +
+(id)alloc;
+(id)car;
Definizione di classe
La definizione di una classe è divisa in due fasi:
l’interfaccia
l’implementazione
L’interfaccia e l’implementazione sono solitamente divisi in file separati: il file interfaccia (estensione .h), reso disponibile a chiunque utilizzi la classe, e il file implementazione (estensione .m).
La dichiarazione dell’interfaccia inizia con la direttiva al compilatore @interface e termina con la direttiva @end:
[code lang=”objc”]
@interface ClassNome :Superclasse{
<div>
<pre>Dichiarazione variabili istanza</pre>
}
Dichiarazione metodi
@end
[/code]
Se non è specificata la superclasse, e quindi omesso il simbolo ‘:’, la classe è dichiarata come classe principale (root class).
Dichiarazione di Metodi
Viene utilizzata una sintassi nota col nome di notazione infissa: il nome del metodo e dei suoi argomenti sono strettamente legati.
Sebbene non sia pratica comune, è possibile definire un metodo istanza con lo stesso nome di un metodo di classe, oppure un metodo istanza con lo stesso nome di una variabile d’istanza.
I tipi degli argomenti di un metodo sono dichiarati nel seguente modo:
-(void)metodo:(float)argomento;
Se invece dobbiamo specificare più argomenti dovremmo dichiararli così:
-(void)metodo:(float)argoment01 specArg2:(int)argoment2;