(Si le das este voto, por favor, dale un voto a Roman - su respuesta fue la primera, es correcta, solo le faltaba un ejemplo).
Usted está hablando un Class Cluster. Por ejemplo, mira la clase NSString.
No es NSString:
@interface NSString : NSObject
Y NSMutableString:
@interface NSMutableString : NSString
Ambos de los cuales declarar una extremadamente pequeño conjunto de métodos en la declaración de la clase principal. Si tuviera que subclase NSString para implementar su propia clase de cadena, , solo necesitaría implementar esos métodos centrales. Todos los demás métodos implementados en NSString se implementan en términos de los métodos centrales. Y, del mismo modo, los métodos de mutación se implementan utilizando los métodos primitivos declarados en el núcleo de NSMutableString.
Ahora, obviamente, implementar toda la mutabilidad a través de - (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString
(el método de un núcleo) sería extremadamente ineficiente. Por lo tanto, en tiempo de ejecución, observará que que en realidad nunca tiene una instancia de NSSutricion o NSMutableString, sino solo instancias de subclases (que, en realidad, no son realmente subclases ... pero que bien podrían estar en el contexto de esta discusión).
Y esas subclases, la clase de implementación utilizada en el tiempo de ejecución, anulan casi todos los métodos de NSString y NSMutableString para proporcionar implementaciones altamente optimizadas de las operaciones específicas.
lo tanto, usted haría algo como:
@interface MyAbstractClass : NSObject
... declare factory methods here ...
... declare core methods here ...
@end
@interface MyAbstractClass(AdditionalFunctionality)
... declare convenience here ...
@end
Luego, en la puesta en práctica, implementar todos los métodos básicos como @throw @"Must use subclass"
y todos AdditionalFunctionality
métodos en cuanto a los métodos básicos.
Esto podría ser totalmente privada - no en un encabezado en absoluto, incluso:
@interface MyStackClass: MyAbstractClass @end
@implementation MyStackClass ... poner en práctica los métodos básicos y anular la métodos de funcionalidad adicional que necesitan optimización ... @end
Repita para sus clases adicionales de clases. Luego, implemente métodos de fábrica en MyAbstractClass que devuelvan instancias de las subclases, según sea necesario.
¿Qué le parece usar "Protocolos"? Está más cerca de las interfaces java/C#. ¿Qué es lo que quiero? – user48545