Categorias en Objective-C

Durante el desarrollo de una aplicación es muy común necesitar “más” de lo que nos ofrece una clase ya creada. La programación orientada a objetos nos ofrece varias maneras de paliar ese déficit.

Uno muy habitual (sobretodo si vienes del mundo Java) es usar la herencia, donde “heredaríamos” las funcionalidad de esa clase anterior y la extenderíamos implementando nuevos métodos.

Objective-C no usa en exceso esta manera de trabajar, aunque evidentemente tienes múltiples maneras de atajar esas peculiaridades.

Hoy os quería presentar una de ellas : Las categorías.

Las categorías nos permiten hacer cosas como esta :

NSString *cadena = [NSString initWithString:@"Churro Patatero"];
NSLog(@"Veamos que sale: %@", [cadena md5]);

Y nos devolvería esto: “Veamos que sale: 2176861a0ed7f1146549e39c28a3f002”

Evidentemente NSString no viene de serie con un generador de hashes MD5, asi que hemos usado una categoría para proporcionarle fácilmente esa funcionalidad.

Pros del uso de las categorías :

-Nos permiten añadir nuevas funcionalidades a la clase, sin crear una subclase.

-Los usuarios no tienen que construir de nuevo una clase por lo tanto es sencillo adaptarse al código.

-Los métodos declarados en dicha categoría tienen acceso a las variable de instancia de la clase original, mas las que están declaradas en las subclases.

-Permite segmentar tu código, y hacerlo mas claro. Puedes por ejemplo subdividir una clase muy grande con categorías anidadas por funcionalidades.

-Permite ocultar ciertos métodos a los ojos de los desarolladores (al no tenerlos implementados en la interface).

Contras del uso de categorías :

Cualquier developer puede ampliar cualquier clase, y si contamos con que la propia Apple no deja de ampliar y modificar sus propias clases, podemos llegar a la conclusión de que existen serias posibilidades de que algún día existan “colisiones” entre los métodos que nosotros hemos creado y los que alguien haya creado/modificado en la clase original…

Es por ello aconsejado el usar algún tipo de prefijo para evitar sustos futuros…

Pasamos a ver mas como crear una Categoría :

La norma mas habitual para el nombre de la categoría es usar nombre clase a ampliar+nombre de nuestra categoría. Lo que aquí daría algo parecido a esto : NSString+JRDHashes

Y esto nos deja trabajar con dos ficheros NSString+JRDHashes.h y NSString+JRDHashes.m

Para hacer la declaración de la categoría en  NSString+JRDHashes.h :

@interface NSString (JRDHashes)

- (NSString *)md5;
- (NSString *)sha1;
- (NSString *)sha256;
- (NSString *)sha512;

@end

Donde NSString es la clase que queremos ampliar y JRDHashes es el nombre de nuestra categoría.

Y la implementación es igual a la de cualquier otra clase…aunque eso lo veremos mas a fondo tocando justamente el tema Hashes y categorías en otro post.

Share

No hay entradas relacionadas.

Tags: , , , , , ,

Un comentario to “Categorias en Objective-C”

  1. julio,28th 2012 at 4:38 pm

    DBSnippets » Blog Archive » Generación de Hashes en Objective-C says:

    [...] « Categorias en Objective-C [...]

Leave a Reply