2 votes

Méthodes d'aide d'Objective C

Je suis novice et j'essaie de comprendre l'héritage. Si j'initialise un nouvel objet avec plusieurs propriétés et que je veux que d'autres classes m'aident à attribuer des valeurs à ces propriétés, dois-je créer des instances de ces autres classes ? Visualisé :

-(ObjA *)init{
    self = [super init];
    self.property1 = [method from Class A];
    self.property2 = [method from Class B];
    self.property3 = [method from Class C]; etc...
    return self;
 }

En d'autres termes, en supposant que les classes A, B et C doivent savoir ce qu'est l'objet A, dois-je faire de ces méthodes de classe des méthodes d'instance et initialiser chaque objet ? Y a-t-il une autre façon de procéder ? Merci d'avance pour votre aide.

5voto

Anoop Vaidya Points 30399

En d'autres termes, en supposant que les classes A, B et C ont besoin de savoir quel objet A est

NON .


Vous pouvez simplement appeler une méthode de la classe A/B/C etc. Mais le type de retour doit correspondre à celui de la méthode correspondante. property .

Laissez, le property1 est pour gentil NSString alors votre ClassA doit être

-(NSString *)methodClassA{
   ...
   return someStringValue;
}

Alors vous devez utiliser :

ClassA *objClassA=[ClassA new];
self.property1=[objClassA methodClassA];

Ou vous pouvez aller avec la méthode de classe par ceci :

+(NSString *)methodClassA{
   ...
   return someStringValue;
}

Et l'utiliser comme :

self.property1=[ClassA methodClassA];

2voto

Jano Points 37593
assuming Class A, B, and C need to know what Object A is

Le code d'initialisation d'un objet doit être autonome, sauf s'il utilise une fonctionnalité appartenant à un autre objet, auquel cas l'objet agit comme un client de cette fonctionnalité. C'est-à-dire que l'objet A agit en tant que client de A,B,C (comme on le voit dans votre code).

Mais cela n'implique pas que A, B, C doivent connaître (avoir une dépendance sur) l'objetA. En faisant cela, vous dites qu'ils n'ont pas de raison d'exister par eux-mêmes.

En général,

  • Chaque classe ou méthode doit avoir un objectif encapsulé. Cela facilite la compréhension, la modification et le test en isolation. C'est un modèle commun de créer des classes dont le seul but est d'encapsuler des informations pour créer une classe différente, mais diviser cela en trois classes différentes est plus que bizarre (je ne peux pas imaginer un exemple de cela).

  • Un objet ne devrait pas être autorisé à exister dans un état inutilisable, et il ne devrait pas non plus nécessiter d'informations non essentielles lors de sa création. L'objet A a-t-il besoin de ces propriétés pour fonctionner ? Si oui, votre code est correct, si non, l'initialisateur fournit trop d'informations et le rend moins réutilisable.

Essayez de repenser votre doute à l'aide d'un exemple réel (et non abstrait). Vous finirez peut-être par trouver vous-même un sens à votre doute.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X