Lluís Ulzurrun de Asanza Sàez

Introducción a Objective-C: Nuestra primera aplicación

Beware: This post was published 3 years ago and its content may be outdated.

¿Qué es Objective-C? ¿Qué es Cocoa? ¿Qué es la Programacion Orientada a Objetos (POO)? ¿Y la arquitectura de Modelo Vista Controlador (MVC)? Dar los primeros pasos en la programación para Mac OS X, iPhone y iPad puede ser algo complicado si no sabes dónde buscar la información (y aún más difícil si no sabes inglés, imprescindible en el mundo de la informática). Hace año y medio, cuando yo comencé a aprender a programar para el iPhone (no tengáis prisa, sigo haciéndolo y me queda para mucho rato), el primer problema que tuve fue encontrar fuentes de información para dar los primeros pasos, así que he decido escribir esta serie de tutoriales para facilitar la tarea a aquellos que, como yo, quieran aprender a programar para el iPhone (extensible a Mac OS X y iPad). Tampoco esperéis ser unos maestros de Objective-C después de haber leído esta serie de tutoriales (que iré publicando cuando vaya teniendo tiempo para redactarlos), pues mis conocimientos son fruto del autodidactismo y seguramente no utilice los términos adecuados ni profundice del todo en los conceptos que trate. Sin embargo espero que os sirva para dar el primer paso y poder continuar después con textos mejor redactados, más exactos y más profundos.

En este serie de tutoriales voy a suponer que se tienen unos conocimientos básicos de programación, que se entiende el significado de términos como “código fuente”, “función” o “variable”. Cualquiera que haya programado antes en cualquier lenguaje de programación conocerá su significado. El único término nuevo que puede que no conozcan aquellos que sólo han programado en lenguajes interpretados (como PHP) es el de “compilar”. Para simplificar, podríamos decir que compilar un programa es traducir el código que nosotros escribimos en un código que la máquina pueda entender.

Ahora bien, queda diferenciar cuatro conceptos:

  • Objective-C: Es el lenguaje de programación que se suele usar en Mac OS X. Digo se suele usar porque también se pueden programar aplicaciones en C, C++, Objective-C++, etc.
  • Cocoa: Es un Framework, un conjunto de funciones que facilitan la tarea al programador. Tareas como modificar una cadena de caracteres, descargar archivos de Internet, gestionar matrices o la memoria se hacen mucho más sencillas con este Framework. De hecho programar en Objective-C sin usar Cocoa es algo poco usual y no lo veremos en este tutorial (yo, por ejemplo, no he programado nada en Objective-C sin tener vinculado Cocoa). Cocoa Touch es la versión de Cocoa para iPhone, iPod Touch y iPad.
  • Programación Orientada a Objetos: Es un paradigma de programación del que hablaremos más adelante. Objective-C es un lenguaje de Programación Orientada a Objetos. En Objective-C prácticamente todo es un objeto, cosa que veremos más adelante.
  • Modelo Vista y Controlador: Es una arquitectura en la que se separa la parte lógica de la aplicación de la interfaz y de los datos que se gestionan. Realmente no es imprescindible hacer uso de esta arquitectura, pero hacerlo es una buena idea, simplifica la tarea y hace las aplicación más fáciles de extender. En nuestros primeros pasos no haremos uso de esta arquitectura, pero a medida que vayamos avanzando iremos viendo en qué consiste y qué beneficios aporta.

Menú de la aplicación de Xcode

Menú Archivo

Menú Archivo

Plantillas del proyecto de Xcode

Plantillas del proyecto de Xcode

Dicho esto, pasemos a presentar a los sospechosos habituales. Cuando programemos en Mac OS X trabajeros con Xcode, el Entorno de Desarrollo Integrado de Apple. Xcode viene en los discos de instalación de Mac OS X, y se puede descargar de forma gratuita (previo registro) desde la web de Apple. Durante estos tutoriales usaremos como plantilla del proyecto la plantilla de aplicación para la línea de comandos, ya que así evitamos tener que preocuparnos de elementos más complejos como la interfaz gráfica de la aplicación. Crear un nuevo proyecto es sencillo: Basta con ir al menú File » New project… . Aparecerá una ventana en la que podremos seleccionar la plantilla para el proyecto que vamos a crear. En estos tutoriales elegiremos la plantilla Mac OS X » Application » Command Line Tool.

Nuestro primer proyecto Veremos una ventana como la que tenéis en la izquierda. En la parte izquierda de la ventana tenemos acceso a los archivos del proyecto. De los archivos que se pueden ver en la imagen, el que nos interesa ahora es NOMBREPROYECTO.m. Veréis un código como el siguiente:

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
 // insert code here...
 NSLog(@"Hello, World!");
 [pool drain];
 return 0;
}
Vayamos línea a línea. La primera línea importa el Framework Foundation en nuestra aplicación. El Framework Cocoa está compuesto por dos Frameworks diferentes: Foundation y Application Kit. Foundation incluye las funciones que trabajan en la trastienda sin que el usuario lo vea, pero que al desarrollador le vienen fenomenal. Por su parte, Application Kit se encarga de la parte visual de la aplicación (como comprenderéis, esto es una versión resumida de lo que realmente hacen, así que tampoco lo toméis al pie de la letra). Si os fijáis en la sintaxis, podéis ver tres partes: La almohadilla (#), los signos menor y mayor que (<>) y el nombre del Framework.

La almohadilla introduce instrucciones para el preprocesador. Las que más comúnmente se usan con #import y #define. #import incluye otros archivos y Frameworks en el archivo actual. #define permite declarar constantes. Las constantes sirven para definir un valor que es fijo en toda la aplicación, pero que si nos interesa cambiar, podemos hacerlo modificando una sóla línea. Imaginad, por ejemplo, que queremos definir nuestra edad. Si sólo la ponemos en una línea no hay ningún problema, pero ¿y si la incluímos en 5, 10, 200 ó 5000 líneas? Es una faena tener que ir buscando cada lugar en el que hemos puesto ese valor. Con las constantes basta con poner la constante en lugar de nuestra edad, y definir el valor de la constante con el valor de nuestra edad. Cuando queramos modificar el valor de nuestra edad, sólo lo cambiaremos una vez, en lugar de tantas veces como uso se haga de ella.

A la hora de importar archivos, hay dos tipos de archivos que podemos importar: Frameworks del sistema y otros archivos de nuestro proyecto. Cuando importamos Frameworks del sistema, usamos los signos mayor e igual que (<>). Si importamos archivos de nuestro proyecto, usamos comillas (“).

La siguiente línea define la función main. La función main es la función principal de la aplicación, la única función que siempre se ejecuta. La estructura de la función es la misma estructura que C, sin embargo en Objective-C la mayoría de las funciones (métodos) se definen con una sintaxis diferente, así que no me voy a parar a explicarla.

Centrémonos en el siguiente bloque:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
 // insert code here...
 NSLog(@"Hello, World!");
 [pool drain];
 return 0;
En este bloque vemos unas cuantas líneas curiosas. Vayamos a la primera:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Esta es la sintaxis para crear un objeto en Objective-C. El primer NSAutoreleasePool es la clase del objeto que vamos a crear. El asterisco (“*”) indica que a continuación se presenta un objeto (lo veremos más adelante). pool es el nombre de la variable (objeto) que estamos creando. La segunda parte del código: [[NSAutoreselasePool alloc] init], se trata de un mensaje enviado a una clase, que es a su vez el valor del objeto que estamos creando. Los mensajes se pueden enviar tanto a clases como a objetos, lo veremos más adelante, no os preocupéis.

A continuación vemos una línea que comienza con dos barras (//). Cuando una línea va introducida por dos barras, se trata de un comentario. Los comentarios se eliminan de la aplicación al compilarla: son sólo una ayuda al programador durante la programación, para saber qué hace cada cosa o para qué se usa una variable. Los comentarios también se pueden introducir con /* Comentario */.

// Con dos barras el comentario ocupa toda la línea
/* Con barra y asterisco es necesario terminar el comentario con asterisco barra, así que el comentario
aún no ha acabado en esta línea,
sino que acaba en esta otra */

La siguiente línea es la llamada a una función.

NSLog(@"Hello, World!");

Objective-C es un superconjunto de C, con lo cual comparte algunas características con el anterior. Esta forma de llamar a la función es típica de C. Las funciones tienen dos partes: La primera (NSLog en este caso) es el nombre de la función. La segunda, que se encuentra entre paréntesis (“()”), son los argumentos de la función. En este caso, el argumento es: @”Hello, World!”. Cuando unas comillas están precedidas por un arroba (@), sabemos que se trata de una cadena de texto, un objeto de clase NSString (lo trataremos más adelante). Tras los paréntesis encontramos un punto y coma (;). Esto indica el final de una instrucción (todas las instrucciones en C y Objective-C van sucedidas por un punto y coma (;), a excepción de aquellas instrucciones que son argumentos de funciones (como el @”Hello, World!”)  o de mensajes (lo veremos más adelante).

La función NSLog() muestra el texto que se le envía como argumento en la terminal. Durante el desarrollo de la aplicaciones es una función muy útil, como veréis a medida que avancemos en los tutoriales, para saber el valor de una variable en cada momento o para recibir un aviso cuando se ejecuta un método.

[pool drain];

Esta línea le envía el mensaje drain al objeto pool, creado anteriormente. Veremos más adelante todo esto, en otro tutorial de esta serie. A continuación vemos:

return 0;

Esta línea le devuelve el valor 0 al Sistema Operativo. La función main tiene que devolver un valor que indica si la aplicación se ha ejecutado correctamente o si ha encontrado errores durante su ejecución. El valor 0 indica que todo ha ido bien.

Nuestra primera aplicación ejecutándose

Nuestra primera aplicación ejecutándose

Para probar la aplicación hay que pulsar el botón Build and Run, o pulsar Comando + Enter. La aplicación se compilará y se ejecutará. Como la aplicación no tiene interfaz, se ejecutará sin ver nosotros nada. Para poder ver el texto enviado por nuestra aplicación (Hello, World!), tenemos que mostrar la consola (Menú Run » Console o Comando + Mayus + R). Veremos algo como la imagen de la izquierda.

Y esto es todo por este primer tutorial. En los próximos comenzaré a tratar la Programación Orientada a Objetos en Objective-C e introduciré los conceptos de clase, objeto y método.

5 Responses to Introducción a Objective-C: Nuestra primera aplicación

Buho ‐ 6/1/2011 22:40

Excelente Tutorial, estaré pendiente de los que vienen, sigue así esta buenísimo !

lisa ‐ 31/7/2011 22:15

:-S esta mi cara cuando leo todos estos tutoriales,el tuyo es el q mas he entendido,quisiera hacerte una pregunta,yo no se nada en absoluto de lenguaje de maquina ,no conozco el C,ni el C ++ en fin ninguno.quiero hacer una aplicacion con xcode,pero tengo entendido q algo de estos lenguajes debo saber,me aconsejas algo para aprender estos lenguajes q empieza desde 0 ,gracias

Si no sabes nada de C (ni de ningún otro lenguaje de programación), no entenderás ninguno de los tutoriales que he publicado sobre Objective-C.

Yo no soy ningún experto en C (aprendí lo necesario para poder aprender Objective-C), pero si no se tienen conceptos claros como bucles, condiciones, variables, funciones, etc, no se puede hacer nada.

No tengas prisa por hacer nada con Xcode sin saber antes al menos C (C++ no necesitas saber). Si tratas de avanzar demasiado rápido luego tendrás problemas y acabarás teniendo que rehacer todo lo que hayas hecho desde 0 (que por cierto, no serías la única a la que le pasa eso – yo mismo estoy ahora mismo reescribiendo desde 0 un proyecto que me superaba cuando publiqué la primera versión).

Por supuesto, puedes hacer algo a base de videotutoriales de Youtube, pero sin algo de base no sabrás realmente lo que estás haciendo y en cuanto avanzas un poco, si no sabes muy bien qué has hecho, te perderás con una facilidad pasmosa.

Para aprender Objective-C primero tienes que aprender C. Puedes aprender Objective-C sin saber C, pero necesitarás algún libro para muy principiantes, y si ya es difícil encontrar libros sobre Objective-C (y más aún en español), es aún más difícil encontrar un libro para recién llegados a la programación.

Libros sobre C encontrarás muchos, y tampoco es necesario que sepas mucho de C. Cuando llegues a los capítulos sobre memoria dinámica, ya puedes dejarlo, a partir de ahí la cosa cambia en Objective-C.

Sobre Objective-C no encontrarás mucho material en español. Hace dos años, cuando yo comencé a estudiarlo, no encontré absolutamente ningún libro sobre Objective-C. En cuanto me olvidé buscar en español y busqué en inglés comencé a encontrar más libros. Desde hará cosa de un año ya he visto en las librerías algún que otro libro sobre Objective-C y programación para Mac OS X, sin embargo el problema de centrarte en libros en español es que al tenerse que traducir siempre vas un paso por detrás, y puedes estar estudiando las APIs de iOS 3 cuando ya se está usando iOS 4 y está a punto de salir iOS 5. Lo mismo sucede con Mac OS X.

Dependiendo de para qué plataforma vayas a programar (iOS o Mac OS X) te interesará enfocarte en el SDK del iPhone o en las APIs de Mac OS X. Pero en cualquier caso necesitarás saber Objective-C. Yo aprendí Objective-C con «Learn Objective-C on the Macintosh». Además estos tutoriales los voy escribiendo siguiendo la estructura de ese libro (más que nada para no perder el hilo).

Una vez sepas Objective-C podrás programar aplicaciones que funcionarán en la terminal. Te faltará la parte gráfica del asunto. Para ello te recomiendo que busques un libro enfocado en la plataforma para la que vayas a desarrollar. No son las mismas clases las que se usan en iOS en y OS X.

También te recomendaría que durante un año hicieses prácticas y no tu proyecto definitivo. Yo nada más acabar de aprender Objective-C me metí a programar mi proyecto y ya me ves, aquí reescribiéndolo todo desde 0, que no me molesta – en realidad me gusta – pero veo como todo el trabajo que había hecho era realmente lamentable. Aunque también es reconfortante ver cómo salen las cosas un año después: mucho más estable, más rápido y más bonito que antes.

Así que resumiendo:

Hazte con un libro de C y aprende C (puedes dejarlo cuando llegues a la memoria dinámica).

Hazte con un libro de Objective-C y comienza con él después de aprender C.

Hazte con un libro sobre la plataforma para la que quieras programar.

Date un tiempo de prueba, desarrolla pequeños scripts sin grandes pretensiones, pero que funcionen perfectamente.

Por cierto, no lo había comentado antes, pero NO pagues por una membresía como desarrollador de Apple hasta que no quieras publicar una aplicación. El SDK del iPhone es gratuito y puedes descargarlo sin pagar nada, y el de Mac OS X también. Cuando pagas tienes acceso principalmente a la tienda de aplicaciones y a las betas. Paga los 99$ cuando tengas la aplicaciones lista, o como pronto, cuando hayas comenzado y quieras probar la aplicación en un dispositivo real y no en el simulador.

iLaLo ‐ 29/9/2011 5:34

Hola, antes que nada te felicito por tu trabajo y esfuerzo tanto en realizar la app como en escribir estos totorales, soy una persona a la que le encantaría programar para iPhone, lamentablemente no cuento con conocimientos de ningún tipo de programacion y buscando en internet encontré tu pagina web.

Bueno espero encontrar mas información y realmente poder cultivarme y poder comprender ampliamente el mundo de la programacion que, se que no es fácil y menos siendo autodidacta, nuevamente te felicito y espero pronto poder adquirir El juego que has desarrollado en apoyo a tu trabajo ya que me parece bueno a pesar de lo poco que he visto hasta ahora.

En horabuena te felicito y espero puedas colocar mas AppS como tutoriales.

Saludos cordiales.