Introducción a objective-c (I): Diferencias con C++

Empiezo con la introducción a Objective-C comentando las principales diferencias con C++. La principal diferencia entre ellos es que Objective-C deja ciertas decisiones para el tiempo de ejecución que C++ toma en tiempo de compilación.

Objective-C dispone de las siguientes funcionalidades clave:
Dynamic dispatch

Los lenguajes orientados a objetos, re-emplazan las llamadas a las funciones por mensajes. La diferencia es que un mismo mensaje, puede ejecutar distinto código en tiempo de ejecución. Esto es, distintas clases pueden implementar el mismo método, pero en una clase puede hacer una cosa y en en otra puede realizar algo totalmente diferente. Es decir, el mismo mensaje, disparará una secuencia de acciones según quien lo reciba. Objective-C decide dinámicamente en tiempo de ejecución que código se ejecutará buscando la clase que lo recibe y sus antecesores. El compilador de C++ construye estáticamente una tabla virtual en tiempo de compilación que mapea un mensaje por método y por clase concreta.

¿Que ventaja ofrece esto frente a C++? pues que en tiempo de ejecución la jerarquía de herencia puede ser cambiada en tiempo de ejecución.

Dynamic typing

Puesto que el procedimiento de envío de mensajes es dinámico, en Objective-C se pueden enviar mensajes a objetos cuyo tipo no se ha declarado. En tiempo de ejecución se determina la clase del receptor del mensaje y ejecuta el código apropiado. C++, requiere que el tipo del receptor sea declarado estáticamente en tiempo de compilación para consultar su "dispatch table".

El desarrollador debe llevar cuidado con el tipado dinámico, pues puede que su programa compile, pero luego tenga errores cuando lo ejecute.

Dynamic loading

Gracias al "dynamic dispatch" es fácil dejar para el tiempo de ejecución el enlace de modulos externos compilados. Se puede dividir un programa en módulos que pueden ser cargados y descargados en tiempo de ejecución según se necesiten. Esto facilita la distribución de código, incluso sobre una red o permite hacer aplicaciones que soporten plugins.

Tras esta teórica introducción, en el próximo capítulo, introduciré el famoso "Hola mundo" en Objective-C.

0 comentarios:

Publicar un comentario