Objective-C : les fondamentaux pour le développement iOS 6 Objective-C : déclaration d'une classe

Pour chaque classe, on définit une interface et une implémentation. L'interface décrit le comportement de la classe tel qu'il sera vu par les autres classes, l'implémentation décrit la logique interne de la classe.

Par convention, on sépare la déclaration et l'implémentation dans deux fichiers différents : un fichier .h pour la déclaration et un fichier .m pour l'implémentation.

Déclaration d'une classe : MaClasse.h

@interface MaClasse : NSObject {
// Liste des variables d?instance de la classe
NSString *monNom;
NSInteger *monAge;
}
// Liste des méthodes de la classe
- (void) uneMethodeDInstance;
+ (void) uneMethodeDeClasse;
@end

On remarque que la déclaration commence au mot-clé @interface et se termine avec le mot-clé @end. Elle contient un bloc limité par des accolades qui contient la liste des variables d'instance, puis entre la fin des accolades et le mot-clé @end, on trouve la liste des méthodes.

Implémentation d'une méthode

#import "MaClasse.h"
@implementation MaClasse
- (void) uneMethodeDInstance
{
// ...
}
+ (void) uneMethodeDeClasse
{
// ...
}
@end

L'implémentation commence par le mot-clé @implementation et se termine par le mot-clé @end.

Les variables d'instance

Elles sont déclarées dans l'interface. Par défaut, elles ne sont pas visibles par les autres objets. Nous verrons comment les exposer.


ATTENTION Ne pas confondre variable d'instance et propriété

Les variables d'instance sont l'équivalent des propriétés en Java ou en PHP, mais en Objective-C une propriété est une notion différente et bien spécifique qui sera décrite un peu plus loin.

Les différents types de méthodes

Il existe des méthodes d'instance et des méthodes de classe. Les méthodes d'instance ne peuvent être appelées que sur une instance de la classe. Elles ont accès à toutes les variables d'instance de la classe. Par défaut, toutes les méthodes déclarées dans l'interface sont publiques.

Les méthodes de classe sont appelées directement sur la classe, elles n'ont pas accès aux variables d'instance.

REMARQUE Méthode de classe et méthode statique

Les méthodes de classe sont l'équivalent des méthodes statiques dans d'autres langages.


Les méthodes d'instance sont préfixées par un - dans leur déclaration et leur implémentation. Les méthodes de classe sont préfixées par un +.

// Appel de la méthode de classe
[MaClasse uneMethodeDeClasse];
// Appel de la méthode d?instance
MaClasse *instance = [[MaClasse alloc] init];
[instance uneMethodeDInstance];


Héritage

En Objective-C, une classe hérite forcément de NSObject ou d'un de ses descendants. On indique la classe parente dans la déclaration de la classe.

@interface MaDeuxiemeClasse : MaClasse {
...
}
...

L'héritage multiple n'est pas possible en Objective-C, une classe hérite toujours d'une seule classe.

Faire référence à l'objet courant et à son père

Pour faire appel à une méthode ou une propriété de l'objet courant, on utilise le mot-clé self qui est l'équivalent de this en Java ou C++.

Pour faire appel à une méthode de l'objet parent, on utilise le mot-clé super.

 - (void) uneMethode
{
// Appel d?une autre méthode du même objet
[self uneAutreMethode];
// Appel d?une méthode de l?objet parent
[super uneMethode];
}