Skip to content

Curiosidades de Objective-C

8 junio 2010

Objective-C es un lenguaje de programación diseñado para facilitar la programación orientada a objetos. Es un conjunto de extensiones para el lenguaje ANSI C. Su objetivo es dotar a C de capacidad de programación orientada a objetos de forma sencilla.

En esta entrada vamos a ver algunas curiosidades de este lenguaje. El objetivo de esta entrada no es aprender Objective-C sino más bien mostrar algunas carácterísticas que os hagan interesaros por este lenguaje y profundizar un poco más en el.

  • Para definir una clase necesitaremos dos ficheros: Un interface (.h) y una implementation (.m)
  • Para importar otra clase o librería, podemos usar #include o #import. Se recomienda utilizar #import ya que se comporta exactamente igual que #include excepto que evita que el mismo fichero se incluya más de una vez. (Lo que en C/C++ comprobamos mediante #ifndef …)
  • Podemos manejar cadenas de texto al estilo C: (char*) o podemos utilizar la clase NSString. Esta clase es inmutable, no podemos alterar las cadenas. Pero podemos utilizar la clase NSMutableString (Subclase de NSString)  que nos va a permitir generar cadenas totalmente manipulables.
  • A diferencia de otros lenguajes de programación, no podemos utilizar el operador ‘+’ para concatenar cadenas de tipo NSString.
  • Cuando declaremos instancias de clase, estas nunca podrán ser objetos. Deben ser referencias a objetos (o punteros a objetos como prefirais). Por ejemplo: NSString* a; //Nunca NSString a; Ya que los objetos deben crearse en memoria dinámica.
  • Una clase puede tener métodos de instancia y métodos de clase. Los métodos de clase serían los métodos static para Java. Los métodos de instancia se identifican con el carácter ‘-‘ al comienzo de la declaración del método y los métodos de clase con el carácter ‘+’.
  • Un método en Objective-C siempre devuelve algo. Aunque el indicar un valor de retorno sea opcional. Si no ponemos nada en el retorno de un método, se devolverá por defecto un id. Si queremos que el método no devuelva nada, debemos marcarlo como void.
  • id es un tipo de identificador general para referenciar objetos sin importar su tipo. id es la forma de utilizar tipado dinámico en Objective-C (Aunque en realidad es un poco más complejo que esto 😉 )
  • Los métodos de instancia, las variables de instancia y los métodos de clase, pueden tener el mismo nombre sin que se produzca ningún tipo de conflicto.
  • Ejemplo de declaración de métodos:
    -(void)setParameterData:(int)data;
    +(NSString*)getMyString;
  • Cuando en la sintaxis de un método aparece ‘:’ indica que hay un parámetro, por ejemplo:
    -(void)insertObject:(id)anObject atIndex:(NSUInteger)index;
    Estamos declarando un método de instancia que tiene 2 parámetros(anObject e index). Como vemos, el nombre del método se puede separar mediante espacios en blanco y “etiquetas”. Si el método no tiene parámetros entonces no ponemos ‘:’
  • El número de parámetros que recibe un método, viene indicado por el número de ‘:’ que encontremos en su declaración
  • Respectoa a las “etiquetas” que mencionaba anteriormente: Los métodos en Objective-C son autodocumentados. A cada parámetro se le puede asignar, no sólo el tipo, sino también una etiqueta. Por ejemplo, el método anterior asigna la etiqueta (atIndex) al segundo parámetro que va a recibir. Así a la hora de invocar a este método, la sintaxis queda mucho más clara:
    [p1 insertObject:obj atIndex:5]; //p1 será una referencia a un objeto ya inicializado
  • Cuando un método tiene un solo parámetro, el propio nombre del método sirve para documentar al parámetro.
  • Las etiquetas de los métodos no son obligatorias, podemos omitirlas, sin embargo, los ‘:’ son necesarios para serparar cada parámetro.
  • En Objective-C podemos sobrecargar dos métodos que reciban el mismo tipo de datos simplemente cambiando las etiquetas.
  • En Objective-C tenemos algo parecido a los interface en Java, clases totalmente abstractas. Se denominan: protocols
  • Hay tres modificadores de acceso: @public, @protected, @private. Sólo se añaden modificadores de acceso a las variables de instancia. Los métodos no llevan.
  • Sin embargo, los métodos pueden ser públicos o privados. Para que sean públicos debemos definirlos en la zona del interfaz (.h) e implementarlos en la zona de la implementación (.m). Y para que sean privados simplemente bastará con implementarlos en la zona de la implementación. (.m) Estos métodos privados, sólo son accesibles desde la zona de implementación y deben definirse antes que los métodos públicos.
  • Por defecto las variables de instancia llevan asociado el modificador @protected. Si aparece un modificador de acceso, afectará a todas las variables, hasta que aparezca un modificador nuevo. Por tanto no hace falta definir un modificador para cada variable. Por ejemplo:
    @private
    NSInteger* var1;
    NSString* var2;
    @public
    NSInteger* myVarPublic;
  • Para instanciar a un objeto, debemos llamar a los métodos allocinit.
    • alloc: Sería el equivalente a new en Java o C++; reserva memoria dinámica y pone a cero todas las variables de instancia del objeto. Es un método de clase
      • Punto* p = [Punto alloc];
    • init: Sería el equivalente al constructor en Java o C++; se encarga de inicializar las variables de instancia del objeto. Es un método de instancia
      • p = [p init];
  • Podemos agrupar ambas llamadas en una sola línea: Punto* p = [[Punto alloc] init];
  • Como esta acción se realiza con mucha frecuencia, podemos utilizar el operador new de la siguiente forma: Punto* p = [Punto new]; Estas líneas son equivalentes.
  • Para liberar un objeto de la memoria dinámica, usaremos: [p release]; Objective-C implementa un sistema propio de Garbage Collector, pero podemos forzar a liberar el objeto mediante el método release.
  • release Pertenece a la clase NSObject, si estamos heredando de la clase Object de GNU, debemos usar el método free

Hasta aquí, esta entrada sobre curiosidades de Objective-C. Es un lenguaje que os recomiendo que tengáis en cuenta ya que es muy simple de aprender y muy potente. Los que sepáis Java y/o C,C++, tendréis mucho aprendido ya 😉

Más info:

Introducción a Objective-C | The Objective-C Programming Language (Apple)

Índice Tiobe | Tiobe Software: Tiobe Index (Mide la popularidad de los lenguajes de programación)

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: