Ios.s2

558
-1

Published on

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

  • Be the first to like this

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

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
  • Ios.s2

    1. 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. 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. 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. 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. 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. 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. 7. SINTAXIS DE OBJECTIVE-C 3• Los parametros quedan intercalados• [objeto mensaje:param1 otroParam:param2]; • Equivalente en Java a• objeto.mensaje(param1, param2);
    8. 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. 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. 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. 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. 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. 13. TIPOS BÁSICOS 4• Todos los objetos en Objective-C heredan de la clase NSObject • Similar a la clase Object de Java
    14. 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. 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. 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. 17. DEFINICIÓN DE CLASES• Sintaxis de definición de clases• Ficheros .h @interface Clase : Superclase ...definición... @end
    18. 18. DEFINICIÓN DE CLASES• Sintaxis de implementación de clases• Ficheros .m @implementation Clase ...implementación... @end
    19. 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. 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. 21. VARIABLES DE OBJETO• Definidas en la interfaz de la clase entre {} @interface Clase : Superclase { int _variable1; float _variable2; NSArray *_unaLista; } @end
    22. 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. 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. 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. 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. 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. 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. 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. 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. 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. 31. CONSTRUCTORES 2• Ejemplo de creación de la clase Persona del ejemplo anterior: • Persona *pablo = [[Persona alloc] init];
    32. 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. 33. CONSTRUCTORES 4• El método init puede recibir parametros para la construcción: • Persona *pablo = [[Persona alloc] initWithName:@”Pablo” surname:@”Picasso”];
    34. 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. 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. 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. 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. 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. 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. 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. 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. 42. PONIENDO EN PRÁCTICA• Para este tema vamos a tomar contacto con Xcode
    43. 43. FIN
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×