primer contacto con el entorno de...
TRANSCRIPT
PRIMER CONTACTO CON EL ENTORNO DE DESARROLLO
Luis Montesano ' Bob D/ Nvsjmmp
INDICE PARA HOY• ¿Que vamos a aprender en este curso?
• Introducción a los conceptos básicos
• Programación
• Modelo MVC (Model-View-Controller)
• Introducción al entorno de desarrollo e instalación en los ordenadores
• Hello world para el iPhone
• Objective C
CONCEPTOS BÁSICOS
• Programación orientada a objetos:
• Clase: un patrón para un objeto
• Instancia u objeto
• Mensaje: información enviada a un objeto
• Método: código que responde a un mensaje
• Herencia: estructura jerárquica de relación entre clases (y objetos)
• Subclase, superclase
• Herencia de funcionalidades entre clases
• Variable: almacenamiento de cada instancia (e.g. puntero a otro objeto)
• Protocolo (o Interfaz): conjunto de mensajes a los que un objeto responde
PRIMERA CLASE DE OBJECTIVE C
#import <Foundation/Foundation.h>
@interface Student : NSObject {! NSString *name;! NSString *surname;! NSInteger *age;!}
-(void)setAge:(NSNumber *)myAge;-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
PRIMERA CLASE DE OBJECTIVE C
#import <Foundation/Foundation.h>
@interface Student : NSObject {! NSString *name;! NSString *surname;! NSInteger *age;!}
-(void)setAge:(NSNumber *)myAge;-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
PRIMERA CLASE DE OBJECTIVE C
#import <Foundation/Foundation.h>
@interface Student : NSObject {! NSString *name;! NSString *surname;! NSInteger *age;!}
-(void)setAge:(NSNumber *)myAge;-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
PRIMERA CLASE DE OBJECTIVE C
#import <Foundation/Foundation.h>
@interface Student : NSObject {! NSString *name;! NSString *surname;! NSInteger *age;!}
-(void)setAge:(NSNumber *)myAge;-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
Nombre de la clase / Superclase
PRIMERA CLASE DE OBJECTIVE C
#import <Foundation/Foundation.h>
@interface Student : NSObject {! NSString *name;! NSString *surname;! NSInteger *age;!}
-(void)setAge:(NSNumber *)myAge;-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
Nombre de la clase / SuperclaseAtributos
PRIMERA CLASE DE OBJECTIVE C
#import <Foundation/Foundation.h>
@interface Student : NSObject {! NSString *name;! NSString *surname;! NSNumber *age;!}
-(void)setAge:(NSNumber *)myAge;-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
Include (resuelve las dependencias ciclicas)
PRIMERA CLASE DE OBJECTIVE C
#import <Foundation/Foundation.h>
@interface Student : NSObject {! NSString *name;! NSString *surname;! NSInteger *age;!}
-(void)setAge:(NSNumber *)myAge;-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
Métodos
#import <Foundation/Foundation.h>
@interface Student : NSObject {! NSString *name;! NSString *surname;! NSInteger *age;!}
-(void)setAge:(NSNumber *)myAge;-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
PRIMERA CLASE DE OBJECTIVE C
Métodos
-(void)setAge:(NSNumber *)age;
El método no tiene un nombre explícito. Se identifica solo por los argumentos.En este caso, el método tiene un solo argumento de tipo NSNumber * y llamado setAge
#import <Foundation/Foundation.h>
@interface Student : NSObject {! NSString *name;! NSString *surname;! NSInteger *age;!}
-(void)setAge:(NSNumber *)myAge;-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
PRIMERA CLASE DE OBJECTIVE C
Métodos
-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years;
PRIMERA CLASE DE OBJECTIVE C
#import <Foundation/Foundation.h>
@interface Student : NSObject {! NSString *name;! NSString *surname;! NSInteger *age;!}
-(void)setAge:(NSNumber *)myAge;-(NSNumber *)getAge;
-(void)setSurname:(NSString *)sname;-(NSString *)getSurname;
-(void)setName:(NSNumber *)fname;-(NSNumber *)setSurname;
-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
PRIMERA CLASE DE OBJECTIVE C
#import <Foundation/Foundation.h>
@interface Student : NSObject {! NSString *name;! NSString *surname;! NSInteger *age;!}
-(void)setAge:(NSNumber *)myAge;-(NSNumber *)getAge;
-(void)setSurname:(NSString *)sname;-(NSString *)getSurname;
-(void)setName:(NSNumber *)fname;-(NSNumber *)setSurname;
-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
Funciones de lectura y escritura para los atributos
PRIMERA CLASE DE OBJECTIVE C#import "Alumno.h"
@implementation Student
//@synthesize name, surname, age, repeats, type,photo;
-(void)setAge:(NSInteger *)myAge{! age=myAge;}-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years Type:(NSString *)ctype{!! // Implementación de la inicialización! [objeto mensaje:argumento] [fname capitalize] // Poner en mayúsculas
return self;}
-(void)dealloc {! // Más adelante
}@end
PRIMERA CLASE DE OBJECTIVE C#import "Alumno.h”
@implementation Student
@synthesize name, surname, age, repeats, type,photo;
-(void)setAge:(NSInteger *)myAge{! age=myAge;}-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years Type:(NSString *)ctype{!! // Implementación de la inicialización! [objeto mensaje:argumento] [fname capitalize] // Poner en mayúsculas
return self;}
-(void)dealloc {! // Más adelante
}@end
PRIMERA CLASE DE OBJECTIVE C#import "Alumno.h"
@implementation Student
@synthesize name, surname, age, repeats, type,photo;
-(void)setAge:(NSInteger *)myAge{! age=myAge;}-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years Type:(NSString *)ctype{!! // Implementación de la inicialización! [objeto mensaje:argumento] [fname capitalize] // Poner en mayúsculas
return self;}
-(void)dealloc {! // Más adelante
}@end
¿QUE HACEMOS CON EL ALUMNO?
• Tenemos un alumno en el iPhone, ¿qué podemos hacer con el?
• Crear un interfaz de usuario para:
• Ver su información
• Modificar su edad
MODELO VISTA CONTROLADOR
Controlador
Modelo Vista
MODELO VISTA CONTROLADOR
Controlador
Modelo Vista
El modelo MVC separa la información de su representación, a través de un controlador
Controlador
Modelo Vista
UN EJEMPLO SENCILLO: VISOR DE ALUMNOS
Controlador
Modelo Vista
Clase Alumno ?
?
IB: INTERFACE BUILDER
IB: INTERFACE BUILDER
Arrastrar
IB: INTERFACE BUILDER
IB: INTERFACE BUILDER
DEMOInstalar SDK para el iPhone
UN EJEMPLO SENCILLO: VISOR DE ALUMNOS
Controlador
Modelo Vista
Clase Alumno Interfaz creado por IB
?
EL PRIMER CONTROLADOR
#import <UIKit/UIKit.h>#import ”Alumno.h”
@interface MyViewController : UIViewController {! // Vista IBOUTLET UITextField *textField; ! IBOUTLET UILabel *label;
// Model (datos) Alumno *name;}
- (IBAction)showName:(id)sender;
@end
EL PRIMER CONTROLADOR
#import <UIKit/UIKit.h>#import ”Alumno.h”
@interface MyViewController : UIViewController {! // Vista IBOUTLET UITextField *textField; ! IBOUTLET UILabel *label;
// Model (datos) Alumno *name;}
- (IBAction)showName:(id)sender;
@end
UIKit.h contiene UIViewController, la clase que da soporte a MVC
EL PRIMER CONTROLADOR
#import <UIKit/UIKit.h>#import ”Alumno.h”
@interface MyViewController : UIViewController {! // Vista IBOUTLET UITextField *textField; ! IBOUTLET UILabel *label;
// Model (datos) Alumno *name;}
- (IBAction)showName:(id)sender;
@end
Nuestro controlador va a usar nuestro modelo de datos
EL PRIMER CONTROLADOR
#import <UIKit/UIKit.h>#import ”Alumno.h”
@interface MyViewController : UIViewController {! // Vista IBOUTLET UITextField *textField; ! IBOUTLET UILabel *label;
// Model (datos) Alumno *name;}
- (IBAction)changeAge:(id)sender;
@end
UNA APLICACIÓN SIMPLE
COMPLETAR DEMO