21 diciembre 2005

Cocoa en Objective-C

Detras del gran sistema operativo que es MacOs X se encuentra su API nativa de programación, Cocoa. Aunque hay alternativas, Objective-C es el lenguaje principal de programación de esta API, y es la gran apuesta de Apple para la creación de aplicaciones para su flamante sistema operativo.

Pero, ¿qué es Objective-C? Este lenguaje es un gran desconocido para todos aquellos que no han tocado un Mac. Y ya no digamos de Cocoa. Objective-C (Obj-C) es una extensión C para añadirle objetos; es, digamos, como C++, pero hecho de otra manera. En este caso la sintaxis elegida es similar al Smalltalk, el primer lenguaje orientado a objetos.

Aunque la idea es la misma, las similitudes con C++ acaban ahí. Obj-C se basa en el pase de mensajes entre objetos para la invocación de metodos (por tanto no hay linkaje estático hasta el tiempo de ejecución como mínimo). La sintaxis de este envio de mensajes también resulta confusa para los acostumbrados a C++/Java, porque se realiza sin el típico "." o "->". Así lo que sería:
miobjecto.mimetodo(parametro1,parametro2);
se convierte en
[miobjeto mimetodo:parametro1 nombre_parametro2:parametro2];
A parte del uso de los corchetes, y los dos puntos, todos los parametros menos el primero deben de tener un nombre (aparte del nombre de la variable con la que se asocia) y debe ser utilizado al llamar al método. Esta seria la declaración de este metodo en C++:
void mimetodo(int parametro1, int parametro2);
en Objective-C es :
- (void)mimetodo:(int)parametro1 nombre_parametro2:(int)parametro2;
Las diferencias también se encuentran en la declaración de clases, ya que en Obj-C tenemos que separar la parte de interface de clase y el de implementación (esto suena mucho a los lenguajes clásicos).

Esto, después de todo, no son más que cambios de sintaxis y un enlace dinámico; pero existen más diferencias, sobretodo en las librerias standard proporcionadas por Cocoa. Para poner un ejemplo, un NSArray (el equivalente orientado a objetos, aunque por supuesto existe el array original de C) requiere para acceder a un item este código:
valor = [miarray objectAtIndex:0];
No admitiendo los corchetes típicos de C y compañía. Y no solo eso, tampoco hay sobrecarga de operadores; por lo que anexar dos cadenas tiene que hacerse de esta manera:
NSString *cadena_unida = [NSStrng initStringWithFormat:@"%@%@",cadena_1,cadena_2];
Sencillo y práctico, ¿verdad? Lo cierto es que entre tener que nombrar los parámetros, el nombre descriptivo de los métodos básicos y la no sobrecarga de operadores; hacen que usar Objetive-C sea engorroso y lento de utilizar.

Lo cierto es que todo esto son primeras impresiones, no lleve ni una semana escribiendo Obj-C. Puede que este lenguaje, cuando llevas meses utilizando sea una maravilla, pero despues de haber probado el sabor de una taza de Java; programar en Objective-C parece como si aun estuvieras llevando los pantalones de campana y las melenas de los '80. A corto plazo, resulta dificil memorizar los nombres de tantos métodos para operaciones simples y he acabado utilizando cut & paste para casi todo.

Creo que Objective-C queda totalmente fuera de lugar frente a la portabilidad y claridad de Java, la eficencia y popularidad de C/C++ y la rapidez y potencia de Perl/Phyton. Y además, dado que MacOS es casi la única plataforma que lo aprovecha, no podemos encontrar grandes cantidades de código reaprovechale y bibliotecas.

Afortunadamente Cocoa, en esta versión también se encuentra bastante unido a Java. Desde el propio XCode (la herramienta que porporciona Apple para desarrollar) permite elegir a la hora de crear un objeto si es Obj-C o Java. Además el Java de toda la vida (usando Swing) también funciona perfectamente integrado en el sistema. Según algunos datos, puede incluso ser más eficiente que Obj-C. Eso si, útltimamente Apple ha hecho público que la única API para Cocoa válida sigue siendo la de Obj-C, la versión Java es solo de puente o aprendizaje.

Espero que este acercamiento signifique que en las próximas versiones de MacOS se pueda programar en Java de forma nativa, evitando este desfasado lenguaje de programación.
Y más ahora que parece que los Mac van a convertirse en un producto de masas, también debería de tener una lenguaje de programación " de masas", más popular y moderno.

Más información de Objective-C
Web Oficial de Apple sobre Cocoa
Pequeño resumen de la sintaxis y operaciones más comunes
Recursos para la prrogramación en Cocoa

Offtopic: No dejeis de probar el Van Houten Cocoa
Agradecimientos: Este articulo no podria haber sido escrito sin la ayuda de Willy.

No hay comentarios: