Qu’est-ce qu’un “cluster de classes” dans Objective-C?

Je lisais que NSArray est juste une telle chose. Sonne lourd. J’ai sur mon bureau 7 livres vraiment volumineux sur Objective-C, Cocoa et C. Aucun d’entre eux ne mentionne Class Cluster, du moins je ne le trouve pas dans l’Index à l’arrière des livres. Alors c’est quoi ça?

Des documents d’Apple …. En bref, c’est un modèle de conception utilisé dans le cadre de la Fondation, ce qui explique probablement pourquoi il n’est pas mentionné dans les livres ObjC.

Je ne sais pas ce que contient le CDP mentionné par Steve, mais le cluster Objective-C Class est une construction qui prend en charge l’implémentation du modèle Factory abstrait.

L’ idée est simple : vous souhaitez fournir une interface Factory (Cluster) qui, avec une description minimale, fabrique et renvoie une instance concrète spécifique d’un object Factory qui respecte le comportement de la famille de clusters décrite par l’interface Factory (Cluster).

Un exemple concret simple : Cet exemple fournit une fabrique Laugh qui produit des classes concrètes de types de rire spécifiques (par exemple Guffaw, Giggle). Faites attention à la méthode Rire initWithLaughter:

En riant.h:

#define kLaughWithGuffaw 1 #define kLaughWithGiggle 2 @interface Laugh: NSObject {} - (Laugh *) initWithLaughter:(NSUInteger) laughterType; - (void) laugh; @end 

En rire:

 @interface Guffaws:Laugh {} - (void) laugh; @end @interface Giggles:Laugh {} - (void) laugh; @end @implementation Laugh - (Laugh *) initWithLaughter:(NSUInteger) laugherType { id instanceReturn=nil; ; // Removed for ARC [self release] if ( laughterType == kLaughWithGuffaw ) instanceReturn = [[Guffaws alloc]init]; else if( laughterType == kLaughWithGiggle ) instanceReturn = [[Giggles alloc]init]; else ; // deal with this return instanceReturn; } - (void) laugh { NSLog(@"Humbug"); } @end @implementation Guffaws - (void) laugh { NSLog(@"OH HA HA HOWAH HA HA HA"); } @end @implementation Giggles - (void) laugh { NSLog(@"Tee hee"); } @end 

De la programmation en objective c par Stephen Kochan à la page 498 du glossaire, cluster:

Une classe abstraite qui regroupe un ensemble de sous-classes concrètes privées, fournissant une interface simplifiée à l’utilisateur via la classe abstraite.

Les clusters de classes fournissent une interface publique unique à un groupe d’implémentations concrètes de sous-classes privées. Un programmeur objective-c utilise souvent des grappes de classes et le réalise rarement – et c’est tout l’intérêt d’un cluster de classes. Le travail d’un cluster de classes consiste à masquer la complexité des détails de l’implémentation derrière une interface publique.

La plupart des classes Foundation sont des clusters de classes, tels que NSSsortingng, NSArray, NSDictionary et NSNumber. Lorsque vous appelez [NSSsortingng ssortingngWithFormat:] le cluster de classes vous donne une classe concrète qui implémente l’interface NSSsortingng . Cela peut être un NSConcreteSsortingng , NSCFSsortingng , NSFooBarSsortingng , etc. Le cluster que vous donne la classe est basé sur le constructeur ou l’initialiseur que vous appelez et les arguments.

De ce fait, les groupes de classes constituent l’un des concepts les plus puissants de la programmation Objective-C.

  • Très facile à mettre en œuvre
  • Facile à modifier l’implémentation sous-jacente sans changer le code qui l’appelle.
  • Facile à fournir différentes implémentations concrètes à l’exécution (c.-à-d. Des ressources de test ou des objects simulés)
  • À cause de ce qui précède, facile à tester et à refactoriser

Si vous venez d’autres langues, vous êtes peut-être familier avec les modèles Gang of Four. Les groupes de classes ont des éléments à la fois de la fabrique abstraite et des motifs de façade.

La documentation publique d’Apple couvre les grappes de classes (et comment les implémenter et les étendre). Malheureusement, j’ai constaté que pour de nombreux développeurs iOS, ceci et d’autres modèles spécifiques au cacao constituent un point aveugle.

Compétences de base du cacao: cluster de classes

Guide des principes fondamentaux du cacao: Class Clusters

Des exemples d’implémentation de vos propres classes sont disponibles sur GitHub

Le cluster de classes NSArray n’est pas “lourd”, c’est un moyen pour n’importe quel nombre d’implémentations d’une classe de tableaux d’être utilisé sans que votre code ne connaisse ou ne se soucie de l’implémentation particulière. Sous le capot, il existe des sous-classes concrètes de NSArray qui conviennent à différents cas d’utilisation, tels que les grands tableaux fragmentés ou les tableaux contenant un nombre spécifique d’éléments connus au moment de la compilation.

NSArray, NSSsortingng et NSNumber sont les classes que vous rencontrerez le plus souvent.