Sobre como aprendí a dejar de preocuparme y querer a Objective-C
Objective-C es un lenguaje de programación orientado a objetos. Si se conocen otros lenguajes orientados a objetos Objective-C no es muy diferente: permite jerarquías de tipos, paso de mensajes entre objetos (otros lo denominan “llamadas a métodos”) y reutilización de código mediante la herencia. Objective-C es además un superconjunto de C: cualquier programa de C es un programa Objective-C válido, así que si sabes C ya sabes Objective-C ¡felicidades!
Como buen hijo de su padre, Objective-C se trae algunas cosas de C como son los tamaños dependientes de la plataforma para los tipos integrales del lenguaje (enteros, flotantes,…), las conversiones implícitas, la forma de almacenar las cadenas (tranquilos, puede que no tenga que ser tan doloroso), las macros del preprocesador (no se si esto es bueno o malo. Como todo, si se utiliza bien, sea bienvenido), las rutas de búsqueda de ficheros de cabecera y símbolos,…
Pero claro, no vas a crear un nuevo lenguaje si no pones cosas nuevas en él. Objective-C viene cargado de las “novedades” propias de los lenguajes orientados a objetos, pero a diferencia de C++ (cuyas pretensiones son parecidas) Objective-C atrasa muchas de las decisiones que C++ debe hacer en tiempo de compilación al tiempo de ejecución.
“Tipado” dinámico (Dynamic typing)
Objective-C permite mandar mensajes a objetos cuyo tipo se desconoce, el entorno de ejecución de Objective-C determina dinámicamente la clase del receptor e invoca el código correcto. C++ requeriría que el receptor fuera declarado en tiempo de compilación para poder enviar el mensaje al código correcto.
Objective-C permite utilizar el “tipado” estático en cualquier sitio, pero se puede utilizar el “tipado” dinámico si es necesario.
Envío de mensajes dinámico (Dynamic dispatch)
En los lenguajes orientados a objetos las llamadas a funciones se denominan mensajes y la diferencia principal es que los mensajes pueden provocar invocaciones de código diferente en el momento de la ejecución, dependiendo del tipo que recibe el mensaje. Objective-C decide en tiempo de ejecución que código ejecutará buscando en el código del receptor y sus ancestros. C++, por su parte, construye la tabla de envío de mensajes estáticamente en tiempo de compilación.
El envío de mensajes dinámico funciona más parecido a la forma en la que nos imaginamos la herencia y además permite cambios en la jerarquía de la herencia durante la ejecución. Además los objetos distribuidos funcionan de formas más naturales con el sistema de envío de mensajes dinámico que mediante tablas estáticas.
Carga dinámica (Dynamic loading)
Debido al método de enviar mensajes Objetive-C puede atrasar el enlazado de los diferentes módulos de la aplicación al momento de la ejecución. Los programas pueden ser divididos en módulos con poca interdependencia y cargarlos según sean necesarios mientras el programa ejecuta. La distribución de código a lo largo de una red o escribir una aplicación que funcione mediante plug-ins es mucho más fácil si se soporta el enlazado retrasado de código.
Y en mi sistema cómo…
En los sistemas *nix el compilador GCC incluye un compilador de Objective-C. Este compilador se puede utilizar desde Windows mediante Cygwin. En Mac OS X (que al fin y al cabo es *nix) también se dispone de GCC, pero el entorno de ejecución de Objective-C es diferente (pero no tanto). Y es que es Objective-C el gran mecanismo que mueve muchas partes de Mac OS X (desde que abandonaron Pascal
los chicos de Apple han avanzado un rato).
Aparte del entorno de ejecución y del compilador siempre es interesante tener una biblioteca de clases básicas, en Mac se puede utilizar Cocoa y en las demás plataformas GNUstep que son casi compatibles ya que ambos provienen del mismo código: NeXTstep.
Ver entradas relacionadas
- La opinión de Steve Jobs sobre Objective-C
- Descargué el iPhone SDK y todo lo que obtuve fue esta mala camiseta
- Sobre como aprendí a dejar de preocuparme y querer a Objective-C (2)
- Sobre como aprendí a dejar de preocuparme y querer a Objective-C (3)
- Sobre como aprendí a dejar de preocuparme y querer a Objective-C (4)

