sábado, 15 de octubre de 2011

Programación orientada a objetos con Objective-C

Historia

Primero hablemos un poco de la historia de objective-c,este lenguaje fue creado por Brad Cox y la corporación StepStone en 1980. Después en 1988 fue comprado y cual fue usado por la compañía NeXT creada por Steve Jobs como su principal lenguaje de programación y que hoy es utilizado para el desarrollo de aplicaciones para MacOSX e iOS en todas sus plataformas incluyendo el iPhone y el iPad.

El lenguaje objective-c que es basado en C y con unos aditivos de elementos del lenguaje smalltalk a su sintaxis como lo son los mensajes, que tiene elementos de programación orientada a objetos. El principio de objective-c era hacer crear un lenguaje orientado a objetos, es por eso que que incluye la palabra objective.


Ahora hablemos de herramientas para Objective-C


-Xcode(Solo en Mac)

-GNUstep(Puede ser usado en Ubuntu)




Como instalar las herramientas

Xcode puede ser descargado desde la pagina oficial de apple.

http://developer.apple.com/xcode/

Una vez descargado, lo abrimos y veremos un archivo con extension .mpkg:


Una vez abierto nos aparecera esta ventana.



Damos "Continue" a todo, siempre y cuando estes deacuerdo a los terminos.Despues llegaremos a tipo de instalacion aqui les recomiendo hacer una "check mark" a todo ya que posiblemente los necesites mas adelante y tendras que buscar el paquete y instalarlo lo cual te ocasionaria algunos contratiempos mas adelante.


Ya lo que sigue es muy simple ya que solo te pregunta cosas basicas.

O una manera mas sencilla seria instalarlo directamente de la aplicacion "App Store".


GNUStep para instalarlo necesitaremos primero instalar los paquetes de ambiente de usuario para la ejecución de aplicaciones basadas en este compilador, para hacer esto abriremos nuestra terminal y teclearemos lo siguiente:

              *Tomen en cuenta que tomara mucho tiempo ya que instalara bastantes paquetes.

Ahora instalaremos los paquetes para desarrollo de GNUStep y el compilador desde la terminal:


Ahora que lo tenemos instalado veremos como se definen las clases,metodos,atributos,herencia y como es el polimorfismo.

Primero veremos como se compone una clase completa en objective-c, en objective-c una clase se divide en dos los cuales tienen como extension .h(header o interface) y .m(implementation).Lo que los diferencia uno del otro es que en .h es donde declararas los atributos y metodos que vas a usar, y donde usas la extension .m es donde estara todo el codigo de los metodos.A continuacion se vera un ejemplo.

HelloWorld.h


Cuando es una extension .h lo que significa que sera el archivo header o interface una vez de puesto esto "@interface HelloWorld : NSObject" estamos diciendo que este es archivo header o interface de la clase HelloWorld.Estoy seguro que notaron algo muy particular que es el NSObject bueno despues de aver puesto el nombre de nuestra clase dos puntos y luego la clase padre, siempre hay una clase padre por ejemplo si la clase perro  
heredara de la clase animal seria Perro : Animal pero si no encontramos una clase en particular eligimos NSObject por defecto ya que hereda unas cosas muy particulares.Luego de ver esto notaron que dentro de los corchetes hay un atributo declara y fuera de ello unos metodos.

Dentro de los corchetes se declaran los atributos que seran usados, y fuera de los corchetes estan declarados
los metodos los cuales pueden tener este simbolo "-" o "+" de los cuales el signo negativo significa que esos metodos se pueden usar despues de haber creado dicho objeto  y cuando usamos el signo positivo es para hacer operaciones sencillas como lo son los gets, aclarando que estos se usan antes de haber creado el objeto.

Ahora veremos HelloWorld.m


Al inicio debemos de hacer un import de nuestro header " #import "HelloWorld.h"   " de aqui tomara de referencia que metodos usaremos.Luego veremos esto "@implementation HelloWorld" lo que estamos diciendo es que este archivo es el implementation de la clase HelloWorld.Despues de eso colocamos nuestro codigo, NSLog es para hacer impresiones de datos.


Despues para hacerlo funcionar tenemos que tener un main.m aclarando que la extension .m no significa que sera un archivo implementation.



Para poder entrar a nuestra clase HelloWorld debemos de hacer un import del header.Para crear un objeto es muy sencillo usando punteros "HelloWorld* miObjeto = [[HelloWorld alloc] init]; " como podrán notar asigne memoria para con la palabra clave "alloc" después los inicializo las propiedades del objeto con la palabra clave "init".

Para llamar a un metodo se hace los siguiente [ (nombre del objeto) (nombre del metodo)] como lo podrán ver en algunos metodos que declare en el header están siendo usados aqui.

Para librar la memoria que esta usando el objeto hacemos esto [(nombre del objeto) release] donde release es la palabra clave para liberar la memoria.

Esto es nuestra impresión:


Una vez entendido esto haremos ahora explicaremos lo que son los atributos públicos, privados y protegidos.

Este ejemplo lo tome de esta pagina:http://otierney.net/objective-c.html


Para declarar atributos públicos tenemos que poner estas palabras clave "@public" antes de declarar el atributo que queremos hacer publico eso tambien sucede con los atributos públicos y privados por las palabras clave"@private" y "@protected".


Ahora usando Polimorfismo usaremos como ejemplo una estación de radio y donde simularemos un radio que esta cambiando a dicha estacion:

Esta sera nuestro header de la clase RadioStation :


Aqui lo mas incomodo de ver es el metodo que esta declarado bueno este metodo es el contructor de nuestro objeto de los cuales la id es para identificar al objeto.Una vez llegando a esto "initWithName" veremos que esto es lo que inicializa siempre un contructor empieza usando estas palabras claves en objective-c seguido del primer parametro que queremos tomar donde se tomaran multiples parametros como lo son el nombre y la frecuencia.Los parametros siempre van de esta manera [(metodo) : (parametro)].

Este sera nuestro implementation de la clase RadioStation :



Aqui hay algo de dolor de cabeza donde veremos que en el metodo contructor veremos que esta usando self = [super init]; osea inicializo el objeto donde después valida si se hizo dicha acción, una vez validado instancia las variables,el metodo description tomara los atributos que fueron instanciados y los imprimira.El metodo dealloc es para librar memoria.

Este es nuestro main el cual lo llamaremos RadioSimulation.m


Aqui se creo un objeto NSMutableDictionary que se llama "stations" el cual como su nombre lo dice es para guardar como si fuera un diccionario cierto conjunto de parametros o palabras como lo veran a continuacion donde se guarda dicho objeto y con una palabra clave para definir esto se puede ver en el ejemplo esto "[stations setObject:newStation forKey:@"WRS"]; despues de hacer eso se libero memoria, ya que esos objetos ya fueron guardados en dicho diccionario y ya no nos servian,luego se imprimieron con referencia con su palabra clave que fueron guardados usando esto palabra clave "objectForKey: " despues se libero dicho diccionario.

Esta es la impresión de pantalla.



Links de referencia:

La mayor parte fue hecho con practica y ilustre lo que entendi leyendo este libro Objective-C for Absolute Beginners de Gary Bennett, Brad Lees, Mitchell Fisher.Tome algunas definiciones del mismo libro ya que me gustaron mas de las que tenia en la web.

1 comentario: