PRIMER CONTACTO CON EL ENTORNO DE...

Preview:

Citation preview

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

Recommended