viernes, 26 de noviembre de 2010

Programa aplicaciones en xcode Objective - Ipad - Iphone

 
5b415a0a74765006f122f979f487f751 
Cada día son más los programadores que dan el salto y presentan sus aplicaciones en la App Store, ya sea con laintención de darse a conocer como desarrollador o con fines comerciales, la tienda de aplicaciones para Iphone y Ipad ha supuesto un trampolín para todos aquellos locos del código, con grandes ideas pero a veces sin losmedios para realizar un gran lanzamiento comercial. 

A lo largo de las próximas semanas quiero abordar la creación de una aplicación para el teléfono de Apple desde los cimientos, desde los conocimientos más básicos como puedan ser la creación de distintos tipos de variables en Objective-C hasta la creación de la más compleja de las aplicaciones. 

He de decir que yo aún estoy introduciéndome en el mundillo, y que en algunos casos estaré aprendiendo al mismo ritmo que vosotros, pero creo que es un buen método de aprendizaje para todos, ya que nos surgirán dudas que intentaremos resolver entre todos, por lo que ruego que si entre nuestros lectores se encuentra alguien que tenga más conocimientos en el campo, tenga paciencia con un servidor y si puede nos ayude en la medida de la posible. 

¿y pr donde empiezo? 
Lo primero que debemos tener en cuenta es que para desarrollar aplicaciones para al Iphone, es necesario tener un Mac, ya que el programa que se utiliza para el desarrollo de estas solamente corre sobre el sistema operativo Mac OS (vale también nos puede valer un Hackintosh). 

A lo largo de estos posts utilizaremos principalmente la herramienta de desarrollo Xcode, que proporciona Apple, junto con el SDK (Software Development Kit) del Iphone, lo podemos descargar de la página de desarrolladores de Apple para lo cual será necesario nuestra identificación mac (la misma que utilizamos en la App store). Apple proporciona un programa de asistencia al desarrollador por un precio de 99 $ al año, el cual posteriormente nos permitirá subir nuestras aplicaciones a la App Store, pero sinceramente, si estas empezando en este mundillo no merece la pena hasta que tengas los conocimientos suficientes como para desarrollar una aplicación en condiciones. 

Xcode por así decirlo será nuestra navaja suiza en el desarrollo de aplicaciones para el Iphone. Incorporá tanto nuestro compilador, nuestra herramienta para creación de interfaces y un simulador de Iphone en el cual podremos comprobar el aspecto y funcionamiento de nuestra aplicación. 

A pesar de que Xcode admite diversos lenguajes de programación como pueda ser Java, a lo largo de estos posts utilizaremos el lenguaje de programación Objective-C, ya que es este el que permite una mayor versatilidad en la programación para el Iphone que es la que nos ocupa en este caso. 

Objective-C es un superconjunto del lenguaje de programación C, es un código primordialmente orientado a objetos que a diferencia de la programación tradicional, permite programar de una manera más próxima a como nos expresaríamos coloquialmente. 

La interfaz de Xcode 

Una vez hayamos descargado Xcode y lo hayamos instalado, nos encontraremos con la siguiente pantalla. 

 

En ella podemos seleccionar: 

- Abrir un proyecto reciente. 

- Crear un nuevo proyecto. 

- Hacer un tour por Xcode 

- Conectar con el servicio para desarrolladores de Apple. 

Cuando seleccionamos un nuevo proyecto nos aparecerán las distintas plantillas que tenemos disponibles en nuestro ordenador tanto para sistema operativo Mac OS como para el iOS de nuestros Iphone. Como de momento estamos haciendo nuestra primera incursión en el lenguaje de programación Objective-C, seleccionaremos una aplicación en línea de comandos para Mac Os, más concretamente del tipo Foundation 

 

Una vez hemos seleccionado la plantilla selecionaremos un nombre para nuestro proyecto y una ruta donde se guardarán todos los archivos relacionados con ese proyecto, posteriormente se nos abrirá la interfaz de Xcode 

 

Seleccionamos prueba1.m (o como hayas llamado a tú programa) y nos aparecerá en la parte inferior el código correspondiente a ese fichero. 

 

El cual debe ser similar al 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;

}
 

Probaremos a hacer funcionar este programa, no te preocupes si no entiendes nada de lo que pone, mi primercometido es que hagas funcionar tu primer programa en Objective-C, para ello, pulsaremos en el botón Built and Run en la parte superior de la ventana. Una vez realizado esto y una vez haya aparecido la palabra Suceed en la parte inferior derecha de la ventana, debemos pulsar en el icono de terminal que tenemos encima de nuestro código. 
 

Si todo ha salido como debiera aparecerá una ventana similar a esta 


Comprendiendo nuestro primer programa en Objective-C
5b415a0a74765006f122f979f487f751


Este es el segundo tutoria para aprender a hacer tus propias aplicaciones para iPhone, si te perdiste el primer artículo, puedes encontrarlo aqui.
Ahora que ya estamos familiarizados con como compilar y ejecutar un programa, vamos a pasar a comprender como funciona este.

// First program example

#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;

}

Una de las particularidades que tiene la programación en Objective-C, es que es distintivo escribir en mayúsculas o minúsculas, es decir, que un comando no tiene el mismo funcionamiento dependiendo de cómo lo escribamos con mayúsculas o minúsculas (o incluso puede no funcionar al escribirlo de forma distinta) por lo que debemosrespetar estas cuando escribamos un programa.

La primera línea del programa:

// First program example

Introduce un comentario, estos nos ayudarán a aportar datos respecto a las funciones del programa que aparecerán a continuación, lo cual resulta muy útil cuando queramos hacer futuras modificaciones en nuestro programa, recordándonos porque realizamos ciertas cosas de es manera, o incluso para ayudar a otros posibles desarrolladores cuando accedan al código de este.

Existen dos formas de introducir comentarios en nuestro programa, introduciendo dos barras (//) y el texto que queremos introducir a continuación en una sola línea, o por otro lado introducir los caracteres /*…..*/ introduciendo entre medias el texto que queramos comentar, en cuyo caso podríamos utilizar varias líneas de comentario.

/*Esto es una línea de comentario

Bienvenidos a Estudioiphone….

Curso de desarrollo de aplicaciones Iphone-Objective-C*/

La siguiente línea:

#import <Foundation/Foundation.h>

Foundation.h es un archivo de sistema, con el comando #import damos la orden de incluir el contenido de ese archivo en nuestro programa. Este archivo se importa porque contiene la información de las clases y funciones que se utilizarán posteriormente en el programa.

int main (int argc, const char * argv[])

Main es un nombre especial que nos indica realmente donde se inicia el programa. La palabra reservada int, indica el tipo de valor que devuelve main. De momento ignoraremos los comandos que aparecen entre paréntesis.

Ahora que ya hemos identificado main debemos comienza lo que realmente queremos que haga nuestro programa, lo cual debe aparecer entre corchetes {…}

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

Es una sentencia que reserva un espacio en memoria para nuestro programa, hablaremos también de esto másadelante.

La siguiente línea invoca la rutina NSLog, el parámetro que se le pasa debe ir acompañado de @ y dobles comillas, a este parámetro se le conoce como constante NSString.

La rutina NSLog es una función de la librería Objective-C cuya función es mostrar el parámetro que se le pasa, acompañado de la fecha y hora de ejecución, el nombre del programa y otros números.

Todas las sentencias que se escriben en Objective-C deben finalizar con ;

Una vez finalizado el cometido del programa, se debe liberar la memoria que hemos reservado previamente con [pool drain];

La última línea de comando return 0; indica la devolución del código 0 en caso de que nuestro programa haya finalizado correctamente.

Finalmente finalizamos cerrando nuestro programa con }.

Como posible fórmula para practicar propongo escribir varias líneas como las de este programa en distintas líneas sabiendo que el código de retorno de carro es n.




Este es el tercer tutorial para aprender a hacer tus propias aplicaciones para iPhone
Como vimos en la última entrega de este curso, el comando NSLog nos sirve para mostrar frases a través delterminal, pero este comando no sirve únicamente para esto, NSLog también nos permite mostrar el resultado de operaciones aritméticas.

#import <Foundation/Foundation.h>

int main (int argc, const char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

int sum;

sum = 50 + 25;

NSLog (@”The sum of 50 and 25 is %i”, sum);

pool drain];

return 0;

}

La primera línea de comando dentro de main después de reservar el espacio de memoria con NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];, declara una variable de tipo Integer , todas las variables del programa se deben definir antes de utilizarlas, estas especifican al compilador como se deben usar en el programa. El compilador necesita esta información para generar las instrucciones correspondientes al almacenamiento y devolución de los valores correspondientes a estas variables. Existen distintos tipos de variables que veremos másadelante.

La variable sum almacena el resultado de la suma de dos valores (los cuales son también de tipo int) 50 y 25.

sum = 50 + 25;

El comando NSLog tiene ahora dos argumentos entre paréntesis separados por comas, el primer argumento es siempre la cadena de caracteres que se quiere mostrar, si se quiere mostrar el valor de una variable acompañado de esa cadena de caracteres se debe utilizar un carácter especial reconocido por el comando NSLog, este es el % el cual va acompañado por el identificador de tipo de variable en este caso la i que le indica que es una variable integer. Cuando el comando NSLog encuentra el carácter especial %i este es substituido por el valor del argumento que esta detrás de la coma.

NSLog (@”The sum of 50 and 25 is %i”, sum);

EJERCICIO: Al igual que en el ejemplo anterior hemos almacenado en la variable sum el resultado de la suma de dos constantes, propongo como ejercicio modificar el programa para mostrar a través de pantalla la suma de dos variables.

Clases, objetos y métodos, la base de la programación orientada a objetos
5b415a0a74765006f122f979f487f751
Este es el cuarto tutorial para aprender a hacer tus propias aplicaciones para iPhone, si te perdiste algún artículo, los tienes aqui.

En el post de hoy trataremos quizás el concepto más importante de la programación en Objective-C, es por lo tanto fundamental comprender esto para nuestros futuros desarrollos. Intentaré por lo tanto utilizar una terminología y ejemplos lo más sencillos posibles.

¿Qué es un objeto?

Un objeto es una cosa, pensemos en la programación orientada a objetos como una serie de acciones que queremos realizar con esa cosa.

Consideremos una cosa de la vida cotidiana, por ejemplo nuestro coche, el cual tiene diversas características como pueda ser el lugar de fabricación, el número de bastidor que lo hace único e identifica a ese coche…

En el lenguaje de programación orientado a objetos tu coche es una instancia de un vehículo, continuando con la terminología, vehículo es la clase a partir de la cual esta instancia fue creada, de tal modo que cada vez que se fabrica un coche nuevo, una instancia de la clase vehículo es creada, y cada instancia de vehículo esta referenciada a un objeto.

Tu coche puede tener determinadas características como puede ser el color, el tipo de coche… y además puedes realizar determinadas acciones con él, conducirlo, echarle gasolina, lavarlo…al igual que estas acciones se pueden realizar con cualquier otro coche.

Instancias y métodos

Una ocurrencia única de una clase de denomina instancia y las acciones que puede realizar esta se denominan métodos, en determinados casos los métodos se pueden aplicar a una instancia o a la clase en sí. Por ejemplo, lavar el coche se aplica a una instancia, pero también se puede aplicar al resto de instancias de la clase vehículo, por lo tanto se trata de un método de clase. Ahora bien supongamos dos coches de la clase vehículo los cuales han salido de la misma cadena de montaje y son exactamente iguales. Pasado un tiempo desde su entrega a sus correspondientes propietarios cada uno de ellos adquiere unas características propias de cada uno, por ejemplo uno puede tener un arañazo y el otro haber hecho muchos kilómetros por lo tanto cada objeto contiene no sólo suinformación inicial, sino que además contiene información propia la cual puede cambiar dinámicamente.

Aplicar un método a un objeto puede variar a su estado. Si tu método por ejemplo es rellenar el depósito, después de que este se aplique, habrán variado las características de ese objeto.

El concepto clave en este caso es que un objeto es una representación única de una clase el cual contiene información (datos) privados de ese objeto los cuales se pueden acceder y manipular mediante métodos.

La sintáxis para aplicar un método en Objetive-C es:

[ ClaseOInstancia metodo ];

Escribiendo entre corchetes primero el nombre de la clase u objeto y después el método a aplicar, cuando a una clase u objeto se le aplica un método, se dice que se le esta enviando un mensaje, por lo que otra forma de ver la sintáxis es:

[receptor mensaje];

Volvamos al ejemplo de nuestro coche, cuando vamos a cómpralo lo primero que debemos hacer es pedirlo a la fábrica.

Tucoche = [Coche nuevo]

Mandamos un mensaje a la clase coche, y lo almacenamos en la variable Tucoche, a partir de entonces esta variable se puede utilizar para referirnos a tu instancia de coche, a partir de entonces todos los métodos que apliquemos a la variable como puedan ser [Tucoche conducirlo]: [Tucoche lavarlo]; [Tucoche leercuentakilómetros]* se tratarán de métodos de instancia.

* En este caso se trata de un método que nos devuelve información.

Trabajando con clases
5b415a0a74765006f122f979f487f751
Este es el quinto tutorial para aprender a hacer tus propias aplicaciones para iPhone, si te perdiste algún artículo, los tienes aqui.

Hoy vamos a realizar nuestro primer programa trabajando con clases y métodos. Supongamos que tenemos queescribir un programa para trabajar con fracciones, sin los conocimientos necesarios sobre clases, nuestro programa sería algo similar a esto:

// Programa simple para trabajar con fracciones

#import <Foundation/Foundation.h>

int main (int argc, char *argv[])

{

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

int numerador = 1;

int denominador = 3;

NSLog (@”La fracción es %i/%i”, numerador, denominador);

[pool drain];

return 0;

}

En este programa la fracción esta definida por el numerador y denominador, variables a las cuales se les asigna losvalores 1 y 3, este es el mayor problema precisamente de implementar nuestro código de esta manera, ya que si necesitaramos almacenar múltiples variables deberíamos definir un par de variables para cada fracción. Mediante el uso de clases podemos definir una fracción como una entidad y referirnos únicamente a un denominador y a un numerador.

// Programa para trabajar con fracciones – trabajando con clases

#import <Foundation/Foundation.h>

// —–INTERFACE —–

@interface Fraccion: NSObject

{

int numerador;

int denominador;

}

-(void) imprimir

-(void) setNumerador: int n;

-(void) setDenominador: int d;

@end

//—-IMPLEMENTACION—–

@implementation Fraccion

-(void) imprimir

{

NSLog(@”%i/%i, numerador, denominador);

}

-(void) setNumerador: int n

{

numerador = n;

}

-(void) setDenominador: int d

{

denominador = d;

}

@end

//—-PROGRAMA—-

int main (int argc, char *argv[])

{

NSAutoreleasePool * pool = [NSAutoreleasePool alloc] init];

Fraccion *miFraccion;

// Creamos una instancia de una fracción

miFraccion = [Fraccion alloc];

miFraccion = [Fraccion init];

//Fijamos el valor de la fraccion a 1/3

[miFraccion setNumerador: 1];

[miFraccion setDenominador: 3];

//Mostramos la fraccion usando el metodo imprimir

[miFraccion imprimir];

[miFraccion release];

[pool drain];

return 0;

}

El programa que hemos escrito esta perfectamente diferenciado en tres secciones:

- Interface

- Implementación

- Programa

La interface describe la clase , sus datos y sus métodos, la implementación contiene el código de los métodos a utilizar en la clase y finalmente el programa contiene el código para el propósito final del programa en sí mismo.

Un programa cualquiera de Objective-C contiene estas tres secciones las cuales normalmente suelen estar cada una en un fichero especifico pero para una mejor comprensión en nuestro ejemplo implementaremos las tres en un solo fichero.

En próximas entregas explicaremos más a fondo cada una de estas secciones.

La Interfaz
5b415a0a74765006f122f979f487f751

Este es el sexto tutorial para aprender a hacer tus propias aplicaciones para iPhone, si te perdiste algún artículo, los tienes aqui.

Cuando definimos una nueva clase debemos seguir una serie de pasos. El primero de ellos es indicarle al compilador de Objective-C la clase madre a la que pertenece la clase que acabamos de crear. Posteriormente debemos declarar las variables que almacenarán los datos que se utilizarán en nuestra clase, estas variables se denominan variables de instancia. Finalmente se deben definir las acciones o métodos que se realizarán a través de nuestra clase. Los tres pasos anteriores vienen recogidos por la interface de nuestro programa. Por normageneral la interface de nuestro programa debería ser similar a esto:

@interface NuestraClase: ClaseMadre

{

VariablesInstancia;

}

DeclaracionMetodos;

@end

Por convención el nombre de las clases suele comenzar con letra mayúscula, de esta manera facilitamos el entendimiento del programa cuando lo revisa una persona diferente a quien ha escrito el programa. Debemos recordar que en Objective-C existe distinción entre mayúsculas y minúsculas.

Volvamos al programa que escribimos en la anterior entrega de nuestro pequeño curso de Objective-C, másconcretamente a su interface:

// —–INTERFACE —–

@interface Fraccion: NSObject

{

int numerador;

int denominador;

}

-(void) imprimir;

-(void) setNumerador: int n;

-(void) setDenominador: int d;

@end

El nombre de nuestra clase es Fraccion y su clase madre es NSObject. La clase NSObject esta definida en el archivo NSObject.h y de esta manera se incluye automáticamente en nuestro programa.

En VariablesInstancia especificamos el tipo de datos que se almacenarán en Fraccion, esta parte como se puedeobservar se enmarca dentro de sus propios corchetes, en este caso declaramos que la clase fracción almacena dosvariables de tipo entero (int) que se llaman numerador y denominador.

Cada vez que creamos un nuevo objeto perteneciente a nuestra clase, se generan un nuevo grupo de variables de modo que cada objeto tiene su propio numerador y denominador.

Para poder definir nuestra fracción (establecer el numerador y denominador) debemos declarar unos métodos, ya que de otra forma no podríamos hacerlo al no tener acceso directo a las variables de instancia, además de esto definimos otro método más llamado imprimir que nos muestra el valor de la fracción.

-(void) imprimir;

El signo – indica que es un método de instancia, en caso de que fuera acompañado de un signo + se trataría de un método de clase los cuales permiten operaciones en la propia clase como puede ser la creación de una nueva instancia.

Cuando se declara una método se le debe indicar a Objective-C si este devuelve o no un valor, y en caso afirmativo se debe indicar el tipo de dato que devuelve. Esto se indicando entre paréntesis el tipo de valor que devuelve, por ejemplo:

-(int) devolverNumerador;

Si el método no devuelve ningún valor se debe indicar con la palabra void entre paréntesis:

-(void) imprimir;

Esto ejecuta un método llamado imprimir el cual no devuelve ningún valor, por lo que no necesita ejecutar ninguna línea de comando de tipo return.

Los otros dos métodos de nuestro programa declarados en la interface son :

-(void) setNumerador: int n;

-(void) setDenominador: int d;

Estos dos métodos no devuelven ningún valor, sin embargo toman el valor de dos variables de tipo entero a las cuales se las ha denominado n y d y que se utilizaran en la definición del método. Hay que tener en cuenta que el nombre de la variable que se le pasa a cada método debe ir después de los dos puntos que acompañan al nombre del método, indicándole de esta forma al compilador de Objective-C la espera de argumentos.



El Programa
5b415a0a74765006f122f979f487f751

Este es el septimo tutorial para aprender a hacer tus propias aplicaciones para iPhone, si te perdiste algún artículo, los tienes aqui. 
El programa contiene el código que resuelve el caso que nos habíamos propuesto. Este código puede estar repartido en varios archivos, en uno de estos archivos debe estar la sentencia main la cual nos indica el inicio de la ejecución.

//—-PROGRAMA—-

int main (int argc, char *argv[])

{

NSAutoreleasePool * pool = [NSAutoreleasePool alloc] init];

Fraccion *miFraccion;

// Creamos una instancia de una fracción

miFraccion = [Fraccion alloc];

miFraccion = [miFraccion init];

//Fijamos el valor de la fraccion a 1/3

[miFraccion setNumerador: 1];

[miFraccion setDenominador: 3];

//Mostramos la fraccion usando el metodo imprimir

[miFraccion imprimir];

[miFraccion release];

[pool drain];

return 0;

}

Dentro de main definimos la variable miFraccion con la línea:

Fraccion *miFraccion;

De esta manera indicamos que miFraccion es un objeto de tipo Fraccion, es decir miFraccion se usa para almacenardatos de la clase Fraccion. El asterisco se usa como puntero o referencia desde miFraccion a Fraccion.

Una vez hemos definido el objeto para almacenar una fraccion, debemos crear una mediante el código:

miFraccion = [Fraccion alloc];

De esta manera se reserva el espacio de memoria necesario para una nueva fracción, enviamos de este modo unmensaje a la clase Fraccion, es decir le estamos aplicando a la clase Fraccion el método alloc, pero…¿de dónde viene este método? Este método esta declarado en la clase madre, pero esto lo veremos con más detalle más adelante.

Cuando enviamos el mensaje alloc a una clase, esta nos devuelve una nueva instancia de esa clase, y en nuestro caso en particular lo almacenamos en la variable miFraccion, el valor devuelto siempre es 0 lo cual indica que la instancia se ha creado satisfactoriamente.

Posteriormente para poder utilizar la instancia adecuadamente, esta debe ser inicializada mediante el comando:

miFraccion = [miFraccion init];

De nuevo estamos usando un método el cual no hemos escrito nosotros mismos. El método init incializa la instancia de una clase, es por esto que el mensaje se le envía a miFraccion (instancia) en lugar de a Fraccion (clase).

A menudo en Objective-C estos dos métodos se combinan de la siguiente manera:

Fraccion *miFraccion = [[Fraccion alloc] init];

Una vez hemos realizado esto ya podemos asignar valores a nuestra fracción. Esto es precisamente lo que hacemos en las líneas:

[miFraccion setNumerador: 1];

[miFraccion setDenominador: 3];

La primera línea el mensaje setNumerador: a miFraccion suministrándole el argumento 1 pasándole de este modo el control al método setNumerador el cual habíamos definido en para nuestra clase Fraccion. El sistema sabe que este método pertenece a esta clase porque sabe que miFraccion es una instancia de la clase Fraccion.

Dentro del método setNumerador el valor 1 que le hemos pasado es almacenado en la variable n. La única línea de este método almacena ese valor en la variable de instancia numerador, de esta manera hemos establecido el numerador de miFraccion a 1.

De igual modo invocamos al método setDenominador pasando el argumento 3 el cual asignamos a la variable ddel método y se almacena en la variable de instancia denominador. Ya tenemos miFraccion preparada para mostrarlos resultados:

[miFraccion imprimir];

Este línea invocaría el método imprimir, mediante el cual mostramos las variables de instancia numerador y denominador separadas por /.

Posteriormente debemos liberar la memoria almacenada mediante la línea:

[miFraccion release];

Esta es una parte muy importante de la programación ya que cada vez que creamos un objeto estamos reservando memoria del sistema es por esto que una vez hemos finalizado las tareas que teníamos propuestas esta se debe liberar. Aunque es verdad que el sistema la liberará una vez nuestro programa haya finalizado, cuando empecemos a programar aplicaciones más complejas podemos estar utilizando cientos o miles de objetos por lo que esto puede ralentizar nuestro sistema así que una buena costumbre a tener en cuenta.

Como ejercicio propongo escribir el código para una nueva fracción. Como pista diré que tanto la interfaz como la implementación no varía. En un par de días publicaré la solución.

Aprende a programar tus propias aplicaciones para el Iphone (VIII), Solución programa con clases para imprimirdos fracciones
5b415a0a74765006f122f979f487f751
Este es el noveno tutorial para aprender a hacer tus propias aplicaciones para iPhone, si te perdiste algún artículo, los tienes aqui.

Bueno pues como comenté en la última entrega del curso, os presento la solución para generar distintas fracciones utilizando clases:

// Programa para trabajar con fracciones – trabajando con clases

#import <Foundation/Foundation.h>

// —–INTERFACE —–

@interface Fraccion: NSObject

{

int numerador;

int denominador;

}

-(void) imprimir

-(void) setNumerador: int n;

-(void) setDenominador: int d;

@end

//—-IMPLEMENTACION—–

@implementation Fraccion

-(void) imprimir

{

NSLog(@”%i/%i, numerador, denominador);

}

-(void) setNumerador: int n

{

numerador = n;

}

-(void) setDenominador: int d

{

denominador = d;

}

@end

//—-PROGRAMA—-

int main (int argc, char *argv[])

{

NSAutoreleasePool * pool = [NSAutoreleasePool alloc] init];

Fraccion *miFraccion;

// Creamos una instancia de una fracción

Fraccion *miFraccion1 = [Fraccion alloc] init];

Fraccion *miFraccion2 = [Fraccion alloc] init];

//Fijamos el valor de la primera fraccion

[miFraccion1 setNumerador: 1];

[miFraccion1 setDenominador: 3];

//Fijamos el valor de la segunda fraccion

[miFraccion2 setNumerador: 2];

[miFraccion2 setDenominador: 7];

NSLog (@”La primera fracción es:”);

[miFraccion1 imprimir];

NSLog (@”La segunda fracción es:”);

[miFraccion2 imprimir];

[miFraccion1 release];

[miFraccion2 release];

[pool drain];

return 0;

}

Accediendo a variables de instancia y datosencapsulados
5b415a0a74765006f122f979f487f751Este es el decimo tutorial para aprender a hacer tus propias aplicaciones para iPhone, si te perdiste algún artículo, los tienes aqui.


Hasta ahora hemos visto métodos que pueden acceder a variables de instancia directamente por su nombre, de hecho un método de instancia siempre puede acceder directamente a sus variables de instancia, sin embargo un método de clase no puede porque solamente trata con la propia clase. Pero… ¿qué pasaría si quisiéramos acceder a nuestras variables de instancia desde algún otro sitio?, por ejemplo desde nuestra rutina main, no podemos hacerlo directamente porque para ella están escondidas, a esto se le llaman datos encapsulados, lo que permite a la persona que define las clases ampliar y modificar estas sin preocuparse de que los usuarios de la clase utilicen sus detalles internos, proporcionando de este modo una capa de aislamiento entre el programador y el desarrollador de la clase.

Podemos acceder a las variables de instancia de la clase mediante métodos especiales que nos devuelvan susvalores, por ejemplo escribiendo dos métodos que se llamen numerador y denominador correspondientes a las variables de instancia de Fraccion que es el receptor del mensaje. El resultado correspondiente es el valor entero que se almacena en la variable de instancia y el cual devolvemos:

Esta sería su declaración:

–(int) numerador;

–(int) denominador;

Y esta su definición:

–(int) numerador;

{

return numerador;

}

–(int) denominator;

{

return denominador;

}

Como se puede observar el nombre de los métodos y el de las variables de instancia es el mismo, no hay ningúnproblema por esto, de hecho suele ser la práctica habitual.

A continuación tenemos un programa con el que podemos testear nuestros dos nuevos métodos

// Programa para acceder a variables de instancia

#import <Foundation/Foundation.h>

//—INTERFACE—

@interface Fraccion : NSObject

{

int numerador;

int denominador;

}

-(void) imprimir;

-(void) setNumerador: (int) n;

-(void) setDenominador: (int) d;

-(int) numerador;

-(int) denominador;

@end

//—IMPLEMENTACION—

@implementation Fraccion

-(void) imprimir

{

NSLog(@”%i/%i”, numerador, denominador);

}

-(void) setNumerador: (int) n

{

numerador = n;

}

-(void) setDenominador: (int) d

{

denominador = d;

}

-(int) numerador

{

return numerador;

}

-(int) denominador

{

return denominador;

}

@end

//—PROGRAMA—

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

Fraccion *miFraccion = [[Fraccion alloc] init];

//Fijar fracción a 1/3

[miFraccion setNumerador: 1];

[miFraccion setDenominador: 3];

//Mostrar la fracción usando nuestros dos nuevos métodos

NSLog(@”El valor de mi fracción es: %i/%i”, [miFraccion numerador], [miFraccion denominador]);

[miFraccion release];

[pool drain];

return 0;

}

Como podemos observar la diferencia radica con lo que hemos estado haciendo hasta ahora, en que utilizamos los valores que devuelven los nuevos métodos definidos como argumentos del comando NSLog para mostrar el valor de miFraccion.

NSLog(@”El valor de mi fracción es: %i/%i”, [miFraccion numerador], [miFraccion denominador]);


No hay comentarios:

Publicar un comentario

468x60