martes, 6 de diciembre de 2011

Introducción a la programación con Objetive-C

Por más que me he resistido a incluir un articulo donde haga una intro del lenguaje Objetive-C, no ha sido posible, espero que les sea tan útil como lo ha sido para mí.

La idea es hacer un repaso de las principales estructuras y lineamientos, para que estemos en la misma frecuencia, cuando empecemos con el código en el próximo articulo.

No es mi intensión enseñarles el lenguaje, pero si espero que al menos tengan conocimientos básicos de los conceptos de la programación orientada a objetos.

Si lo que desean es profundizar más en el tema, deben visitar esta dirección en Apple Developer .

Qué es?

Es simplemente otro lenguaje más basado en el estándar de ANSI C, extiende su definición para posibilitar el manejo sofisticado de clases, métodos y otro tipo de extensiones que promueven de forma dinámica la adopción de patrones y principios de desarrollo. (Bueno, no es tan simple ;-))

Si ya han trabajado con alguno de sus primos entonces se sentirán a gusto con la sintaxis.

 

Archivos

Al trabajar con este lenguaje será necesario usar tres diferentes tipos de archivos que forman parte de su estructura física.

.h Archivos de cabecera: contiene clase, tipos, funciones y declaración de constantes.

.m Archivos fuente: Contiene código de Objetive-C, y pueden contener código de C.

.mm Archivos fuente de C++: Solo se emplean cuando estamos incluyendo código de C++.

Clases

Las clases se emplean para ofrecer el mecanismo de encapsulamiento, de los datos y las funciones que actúan con estos. Cuando se crea una instancia de la clase, el objeto resultante se almacena en memoria, conteniendo su propia copia de las variables y de los apuntadores a los métodos de la clase.

Para definir una clase en Objetive-C se requieren dos archivos separados, uno con la extensión .h la interface y otro con la extensión .m que contiene la implementación. En el archivo .h colocaremos la declaración de la clase y definiremos las variables y métodos asociados a ella; en la implementación colocaremos el código para los métodos de la clase.

Interface

Las clases heredan de la clase base NSObject. La definición de una clase empieza con la directiva de compilador @interface y termina con @end. La declaración de los miembros de la clase se lleva a cabo dentro de un bloque de código, que se delimita por llaves {}. Cada línea debe terminar con un punto y coma.

intro1

La declaración de variables puede ser tipificada (strongly typed) o no (weackly). Cuando creamos variables tipificadas se debe usar el tipo (id); cuando no sabemos de antemano el tipo de la variable esta puede no ser tipificada, lo que agrega mucha flexibilidad y dinamismo a nuestro código.

intro2

Métodos y mensajes

En este lenguaje es posible crear dos tipos de métodos: de instancia o de clase. Los de instancia, son aquellos que su alcance y visibilidad están limitados a una instancia. O sea se requiere una instancia para poder acceder a ellos. Los de clase no requieren la creación de una instancia para poder acceder a ellos.

La declaración de un método se forma por las siguientes partes:
  1. Identificador de tipo.
  2. Tipo de retorno.
  3. Una o más palabras clave que sirven como firma.
  4. Nombre de Parámetros con su tipo.

intro3

Descripción: El signo de menos (-) indica que se trata de un método de instancia. La presencia de los dos puntos (:) indica el uso de parámetros.

El nombre del método se forma por la concatenación de su firma y los parámetros (insertObject:atIndex:).

Cuando queremos llamar a un método debemos enviarle un mensaje. El mensaje se forma de la firma del mismo y los parámetros que requiere. El mensaje que encierra entre corchetes [].

intro4

Descripción: Dentro de los corchetes encontraremos a la izquierda al objeto que recibe el mensaje, a la derecha se encuentra el mensaje. En este ejemplo estamos enviando un mensaje (llamando un método) de la variable myArray.

Usando esta sintaxis podemos anidar el envío de mensajes (llamado de métodos), de tal forma que el resultado de un mensaje sea parámetro del siguiente:

intro5

Métodos de acceso.

Los métodos de acceso son métodos de instancia que estables u obtienen el valor de una propiedad de un objeto.

Para acceder a ellos podemos emplear la sintaxis de punto.

intro6

Si usáramos la declaración de mensajes se vería de esta manera:

[myAppObject setTheArray:aNewArray];

Métodos de Clase

Estos métodos nos permiten accede a un método sin tener que crear una instancia de la clase, estos métodos se declaran usando un signo de mas (+) en vez del signo de menos (-) que se emplea en los métodos de instancia.

Por lo general se emplean como métodos Factory, para crear instancias de clases.

 

Implementación

La implementación se lleva a cabo dentro de dos directivas del compilador: @implementation y @end. Dentro de ellas se encuentran las mismas declaraciones de métodos que realizamos en la interface.

intro7

 

Declaracion de propiedades

La declaración de las propiedades se lleva a cabo dentro de la interface, empiezan con la directiva del compilador @property.

intro8

La directiva precede el tipo y el nombre de la propiedad.

La implementación de estas propiedades se realiza en el archivo .m y se realiza usando la directiva de compilador @synthesize, la cual le indica al compilador que cree los métodos necesarios.

intro9

 

Cadenas de texto

A pesar que es posible usar las cadenas de texto tradicionales entre comillas, lo mas usual es hacerlo usando el objeto NSString. Esto se hace por que el objeto nos ofrece todo lo que se requiere para tratar con cadenas.

Para simplificar este proceso, se emplea un atajo, el cual consiste en usar un símbolo de arroba como predecesor de la cadena.

intro10

 

Protocolos

Un protocolo no es una clase y sus métodos pueden ser implementados por cualquier clase; solo define interfaces que otras clases serán responsables de implementar. Son usados frecuentemente para especificar interfaces de objetos delegados.

Por ejemplo: Si queremos recibir notificaciones del estado de una aplicación, no es necesario heredar o extender la clase UIApplication. Simplemente es necesario especificar que nuestra clase adopta el protocolo, de esa forma podrá responder apropiadamente.

La sintaxis es muy simple, solo es necesario colocar el nombre del protocolo entre los signos menor y mayor que (<>) después del nombre de la clase de la cual hereda nuestro objeto.

intro11

No es necesario declarar los métodos que implementaremos.

Para declarar un protocolo se emplea la directiva de compilador @protocol que termina con @end.

intro12

 

Comentario final

Sobre la marcha se presentaran situaciones que requerirán que se explique con más detalle algún concepto relacionado con el lenguaje, dado el caso, les presentare un resumen y un link para poder profundizar.

Frases de manzanas: “If you want to make an apple pie from scratch, you must first create the universe.”  Dr. Carl Sagan

Derechos de autor: La información y los gráficos fueron extraídos de la página de principiantes de Apple Developer.

No hay comentarios:

Publicar un comentario