Subscribe Twitter Twitter

jueves, 22 de abril de 2010

Objective-C : Clases (I)

Las clases en objetive-C tienen mucha similitud a como se hacen en C, se separa el interfaz de la implementación, dicho de otra manera en un fichero se ponen las cabeceras de los métodos y las variables y en otro se pone la implementación de los métodos puestos en el interfaz.

A diferencia de C aquí el fichero interfaz (cabecera) tendrá extensión .h y el fichero de implentación tendrá extención .m.

A continuación vamos a ver un ejemplo para ver la estructura que siguen los dos ficheros ya que por cada clase que queramos crear deberemos divirla en dos.

Ejemplo.h

#import <Foundation/Foundation.h>
@interface Simple : NSObject {

}
-(void)hola;
@end

Ejemplo.m

#import "Ejemplo.h"
@implementation Ejemplo
- (void) hola{
NSMutableString *message = [[NSMutableString alloc] initWithString:@"Hello"];
NSLog(message);
[message release];
}
@end

En el fichero Ejemplo.h lo primero que se hace es importar la clase Foundation que es la base del framework de cocoa a continuación mediante la directiva @interface (equivale al "class" de java) se define el nombre que va a tener la clase y mediante : NSObject se indica que esa clase va a heredar de la clase NSObject a diferencia del lenguaje java en el cual se indica la herencia mediante la palabra reservada "extends", la clase NSObject es la raíz en la jerarquía de clases como pasa en java con la clase Object.
A continuación se definen las cabeceras (prototipos) de los métodos que se van a implementar en el fichero asociado .m.

En el fichero Ejemplo.m lo primero que se hace es un import del fichero de cabecera definido anteriormente y a continuación se implementan los métodos definidos en el .h en el ejemplo anterior lo que se hace es en una variable string se inicializa con la cadena Hola (En objective-C las cadenas siguen el siguiente formato @"hola " , a continuación se escribe hola en el log y finalmente se libera la memoria reservada para "hola", en objective-c la gestión de memoria no es automática como sucede en java sino que hay primero que reservarla y después liberarla, esto en concreto para el iphone es fundamental ya que la memoria del dispositivo es limitada.

10 comentarios:

Anónimo dijo...

Hola a tod@s. Simplemente comentar que hay un pequeño error en la sintaxis del fichero Ejemplo.h. La declaración de métodos debe ir fuera de las llaves {} Dentro de las llaves en las clases de Objective-C sólo se declaran las variables de instancia o de clase.

Saludos. Rekkeb ;)

Unknown dijo...

Hola a todos, excelente idea la que han tenido con este blog, hacia falta un sitio de referencia y mucho más con tutorial de aprendizaje de programación para iOS, yo he programado en C pero hace tiempo que no lo hago y ahora lo he retomado en mi tiempo libre y estoy aprendiendo desde cero ya que antes lo hacía en windows. El amigo Rekkeb tiene razón en el comentario que hace sobre el error en el ejemplo.

Saludos, Henry

Pablo dijo...

Es genial lo que estais haciendo, seguid así estáis

Noemí dijo...

Ya está cambiado, gracias Rekkeb!

Unknown dijo...

Noemí, tengo una duda desde hace mucho respecto al código en objective-C (sólo he tocado java y PHP). ¿qué significan las letras NS? aparecen por todas partes: NSObject, NSLog, etc... Gracias

Noemí dijo...
Este comentario ha sido eliminado por el autor.
Noemí dijo...

Hola Alex la empresa NextStep que fué si mal no recuerdo la que creó Steve Jobs después de que le echaran de Apple. En esa nueva empresa desarrollaron toda la plataforma de desarrollo para Mac Os denominado Cocoa y para desarrollar ese tipo de aplicaciones se usa XCode, Interface Builder y el lenguaje objective-c por lo que como reinventaron el lenguaje C lo denominaron objective-c y le dotaron del prefijo NS(NextStep) como seña de identidad.

Unknown dijo...

mmm... Curioso!! gracias.
No sabía que Apple fuera la que inventó Objective-C. Más me soprende entonces la noticia leída en applesfera.com donde comentan que Apple quiere reemplazar ese lenguaje por uno nuevo:
http://www.applesfera.com/apple/apple-podria-estar-preparando-un-nuevo-lenguaje-de-programacion-para-reemplazar-a-objective-c

Deadline dijo...

Hola a todos,

Alex, solo te quería comentar que no es que Apple vaya a reemplazar Objetive-C por otro, sino que ha tomado la decisión de crear uno nuevo para la implementación y desarrollo mas sencillo y enfocado a iPhone, iPod Touch e iPad, ya que quiere aumentar el volumen de la App Store.

Por el blog, me parece perfecto, demasiada información en ingles y demás lenguajes extranjeros, pero en español no hay demasiada información.

Salu2, Josh R.
Admin http://idevgames.blogspot.com

David Romaní dijo...

Al compilar el ejemplo avisa en la instrucción que traza el mensaje por consola (NSLog) diciendo que la cadena no esta formateada. ¿Como se puede solucionar?

Publicar un comentario