Upload
joel-lara
View
130
Download
0
Embed Size (px)
Citation preview
Objective-C y la programación en iPhone
Programación Avanzada
Contenido
Que es Objective-C
Características del lenguaje
Semejanzas con Java
iPhone
Cococa Touch
Ejemplos
Que es Objective-C
Es una extensión de C (compatible hacia atrás) para hacerlo orientado a objetos, basado en Smaltalk.
Mas limpio, pequeño y rápido de aprender que C++.
Lenguaje utilizado por Mac OS X.
No esta estandarizado por ningún organismo internacional, Apple y NEXTSTEP son quienes han contribuido en crear este lenguaje. Ambos trabajan en mantener y mejorarlo.
Características
Es un lenguaje muy dinámico. Muchas decisiones se toman en tiempo de ejecución.
5 tipos de dinamismo: Memoria Dinámica. Los objetos siempre se crean en memoria
dinámica. Tipos dinámicos. El runtime se encarga detecta y usa el tipo
de variables Introspección. Podemos conocer la estructura de un objeto en
tiempo de ejecución. Enlace dinámico. Envío de mensajes por llamada a función
(Polimorfismo). Se encarga el runtime. Carga dinámica. Cargar clases en función de su uso. Hacen
programas extensibles (Plug-ins)
Clases
Consta de una interface (.h) y una implementación (.m).
Las clases por lo general derivan de NSObject, para poder usar las ventajas del runtime de Objective-C. Java nos obliga a ello.
Las variables a diferencia de C++ deben ser punteros a objetos. Aquí no existe variables de clase (static). Las variables de instancia, de clase y módulos pueden tener el mismo nombre.
Ejemplo de interface
Ejemplo de implementación
Instanciar objetos
Se debe llamar a los métodos alloc e init: Punto *p = [[Punto alloc] init]
Alloc reserva memoria.
Init es el constructor, inicializa las variables de instancia
También se podría utilizar new ya que ambas operaciones son muy comunes.
Tipos dinámicos (punteros): id p = [Punto new]
Para liberar objetos: [p release]
Métodos
Nivel. + para métodos de clases, y – para métodos de instancia
Tipo de retorno, si tiene, entre paréntesis. Por defecto retorna id.
Nombre.
Parámetros. Hereda de Smalltalk. Tantos parámetros como haya. A los parámetros además del tipo y y variable se puede etiquetar-> Código mejor documentado.
Ej: [pedido anadeCliente:1 nombre:"Juan" edad:23 saldo:260];
Herencia
Todas las clases derivan de la clase base NSObject, o de la clase de GNU Object. No se recomienda hacer clases base.
Operador self y super = que this y super de java.
Podemos modificar self al contrario que this que es de solo lectura. Es muy común ver:
Métodos factory
El compilador de Objective-C crea objetos que representan clases, esto proporciona grandes ventajas a la hora de crear patrones de diseño.
Métodos que combinan creación e iniciación y empiezan por el nombre +clase… Por ejemplo NSString posee: + (id)stringWithCString:(const char*)cString
encoding:(NSStringEncoding)enc
Útil cuando la creación depende de la iniciación. Ej: no se conoce la memoria a reservar hasta que no se conoce que fichero se quiere leer
Gestión de memoria
Gestión de memoria manual. Por cuenta del programador como C++
Recolector de basura como Java. Penaliza el rendimiento. Disponible en Leopard
Mantener la cuenta de referencias de un objeto. Necesita la colaboración del programador. retain incrementa la cuenta, release la decrementa y dealloc libera.
Categorías
Permiten modificar una clase aunque no tengamos el código. Se diferencia con la herencia en que nos permite modificar nodos interiores de la jerarquía de clases. Usos: Para clases grandes, particionarlas. Reparte trabajo tanto
para el compilador como para los programadores Añadir nuevos métodos a clases de fabricantes. Ej:
métodos de búsqueda para NSArray. Diferenciar API privada y API pública. Apple lo hace con los
Framework destinados al SDK para iPhone. Declarar protocolos informales.
Protocolos
Declaran métodos no asociados con ninguna clase. Cualquier clase los puede implementar. Ej en interfaz gráfica: - (void)mouseDown:(NSEvent*)theEvent; - (void)mouseDragged:(NSEvent*)theEvent; - (void)mouseUp:(NSEvent*)theEvent;
Separa jerarquía de clases con funcionalidad común.
@interface Punto : NSObject <Imprimible, Dibujable>
Propiedades
Se introdujo a partir de la versión de Leopard de Mac OS X.
Consiste en la definición de métodos ‘get’ y ‘set’.
Estas ayudan a mejorar la productividad del programador. Además permiten personalizar la forma de acceso a estas.
Ej: En la interface: @property(readonly) NSInteger x; en la implementación: @synthesize x; esta directiva nos garantiza robustez en accesos concurrentes.
Otros modificadores: retain, readwrite, nonatomic, etc
Introducción a la Programación en iPhone
Primer dispositivo móvil de Apple.
Utiliza el sistema operativo iPhone OS, construido desde el conocimiento y tecnología de Mac OS X.
Además incorpora acelerómetro, localización por GPS, Cámara e interfaz Multi-touch.
Características
Eventos Multi-Touch
Seguridad con encriptación, certificados, etc.
Internacionalización de Software
Comunicación entre aplicaciones usando esquemas URL.
Hilos, puertos, E/S estándar
Tipos de datos básicos como colecciones
Renderizado de gráficos 2D y 3D (OpenGL)
Reproducción y grabación de audio
Acelerómetro
GPS
Cámara
Base de datos SQLite, etc.
Capas iPhone OS
Tiene un conjunto de capas, la mas baja servicios fundamentales, capas superiores, servicios y tecnologías mas sofisticadas.
• Core OS. Contiene el Kernel, sistema de archivos, infraestructura de red, seguridad. • Core Services. Sockets, SQLite, threads • Media. Gráficos 2D, 3D, audio, video(Quartz, OpenGL, Core Animation). • Cocoa Touch. Interfaz gráfica (UIKit), Foundation Framework
Cocoa Touch
Ya existente en Mac OS X, añade características para la tecnología multi-touch UIKit. Proporciona los objetos que muestra una aplicación
en su ‘Interfaz de Usuario’, manejo de eventos y gráficos. Soporta además código para el manejo del acelerómetro, la cámara, la librería de fotos, etc.
Foundation Framework. Define el acceso y manejo de objetos, provee acceso a los tipos de datos primitivos, colecciones y servicios del sistema operativo.
Proceso de desarrollo
Tamaño de la pantalla. 480 x 320 pixeles. La interfaz se basa en vistas. Sistema de navegación
Memoria. Al tratarse de un móvil, memoria limitada. Cuando se agota la memoria se produce un evento el cual debe controlar el programador, en caso contrario se cerrara la aplicación.
Aplicaciones simultaneas. Solo se permite una aplicación ejecutándose. Cuando se produce una llamada o llega un SMS se cerrara. Responsabilidad de guardar el estado de la aplicación.
Estilo de aplicación
Utilidades. Minima acción del usuario, visualmente atractiva. Diferentes vista para el mismo tipo de información, pero de diferentes objetos.
Pantalla completa. Riqueza visual. Videojuegos, música, video.
Aplicaciones productivas. Organización y manipulación de la información. Rapidez frente a diseño. Navegación de menús mas generales a menús mas específicos.
Ejemplos y proceso de publicación en App Store