Download - Tutorial de Objective C
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
Aprendiendo Objective C:
Estás a punto de empezar a aprender Objective C, el lenguaje utilizado por Apple y por los
desarrolladores de Apple para crear aplicaciones para iphone, ipad y para crear aplicaciones mac.
No es necesario tener experiencia previa para tomar el curso, pero si es necesario que prestes
atención a los detalles. Para tener un mayor entendimiento del curso te sugerimos que cada
lección sea estudiada por lo menos 2 veces, es usual que la segunda vez que estudias algo lo
comprendas mejor.
Hemos tratado de hacer el curso lo más sencillo para empezar.
Lección 1: Escribiendo un mensaje de salida
Es común ver en todos los lenguajes de programación la forma como imprimir un mensaje de
salida, en el caso de Objective C existe un comando llamado NSLog, el cual tiene la siguiente
sintaxis:
NSLog(“@ mensaje a mostrar”);
Ejemplo: Se desea mostrar un mensaje que contenga una bienvenida al curso de Objective C.
Desarrollo:
NSLog(“@Bienvenido al Curso de Objective C”);
Lección 2: Utilizando variables de tipo cadena
En esta oportunidad vamos a utilizar variables que nos permitan almacenar valores que en
Objective c son llamados objetos, el primer tipo de variable a utilizar es de tipo cadena o de tipo
string que en Objective C el tipo de variables que almacenan valores de tipo cadena es NSSTring.
Sintaxis:
NSString *nombrevariable=@”valor variable”;
Ejemplo: Crear una variable que almacene tu nombre.
Desarrollo:
NSString *minombre=@”LUIS ERNESTO CASTILLO ALFARO”;
Lección 3: Imprimiendo el valor de una variable:
En esta lección combinaremos lo aprendido en las 2 lecciones previas para mostrar en un mensaje
el valor de una variable de tipo cadena.
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
Ejemplo: Imprimir en un mensaje tu nombre que previamente debe de ser almacenado en una
variable de tipo NSString.
Desarrollo:
1- Declaramos la variable de tipo NSString que almacenará nuestro nombre
NSString *minombre=@”LUIS ERNESTO CASTILLO ALFARO”;
2- Imprimimos el valor de la variable *minombre
NSLog(minombre);
Lección 4: Imprimiendo mensajes de tipo cadena concatenando el valor de una variable
En esta lección veremos cómo se puede imprimir mensajes que contengan valores de variables
previamente definidas, para esto utilizaremos el comodín de Objective c “%@” que se usara
tantas veces como variables agreguemos en un mensaje de salida.
Ejemplo: Imprimir un mensaje que contenga un salido seguido de tu nombre almacenado en una
variable previamente.
Desarrollo:
1- Declarar la variable de tipo NSString que contendrá tu nombre:
NSString *minombre=@”LUIS ERNESTO CASTILLO ALFARO”;
2- Imprimimos el mensaje:
NSlog(@“Hola que tal %@”,minombre);
Tarea: Crear un mensaje que muestre los datos de tus nombres y apellidos almacenados en
sus respectivas variables de tipo NSString previamente.
Lección 5: Trabajando con valores numéricos
Cuando se trabaja con objetos numéricos en Objective c debemos de utilizar el tipo de variable
NSNumber y cuando declaramos una variable de tipo NSNumber su valor no va entre comillas
como ocurría con los valores de variables tipo NSString.
Sintaxis de declaración de variables tipo NSNumber:
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
NSNumber *nombrevariable=@valor numérico;
Ejercicio: Mostrar un mensaje que muestre tu edad previamente almacenado en una variable de
tipo NSNumber, utilizar placeholders.
Desarrollo:
1- Declarar la variable de tipo NSNumber que almacenará tu edad:
NSNumber *miedad=@34;
2- Imprimir el mensaje mostrando tu edad:
NSLog(@”Mi edad es %@”,miedad);
Lección 6: Creando una variable de tipo array y accediendo a sus elementos
Los arrays nos ayudan a almacenar objetos del mismo tipo en una misma variable. Si por ejemplo
deseamos almacenar valores de tipo cadena en un array lo haríamos de la siguiente manera:
Ejemplo: Crear un array que almacene una lista de ciudades de Colombia.
Desarrollo:
1- Definir la variable de tipo array y asignar sus objetos:
NSArray *ciucolochas=@[@”bogota,@”cali”,@”cartagena”,@”medellin”];
Se puede acceder a los elementos de aun array haciendo referencia a la posición del elemento -1 y
esto es el índice de cada elemento del array. Por ejemplo si se desea acceder al valor del tercer
elemento del array ciucolochas e imprimirlo en un mensaje de salida lo haríamos de la siguiente
forma:
Sintaxis:
NSLog(@”El segundo elemento de la lista es %@”,ciucolochas[2]);
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
Lección 7: Imprimiendo mensajes de enteros
Los objetos de tipo NSString manejan un mensaje length que retorna el número de caracteres
contenidos en el objeto de tipo NSString. El número que retorna el menaje length es de tipo
NSUInteger, si deseamos mostrar el número de caracteres de una variable de tipo NSString lo
podemos hacer con la siguiente sintaxis:
NSUInteger nombrevariable=[nombre variable de tipo NSString length];
Si se desea mostrar el valor de una variable de tipo NSInteger en un mensaje impreso usando
NSLog con un placeholder que tome el valor de dicha variable no se debe de usar el placeholder
%@, en su lugar utilizamos el placeholder %lu.
Ejemplo: Mostrar un mensaje que indique la cantidad de caracteres que tiene tu nombre.
Desarrollo:
1- Declaramos la variable de tipo NSString que contiene tu nombre:
NSString *tunombre=@”LUIS”;
2- Declaramos la variable de tipo NUInteger que contendrá la cantidad de caracteres de la
variable tunombre:
NUInteger longitudNombre= [tunombre length];
3- Imprimimos el mensaje que indica la cantidad de caracteres que tiene tu nombre:
NSLog(@”Tu nombre tiene %lu caracteres”,longitudnombre);
Lección 8: Operando con NSNumbers
En esta oportunidad vamos a ver cómo trabajar con objetos NSNumbers y como realizar simples
operaciones matemáticas con ellos. Imaginemos que tenemos 2 objetos almacenados en variables
de tipo NSNumber y deseamos multiplicarlos y el número resultante mostrarlo en un mensaje.
Para esto hacemos lo siguiente:
1- Declaramos las variables de tipo NSNumber:
NSNumber *numeroUno=@4;
NSNumber *numeroDos=@5;
Para obtener la multiplicación de ambos números se podría utilizar el operador * que en
algunos lenguajes de programación representa al signo de multiplicación, sin embargo en
Objective C lo que se debe hacer es convertir dichos objetos a objetos de tipo NSUInteger y al
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
ser de ese tipo ya se podrían multiplicar usando el operador *, para hacer dicha conversión
se debe de usar el mensaje unsignedIntegerValue.
2- Haciendo la conversión de los objetos tipo NSNumber al tipo NSUInteger:
NSUInteger numerounoEntero=[numeroUno unsignedIntegerValue];
NSUInteger numerodosEntero=[numeroDos unsignedIntegerValue];
3- Definiendo la variable de tipo NSUInteger que almacenara el resultado de la multiplicación
de los 2 números:
NSUInteger resultado=numerounoEntero * numeroDosEntero;
4- Imprimiento el resultado de la multiplicación de los 2 números:
NSLog(@”El resultado de multiplicar los 2 números es %lu”,resultado);
Lección 9: Uniendo objetos de tipo NSString
Cuando se trata de unir objetos de tipo NSString se podría pensar que se podría hacer algo como
lo siguiente:
NSString *cadenaFinal=@”cadena1”+@”cadena2”;
En Objective C existe una forma de cómo unir 2 objetos de tipo NSString con un método llamado
stringByAppendingString que toma un objeto de tipo NSString y lo concatena con el objeto
NSString que recibe el método stringByAppendingString.
Sintaxis:
[cadena1 stringByAppendingString:cadena2];
El método stringByAppendingString utiliza los 2 puntos indicando que necesita que se le indique
el parámetro que en este caso es el objeto de tipo NSString que recibirá dicho método.
Ejemplo: Mostrar un mensaje que concatene los valores de las variables que almacenen los datos
de tu nombre y de tu apellido.
Desarrollo:
1- Definimos las variables que almacenarán los datos de nombre y apellido:
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
NSString *nombre=@”LUIS”;
NSString *apellido=@”CASTILLO”;
2- Concatenamos las variables de tipo NSString:
NSString *nombreCompleto=[nombre stringByAppendingString:apellido];
3- Imprimiendo el nombre completo:
NSLog(@”Tu nombre completo es %@”, nombreCompleto);
Pero como podríamos hacer para que el mensaje mostrado no sea el del nombre seguido del
apellido, es decir con un espacio en blanco entre ellos, para esto seguiremos el siguiente
procedimiento:
a- Definimos las variables que almacenarán los datos de nombre y apellido:
NSString *nombre=@”LUIS”;
NSString *apellido=@”CASTILLO”;
b- Definimos la variable de tipo NSString que almacenará el nombre seguido del apellido
con un espacio en blanco entre ellos:
Como ya habíamos explicado para concatenar valores de objetos NSString usamos el
método stringByAppendingString y este a su vez puede ser usados múltiples veces según
la cantidad de objetos de tipo NSString a concatenar:
En primer lugar al espacio en blanco que habrá entre el nombre y el apellido recibirá el
método stringByAppendingString que lo unirá con el valor del objeto nombre:
Nombre stringByAppendingString:@” “
Luego a ese valor resultante lo debemos de concatenar con el valor de la variable
apellido:
[[Nombre stringByAppendingString:@” “] stringByAppendingString: apellido]
Este último resultado debe de ser almacenado en una variable de tipo NSString:
NSString *nombreCompleto=[[Nombre stringByAppendingString:@” “]
stringByAppendingString: apellido];
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
Finalmente mostramos el nombre completo en un mensaje:
NSLog(@”El nombre completo es %@”,nombreCompleto);
Lección 10: Inicializando objetos con un determinado valor
Al igual que en otros lenguajes de programación es común inicializar variables con un
determinado valor, es posible también asignarles el valor de una variable previamente
definida, por ejemplo podemos definir una variable que muestre el nombre de una
ciudad previamente almacenada en una variable de tipo NSString:
Desarrollo:
1- Definimos la variable que almacenará el nombre de la ciudad:
NSSTring *miCiudad=@”TRUJILLO”;
2- Definimos una nueva variable de tipo NSString que inicialmente almacene el valor de
la variable miCiudad:
NSString *demiCiudad=[[NSString alloc]initWithString: miCiudad];
Lección 11: Trabajando con estructuras condicionales
En Objective c también podemos trabajar con condicionales, sin embargo la forma en
que se declaran las estructuras condicionales difiere de otros lenguajes de
programación, la forma más simple de trabajar con condicionales en Objective c es con
un simple if y su estructura es la siguiente:
If(condición a cumplirse){
Instrucciones a ejecutarse de cumplirse la condición;
}
Ejemplo: Mostrar un mensaje que indique que debemos de vestir ropa abrigadora por
que el clima es frío.
Desarrollo:
1- Definir la variable que establece que el clima es frío, para esto vamos a hacer uso de
variables tipo BOOL y le asignaremos un valor YES.
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
BOOL climafrio=YES;
2- Establecemos la estructura condicional que incluya la condición a cumplir y las
instrucciones a ejecutar de cumplir la condición:
If(climafrio){
NSLog(@”Debes de vestir ropa abrigadora”);
}
Sin embargo también podemos establecer las instrucciones a ejecutar si la condición
de que el clima es frio no se cumpla y para esto utilizamos el operador de negación !.
Ejemplo: Teniendo en cuenta el caso anterior mostrar un mensaje que indique vistas
ropa delgada en caso de que el clima no se frío.
Desarrollo:
1- Establecemos el valor de la variable climafrio a NO para que se cumpla el
segundo grupo de instrucciones:
BOOL climafrio=NO;
2- Establecemos las estructuras condicionales para que ejecuten el grupo de
instrucciones correspondientes dependiendo de que si el clima es frio o no,
como se puede cumplir 1 condición de un grupo de 2 condicionales se debe de
establecer 2 estructuras condicionales y en este caso usaremos también la
instrucción else para el caso de que no se cumpla la primera condición se evalúe
la segunda y de cumplirse esta ejecute sus instrucciones:
If(climafrio){
NSLog(@”Debes de vestir ropa abrigadora”);
}else{
NSLog(@”Debes de vestir ropa delgada);
}
También podemos establecer las estructuras condicionales por separado usando
el operador de negación !:
If(climafrio){
NSLog(@”Debes de vestir ropa abrigadora”);
}
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
If(!climafrio){
NSLog(@”Debes de vestir ropa delgada);
}
Lección 11: Comparando cadenas
Para comparar valores de objetos tipo NSString se puede utilizar el método isEqualToString
cuya sintaxis es:
NSString isEqualToString: toanotherstring
Ejemplo: Mostrar un mensaje que indique el turno de trabajo que le corresponde a los meseros
de un restaurante según el nombre de mesero consultado:
Desarrollo:
1- Establecemos las estructuras condicionales para cada uno de los nombres de meseros a
comparar:
If(mesero isEqualToString: @”CARLOS”){
NSLog(@“Turno Mañana”);
}else if(mesero isEqualToString:@”JOSE”){
NSLog(@”Turno Tarde”);
}else{
NSLog(@”Turno Noche”)
}
Lección 12: Trabajando con estructuras repetitivas
En esta oportunidad vamos a ver cómo utilizar estructuras repetitivas cuando se debe de aplicar
las mismas instrucciones a un conjunto de objetos del mismo tipo, para este tipo de casos se hace
uso de la estructura repetitiva for.
Ejemplo: Mostrar la cantidad de caracteres de cada elemento de un arreglo.
Solución:
1- Definimos el arreglo:
NSArray *nombres=@[@”CLAUDIA”,@”CAROLINA”,@”CRISTINA”,@”CARLA”);
2- Definimos la estructura repetitiva:
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
for(NSString *nombre in nombres){
NSUInteger cantcar=[nombre length];
NSLog(@”El nombre %@ tiene %lu caracteres”,nombre,cantcar);
}
El resultado de sería:
El nombre CLAUDIA tiene 7 caracteres.
El nombre CAROLINA tiene 8 caracteres.
El nombre CRISTINA tiene 8 caracteres.
El nombre CARLA tiene 5 caracteres.
Lección 13: Trabajando con bloques:
En esta oportunidad vamos a ver cómo trabajar con bloques (funciones) en Objective c, los
bloques nos permiten ejecutar una serie de instrucciones de manera independiente de si
usáramos estructuras condicionales como es el caso del if, etc. Los bloques permiten tener
parámetros de entrada y según dichos parámetros o argumentos ejecutar ciertas instrucciones
con los mismos.
Ejemplo: Se desea crear un bloque que debe de ser usado para mostrar un mensaje que indique
cual es el nombre de un estudiante ingresado.
Desarrollo:
1- Establecer las instrucciones a ejecutar :
Lo que deseamos en principio es imprimir un mensaje según el nombre ingresado y para
esto usaremos el comando NSLog:
NSLog(@”El nombre del estudiante es %@”, nomestudiante);
Previamente debemos de tener declarada la variable nomestudiante que obviamente
tiene que ser de tipo NSString:
NSString *nomestudiante;
NSLog(@”El nombre del estudiante es %@”, nomestudiante);
Si colocamos estas instrucciones en un bloque sería algo como:
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
^ (NSString *nomestudiante){
NSLog(@”El nombre del estudiante es %@”, nomestudiante);
};
2- Establecemos la función que usará el conjunto de instrucciones definidas previamente:
void(^NombreEstudiante)(NSString *)=^ (NSString *nomestudiante){
NSLog(@”El nombre del estudiante es %@”, nomestudiante);
};
3- Ahora usamos la función NombreEstudiante con algunos nombres como por ejemplo:
Carlos, Juan:
NombreEstudiante(@”Carlos”);
NombreEstudiante(@”Juan”);
Lección 14: Reemplazando una cadena por otra
En esta oportunidad vamos a explicar cómo se puede realizar el cambio de una cadena por
otra. Ejemplo: Es común que en todos los idiomas del mundo existan ciertas jergas, sim
embargo para documentos formales o cuando se desea enviar un mensaje, carta a otra
persona dice y nos hace quedar bien el escribir apropiadamente, en nuestro lenguaje se suele
utilizar la jerga “pes” cuando se quiere decir “pues”, el ejercicio consiste en realizar un
programa que permita realizar el cambio de la jerga pes por la palabra pues en un texto
cuantas veces aparezca dicha jerga.
Solución:
1- Declarar variables que contengan el texto a corregir, la jerga y la palabra correcta:
NSSTring *texto=@”En la actualidad existen muchos programas que no son
culturales pes, deberían trasmitir programas educativos pes”;
NSSTring *jerga=@”pes”;
NSSTring *palcorrecta=@”pues”;
2- Hacer uso de la function que nos permita reemplazar la jerga por la palabra correcta, dicha
función es la función stringByReplacingOccurrencesOfString:withString, esta función
necesita de 2 parámetros, su sintaxis es:
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
Texto StringByReplacingOccurrencesOfString: textoabuscar withString:
textoquereemplezaraaltextobuscado
3- Definir la variable que contendrá el texto corregido:
NSSTring *textocorregido=[texto StringByReplacingOccurrencesOfString: jerga withString:
palcorrecta];
4- Imprimiendo el resultado de la corrección del texto:
NSLog(@"%@", textocorregido);
Tutorial 15: Ahora vamos a ver como evaluar múltiples valores y dependiendo del valor
evaluado realizar una serie de instrucciones, para esto debemos de utilizar switch cuya sintaxis
es:
switch (variable) {
case variable tiene el valor de: {
instrucciones a realizar
break;
}
case variable tiene el valor de: {
instrucciones a realizar
break;
}
}
Dónde:
Variable: es la variable a evualuar y depediendo de su valor se realizaran una serie de
instrucciones. Dicha variable puede tener múltiples valores.
Ejemplo: Dependiendo del día de la semana indicar que curso le toca a un estudiante
universitario de la Escuela de Ingeniería de Sistemas de una determinada Universidad.
Solución:
1- En primer lugar necesitamos de una función de Objective C que nos permite obtener el día
de la semana actual, dicha función es getDayOfWeek() , ahora vamos a crear una variable
de tipo NSInteger que reciba el resultado de dicha función:
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
NSInteger diasemana=getDayOfWeek();
2- Evaluamos el valor de la variable diasemana usando switch y dependiendo del valor de
dicha variable ejecutaremos una serie de instrucciones:
switch (diasemana) {
case 1: {
NSLog(@”Hoy tienes Introducción a Sistemas”);
break;
}
case 2: {
NSLog(@”Hoy tienes Algoritmos”);
break;
}
case 3: {
NSLog(@”Hoy tienes Base de Datos”);
break;
}
case 4: {
NSLog(@”Hoy tienes Programación I”);
break;
}
case 5: {
NSLog(@”Hoy tienes Redes”);
break;
}
case 6: {
NSLog(@”Hoy tienes Inteligencia Artificial”);
break;
}
}
Se usa la instrucción break para indicar que una vez que se encuentra que el valor de la variable
diasemana evaluado es igual al día actual de la semana ya no se deben de realizar más
búsquedas.
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
Lección 16: Trabajando con clases
Al igual que en otros lenguajes de programación en Objective C también existe el concepto
de clases y objetos, si llevamos este concepto al mundo real podremos decir que una clase
viene a ser todo lo que podemos ver en el universo como por ejemplo una persona, un
mueble, etc. Cada una de estas clases tienen características propias que los diferencian
como podría ser color de ojos, color de cabello, raza para la clase persona y en
programación dichas características se conocen como propiedades, pero que hay de las
acciones que una persona podría realizar como hablar, caminar, etc, a esas acciones en
programación se les conoce como métodos.
Por ejemplo podríamos definir una clase persona usando un diccionario en Objective c:
NSDictionary *persona = @{
@"Nombre": @"Luis Castillo",
@"Edad": @34,
@"Pais": @"Peru"
};
En este caso se han definido para la clase persona 3 propiedades: Nombre, Edad y País,
pero que hay de sus métodos, como se definen o crean los mismos.
Definiendo una clase: Para definir una clase en primer lugar debemos de asignarle un
nombre a la misma, es por convención que el nombre de una clase empiece por una letra
mayúscula como por ejemplo para nuestra clase sería:
Persona
Definiendo la interface de una clase:
Una interface se puede entender como una lista de propiedades y métodos que posee una
clase, esto lo podemos comparar con la lista de comidas disponibles en el menú de un
restaurante, la sintaxis para definir una interface de una clase es:
@interface Persona
@end
Sin embargo por el momento no hemos definido ninguna propiedad o ningún método
para la clase Persona, en Objective C las clases derivan de una clase raíz llamada NSObject
y al ser clases derivadas de dicha clase raíz heredan todos sus métodos y para esto
tenemos la siguiente sintaxis:
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
@interface Persona : NSObject
@end
Definiendo las propiedades de una clase: Las propiedades de una clase vienen a ser sus
características o atributos, estas propiedades deben de ser declaradas dentro de la declaración de
la interface de la clase y al definirlas deben de ir precedidas de @property, claro que una
propiedad al igual que una variable necesitan de un tipo y de un nombre. Ejemplo: Asignar las
propiedades de Nombre, Edad y País a nuestra clase Persona:
Solución:
Para las propiedades requeridas les asignaremos un tipo NSString:
@property NSString *Nombre;
@property NSString *Pais;
La declaración final sería:
@interface Persona : NSObject
@property NSString *Nombre;
@property NSString *Pais;
@end
Implementando una clase:
Implementar una clase significa invocarla y hacer uso de la misma, en Objective C la
implementación de una clase va separada de su interface y son organizadas en archivos diferentes,
se suele usar la convención de un archivo con extensión .h para definir la interfaz de una clase y un
archivo con extensión .m para la implementación de una clase. Para implementar una clase se usa
la siguiente sintaxis:
@implementation Persona
@end
Como mencioné antes la organización de archivos tanto para la interface como para la
implementación de una clase, al implementar la clase se tiene que hacer uso del comando
#import, esto hará que se busque el archivo con extensión .h y lo copie en el archivo con extensión
.m. Entonces en el archivo con extensión .m se tendría:
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
#import Persona.h
@implementation Persona
@end
Al implementar una clase las propiedades de la misma son implementadas automáticamente, esto
no sucede con los métodos de la clase.
Lección 17: Creando métodos para una clase
En la lección anterior vimos el uso y definición de propiedades de una clase, en esta oportunidad
vamos a ver el uso de métodos los cuales le permiten tener una mejor funcionalidad a una clase,
permiten que un objeto responda a mensajes especializados. Imaginemos que para la clase
Persona tenemos un objeto de la misma que pueda responden al mensaje de hablar, su sintaxis
sería algo como:
Persona *Luis = [[Persona alloc] init];
[Luis hablar];
Para enviar el mensaje hablar al objeto Luis debemos de declarar el método hablar en nuestro
archivo header (archivo con extensión .h), cuya sintaxis sería la siguiente:
@interface Persona : NSObject
// list of properties
-(void)hablar;
@end
Como vemos los métodos de una clase también se declaran en su interface y estos son declarados
empezando por un guión medio (-), seguidos del tipo del valor retornado por el método entre
paréntesis, en la declaración anterior tenemos que dice (void), esto significa que el método no
retorna nada.
Implementando métodos de una clase:
Anteriormente vimos la declaración de un método en la clase Persona, pero el mismo no realiza
ninguna acción, para que los métodos de una clase puedan realizar acciones necesitan ser
implementados en un archivo con extensión .m. En dicho archivo se pueden indicar las acciones
que realizará el método declarado en el archivo con extensión.h. Para nuestro caso podemos
indicar que el método hablar muestre un mensaje de saludo:
En el archivo con extensión .m se tiene:
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
#import "Persona.h"
@implementation Persona
- (void) hablar;
{
NSLog(@"Hola mi nombre es:Luis");
}
@end
Como vemos en el archivo con extensión .m se ha implementado el método hablar el cual tiene
similar declaración que cuando declaramos el método inicialmente en la interface de la clase
Persona, sin embargo como se trata de implementar el método se agrega entre llaves las
instrucciones a realizar cada vez que el mensaje hablar sea enviado a un objeto de la clase persona
que en este caso es un texto de saludo.
Ejecutando el método:
Ahora que ya tenemos implementado el método hablar de la clase persona lo podemos ejecutar,
como el método corresponde a una clase y los objetos de una clase heredan sus propiedades y
métodos crearemos un objeto de la clase persona y le aplicaremos el método hablar.
Pasos a seguir:
1- Importamos el archivo Persona.h
#import "Persona.h"
2- Creamos un objeto de la clase Persona con el nombre Luis:
Persona *Luis = [[Persona alloc] init];
3- Enviamos el mensaje hablar al objeto Luis:
[Luis hablar];
4- Obtenemos el resultado de invocar el método hablar:
Hola mi nombre es: Luis
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
Lección 18: Métodos que retornan resultados:
Hasta ahora hemos visto métodos de clases que no retornan resultados, ahora veremos
como retornar resultados en métodos de una clase, esto varia la forma de la sintaxis tanto
al momento de declarar el método (archivo con extensión .h) como al momento de
implementarlo(archivo con extensión .m). Veamos cómo se declararía e implementaría el
método hablar de la clase persona si este devolviera un resultado:
Pasos a seguir:
1- Vimos que cuando se declara un método se inicia por un guión medio seguido por el
tipo de valor que retorna entre paréntesis, en nuestro caso retornará un valor de tipo
cadena o NSString:
-(NSString *)hablar;
Esto es el archivo con extensión .h
Al implementar el método en el archivo con extensión .m también se debe de declarar
el tipo de resultado retornado:
#import Persona.h
@Implentation Persona
-(NSString *)hablar;
NSString *mensaje=@”Mi nombre es :Luis”;
return mensaje;
@end
Ahora veremos como pasar el resultado del método hablar de la clase persona a una variable:
Pasos a seguir:
1- Importamos la clase Persona:
#import Persona.h
2- Creamos el objeto Luis que hereda de la clase persona:
Persona *Luis= [[Persona alloc] init];
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
3- Declaramos una variable de tipo NSString que recibirá el resultado del método
hablar de la clase persona:
NSString *mensaje=[Luis hablar];
4- Imprimimos el valor de la variable mensaje:
NSLog(@”El mensaje es:%@”,mensaje);
Lección 19: Declarando métodos con argumentos:
En esta oportunidad veremos como declarar métodos que consideren argumentos, como
sabemos los argumentos vienen a ser datos o valores sobres los cuales se realizan ciertas
acciones, dependiendo de los argumentos ingresados se obtendrá un determinado
resultado.
Al agregar argumentos a un método de una clase su sintaxis varía tanto en su declaración
como en su implementación:
a- En su declaración:
Persona.h
@inteface Persona:NSObject
-void(NSSTring *)hablar:(NSString *)saludo;
@end
Donde:
Los 2 puntos “:” significa que lo siguiente es la declaración de un argumento
(NSString *) significa que el argumento del método es de tipo cadena
saludo es el nombre del argumento de tipo NSString
b- En su implementación:
#import Persona.h
@implementation Persona
-(NSString *)hablar:(NSString *)saludo;
{
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
NSString *elsaludo =[NSString stringWithFormat:@"Yo:%@ digo: %@", self.nombre,
saludo];
return elsaludo;
}
@end
Aquí notamos que como parte del mensaje a enviar encontramos self.nombre eso hace
referencia a la propiedad nombre de cada objeto heredado de la clase Persona.
Haciendo uso del argumento del método hablar:
Pasos a seguir:
1- Importar la clase Persona:
#import Persona.h
2- Crear un objeto que herede de la clase Persona:
Persona *Luis=[[Persona alloc]init];
3- Inicializamos la propiedad nombre del objeto Luis:
Luis.nombre=@”Luis Ernesto”;
4- Imprimimos algunos mensajes para el método hablar del objeto Luis:
NSLog([Luis hablar:@”Hola”]);
NSLog([Luis hablar:@”que tal”]);
NSLog([Luis hablar:@”como te vá”]);
5- Los resultados serían:
Yo: Luis Ernesto digo: Hola
Yo: Luis Ernesto digo: que tal
Yo: Luis Ernesto digo: como te vá
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
Lección 19: Declarando propiedades de una clase como de solo lectura:
A las propiedades de una clase se les puede declarar como de solo lectura y así
evitar que por medio de código externo se les pueda modificar su valor como por
ejemplo a la propiedad nombre de la clase Persona se le puede asignar un valor
con el siguiente código:
Persona *Luis=[Persona alloc[init]];
Luis.nombre=@”Luis Ernesto”;
Si deseamos que una propiedad de una clase no pueda ser modificada por código
externo debemos de declararla de la siguiente forma:
@interface NombreClase : NSObject
@property (readonly) tipovalor *nombrepropiedad;
@end
Para la propiedad nombre de la clase persona sería:
@interface Persona : NSObject
@property (readonly) NSString *nombre;
@end
Una vez declarada una propiedad de una clase como de solo lectura esta no puede ser
modificada al implementarla cuando por ejemplo esta es parte de un método de una clase,
imaginemos que tenemos el método cambiarnombre de la clase Persona que permita
hacer el cambio del valor de la propiedad nombre:
-void()cambiarnombre:(NSString *)nuevonombre;
Las instrucciones que tendría el método de la clase Persona al implementarlo
sería:
@implementation Persona
-(void)cambiarnombre:(NSString *)nuevonombre;
{
self.nombre=nuevonombre;
}
@end
Esta declaración no sería correcta porque estamos intentando cambiar el valor de
una propiedad de solo lectura.
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro
Hay una forma en que las propiedades de una clase que son solo lectura puedan ser
modificadas por métodos de la clase a la que pertenecen dichas propiedades, cada una de
estas propiedades tienen una variable interna que tiene el mismo nombre de ellas
precedidas por el guión bajo (_), para la propiedad nombre de la clase persona sería:
-nombre
Ahora modificando el método cambiarnombre para modificar el valor de la propiedad
nombre tendríamos:
@implementation Persona
-(void)cambiarnombre:(NSString *)nuevonombre;
{
_nombre=nuevonombre;
}
@end
Ahora si podemos utilizar el método cambiarnombre para modificar el nombre de
un objeto de la clase Persona:
Persona *Luis=[Persona alloc[init]];
NSString *nuevonombre=[Luis cambiarnombre:@”Luis Antonio”];
Hay una forma en que se puede inicializar valores de propiedades de un objeto
perteneciente a una clase, es decir cada vez que se declare un objeto de una clase de por
sí ya tendrá definida sus propiedades, para hacer esto al implementar una cl ase por
ejemplo la clase persona se puede escribir el siguiente código:
@implementation Persona
- (Persona *) init;
{
_pais = @"Perú";
return [super init];
}
@end
Con este código estamos estableciendo que cada objeto de la clase Persona tendrá el valor
de Perú para su propiedad país.
Tutorial Objective C
Autor: Ing. Luis Ernesto Castillo Alfaro