SlideShare una empresa de Scribd logo
1 de 85
Descargar para leer sin conexión
Programación
 para iPhone
  Campus de Verano EPSG
 Miguel Rebollo (@mrebollo)
¿por qué es interesante
                   desarrollar aplicaciones
                   móviles?

                                      50
50

40

30

20                            15,1

10                      5,2
             4,1
      0,5
0
     2008   2009       2010   2011   2012

                                     billones de $
85.000 desarrolladores
el 80% gratuitas
(fuente: Gartner)
si alguien quiere
descargarse todas las
aplicaciones para iPhone
necesitaría

7 Tb
$891.982
275 días núm. 1
12 mill vendidas ($0,99)
30 mill gratuitas
$1.000.000/mes publicidad
10 apps a vigilar
1. Servicios basados en la localización
2. Redes sociales
3. Búsquedas móviles
4. Comercio móvil
5. Pago móvil
6. Servicios context-aware
7. Reconocimiento de objetos
8. Mensajería instantánea móvil
9. eMail móvil
10. Vídeo móvil

                                          (fuente: Gartner)
pero no todo está
    decidido
¿Apps nativas o
multiplataforma?
0
                            5000
                                   10000
                                           15000
                                                   20000




miles de ud
              Q3 2007
              Q4 2007
              Q1 2008
              Q2 2008
              Q3 2008
              Q4 2008
                                   3G


              Q1 2009
              Q2 2009
              Q3 2009
              Q4 2009
                                                           ventas iPhone


                                   3GS




              Q1 2010
              Q2 2010
              Q3 2010
                                             4




              Q4 2010
              Q1 2011
              Q2 2011
108.624.000
0
                               100
                                     200
                                           300
                                                 400
                                                       500
                Unknown
                2008-08
                2008-10
                2008-12
                2009-02
                2009-04
                2009-06
                2009-08
                2009-10
                2009-12
                2010-02
                2010-04
                2010-06
                2010-08
                 2010-10
                                                             Apps disponibles




                2010-12
                2011-02
                2011-04
miles de apps




                2011-06
Precios
1000

800

600

400

200

  0
       0   11,99 23,99 35,99 47,99 99,99 219,99
Coste de una app
    ($1,49)

            1%
      15%
                       Desarrollador
14%                    Apple
                       Comisión tarjeta
                       Procesamiento
                 70%
iPhone      iPhone 3G   iPhone 3GS       iPhone 4

                                         AMR
procesador       ARM 620 MHz                         A4 800 MHz
                                       600 MHz

  RAM                128 MB             256 MB          512 MB


capacidad    4,8,16 GB     8, 16 GB   8, 16, 32 GB     16, 32 GB

                                                       960x640
resolución                 480x320
                                                     (retina disp)
                                                         5 Mpx
 cámara                2 Mpx            3 Mpx
                                                     + frontal (0,3)

  vídeo         no             no       si, VGA       si, HD 720


  otros                        3G       brújula        giroscopio
1 Mhz de velocidad
1 KB de memoria RAM
12 KB de memoria ROM
1 programa en ejecución
Objective-C
Ppio. diseño recursivo
1. Todo son objetos
2. Los objetos se hacen peticiones de uno a otro
   mediante paso de mensajes.
3. Cada objeto tiene su propia memoria, que consta de
   otros objetos.
4. Cada objeto es una instancia de una clase. Una clase
   agrupa objetos similares.
5. La clase es el repositorio del comportamiento
   asociado con un objeto.
6. Las clases están organizadas en una estructura
   arbórea que se denomina jerarquía de herencia.
Ventajas

Desarrollo rápido
Mejora calidad y legibilidad del código
Mejora la mantenibilidad
Niveles de abstracción
Reusabilidad, encapsulamiento
¿qué es una clase?
Patrón que define atributos y métodos
comunes a los objetos de un tipo
Clase: teléfono móvil
atributos: marca, modelo, número
operaciones: encender, apagar, llamar
Instancia: teléfono de Miguel
atributos: marca=iPhone, modelo=3G,
número=657 432 564
Encapsulamiento

Comportamiento de “caja negra”
Los “usuarios” de la clase ignoran sus
detalles de implementación
Interfaz de uso a través de sus métodos
Herencia

Estructura jerárquica de las clases
Una clase hereda la estructura de su
clase padre
Las clases pueden ampliar o refinar el
comportamiento heredado
vehículo




      con motor              sin motor



 coche      moto         bici       velero


  coche
eléctrico
Mensajes
Los objetos se comunican mediante
mensajes
Los mensajes invocan los métodos de
una clase
En el mensaje se indica:
objeto, método, parámetros (si hay)
Clases en Objective-C
formada por @interface (.h) e @implementation (.m)


en la interface se define la estructura de la clase
             atributos + métodos de acceso


en la implementación se define su comportamiento
Declaración
@interface NombreClase : NombreSuperclase
<NombreProtocolo1,...> {
  // Zona de declaración de variables de instancia
  tipo_1 variableDeInstancia_1;
  tipo_N variableDeInstancia_N;
}

// Zona de declaración de métodos
+(tipo) metodoDeClase; ...
-(tipo) metodoDeInstancia:(tipo)argumento
   etiqueta:(tipo)otroArgumento;
Tipos de variables

Pueden ser de 3 tipos
@private: sólo visible para la clase (no se hereda)
@protected: sólo visible para la clase y sus subclases
@public: visible para todos (no se recomienda)
Por defecto, todas son @protected.
Tipos de datos
Básicos       Clases
void          NSString/NSMutableString
char          NSArray/NSMutableArray
int           NSDictionary/
              NSMutableDictionary
float/double
              NSDate
BOOL
              NSURL
id
              NSObject
Métodos
De clase…
+(tipo)NombreMétodo:(tipo)argumento
De instancia…
-(tipo)NombreMétodo:(tipo)argumento
Argumentos adicionales etiqueta:(tipo)argumento


tres métodos importantes: alloc, init y dealloc
Implementación
#import “NombreDeLaClase.h”
@implementation NombreDeLaClase
// No es preciso repetir superclase y protocolos
-(id) init {
    [super init];
    //Aquí se añaden instrucciones de inicialización
   return self;
}
-(tipo)nombreDeMetodo {
    …;
}
@end
Mensajería
[<variable|clase> <nombre_método>];
[<variable|clase> <método>:<valor param>];
[<variable|clase> <método>:<valor1>
                  <arg2>:<valor2> …];
Ejemplo:
[userName compare:@”Pedro” options:NSCaseSensitive]
[[NSURL alloc] initWithString:@”http://www.upv.es”];
Bifurcaciones (I)
if (<condición>){
   <código si cierto>;
}else{
    <código si falso>;
}

if( [username compare:@”Pedro”] ){
    usermsg = @”Hola, Pedro”;
else
    usermsg = @”Tú no eres Pedro”;
Bifurcaciones (II)

switch (<expr_numérica>){   switch (num%2){
  case <valor>:               case 0:
     <código>;                   msg=@”es par”;
     break;                      break;
  case <valor>:               case 1:
      …;                         msg=@”es impar”;
  otherwise:                     break;
      …;                      otherwise:
}                                msg=@”error”;
                            }
Bucles (I)

Con guarda inicial (puede no ejecutarse nunca)
while (<condición>){
    …;
}
Bucles (II)

Con guarda al final (se ejecuta al menos una vez)
do{
 ...;
}while (<condición>);
Bucles (III)
for( <inicialización>; <paso>; <condición>){
   …;
}
Ejemplo:
int i;
for( i = 0; i < 50; i++ ){ <código>; }
Es un bucle que se ejecuta 50 veces
Gestión de memoria
Para liberar la memoria de un objeto:
[<variable> release];
Cuando son atributos de una instancia, debe hacerse
en el método dealloc:
-(void)dealloc{
   [myLabel release];
   [super dealloc]; //liberación de la clase padre
}
Archivo: ListaDeAlimentos.h




#import <Foundation/Foundation.h>

@interface ListaDeAlimentos : NSObject {
  NSMutableDictionary * lista;
}

@property(readonly) NSMutableDictionary * lista;

-(id)init;
-(float)caloriasPorCienGramosDe:(NSString*)alimento;
-(void)registrar:(NSString*)alimento caloriasPorCienGramos:(float)valor;
-(void)eliminar:(NSString*)alimento;

@end
Fíjate…
• la clase tiene un único atributo (una lista
  dinámica)
• se define como un puntero
• se ha definido una propiedad para acceso
  directo al atributo
• se declara el método init para inicialización
• el método “registrar” tiene 2 argumentos
Archivo: ListaDeAlimentos.m

#import "ListaDeAlimentos.h"
@implementation ListaDeAlimentos
@synthesize lista;
-(id)init {
    [super init];
    lista = [[NSMutableDictionary alloc] init];
    return self;
}
-(float)caloriasPorCienGramosDe:(NSString*)alimento {
    NSString * calorias = [lista objectForKey:alimento];
    return calorias ? [calorias floatValue] : -1.0;
}
-(void)registrar:(NSString*)alimento caloriasPorCienGramos:(float)valor{
    NSString * copia = [alimento copy];
   [lista setObject:[NSNumber numberWithFloat:valor] forKey:copia];
}
-(void)eliminar:(NSString*)alimento {
    if (alimento)
        [lista removeObjectForKey:alimento];
    else
        NSBeep();
}
@end
Fíjate…
• “synthesize” como pareja de la propiedad
• en “init” se reserva la memoria de la lista
• “registrar” añade un nuevo alimento
• “eliminar” eliminar un alimento existente
• “caloriasPorCienGramosDe” consulta la
  información nutricional de un alimento
• observa los métodos para manipular el
  diccionario
• ¡OJO! no hay dealloc: hay que vaciar la lista
  antes de terminar el programa
Archivo: Calorimetro.m


#import <Foundation/Foundation.h>
#import "ListaDeAlimentos.h"

int main (int argc, const char * argv[]) {
   ListaDeAlimentos * p = [[ListaDeAlimentos alloc] init];
   NSMutableDictionary * listaAlmacenada = p.lista;

    //Se añaden 2 alimentos
    [p registrar:@"Fresas" caloriasPorCienGramos:35.0];
    [p registrar:@"Moras" caloriasPorCienGramos:59.0];

    //Se muestra la información nutricional almacenada
    for(id alimento in listaAlmacenada) {
       printf("Alimento: %-10s ---> Calorías: %5.1fn",
          [alimento UTF8String],
          [[listaAlmacenada objectForKey:alimento] floatValue]);
       [p eliminar:alimento];
    }

    return 0;
}
Fíjate…
• #import para utilizar la clase ListaDeAlimentos
• definición de ListaAlmacenada como iterador
• uso de @”” para definir cadenas constantes
  (en lugar de NSString)
• bucle for optimizado para iterar en colecciones
• printf para escribir en pantalla (otra alternativa:
  NSLog)
• ¡OJO! no hay dealloc: hay que vaciar la lista antes
  de terminar el programa
Objective-C
Miguel Rebollo (@mrebollo)
Excepciones
Una excepción es una circunstancia que
interrumpe el flujo normal del programa
Clases para manejarlas:
NSException
NSError
Clase definida por el usuario
Control de ejecución
@try encierra el bloque que puede lanzar
una excepción
@catch contiene la lógica para tratar la
excepción que se produce en @try
@finally se ejecuta siempre
@throw lanza una exepción
Definición

NSException *exception =
  [NSException
    exceptionWithName: @"HotTeaException"
    reason: @"The tea is too hot"
    userInfo: nil];

@throw exception;
Ejemplo excepción
Cup *cup = [[Cup alloc] init];
@try {
   [cup fill];
}
@catch (NSException *exception) {
   NSLog(@"main: Caught %@: %@", [exception name],
                                 [exception reason]);
} @finally {
   [cup release];
}
Test unitarios
Casos de test: comprueban el
funcionamiento del código (ej., clase)
Conjuntos de tests: conjunto de casos de
test que comprueban una aplicación
Cada vez que se hace un cambio, deben
lanzarse todos los tests para comprobar
que todo sigue funcionando
Test-driven devel.
El desarrollo por tests es un estilo de
programación
• Primero se escriben los tests
• Después de escribe el código para
  pasar los tests.
Pero no es necesario usarlo para poder
emplear los tests unitarios
Tests lógicos

Comprueban que el código funciona
correctamente fuera de la aplicación.
Se emplea para comprobar métodos,
clases completas o conjuntos de clases.
Configurar test lóg
1.añadir un unit-test bundle como
  Target al proyecto
2.marca el target como activo
3.crea un grupo Test para los archivos
4.crea una clase para el test del tipo
  “Objective-C test case class”
  -> caso de test
Tests de aplicación

Comprueban que el código funciona
correctamente fuera de la aplicación.
Se emplea para comprobar métodos,
clases completas o conjuntos de clases.
Configurar test app
1. duplica el target de la aplicación y añade “Testing”
   como sufijo
2. añadir un unit-test bundle como target al proyecto;
   llámalo <app>Tests
3. arrastra el bundle sobre la aplicación
4. enlaza ambos bundles: arrastra el producto
   <app>Tests.octest sobre el mismo bundle dentro de
   Copy Bundle resources del de la app
5. crea una clase para el test del tipo “Objective-C test
   case class” -> conjunto de tests
Escribir tests
Comprobación mediante asserts
STFail provoca fallo incondicional
STAssertEqualObjects falla si obj distintos
STAssertEquals falla si valores distintos
STAssertNil/STAssertNotNil falla si no nulo/nulo
STAssertTrue/STAssertFalse falla si falso/cierto
STAssertThrows falla si no se lanza una excepción
Ejemplo
- (void) testEntryAmount {
   // entry se crea en un método setUp
   [entry setAmountInPennies:123];
   STAssertEquals(123L, [entry amountInPennies],
           @"bad amount; 123 != %ld",
           [entry amountInPennies]);
   STAssertEquals((float)1.23, [entry amount],
           @"bad amount; 1.23 != %f",
           [entry amount]);
}

                  ver más en iOS Development Guide
Lecturas
Del centro de desarrollo de Apple...
Object-Oriented Programming with
Objective-C
The Objective-C Programming Language
Otros libros…
S.G. Kochan: Programming in Objective-
C 2.0.- Addison-Wesley, 3ª Ed. (2011)
Cocoa Touch
Capas de iOS
      Cocoa Touch

         Media

      Core services

        Core OS
Capas de iOS
               Proporciona la funcionalidad
Cocoa Touch    principal
               UIKit: control de la interfaz
   Media
               Map Kit: vistas de Google Maps
Core services Message Kit: envío de emails
               AddressBook Kit: acceso a la agenda
  Core OS
Capas de iOS
               Funcionalidades multimedia
Cocoa Touch
               Audio ToolBox: reproducción y
               grabación de sonido
   Media
               OpenGL ES: Animación 2D y 3D
Core services Media player: reproductor de medios
               Core Graphics: Dibujo en 2D
  Core OS
               Quartz Core: Animaciones
Capas de iOS
                Servicios del OS a bajo nivel
Cocoa Touch
                Foundation: envoltorio a Objective-C
   Media        Core Foundation: Fundation sobre C
              Core Location: servicio de
Core services geoposicionamiento
                Core Data: modelo de datos SQLite
   Core OS
                Store Kit: compras dentro de las apps
                System Configuration: conf. red
Capas de iOS
                Servicios de bajo nivel (casi hw)
Cocoa Touch
                CFNetwork: sockets BSD
    Media       External Accesory: interfaces a
                accesorios conectados por bluetooth
Core services Security: criptografía y acceso a
                llavero
   Core OS      System: herramientas típicas de un
                framework de Unix
Ciclo de vida
         UIKit                Nuestro programa
  El usuario pulsa el icono


            main()


   UIApplicationMain()        applicationDidFinishLaunching


   bucle
  eventos                       Tratamiento de los eventos



  Stma. solicita finalizar       applicationWillTerminate


     Aplicación finaliza
Clases del núcleo
NSObject
Es la clase base de la que dependen
todas las demás. Proporciona los
métodos de alloc, init y dealloc
Clases del núcleo
UIApplication
Todas las aplicaciones de iPhone son de
este tipo. Gestiona su ciclo de vida, su
configuración y también las insignias
(ej. e-mails recibidos)
Clases del núcleo
UIWindow
Es el contenedor que almacenará las
vistas de la aplicación. Una aplicación
tendrá una única ventana que se crea
automáticamente en los proyectos que
usaremos
Clases del núcleo
UIView
Define un área rectangular en la
pantalla del iPhone que gestiona todo lo
que aparece en ella y su
comportamiento. Los controles heredan
de las vistas (las consideraremos
subvistas).
Clases del núcleo
UIResponder
Los respondedores son los objetos que
pueden responder a eventos. El control
activo que va a recibir el evento es el
primer respondedor
Clases del núcleo
UIControl
Es la superclase de la que heredan su
comportamiento todos los controles de
nuestas aplicaciones. Es la responsable
de ejecutar el comportamiento asociado
a cada control (veremos como se enlaza
a través de Interface Builder)
Clases del núcleo
UIViewController
Gestionan el contenido de las vistas. Las
usaremos para asignar el
comportamiento asociado a un control
(recuerda que un control es también
una vista)
Clases de interfaz
UILabel
Etiquetas que muestran texto estático
UITextField/UITextView
Campos de texto para recibir entradas
del usuario (activan el teclado)
UIWebView
Contiene una página web (identifica los
links) o documentos (PDF y otros)
Clases de interfaz
UIButton
Botones para hacer click en ellos
UISwitch
Interruptores de dos posiciones: ON/OFF
UISegmentedControl
Barra táctil alargada con varias
opciones
Modelo
Vista-Controlador
                     Controlador
Acción de usuario                     Actualizar




 Vista                                     Modelo

               Actualizar     Datos
Controladores
IBOutlet
Controlador de salida
Lee el estado de los controles definidos
en la vista (uno por cada control)
Es una variable de instancia
Ejemplo:
IBOutlet UILabel *miEtiqueta;
Controladores

Propiedades con @property y @synthesize
Usados para facilitar el acceso a IBOutlet
Acceso directo a las variables (inst.outlet) en
lugar de emplear mensajes
@property se emplea en @interface
@synthesize se emplea en @implementation
Controladores
Ejemplo:

@interface NombreClase:UIViewControler{
  IBOutlet UILabel *miEtiqueta;
}
@property (retain, nonatomic) UILabel* miEtiqueta;
[…]
@end

@implementation NombreClase
@synthesize miEtiqueta;
[…]
@end
Controladores
IBAction
Define el método al que se debe llamar
como resultado de un evento
Es un método de la clase
Ejemplo:
-(IBAction)doCalculation:(id)sender;
Hola mundo personalizado
definir outlet y acciones
sobreescribir dealloc
crear interfaz
enlazar con controles
(2 etiquetas + 1 botón)
etiquetas: arrastra File
Owner sobre etiqueta
botón: arrastra “Touch Up
Inside” sobre File Owner
código para la acción
Cuentacuentos
definir outlet y acciones
sobreescribir dealloc
crear interfaz
enlazar con controles
personalización controles de
texto
First responder y ocultación
del teclado (asociado a Did End
on Exit)
Reemplazar texto
Catálogo de flores
crear interfaz (outlet/
acciones, propiedades,
enlazarlo, dealloc)
uso de segment y switch.
Conexión a Value Changed
acceso a web con NSURL,
NSURLRegister y
requestWithURL
ocultar vistas
carga rápida viewDidLoad
Sistema solar
aplicación de navegador
uso de UITableView: definir
secciones, rellenar celdas
inclusión de vista de
detalles (outlet/acciones,
propiedades, enlazarlo,
dealloc)
crear la vista de detalles
por código
Lecturas
Del centro de desarrollo de Apple...
Cocoa Application Tutorial
iOS Development Guide
iPhone Application Programming Guide
View Programming Guide for iOS
Lecturas
Otros libros…
iPhone & iPad Apps for Abosolute
Beginners (Ed. APRESS)
Desrrollo de aplicaciones para iPhone
(Ed. Anaya)
The iPhone Developers Cookbook (Ed.
Addison-Wesley)
iOS Programming: The Big Nerd Ranch

Más contenido relacionado

Similar a Curso programación iPhone

Mobile mas alla de la app store: APIs y Mobile Web - MobileConGalicia 2011
Mobile mas alla de la app store: APIs y Mobile Web - MobileConGalicia 2011Mobile mas alla de la app store: APIs y Mobile Web - MobileConGalicia 2011
Mobile mas alla de la app store: APIs y Mobile Web - MobileConGalicia 2011Ricardo Varela
 
Barcamp cucuta 2010 - Aplicaciones Móviles
Barcamp cucuta 2010 - Aplicaciones MóvilesBarcamp cucuta 2010 - Aplicaciones Móviles
Barcamp cucuta 2010 - Aplicaciones MóvilesSorey García
 
HTML5, CSS3 y móviles
HTML5, CSS3 y móvilesHTML5, CSS3 y móviles
HTML5, CSS3 y móvilesPideCurso
 
Módulos imprescindibles que desconoces
Módulos imprescindibles que desconocesMódulos imprescindibles que desconoces
Módulos imprescindibles que desconocesJorge López-Lago
 
LOS 10 MEJORES SMARTPHONE EN EL PERU
LOS 10 MEJORES SMARTPHONE EN EL PERULOS 10 MEJORES SMARTPHONE EN EL PERU
LOS 10 MEJORES SMARTPHONE EN EL PERUSelena Salazar
 
Facilitando el desarrollo web móvil, frameworks
Facilitando el desarrollo web móvil, frameworksFacilitando el desarrollo web móvil, frameworks
Facilitando el desarrollo web móvil, frameworksPideCurso
 
Mee go la era del mundo móvil
Mee go la era del mundo móvilMee go la era del mundo móvil
Mee go la era del mundo móvilMaryfer Lpz R
 

Similar a Curso programación iPhone (20)

Mobile mas alla de la app store: APIs y Mobile Web - MobileConGalicia 2011
Mobile mas alla de la app store: APIs y Mobile Web - MobileConGalicia 2011Mobile mas alla de la app store: APIs y Mobile Web - MobileConGalicia 2011
Mobile mas alla de la app store: APIs y Mobile Web - MobileConGalicia 2011
 
Barcamp cucuta 2010 - Aplicaciones Móviles
Barcamp cucuta 2010 - Aplicaciones MóvilesBarcamp cucuta 2010 - Aplicaciones Móviles
Barcamp cucuta 2010 - Aplicaciones Móviles
 
1
11
1
 
HTML5, CSS3 y móviles
HTML5, CSS3 y móvilesHTML5, CSS3 y móviles
HTML5, CSS3 y móviles
 
smartphone
smartphonesmartphone
smartphone
 
Documento sin título
Documento sin títuloDocumento sin título
Documento sin título
 
Smartphones.pdf
Smartphones.pdfSmartphones.pdf
Smartphones.pdf
 
Actividad 8
Actividad 8Actividad 8
Actividad 8
 
Smartphone
SmartphoneSmartphone
Smartphone
 
Módulos imprescindibles que desconoces
Módulos imprescindibles que desconocesMódulos imprescindibles que desconoces
Módulos imprescindibles que desconoces
 
CATALOGO DE CELULARES
CATALOGO DE CELULARESCATALOGO DE CELULARES
CATALOGO DE CELULARES
 
Smartphones
SmartphonesSmartphones
Smartphones
 
LOS 10 MEJORES SMARTPHONE EN EL PERU
LOS 10 MEJORES SMARTPHONE EN EL PERULOS 10 MEJORES SMARTPHONE EN EL PERU
LOS 10 MEJORES SMARTPHONE EN EL PERU
 
Facilitando el desarrollo web móvil, frameworks
Facilitando el desarrollo web móvil, frameworksFacilitando el desarrollo web móvil, frameworks
Facilitando el desarrollo web móvil, frameworks
 
Universidad del quindio (1)
Universidad del quindio (1)Universidad del quindio (1)
Universidad del quindio (1)
 
2011 II Congreso Mediterraneo . Mobile Apps
2011 II Congreso Mediterraneo . Mobile Apps2011 II Congreso Mediterraneo . Mobile Apps
2011 II Congreso Mediterraneo . Mobile Apps
 
Tablets
TabletsTablets
Tablets
 
Smartphones
SmartphonesSmartphones
Smartphones
 
Actividad 9
Actividad 9Actividad 9
Actividad 9
 
Mee go la era del mundo móvil
Mee go la era del mundo móvilMee go la era del mundo móvil
Mee go la era del mundo móvil
 

Más de Miguel Rebollo

GTG-CoL: A Decentralized Federated Learning Based on Consensus for Dynamic N...
 GTG-CoL: A Decentralized Federated Learning Based on Consensus for Dynamic N... GTG-CoL: A Decentralized Federated Learning Based on Consensus for Dynamic N...
GTG-CoL: A Decentralized Federated Learning Based on Consensus for Dynamic N...Miguel Rebollo
 
Co-Learning: Consensus-based Learning for Multi-Agent Systems
 Co-Learning: Consensus-based Learning for Multi-Agent Systems Co-Learning: Consensus-based Learning for Multi-Agent Systems
Co-Learning: Consensus-based Learning for Multi-Agent SystemsMiguel Rebollo
 
Análisis de la red de autores de ciencia ficción de Clarkesworld
Análisis de la red de autores de ciencia ficción de ClarkesworldAnálisis de la red de autores de ciencia ficción de Clarkesworld
Análisis de la red de autores de ciencia ficción de ClarkesworldMiguel Rebollo
 
Y sin embargo... se mueve. Dinámica de las redes complejas
Y sin embargo... se mueve. Dinámica de las redes complejasY sin embargo... se mueve. Dinámica de las redes complejas
Y sin embargo... se mueve. Dinámica de las redes complejasMiguel Rebollo
 
Exámenes en grupo y pruebas de corrección como alternativas a la evaluación
Exámenes en grupo y pruebas de corrección como alternativas a la evaluaciónExámenes en grupo y pruebas de corrección como alternativas a la evaluación
Exámenes en grupo y pruebas de corrección como alternativas a la evaluaciónMiguel Rebollo
 
Gamification. Key Concepts
Gamification. Key ConceptsGamification. Key Concepts
Gamification. Key ConceptsMiguel Rebollo
 
Using Distributed Risk Maps by Consensus as a Complement to Contact Tracing Apps
Using Distributed Risk Maps by Consensus as a Complement to Contact Tracing AppsUsing Distributed Risk Maps by Consensus as a Complement to Contact Tracing Apps
Using Distributed Risk Maps by Consensus as a Complement to Contact Tracing AppsMiguel Rebollo
 
Distributed Ledger and Robust Consensus for Agreements
Distributed Ledger and Robust Consensus for AgreementsDistributed Ledger and Robust Consensus for Agreements
Distributed Ledger and Robust Consensus for AgreementsMiguel Rebollo
 
Detección de nodos tramposos en procesos de consenso en redes
Detección de nodos tramposos en procesos de consenso en redesDetección de nodos tramposos en procesos de consenso en redes
Detección de nodos tramposos en procesos de consenso en redesMiguel Rebollo
 
La hora del código: ApS para fomentar el pensamiento computacional
La hora del código: ApS para fomentar el pensamiento computacionalLa hora del código: ApS para fomentar el pensamiento computacional
La hora del código: ApS para fomentar el pensamiento computacionalMiguel Rebollo
 
Procesos de enseñanza-aprendizaje en red
Procesos de enseñanza-aprendizaje en redProcesos de enseñanza-aprendizaje en red
Procesos de enseñanza-aprendizaje en redMiguel Rebollo
 
desarrollo de competencias a través de narrativas transmedia
desarrollo de competencias a través de narrativas transmediadesarrollo de competencias a través de narrativas transmedia
desarrollo de competencias a través de narrativas transmediaMiguel Rebollo
 
Distributed Group Analytical Hierarchical Process by Consensus
 Distributed Group Analytical Hierarchical Process by Consensus Distributed Group Analytical Hierarchical Process by Consensus
Distributed Group Analytical Hierarchical Process by ConsensusMiguel Rebollo
 
Análisis de ciudades a través de su actividad en redes sociales
Análisis de ciudades a través de su actividad en redes socialesAnálisis de ciudades a través de su actividad en redes sociales
Análisis de ciudades a través de su actividad en redes socialesMiguel Rebollo
 
Análisis de datos en redes sociales
Análisis de datos en redes socialesAnálisis de datos en redes sociales
Análisis de datos en redes socialesMiguel Rebollo
 
The multigent Layer for CALMeD SURF
The multigent Layer for CALMeD SURFThe multigent Layer for CALMeD SURF
The multigent Layer for CALMeD SURFMiguel Rebollo
 
Narrativa transmedia en el aula
Narrativa transmedia en el aulaNarrativa transmedia en el aula
Narrativa transmedia en el aulaMiguel Rebollo
 
Using geo-tagged sentiment to better understand social interactions
 Using geo-tagged sentiment to better understand social interactions Using geo-tagged sentiment to better understand social interactions
Using geo-tagged sentiment to better understand social interactionsMiguel Rebollo
 
Transport Network Analysis for Smart Open Fleets
Transport Network Analysis for Smart Open FleetsTransport Network Analysis for Smart Open Fleets
Transport Network Analysis for Smart Open FleetsMiguel Rebollo
 
La (poca) soledad del corredor de fondo
La (poca) soledad del corredor de fondoLa (poca) soledad del corredor de fondo
La (poca) soledad del corredor de fondoMiguel Rebollo
 

Más de Miguel Rebollo (20)

GTG-CoL: A Decentralized Federated Learning Based on Consensus for Dynamic N...
 GTG-CoL: A Decentralized Federated Learning Based on Consensus for Dynamic N... GTG-CoL: A Decentralized Federated Learning Based on Consensus for Dynamic N...
GTG-CoL: A Decentralized Federated Learning Based on Consensus for Dynamic N...
 
Co-Learning: Consensus-based Learning for Multi-Agent Systems
 Co-Learning: Consensus-based Learning for Multi-Agent Systems Co-Learning: Consensus-based Learning for Multi-Agent Systems
Co-Learning: Consensus-based Learning for Multi-Agent Systems
 
Análisis de la red de autores de ciencia ficción de Clarkesworld
Análisis de la red de autores de ciencia ficción de ClarkesworldAnálisis de la red de autores de ciencia ficción de Clarkesworld
Análisis de la red de autores de ciencia ficción de Clarkesworld
 
Y sin embargo... se mueve. Dinámica de las redes complejas
Y sin embargo... se mueve. Dinámica de las redes complejasY sin embargo... se mueve. Dinámica de las redes complejas
Y sin embargo... se mueve. Dinámica de las redes complejas
 
Exámenes en grupo y pruebas de corrección como alternativas a la evaluación
Exámenes en grupo y pruebas de corrección como alternativas a la evaluaciónExámenes en grupo y pruebas de corrección como alternativas a la evaluación
Exámenes en grupo y pruebas de corrección como alternativas a la evaluación
 
Gamification. Key Concepts
Gamification. Key ConceptsGamification. Key Concepts
Gamification. Key Concepts
 
Using Distributed Risk Maps by Consensus as a Complement to Contact Tracing Apps
Using Distributed Risk Maps by Consensus as a Complement to Contact Tracing AppsUsing Distributed Risk Maps by Consensus as a Complement to Contact Tracing Apps
Using Distributed Risk Maps by Consensus as a Complement to Contact Tracing Apps
 
Distributed Ledger and Robust Consensus for Agreements
Distributed Ledger and Robust Consensus for AgreementsDistributed Ledger and Robust Consensus for Agreements
Distributed Ledger and Robust Consensus for Agreements
 
Detección de nodos tramposos en procesos de consenso en redes
Detección de nodos tramposos en procesos de consenso en redesDetección de nodos tramposos en procesos de consenso en redes
Detección de nodos tramposos en procesos de consenso en redes
 
La hora del código: ApS para fomentar el pensamiento computacional
La hora del código: ApS para fomentar el pensamiento computacionalLa hora del código: ApS para fomentar el pensamiento computacional
La hora del código: ApS para fomentar el pensamiento computacional
 
Procesos de enseñanza-aprendizaje en red
Procesos de enseñanza-aprendizaje en redProcesos de enseñanza-aprendizaje en red
Procesos de enseñanza-aprendizaje en red
 
desarrollo de competencias a través de narrativas transmedia
desarrollo de competencias a través de narrativas transmediadesarrollo de competencias a través de narrativas transmedia
desarrollo de competencias a través de narrativas transmedia
 
Distributed Group Analytical Hierarchical Process by Consensus
 Distributed Group Analytical Hierarchical Process by Consensus Distributed Group Analytical Hierarchical Process by Consensus
Distributed Group Analytical Hierarchical Process by Consensus
 
Análisis de ciudades a través de su actividad en redes sociales
Análisis de ciudades a través de su actividad en redes socialesAnálisis de ciudades a través de su actividad en redes sociales
Análisis de ciudades a través de su actividad en redes sociales
 
Análisis de datos en redes sociales
Análisis de datos en redes socialesAnálisis de datos en redes sociales
Análisis de datos en redes sociales
 
The multigent Layer for CALMeD SURF
The multigent Layer for CALMeD SURFThe multigent Layer for CALMeD SURF
The multigent Layer for CALMeD SURF
 
Narrativa transmedia en el aula
Narrativa transmedia en el aulaNarrativa transmedia en el aula
Narrativa transmedia en el aula
 
Using geo-tagged sentiment to better understand social interactions
 Using geo-tagged sentiment to better understand social interactions Using geo-tagged sentiment to better understand social interactions
Using geo-tagged sentiment to better understand social interactions
 
Transport Network Analysis for Smart Open Fleets
Transport Network Analysis for Smart Open FleetsTransport Network Analysis for Smart Open Fleets
Transport Network Analysis for Smart Open Fleets
 
La (poca) soledad del corredor de fondo
La (poca) soledad del corredor de fondoLa (poca) soledad del corredor de fondo
La (poca) soledad del corredor de fondo
 

Último

ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 

Último (20)

ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 

Curso programación iPhone

  • 1. Programación para iPhone Campus de Verano EPSG Miguel Rebollo (@mrebollo)
  • 2. ¿por qué es interesante desarrollar aplicaciones móviles? 50 50 40 30 20 15,1 10 5,2 4,1 0,5 0 2008 2009 2010 2011 2012 billones de $
  • 5. si alguien quiere descargarse todas las aplicaciones para iPhone necesitaría 7 Tb $891.982
  • 6. 275 días núm. 1 12 mill vendidas ($0,99) 30 mill gratuitas $1.000.000/mes publicidad
  • 7. 10 apps a vigilar 1. Servicios basados en la localización 2. Redes sociales 3. Búsquedas móviles 4. Comercio móvil 5. Pago móvil 6. Servicios context-aware 7. Reconocimiento de objetos 8. Mensajería instantánea móvil 9. eMail móvil 10. Vídeo móvil (fuente: Gartner)
  • 8. pero no todo está decidido
  • 10. 0 5000 10000 15000 20000 miles de ud Q3 2007 Q4 2007 Q1 2008 Q2 2008 Q3 2008 Q4 2008 3G Q1 2009 Q2 2009 Q3 2009 Q4 2009 ventas iPhone 3GS Q1 2010 Q2 2010 Q3 2010 4 Q4 2010 Q1 2011 Q2 2011
  • 12. 0 100 200 300 400 500 Unknown 2008-08 2008-10 2008-12 2009-02 2009-04 2009-06 2009-08 2009-10 2009-12 2010-02 2010-04 2010-06 2010-08 2010-10 Apps disponibles 2010-12 2011-02 2011-04 miles de apps 2011-06
  • 13. Precios 1000 800 600 400 200 0 0 11,99 23,99 35,99 47,99 99,99 219,99
  • 14. Coste de una app ($1,49) 1% 15% Desarrollador 14% Apple Comisión tarjeta Procesamiento 70%
  • 15. iPhone iPhone 3G iPhone 3GS iPhone 4 AMR procesador ARM 620 MHz A4 800 MHz 600 MHz RAM 128 MB 256 MB 512 MB capacidad 4,8,16 GB 8, 16 GB 8, 16, 32 GB 16, 32 GB 960x640 resolución 480x320 (retina disp) 5 Mpx cámara 2 Mpx 3 Mpx + frontal (0,3) vídeo no no si, VGA si, HD 720 otros 3G brújula giroscopio
  • 16. 1 Mhz de velocidad 1 KB de memoria RAM 12 KB de memoria ROM 1 programa en ejecución
  • 17.
  • 19. Ppio. diseño recursivo 1. Todo son objetos 2. Los objetos se hacen peticiones de uno a otro mediante paso de mensajes. 3. Cada objeto tiene su propia memoria, que consta de otros objetos. 4. Cada objeto es una instancia de una clase. Una clase agrupa objetos similares. 5. La clase es el repositorio del comportamiento asociado con un objeto. 6. Las clases están organizadas en una estructura arbórea que se denomina jerarquía de herencia.
  • 20. Ventajas Desarrollo rápido Mejora calidad y legibilidad del código Mejora la mantenibilidad Niveles de abstracción Reusabilidad, encapsulamiento
  • 21. ¿qué es una clase? Patrón que define atributos y métodos comunes a los objetos de un tipo Clase: teléfono móvil atributos: marca, modelo, número operaciones: encender, apagar, llamar Instancia: teléfono de Miguel atributos: marca=iPhone, modelo=3G, número=657 432 564
  • 22. Encapsulamiento Comportamiento de “caja negra” Los “usuarios” de la clase ignoran sus detalles de implementación Interfaz de uso a través de sus métodos
  • 23. Herencia Estructura jerárquica de las clases Una clase hereda la estructura de su clase padre Las clases pueden ampliar o refinar el comportamiento heredado
  • 24. vehículo con motor sin motor coche moto bici velero coche eléctrico
  • 25. Mensajes Los objetos se comunican mediante mensajes Los mensajes invocan los métodos de una clase En el mensaje se indica: objeto, método, parámetros (si hay)
  • 26. Clases en Objective-C formada por @interface (.h) e @implementation (.m) en la interface se define la estructura de la clase atributos + métodos de acceso en la implementación se define su comportamiento
  • 27. Declaración @interface NombreClase : NombreSuperclase <NombreProtocolo1,...> { // Zona de declaración de variables de instancia tipo_1 variableDeInstancia_1; tipo_N variableDeInstancia_N; } // Zona de declaración de métodos +(tipo) metodoDeClase; ... -(tipo) metodoDeInstancia:(tipo)argumento etiqueta:(tipo)otroArgumento;
  • 28. Tipos de variables Pueden ser de 3 tipos @private: sólo visible para la clase (no se hereda) @protected: sólo visible para la clase y sus subclases @public: visible para todos (no se recomienda) Por defecto, todas son @protected.
  • 29. Tipos de datos Básicos Clases void NSString/NSMutableString char NSArray/NSMutableArray int NSDictionary/ NSMutableDictionary float/double NSDate BOOL NSURL id NSObject
  • 30. Métodos De clase… +(tipo)NombreMétodo:(tipo)argumento De instancia… -(tipo)NombreMétodo:(tipo)argumento Argumentos adicionales etiqueta:(tipo)argumento tres métodos importantes: alloc, init y dealloc
  • 31. Implementación #import “NombreDeLaClase.h” @implementation NombreDeLaClase // No es preciso repetir superclase y protocolos -(id) init { [super init]; //Aquí se añaden instrucciones de inicialización return self; } -(tipo)nombreDeMetodo { …; } @end
  • 32. Mensajería [<variable|clase> <nombre_método>]; [<variable|clase> <método>:<valor param>]; [<variable|clase> <método>:<valor1> <arg2>:<valor2> …]; Ejemplo: [userName compare:@”Pedro” options:NSCaseSensitive] [[NSURL alloc] initWithString:@”http://www.upv.es”];
  • 33. Bifurcaciones (I) if (<condición>){ <código si cierto>; }else{ <código si falso>; } if( [username compare:@”Pedro”] ){ usermsg = @”Hola, Pedro”; else usermsg = @”Tú no eres Pedro”;
  • 34. Bifurcaciones (II) switch (<expr_numérica>){ switch (num%2){ case <valor>: case 0: <código>; msg=@”es par”; break; break; case <valor>: case 1: …; msg=@”es impar”; otherwise: break; …; otherwise: } msg=@”error”; }
  • 35. Bucles (I) Con guarda inicial (puede no ejecutarse nunca) while (<condición>){ …; }
  • 36. Bucles (II) Con guarda al final (se ejecuta al menos una vez) do{ ...; }while (<condición>);
  • 37. Bucles (III) for( <inicialización>; <paso>; <condición>){ …; } Ejemplo: int i; for( i = 0; i < 50; i++ ){ <código>; } Es un bucle que se ejecuta 50 veces
  • 38. Gestión de memoria Para liberar la memoria de un objeto: [<variable> release]; Cuando son atributos de una instancia, debe hacerse en el método dealloc: -(void)dealloc{ [myLabel release]; [super dealloc]; //liberación de la clase padre }
  • 39. Archivo: ListaDeAlimentos.h #import <Foundation/Foundation.h> @interface ListaDeAlimentos : NSObject { NSMutableDictionary * lista; } @property(readonly) NSMutableDictionary * lista; -(id)init; -(float)caloriasPorCienGramosDe:(NSString*)alimento; -(void)registrar:(NSString*)alimento caloriasPorCienGramos:(float)valor; -(void)eliminar:(NSString*)alimento; @end
  • 40. Fíjate… • la clase tiene un único atributo (una lista dinámica) • se define como un puntero • se ha definido una propiedad para acceso directo al atributo • se declara el método init para inicialización • el método “registrar” tiene 2 argumentos
  • 41. Archivo: ListaDeAlimentos.m #import "ListaDeAlimentos.h" @implementation ListaDeAlimentos @synthesize lista; -(id)init { [super init]; lista = [[NSMutableDictionary alloc] init]; return self; } -(float)caloriasPorCienGramosDe:(NSString*)alimento { NSString * calorias = [lista objectForKey:alimento]; return calorias ? [calorias floatValue] : -1.0; } -(void)registrar:(NSString*)alimento caloriasPorCienGramos:(float)valor{ NSString * copia = [alimento copy]; [lista setObject:[NSNumber numberWithFloat:valor] forKey:copia]; } -(void)eliminar:(NSString*)alimento { if (alimento) [lista removeObjectForKey:alimento]; else NSBeep(); } @end
  • 42. Fíjate… • “synthesize” como pareja de la propiedad • en “init” se reserva la memoria de la lista • “registrar” añade un nuevo alimento • “eliminar” eliminar un alimento existente • “caloriasPorCienGramosDe” consulta la información nutricional de un alimento • observa los métodos para manipular el diccionario • ¡OJO! no hay dealloc: hay que vaciar la lista antes de terminar el programa
  • 43. Archivo: Calorimetro.m #import <Foundation/Foundation.h> #import "ListaDeAlimentos.h" int main (int argc, const char * argv[]) { ListaDeAlimentos * p = [[ListaDeAlimentos alloc] init]; NSMutableDictionary * listaAlmacenada = p.lista; //Se añaden 2 alimentos [p registrar:@"Fresas" caloriasPorCienGramos:35.0]; [p registrar:@"Moras" caloriasPorCienGramos:59.0]; //Se muestra la información nutricional almacenada for(id alimento in listaAlmacenada) { printf("Alimento: %-10s ---> Calorías: %5.1fn", [alimento UTF8String], [[listaAlmacenada objectForKey:alimento] floatValue]); [p eliminar:alimento]; } return 0; }
  • 44. Fíjate… • #import para utilizar la clase ListaDeAlimentos • definición de ListaAlmacenada como iterador • uso de @”” para definir cadenas constantes (en lugar de NSString) • bucle for optimizado para iterar en colecciones • printf para escribir en pantalla (otra alternativa: NSLog) • ¡OJO! no hay dealloc: hay que vaciar la lista antes de terminar el programa
  • 46. Excepciones Una excepción es una circunstancia que interrumpe el flujo normal del programa Clases para manejarlas: NSException NSError Clase definida por el usuario
  • 47. Control de ejecución @try encierra el bloque que puede lanzar una excepción @catch contiene la lógica para tratar la excepción que se produce en @try @finally se ejecuta siempre @throw lanza una exepción
  • 48. Definición NSException *exception = [NSException exceptionWithName: @"HotTeaException" reason: @"The tea is too hot" userInfo: nil]; @throw exception;
  • 49. Ejemplo excepción Cup *cup = [[Cup alloc] init]; @try { [cup fill]; } @catch (NSException *exception) { NSLog(@"main: Caught %@: %@", [exception name], [exception reason]); } @finally { [cup release]; }
  • 50. Test unitarios Casos de test: comprueban el funcionamiento del código (ej., clase) Conjuntos de tests: conjunto de casos de test que comprueban una aplicación Cada vez que se hace un cambio, deben lanzarse todos los tests para comprobar que todo sigue funcionando
  • 51. Test-driven devel. El desarrollo por tests es un estilo de programación • Primero se escriben los tests • Después de escribe el código para pasar los tests. Pero no es necesario usarlo para poder emplear los tests unitarios
  • 52. Tests lógicos Comprueban que el código funciona correctamente fuera de la aplicación. Se emplea para comprobar métodos, clases completas o conjuntos de clases.
  • 53. Configurar test lóg 1.añadir un unit-test bundle como Target al proyecto 2.marca el target como activo 3.crea un grupo Test para los archivos 4.crea una clase para el test del tipo “Objective-C test case class” -> caso de test
  • 54. Tests de aplicación Comprueban que el código funciona correctamente fuera de la aplicación. Se emplea para comprobar métodos, clases completas o conjuntos de clases.
  • 55. Configurar test app 1. duplica el target de la aplicación y añade “Testing” como sufijo 2. añadir un unit-test bundle como target al proyecto; llámalo <app>Tests 3. arrastra el bundle sobre la aplicación 4. enlaza ambos bundles: arrastra el producto <app>Tests.octest sobre el mismo bundle dentro de Copy Bundle resources del de la app 5. crea una clase para el test del tipo “Objective-C test case class” -> conjunto de tests
  • 56. Escribir tests Comprobación mediante asserts STFail provoca fallo incondicional STAssertEqualObjects falla si obj distintos STAssertEquals falla si valores distintos STAssertNil/STAssertNotNil falla si no nulo/nulo STAssertTrue/STAssertFalse falla si falso/cierto STAssertThrows falla si no se lanza una excepción
  • 57. Ejemplo - (void) testEntryAmount { // entry se crea en un método setUp [entry setAmountInPennies:123]; STAssertEquals(123L, [entry amountInPennies], @"bad amount; 123 != %ld", [entry amountInPennies]); STAssertEquals((float)1.23, [entry amount], @"bad amount; 1.23 != %f", [entry amount]); } ver más en iOS Development Guide
  • 58. Lecturas Del centro de desarrollo de Apple... Object-Oriented Programming with Objective-C The Objective-C Programming Language Otros libros… S.G. Kochan: Programming in Objective- C 2.0.- Addison-Wesley, 3ª Ed. (2011)
  • 60. Capas de iOS Cocoa Touch Media Core services Core OS
  • 61. Capas de iOS Proporciona la funcionalidad Cocoa Touch principal UIKit: control de la interfaz Media Map Kit: vistas de Google Maps Core services Message Kit: envío de emails AddressBook Kit: acceso a la agenda Core OS
  • 62. Capas de iOS Funcionalidades multimedia Cocoa Touch Audio ToolBox: reproducción y grabación de sonido Media OpenGL ES: Animación 2D y 3D Core services Media player: reproductor de medios Core Graphics: Dibujo en 2D Core OS Quartz Core: Animaciones
  • 63. Capas de iOS Servicios del OS a bajo nivel Cocoa Touch Foundation: envoltorio a Objective-C Media Core Foundation: Fundation sobre C Core Location: servicio de Core services geoposicionamiento Core Data: modelo de datos SQLite Core OS Store Kit: compras dentro de las apps System Configuration: conf. red
  • 64. Capas de iOS Servicios de bajo nivel (casi hw) Cocoa Touch CFNetwork: sockets BSD Media External Accesory: interfaces a accesorios conectados por bluetooth Core services Security: criptografía y acceso a llavero Core OS System: herramientas típicas de un framework de Unix
  • 65. Ciclo de vida UIKit Nuestro programa El usuario pulsa el icono main() UIApplicationMain() applicationDidFinishLaunching bucle eventos Tratamiento de los eventos Stma. solicita finalizar applicationWillTerminate Aplicación finaliza
  • 66. Clases del núcleo NSObject Es la clase base de la que dependen todas las demás. Proporciona los métodos de alloc, init y dealloc
  • 67. Clases del núcleo UIApplication Todas las aplicaciones de iPhone son de este tipo. Gestiona su ciclo de vida, su configuración y también las insignias (ej. e-mails recibidos)
  • 68. Clases del núcleo UIWindow Es el contenedor que almacenará las vistas de la aplicación. Una aplicación tendrá una única ventana que se crea automáticamente en los proyectos que usaremos
  • 69. Clases del núcleo UIView Define un área rectangular en la pantalla del iPhone que gestiona todo lo que aparece en ella y su comportamiento. Los controles heredan de las vistas (las consideraremos subvistas).
  • 70. Clases del núcleo UIResponder Los respondedores son los objetos que pueden responder a eventos. El control activo que va a recibir el evento es el primer respondedor
  • 71. Clases del núcleo UIControl Es la superclase de la que heredan su comportamiento todos los controles de nuestas aplicaciones. Es la responsable de ejecutar el comportamiento asociado a cada control (veremos como se enlaza a través de Interface Builder)
  • 72. Clases del núcleo UIViewController Gestionan el contenido de las vistas. Las usaremos para asignar el comportamiento asociado a un control (recuerda que un control es también una vista)
  • 73. Clases de interfaz UILabel Etiquetas que muestran texto estático UITextField/UITextView Campos de texto para recibir entradas del usuario (activan el teclado) UIWebView Contiene una página web (identifica los links) o documentos (PDF y otros)
  • 74. Clases de interfaz UIButton Botones para hacer click en ellos UISwitch Interruptores de dos posiciones: ON/OFF UISegmentedControl Barra táctil alargada con varias opciones
  • 75. Modelo Vista-Controlador Controlador Acción de usuario Actualizar Vista Modelo Actualizar Datos
  • 76. Controladores IBOutlet Controlador de salida Lee el estado de los controles definidos en la vista (uno por cada control) Es una variable de instancia Ejemplo: IBOutlet UILabel *miEtiqueta;
  • 77. Controladores Propiedades con @property y @synthesize Usados para facilitar el acceso a IBOutlet Acceso directo a las variables (inst.outlet) en lugar de emplear mensajes @property se emplea en @interface @synthesize se emplea en @implementation
  • 78. Controladores Ejemplo: @interface NombreClase:UIViewControler{ IBOutlet UILabel *miEtiqueta; } @property (retain, nonatomic) UILabel* miEtiqueta; […] @end @implementation NombreClase @synthesize miEtiqueta; […] @end
  • 79. Controladores IBAction Define el método al que se debe llamar como resultado de un evento Es un método de la clase Ejemplo: -(IBAction)doCalculation:(id)sender;
  • 80. Hola mundo personalizado definir outlet y acciones sobreescribir dealloc crear interfaz enlazar con controles (2 etiquetas + 1 botón) etiquetas: arrastra File Owner sobre etiqueta botón: arrastra “Touch Up Inside” sobre File Owner código para la acción
  • 81. Cuentacuentos definir outlet y acciones sobreescribir dealloc crear interfaz enlazar con controles personalización controles de texto First responder y ocultación del teclado (asociado a Did End on Exit) Reemplazar texto
  • 82. Catálogo de flores crear interfaz (outlet/ acciones, propiedades, enlazarlo, dealloc) uso de segment y switch. Conexión a Value Changed acceso a web con NSURL, NSURLRegister y requestWithURL ocultar vistas carga rápida viewDidLoad
  • 83. Sistema solar aplicación de navegador uso de UITableView: definir secciones, rellenar celdas inclusión de vista de detalles (outlet/acciones, propiedades, enlazarlo, dealloc) crear la vista de detalles por código
  • 84. Lecturas Del centro de desarrollo de Apple... Cocoa Application Tutorial iOS Development Guide iPhone Application Programming Guide View Programming Guide for iOS
  • 85. Lecturas Otros libros… iPhone & iPad Apps for Abosolute Beginners (Ed. APRESS) Desrrollo de aplicaciones para iPhone (Ed. Anaya) The iPhone Developers Cookbook (Ed. Addison-Wesley) iOS Programming: The Big Nerd Ranch