miércoles, 16 de noviembre de 2011

Qué es Objective-C


¿Qué es Objective-C?

En la teoría Objective-C es una extensión orientada a objetos (POO) de la sintaxis de C, no se trata en sí de otro lenguaje, sino que se trata del bien conocido y viejo amigo C, solo que se le han agregado muchas cosas interesantes y útiles. Si bien en un principio es cierto, la realidad es que debes acostumbrarte a las características de Objective-C.

@interface

La definición de la clase se realiza en el archivo de cabecera, que debe terminar en “.h”, como en C normal.
//MiClase.h #import typedef enum { rojo=0,azul,verde }Color; @interface MiClase : NSObject { /* Comentario estilo C: definición de miembros */  int enteroA;  int enteroB; } //Definición de métodos -(int) getEnteroA: -(void) setEnteroA:(int) _entero; -(int) getEnteroB: -(void) setEnteroB:(int) _entero; -(int) multiplicaEnteros; +(char*) nombreDeColor:(Color) color; @end
¿Cómo se ve una clase en Objective-C? Para alguien que viene de Java o C/C++ se ve familiar, pero a la vez, se desconocen varias cosas, la primera, definición de clases:
  • Se comienza con la palabra reservada @interface.
  • NSObject: Es la abreviación de NeXTStep Object, es la clase mas abstracta que hay, todas las clases deben heredar de otra clase o de NSObject.
  • La herencia se indica con Clase : ClasePadre, como en MiClase : NSObject.
  • Las variables de instancia se declaran entre las llaves de @interface Clase : NSObject { … }.
  • El acceso por defecto es protected.
  • Después de los miembros de la clase se especifican los métodos, que tienen la forma: alcance (tipoDeRetorno) nombreDeMetodo:(tipoParametro1) parametro1:
  • El alcance de un método se especifica con un signo menos: – para métodos de instancia; y un signo más + para metodos de clase.
  • La definición termina con @end.

@implementation

La implementación de la clase se escribirá en un archivo con terminación “.m”:
//MiClase.m #import "MiClase.h" @implementation MiClase -(int) getEnteroA {  return enteroA; } -(void) setEnteroA:(int) _entero { enteroA=_entero; } -(int) getEnteroB {  return enteroB; } -(void) setEnteroB:(int) _entero { enteroB=_entero; } -(int) multiplicaEnteros {  return enteroA*enteroB; } +(char*) nombreDeColor:(Color) color {  switch(color) {   case azul:    return "Azul";   break;   case rojo:    return "Rojo";   break;   case verde:    return "Verde";   break;  } return "Color Desconocido"; } @end
La implementación de la clase
  • Se comienza con @implementation NombreDeClase.
  • La definición de los métodos se realiza de manera similar a como se hizo la definición en la cabecera de la clase.
  • Se termina con la palabra reservada @end.

Usando la clase.

Como ya mencioné, Objective-C es una extensión de C, y sabemos que todo programa de C, debe tener una función main:
#import #import "MiClase.h" int main( int argc, const char *argv[] ) {     MiClase *instancia = [[MiClase alloc] init];     //Debemos especificar los valores:     [instancia setEnteroA:1];     [instancia setEnteroB:12];     //llamamos a los métodos de la instancia que devuelven valores     printf("%d por %d es igual a %d",[instancia getEnteroA],           [instancia getEnteroB], [instancia multiplicaEnteros] );     //tenemos que liberar la memoria cuando ya no necesitamos la instancia     [instancia release];     //Pero podemos llamar a los métodos de la clase:     printf("%s",[MiClase nombreDeColor:rojo]);     return 0; }
  • Las llamadas a métodos de una clase, de una manera equivalente a C++ instancia->metodo() se hace en la forma[instancia metodo];
  • Se puede hacer llamadas anidadas: [[instancia metodoQueDevuelveOtroObjeto] llamadaAMetodoDelObjetoDevuelto].sería el equivalente a lo siguiente en C++: (instancia->metodoQueDevuelveOtroObjeto())->llamadaAMetodoDelObjetoDevuelto();
  • Para Crear instancias de una clase se usa MiClase *instancia=[[MiClase alloc] init];
  • A diferencia de C++, Objective-C siempre utiliza apuntadores para objetos de las clases.
  • Para obtener la instancia de la clase la llamada al Método alloc, es como usar malloc en c, solo reserva la memoria para la instancia.
  • La llamada al método init, efectúa al inicialización de la instancia, como un constructor.
  • Usualmente se efectua en una sola línea para crear e inicializar el objeto: MiClase *instancia=[[MiClase alloc] init];
  • Al igual que en las otras variantes de C, debes liberar la memoria obtenida con alloc, llamando al método release, que es heredado de NSObject.
Bien, eso es todo por hoy. Saludos.

No hay comentarios:

Publicar un comentario