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.
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
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
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
}
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
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
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;
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
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
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