Soy un programador con experiencia en el desarrollo de aplicaciones, principalmente en Java y Microsoft .NET. Llevo tiempo pensando en aprender a crear aplicaciones para el sistema operativo móvil de Apple, denominado iOS pero nunca encuentro el momento.
Siempre que me pongo a leer y estudiar material, me surgen otras cosas, exámenes, preparación de clases, etc. y al final cuando consigo volverme a poner, no me acuerdo de aspectos importantes que tengo que volver a repasar. Voy a aprovechar el blog para ir tomando notas y compartir mis avances con vosotros, en una especie de curso llamado Desarrollo de Apps para iOS. Esta es entonces la primera de una serie de publicaciones con las que pretendo mostrar cómo construir aplicaciones para dispositivos con iOS (iPhone, iPad, etc). Como prerequisito imprescindible para seguir el curso, es tener experiencia en OOP (Programación Orientada a Objetos) y conocer a fondo el Modelo Vista Controlador.
Modelo Vista Controlador
Tendrás de dominar los siguientes términos básicos:
- Clase. Descripción o plantilla para un objeto
- Instancia. Manifestación de una clase
- Mensaje. Enviado a un objeto para hacerlo actuar
- Método. Código invocado por un mensaje
- Variable de instancia. Almacenamiento dentro de un objeto
- Superclase/Subclase. Términos de herencia
- Protocolo. Similar funcionalidad que una interface en Java
Para entender como se desarrollan apps para iOS, y antes de descargarnos y empezar a usar ninguna herramienta, es necesario comprender, desde un punto de vista teórico, el patrón, o estrategia de diseño, denominado Modelo Vista Controlador (MVC – Model Controler View) y cómo Apple lo implementa en su plataforma de desarrollo. Como su nombre indica, esta estrategia divide los objetos de nuestro programa en 3 «campos»:
- Modelo. Esta es la representación específica de la información, con la cual va a operar nuestra aplicación (datos de la aplicación)
- Controlador. Responde a eventos, usualmente acciones del usuario, e invoca peticiones al Modelo y a la Vista (lógica de la interfaz de usuario)
- Vista. Objeto subordinado del Controlador que es presentado al usuario de forma gráfica (ventanas y otros elementos)
Estos objetos están comunicados («hablan entre ellos») de la siguiente manera: Si observamos la figura 1, el Controlador siempre puede hablar directamente con su Modelo (1) y con su Vista (2), sin embargo, el Modelo y la Vista nunca hablan directamente el uno con el otro (3).
Nos empiezan ahora a surgir algunas preguntas tales como ¿puede la Vista hablar con el Controlador (4)? La respuesta sería «sí, mas o menos». La comunicación entre los objetos del MVC es «ciega» y estructurada, por eso, el Controlador establece un objetivo (target) en si mismo, y repartirá acciones (action) a la Vista. Ésta, enviará la acción a este objetivo cuando suceda algún evento en la interfaz de usuario (por ejemplo una pulsación sobre un botón de la Vista), tal y como puedes apreciar en la figura 2. El Controlador realizará las tareas necesarias para responder a ese evento.
A veces, la Vista tiene que sincronizarse con el Controlador (para actualizar los datos de la misma), es entonces cuando éste Controlador se fija como delegado de la Vista a través de un protocolo. La Vista no es la propietaria de los datos que está mostrando, y en la mayoría de los casos es el Controlador el que actúa como origen de datos, no el Modelo. El Controlador interpreta y formatea la información del Modelo para proporcionársela a la Vista (ver figura 3). La delegación es un patrón simple de OOP, en el que un objeto actúa en nombre de, o en coordinación con otro objeto. El objeto que delega las funciones (en nuestro caso la Vista) mantiene una referencia al otro objeto, el delegado (en nuestro caso el Controlador), y en el momento apropiado envía un mensaje a dicha referencia. El mensaje informa al delegado de un evento que el objeto que delega (la Vista), está a punto de manejar o simplemente ha manejado. El delegado puede responder al mensaje mediante la actualización de la apariencia o estado de la Vista. La principal ventaja de la delegación, es que nos permite personalizar fácilmente el comportamiento de varios objetos en un objeto central.
La última pregunta que nos podemos hacer es si ¿puede el Modelo hablar directamente con el Controlador? En este caso la respuesta es rotunda, NO, el Modelo es independiente de la Interfaz de Usuario. Entonces, ¿qué ocurriría si el Modelo tiene información actualizada y es necesario que el Controlador lo sepa? En este caso, el Modelo utiliza una especie de «emisora de radio» con un mecanismo de transmisión. Así, los Controladores (u otros Modelos) pueden «sintonizar» las cosas que les interesen. Apple utiliza Notificaciones y KVO (Key-Value Observing) que permite a los objetos que se les notifique de los cambios en las propiedades de otros objetos.
Espero que esta introducción teórica, pero muy importante para posteriores temas del curso, os haya parecido interesante. En la próxima publicación, veremos una pequeña introducción al lenguaje Objetive-C, pieza clave para adentrarnos en el mundo de la programación para iOS. En posteriores entregas, veremos como implementar todo esto con Objetive-C.
Como es de bien nacido ser agradecido, mi agradecimiento a la gente de la Universidad de Stanford, que es la espina dorsal de este curso.
Sin su material, sería más complicado la elaboración de estos artículos.
Adios, os!