Primera Aplicación

Anuncio
PRIMER CONTACTO CON EL
ENTORNO DE DESARROLLO
Luis Montesano
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 (si nos da tiempo)
OBJETIVOS DEL CURSO
•
Desarrollar aplicaciones para smartphones, en particular, para el
iPhone
•
Programación orientada a objetos, algún concepto de ingeniería
del software
•
Hablaremos de algunos otros conceptos y su uso en teléfonos
inteligentes:
•
Manejo de sensores
•
Prestaciones en sistemas embebidos
•
Bases de datos, servicios web
OBJETIVOS ESTA SEMANA
•
Aprender o recordar conceptos de programación orientada a objetos a través
de Objective C
•
Aprender el modelo básico de desarrollo en el iPhone
•
Aprender a usar el entorno de desarrollo
•
•
Depurador
•
Documentación
Implementar vuestra primera aplicación
•
No va a ser “cool” (no tiene acceso a web, fotos, gps ...)
•
Pensada para aprender a organizar la información y programar
correctamente
EL CUADERNO DEL PROFESOR AL IPHONE
CONCEPTOS BÁSICOS
• Experiencia
programando?
• Programación
imperativa
• C, ADA, Pascal, matlab...
• Programación
orientada a objetos
• JAVA, 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;
!
}
Nombre de la clase / Superclase
-(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;
!
}
Nombre de la clase / Superclase
Atributos
-(void)setAge:(NSNumber *)myAge;
-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
PRIMERA CLASE DE OBJECTIVE C
#import <Foundation/Foundation.h>
Include (resuelve las dependencias ciclicas)
@interface Student : NSObject {
! NSString *name;
! NSString *surname;
! NSNumber *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;
!
}
Métodos
-(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;
!
}
Métodos
-(void)setAge:(NSNumber *)myAge;
-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
-(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 fname
PRIMERA CLASE DE OBJECTIVE C
#import <Foundation/Foundation.h>
@interface Student : NSObject {
! NSString *name;
! NSString *surname;
! NSInteger *age;
!
}
Métodos
-(void)setAge:(NSNumber *)myAge;
-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@end
-(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;
Funciones de lectura y escriturar
para los atributos
-(void)setName:(NSNumber *)fname;
-(NSNumber *)setSurname;
-(id)initWithName:(NSString *)fname Surname:(NSString *)sname Age: (NSInteger*)years
@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
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
el?
• Crear
• Ver
un alumno en el iPhone, ¿qué podemos hacer con
un interfaz de usuario para:
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
UN EJEMPLO SENCILLO: VISOR DE ALUMNOS
?
Controlador
Modelo
Vista
Clase Alumno
?
IB: INTERFACE BUILDER
IB: INTERFACE BUILDER
Arrastrar
IB: INTERFACE BUILDER
IB: INTERFACE BUILDER
DEMO
Instalar 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
UIKit.h contiene UIViewController, la clase que da soporte a MVC
#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”
Nuestro controlador va a usar nuestro modelo de datos
@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)changeAge:(id)sender;
@end
UNA APLICACIÓN SIMPLE
COMPLETAR DEMO
Descargar