Encapsulation de données Objective-C

Tous les programmes Objective-C sont composés des deux éléments fondamentaux suivants:

  • Program statements (code) - C'est la partie d'un programme qui effectue des actions et elles sont appelées méthodes.

  • Program data - Les données sont les informations du programme qui sont affectées par les fonctions du programme.

L'encapsulation est un concept de programmation orientée objet qui lie les données et les fonctions qui manipulent les données et qui les protège des interférences extérieures et des abus. L'encapsulation des données a conduit à l'important concept POO dedata hiding.

Data encapsulation est un mécanisme de regroupement des données et des fonctions qui les utilisent, et data abstraction est un mécanisme permettant d'exposer uniquement les interfaces et de masquer les détails d'implémentation à l'utilisateur.

Objective-C prend en charge les propriétés d'encapsulation et de masquage des données via la création de types définis par l'utilisateur, appelés classes. Par exemple -

@interface Adder : NSObject {
   NSInteger total;
}

- (id)initWithInitialNumber:(NSInteger)initialNumber;
- (void)addNumber:(NSInteger)newNumber;
- (NSInteger)getTotal;

@end

Le total variable est privé et nous ne pouvons pas accéder de l'extérieur de la classe. Cela signifie qu'ils ne sont accessibles que par les autres membres de la classe Adder et non par aucune autre partie de votre programme. C'est une manière dont l'encapsulation est réalisée.

Les méthodes à l'intérieur du fichier d'interface sont accessibles et ont une portée publique.

Il existe des méthodes privées, écrites à l'aide de extensions, que nous apprendrons dans les prochains chapitres.

Exemple d'encapsulation de données

Tout programme Objective-C dans lequel vous implémentez une classe avec des variables de membres publics et privés est un exemple d'encapsulation et d'abstraction de données. Prenons l'exemple suivant -

#import <Foundation/Foundation.h>

@interface Adder : NSObject {
   NSInteger total;
}

- (id)initWithInitialNumber:(NSInteger)initialNumber;
- (void)addNumber:(NSInteger)newNumber;
- (NSInteger)getTotal;

@end

@implementation Adder
-(id)initWithInitialNumber:(NSInteger)initialNumber {
   total = initialNumber;
   return self;
}

- (void)addNumber:(NSInteger)newNumber {
   total = total + newNumber;
}

- (NSInteger)getTotal {
   return total;
}

@end

int main(int argc, const char * argv[]) {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];        
   Adder *adder = [[Adder alloc]initWithInitialNumber:10];
   [adder addNumber:5];
   [adder addNumber:4];
   
   NSLog(@"The total is %ld",[adder getTotal]);
   [pool drain];
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

2013-09-22 21:17:30.485 DataEncapsulation[317:303] The total is 19

La classe ci-dessus ajoute les nombres ensemble et renvoie la somme. Les membres du publicaddNum et getTotal sont les interfaces avec le monde extérieur et un utilisateur a besoin de les connaître pour utiliser la classe. Le membre privétotal est quelque chose qui est caché du monde extérieur, mais qui est nécessaire pour que la classe fonctionne correctement.

Conception de la stratégie

La plupart d'entre nous ont appris par une expérience amère à rendre les membres de la classe privés par défaut à moins que nous n'ayons vraiment besoin de les exposer. C'est juste bienencapsulation.

Il est important de comprendre l'encapsulation des données car c'est l'une des fonctionnalités principales de tous les langages de programmation orientée objet (POO), y compris Objective-C.