miércoles, 20 de octubre de 2010

Objective-C

El lenguaje Objective-C es un lenguaje de programación que procede del lenguaje C, y es orientado a objetos. Es menos utilizado que el lenguaje C++, ya que se utiliza en Mac OS X, para programar en la API Cocoa. La empresa NeXT, contribuyó a su creación y mejoramiento.

Objective-C está formulado de manera más simple y es mucho menos extenso que el lenguaje C++ que también está orientado a objetos. Por lo que se ahorran muchas líneas de código y es más fácil para el programador entender su lógica clara, disminuida y precisa.

Existen muchos elementos en común con el lenguaje C, sobre la herencia el Objective-C tiene herencia simple, es decir una clase puede tener un único padre. Y sobre las características heredadas del lenguaje C encontramos: control de flujo, datos (fundamentales, punteros, estructuras), conversiones implícitas o explicitas, variables (estáticas, globales, locales), las funciones y su sintaxis, directivas del procesador y compilador.

En general estos tres lenguajes se pueden diferenciar sobre la creación de enlaces estáticos y dinámicos. Cuando nos referimos a estáticos es sobre el llamado de objetos en C++ (por ejemplo), donde el compilador identifica las variables (también llamados punteros a objetos estáticos).

En Objective-C se aplican los enlaces dinámicos donde las variables son identificadas por el runtime y no por el compilador y sólo si existen punteros de objetos. El runtime es el tiempo que demora un sistema operativo en ejecutar el programa, por lo tanto es el medio de ejecución propiamente tal.

Es decir, si comparamos el conjunto de lenguaje C y C++ con Objective-C nos daremos cuenta que los métodos y funciones deben ser llamados en alguna parte del código y se comprueba que efectivamente funcionen (en C++ por parte del compilador).

En Objective-C se hace algo similar pero con la diferencia que el programa compilará todos los datos, y los objetos son los que decidirán cuando ejecutar los métodos. El compilador en este caso sólo revisa si no existe un código determinado y mandará un mensaje de aviso, pero no es el encargado principal en este caso (como en el lenguaje anterior).

En otras palabras la diferencia sería en que en el lenguaje C++ el compilador hace el trabajo de verificar las variables, ver de donde son llamadas y por qué métodos o funciones cumplen. Y en el Objective-C son objetos que tienen información de sus propios métodos y variables por lo que no necesitan que el compilador haga el trabajo. Eso ahorra tiempo de compilación, y en su reemplazo se utiliza para el tiempo de ejecución.

Su lenguaje interpretativo es similar, se crean clases, al igual que métodos y funciones, pero su sintaxis cambia al ser más dinámico. El lenguaje Objective-C es débilmente tipado al igual que el lenguaje C. Es decir en una variable puede tener muchos valores distintos, por ejemplo valores no específicos, cambiantes que aunque estén relacionados no son los mismos (en el caso de la utilización de números). Al contrario del caso de C++ que es un lenguaje mayormente tipado y debe realizar conversiones de lenguaje para que sea más ordenado por defecto.

Otras características del Objective-C son en su parte dinámica:

1. Memoria dinámica: los lenguajes C y C++ deben adaptarse a memoria dinámica, y tienen un mayor peso. Mientras que Objective-C crea sus objetos siempre en memoria dinámica para darle menos peso y que se demore menos.

2. Tipos dinámicos: En Objective-C se puede tipificar mucho más ampliamente que en C++ que es mucho más limitado (el proceso que se genera es ver los errores o vacios en el código).

3. Introspección: se usa para preguntar acerca de los datos y su uso. A qué clase u objeto pertenece tal variable, etc.

4. Enlace dinámico: en el lenguaje C++ el compilador se decide que funciones realizar para el objeto, en Objective-C, busca en el propio objeto y clase la función de ejecución.

5. Carga dinámica: cuando se cargan las funciones del programa, el lenguaje busca nuevas formas de actualizarse y completar lo que le falta (a través de plugins por ejemplo).

En los puntos de vista de conexiones podemos saber que Objective-C posee en común con C++ la “agregación” esto es que la vida del objeto no la limita el contenedor y deben ser punteros de objetos. Las conexiones son 3 entre ellas encontramos: conexión outlet (punteros de un objeto a otro), conexión target action (mensaje action hacia un target) y Bindings (conexión de objetos distintos).

Podríamos concluir que entre Objective-C y el lenguaje C se hacen procesos similares, pero mejorados, y que en C++ hay mayores diferencias. La evolución de estos lenguajes ha permitido dejar de lado lo estático y pasar a lo dinámico, sólo que aún aunque su interpretación del lenguaje sea similar, siempre el C va a ser más estático que Objective-C, pero se basa en sus principios de programación pero no del todo, sólo lo fundamental y lo transforma en un mejor proceso.

No hay comentarios: