Programmazione iOS e Mac, Programmazione OOP(Le Classi)

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.

A partire dal class object è possibile istanziare gli oggetti necessari al programma.

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;