1 Objective C (Desarrollo con Apple) para programación en Iphone SDK: Similitudes y Diferencias entre Objective C con C/C++ y Java Dr. Moisés Alencastre Miranda, malencastre@itesm.mx
2 Introducción al IPhone SDK Oficialmente, sólo se pueden programar aplicaciones en IPad, IPhone y Ipod Touch con: Sistema Operativo Mac OS X (10.5. Leopard en adelante). Lenguaje de Programación Objective C. IDE (Integrated Development Environment) Xcode (3.0 en adelante) http://developer.apple.com/technologies/tools/xcode.html IPhone SDK Inicia en Marzo del 2008. Incluye Xcode. Versión previa 3.2 (Abril, 2010). Última versión 4.0 (Junio 2010). http://developer.apple.com/iphone/index.action
3 Los archivos con código fuente deben llevar cierta extensión: En Java:.java En C/C++:.h,.c y.cpp En Objective C:.h y.m Objective C es orientado a objetos: Similar a Java y C++ en el manejo de clases, objetos, variables globales (atributos), métodos (llamadas operaciones), propiedades get y set, herencia, polimorfismo, encapsulamiento, etc, pero se implementa de diferente forma. No existe un constructor como tal. La sintáxis es muy diferente a C/C++ y Java. Pero se puede incluir código de lenguaje C dentro de Objective
4 Todas las estructuras de control son iguales a Java y C/C++: if (el if, else), for, while, switch, do (while). Todos los operadores son iguales a Java y C/C++: +,, *, /, =, %, ++,, +=, =, *=, /=,!=, ==, <, > <=, >=, etc. Los tipos de datos básicos de C son iguales, los demás varían: int, float, double, char, short int, unsigned int, long int, unsigned short int, unsigned long int, long double. En Objective C, el tipo de dato void se llama id. La palabra reservada null es nil. El tipo de dato bool de C/C++ o boolean de Java cambia en Objective C por BOOL. Y las palabras reservadas true y false cambian por YES y NO.
5 Para cargar librerías, clases o archivos en el proyecto se usa: En Java: import ruta.subruta.clase; import java.util.vector; import java.util.*; En C/C++: #include <ruta/archivodelsistema.h> #include <stdio.h> #include ruta/miarchivo.h En Objective C: Se pueden utilizar los archivos.h de lenguaje C pero con import. #import <ruta/archivodelsistema.h> #import <UIKit/UIKit.h> #import ruta/miarchivo.h
6 El main: En Java: public static void main (String args[]){... } En C/C++: int main(int argc, char **argv){... } En Objective C: Igual que en C/C++. int main(int argc, char *argv[]) {... }
7 Para escribir en pantalla se utiliza: En Java: System.out.print( Hola ); System.out.println( Hola ); System.out.println( Hola +varint+, +varfloat+, +varstring); En C/C++: cout << Hola << endl; cout << Hola\n ; Cout << Hola << varint <<, << varfloat <<, << varstring << endl; printf( Hola %d, %f, %s\n, varint, varfloat, varcadenachars ); En Objective C: NSLog(@ Hola ); NSLog(@ %@, varstring); NSLog(@ Hola %d, %f, %@, varint, varfloat, varstring );
8 Los comentarios dentro del código son igual que en Java y C/C++: En una línea. // Comentario simple. Delimitados. /* Este es un método que recibe un par de datos y regresa su multiplicación */ Para funciones y clases. Estándar para generación de comentarios. /** Este es un método que recibe * un par de datos y regresa su * multiplicación */
9 La estructura general de una clase cambia mucho aunque sigue la ideología de separar en 2 archivos como en C++: En Java:... // Los import necesarios public class MiClase extends ClasePadre { // Mis variables globales normalmente private o protected private tipodato variable; // Aquí se puede poner el Constructor y/o Destructor. public MiClase ( parámetros... ) {... } // Mis métodos de propiedades set y get. // Mis métodos implementados, se indica si son public, private public tipodato mimetodo( parámetros... ) {... // código }... // etc }
10 En C/C++, archivo.h o encabezado con la definición de la clase:... // Los include necesarios. Y los using necesarios. class MiClase : public MiClasePadre { private:... // Defino mis variables globales dentro de las secciones private, etc. public:... // Aquí se puede poner el encabezado o prototipo del Constructor/Destructor. O puedo implementarlos aquí si son cortos.... // Defino los encabezados o prototipos de mis métodos de propiedades set y get. O puedo implementarlos aquí. // Defino solamente los encabezados o prototipos de mis métodos. tipodato mimetodo( parámetros... );... // etc };
11 En C/C++, archivo.cpp con la implementación de los métodos: // El include de mi archivo.h con la definición de la clase #include MiClase.h // Implementación de todos los métodos sólo definidos en el archivo.h tipodato MiClase::miMetodo( parámetros... ) {... // Código de implementación. }... // Más métodos.
12 En Objective C, archivo.h con la definición de la clase:... // Los import necesarios. @interface MiClase : MiClasePadre { int mivalint;... // Defino mis variables globales. NSString *mistring; } // No se puede de forma fácil definir private y protected... // Defino los encabezados de mis métodos de propiedades set/get. @property (readonly) NSString *_palabramostrada;... // Defino los encabezados o prototipos de mis métodos. (tipodato) mimetodo: parametros; (BOOL) enviarstr: (NSString *) mistr; //Ejemplo @end
13 En Objective C/C, archivo.m con la implementación de los métodos: #import MiClase.h // El include de mi archivo.h con la definición de la clase @implementation MiClase @synthesize mivar; // Este es necesario por cada get y set....// Implementación de todos los métodos definidos en el archivo.h (tipodato) mimetodo: parametros { }... // Código de implementación. (BOOL) enviarstr: (NSString *) mistr {... } // Ejemplo @end
14 La instancia de objetos y ejecución de métodos es diferente: En Java: MiClase miobjeto = new MiClase( parámetros... ); miobjeto.mimetodo( parámetros... ); En C/C++: MiClase *miobjeto = new MiClase( parámetros... ); miobjeto >mimetodo( parámetros... ); En Objective C (no lleva paréntesis en los métodos): MiClase *miobjeto; miobjeto = [[MiClase alloc] init]; // Para inicializar [miobjeto mimetodo: parámetros ]; // Para ejecutar ese método. [miobjeto mimetodo: [otroobjeto otrometodo]]; [miobjeto release]; // Para liberar memoria
15 Ver los ejemplos y presentaciones del curso CADI para mayor detalle. Recomendación: tener al menos un libro a la mano de: Objective C Xcode Stephen G. Kochan. Programming in Objective C 2.0. Addison Wesley, 2 nd edition. 2009. James Bucanek. Professional Xcode 3. Wrox. 2010. IPhone SDK Jonathan Zdziarski. IPhone SDK, O'REILLY. 2009.