Your SlideShare is downloading. ×
Ios.s2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Ios.s2

494
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
494
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript

    • 1. 2 - OBJECTIVE-CCurso de desarrollo de aplicaciones móviles para iPhone y iPad endika.gutierrez@urbegi.com alex.rayon@urbegi.com Urbegi Learning Contents
    • 2. OBJECTIVE-C• Objective-C es el lenguaje empleado por apple para todas sus plataformas. OS X e iOS• Es un lenguaje orientado a objetos• Basado en C. De hecho es un superconjunto de este • Compatible con librerias de C• Sintaxis inspirada en Smalltalk
    • 3. OBJECTIVE-C 2• Data de principios de los 80 • Uno de los primeros lenguajes orientados a objetos• Adoptado por Steve Jobs para su uso en el sistema operativo NeXTStep • Posteriormente dio lugar a OS X • Todavía se conserva el prefijo ‘NS’ en muchas de las clases del sistema
    • 4. OBJECTIVE-C 3• Es un lenguaje de programación muy verboso • Existen métodos que pueden llegar a ocupar varias lineas• Es muy raro el uso de excepciones aunque existen• Pese a ser compatible con C difiere mucho en su sintaxis• Es un lenguaje de Tipado dinámico • El comportamiento se decide en la fase de ejecución y no en la de compilación
    • 5. SINTAXIS DE OBJECTIVE-C• En Objective-C no se llaman funciones • Se pasan mensajes entre objetos• [objeto mensaje]; • Equivalente en Java a• objeto.mensaje();
    • 6. SINTAXIS DE OBJECTIVE-C 2• [objeto mensaje]; • Los mensajes van entre [] • Se pueden anidar llamadas siempre que estas vayan entre corchetes: • [[objeto mensaje] otroMensaje]; • El método a ejecutar se resuelve en tiempo de ejecución
    • 7. SINTAXIS DE OBJECTIVE-C 3• Los parametros quedan intercalados• [objeto mensaje:param1 otroParam:param2]; • Equivalente en Java a• objeto.mensaje(param1, param2);
    • 8. SINTAXIS DE OBJECTIVE-C 4• También se pueden anidar llamadas en los parametros • [objeto mensaje:[usuario nombre] otroParam:[lista objectAtIndex:0]];• Equivalente en Java a• objeto.mensaje(usuario.nombre(), lista[0]);• En Objective-C se suelen generar llamadas a funciones muy verbosas
    • 9. SINTAXIS DE OBJECTIVE-C 5• El receptor del mensaje puede ser nil • Equivalente a null en Java • Es posible mandar un mensaje a nil sin que se produzca errores ni NullPointerException • Estas llamadas devuelven 0 ó nil ó NO• ¡Elpaso de un mensaje a un objeto que no pueda responderlo dará una excepción!
    • 10. TIPOS BÁSICOS• Los objetos de Objective-C siempre se manejan con punteros • El tipo genérico para cualquier objeto es id • Equivalente a void* en C/C++
    • 11. TIPOS BÁSICOS 2• Los tipos básicos son compartidos con C• int, float, doble, long...• Además incluye nuevos tipos • Los valores booleanos son del tipo BOOL • Pueden tomar los valores YES y NO
    • 12. TIPOS BÁSICOS 3• self representa a la instancia actual • Similar a this en Java o en C++• super representa la clase padre de la actual • Similar a super de Java
    • 13. TIPOS BÁSICOS 4• Todos los objetos en Objective-C heredan de la clase NSObject • Similar a la clase Object de Java
    • 14. TIPOS BÁSICOS 5• Objective-C posee clases para las estructuras básicas de datos • NSString y NSMutableString para Cadenas de texto • NSArray y NSMutableArray para Listas • NSDictionary y NSMutableDictionary para Mapas• Están diferenciados los objetos mutables de los inmutables
    • 15. CADENAS DE TEXTO• NSString y NSMutableString manipulan cadenas de texto • Laprimera de ellas no se puede modificar el contenido. La segunda sí. • Las cadenas de texto se pueden definir con @”texto” • Para diferenciarlas de las cadenas de C ”texto” • Ejemplo: NSString *texto = @”un texto”;
    • 16. DEFINICIÓN DE CLASES• Interfaz e implementación separados en dos ficheros• Como en C++ • .h para la interfaz • .m para la implementación
    • 17. DEFINICIÓN DE CLASES• Sintaxis de definición de clases• Ficheros .h @interface Clase : Superclase ...definición... @end
    • 18. DEFINICIÓN DE CLASES• Sintaxis de implementación de clases• Ficheros .m @implementation Clase ...implementación... @end
    • 19. DEFINICIÓN DE CLASES• Los métodos de clase se definen así: • - (ClaseRetorno *)metodoConParametro:(ClaseParam1 *)param1 parametro2:(ClaseParam2 *)param2 otroParametro:(ClaseParam3 *)param3;• Elsímbolo - antes del método indica que es un método de instancia• Elsímbolo + antes del método indica que es un método de clase
    • 20. REFERENCIAS A CLASES EXTERNAS• Se incluyen cabeceras con #import •A diferencia de los #include de C evita que una misma cabecera se incluya dos veces• Laimplementación de la clase deberá importar la interfaz de la misma• Lainterfaz de la clase debará importar las clases que se vayan a necesitar. Cómo mínimo la clase padre.
    • 21. VARIABLES DE OBJETO• Definidas en la interfaz de la clase entre {} @interface Clase : Superclase { int _variable1; float _variable2; NSArray *_unaLista; } @end
    • 22. VARIABLES DE OBJETO• Normalmente las variables de instancia llevan un _ por delante para diferenciarlas de las variables locales @interface Clase : Superclase { int _variable1; float _variable2; NSArray *_unaLista; } @end
    • 23. EJEMPLO PERSONA.H#import <Foundation/Foundation.h> // incluye la definición delos objetos básicos@interface Persona : NSObject { NSString *_nombre; // atributos NSString *_apellido; int _edad; float _altura; NSArray *_habilidades;}- (void)saluda;@end
    • 24. EJEMPLO PERSONA.M#import “Persona.h” // incluye la interfaz@implementation Persona- (void)saluda{ NSLog(@”Hola, me llamo %@.”, _nombre); // NSLog funcionacomo printf. %@ imprime el valor de un objeto}@end
    • 25. PROPIEDADES• Laspropiedades definen el acceso a las variables de los objetos • Equivalente a los Getters y Setters de Java • Se acceden como objeto.propiedad
    • 26. PROPIEDADES 2• Se definen en la interfaz como• @property (nonatomic, copy) NSString * nombre;• nonatomic indica que el setter no debe ser thread-safe• copy indica que se debe copiar el objeto en el setter• Otras opciones son strong y weak que veremos en el capítulo de gestión de memoria.
    • 27. PROPIEDADES 3• Se definen en la implementación como• @synthesize nombre = _nombre;•A la derecha de la igualdad indicamos la variable en la que queremos que se almacene el valor (Opcional)• Veamos un ejemplo con propiedades
    • 28. EJEMPLO 2 PERSONA.H#import <Foundation/Foundation.h> // incluye la definición delos objetos básicos@interface Persona : NSObject// propiedades@property (nonatomic, copy) NSString *nombre;@property (nonatomic, copy) NSString *apellido;@property (nonatomic) int edad;@property (nonatomic) float altura;@property (nonatomic, copy) NSArray *habilidades;- (void)saluda;@end
    • 29. EJEMPLO 2 PERSONA.M#import “Persona.h” // incluye la interfaz@implementation Persona@synthesize nombre = _nombre;@synthesize apellido = _apellido;@synthesize edad = _edad;@synthesize altura = _altura;@synthesize habilidades = _habilidades;- (void)saluda{ NSLog(@”Hola, me llamo %@.”, self.nombre); // NSLogfunciona como printf. %@ imprime el valor de un objeto}@end
    • 30. CONSTRUCTORES• La creación de objetos en Objective-C se hace en dos etapas •1 - Reserva de la memoria alloc •2 - Inicialización init
    • 31. CONSTRUCTORES 2• Ejemplo de creación de la clase Persona del ejemplo anterior: • Persona *pablo = [[Persona alloc] init];
    • 32. CONSTRUCTORES 3• Podemos sobrecargar el método init para personalizar la creación del objeto- (id)init{ self = [super init]; // También debemos llamar alconstructor padre if (self) { // Inicialización del objeto } return self;}
    • 33. CONSTRUCTORES 4• El método init puede recibir parametros para la construcción: • Persona *pablo = [[Persona alloc] initWithName:@”Pablo” surname:@”Picasso”];
    • 34. CONSTRUCTORES 5• Algunas clases poseen métodos estáticos para crear los objetos en una única llamada:• NSArray *lista = [NSArray arrayWithObjects:@”Pablo”, @”Juan”, @”Pepe”, nil]; • Estas llamadas no actuan igual que alloc init. • Veremos las diferencias en el capítulo de gestión de memoria
    • 35. ESTRUCTURAS DE DATOS• EnObjective-C estan diferenciadas las listas y mapas que son editables y las que no• Losobjetos inmutables se deberán indicar todos los objetos en el momento de su creación • [NSArray arrayWithObjects:@”Pablo”, @”Juan”, @”Pepe”, nil];• Objective-C no tiene sobrecarga de operadores por lo que todas las operaciones son métodos
    • 36. ESTRUCTURAS DE DATOS - NSARRAY• Las clases para la gestión de listas son NSArray y NSMutableArray • Obtener un objeto de la lista: - (id)objectAtIndex:(NSUInteger)index; • Añadir un objeto a la lista: - (void)addObject:(id)object;
    • 37. ESTRUCTURAS DE DATOS - NSARRAY 2• Para la contrucción de arrays existen diversos métodos+ (id)arrayWithObject:(id)object; // Array con un único objeto+ (id)arrayWithObjects:(id)object, ...; // Array con una listade objetos separados por coma y acabados en nil+ (id)arrayWithObjects:(const id*)object count:(NSUInteger)count; // Array con unalista de objetos+ (id)arrayWithArray:(NSArray)array; // Copia de otro array
    • 38. ESTRUCTURAS DE DATOS - NSARRAY 3• Para la contrucción de arrays mutables existen otros métodos+ (id)arrayWithCapacity:(NSUInteger)capacity; // Array con nposiciones reservadas
    • 39. ESTRUCTURAS DE DATOS - NSDICTIONARY• Las clases para la gestión de mapas son NSDictionary y NSMutableDictionary • Obtener un objeto del mapa: - (id)objectForKey:(id)key; • Añadir un objeto al mapa: - (void)setObject:(id)object forKey:(id)key;
    • 40. ESTRUCTURAS DE DATOS - NSDICTIONARY 2• Para la creación de diccionarios existen varios métodos+ (id)dictionaryWithObject:(id)object forKey:(id)key; //Diccionario con un único objeto+ (id)dictionaryWithObjectsAndKeys:(id)firstObject, ...; //Diccionario con un listado de objetos acabados en nil+ (id)dictionaryWithDictionary:(NSDictionary *)dict; //Diccionario con copia+ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; // Diccionariocon un listado de claves y otro de valores
    • 41. ESTRUCTURAS DE DATOS - NSDICTIONARY 3• Para la creación de diccionarios mutables existen varios métodos+ (id)dictionaryWithCapacity:(NSUInteger)capacity;//Diccionario con n posiciones reservadas
    • 42. PONIENDO EN PRÁCTICA• Para este tema vamos a tomar contacto con Xcode
    • 43. FIN