Entorno de programación Mac OS X


Acerca de este documento

Mac OS X es el  sistema operativo de Apple. La X de 10 no debe entenderse como una evolución de Mac OS 9, sino como un sistema operativo totalmente distinto, diseñado desde cero, y con una base distinta.

La historia de Mac OS X, empezó con NextStep, un SO diseñado con fines experimentales y de investigación, creado por Steve Jobs tras abandonar Apple. Cuando se abrió el código fuente de este sistema operativo paso a llamarse OpenStep, y después, tras comprarlo Apple como la base para su nuevo sistema operativo, se le volvió a cambiar el nombre por Rhapsody, y por último, cuando se terminó de retocar para comercializarlo paso a llamarse Mac OS X.

En este reportaje vamos a estudiar las principales características que ofrece este SO de cara al programador.

Nota legal

Este reportaje ha sido escrito por Fernando López Hernández para macprogramadores.org y de acuerdo a las leyes internacionales sobre propiedad intelectual, a la Directiva 2001/29/CE del Parlamento Europeo de 22 de mayo de 2001 y al artículo 5 de la Ley 22/1987 de 11 de Noviembre de Propiedad Intelectual Española, el autor prohíbe la publicación de este documento en cualquier otro servidor web, así como su venta, o difusión en cualquier otro medio sin autorización previa.

Sin embargo el autor anima a todos los servidores web a colocar enlaces a este documento.  El autor también anima a cualquier persona interesada en aprender a programar en Mac OS X a bajarse o imprimirse este reportaje.

Madrid, Julio 2004
Para cualquier aclaración contacte con:
fernando@macprogramadores.org

API totalmente orientada a objeto

A diferencia de las API de otros sistemas operativos tradicionales como Windows, UNIX o OS/2, Mac OS X tiene una API totalmente orientada a objetos, con un diseño realmente bueno, que vamos a ir explicando.

Como ha comentado varias veces Steve Jobs, una API totalmente orientada a  objetos es una apuesta arriesgada ya que exige a los programadores un mayor nivel de formación, aunque tiene la ventaja de que el tiempo de desarrollo se reduce mucho. Esto pudo ser un inconveniente a principios de los 90, cuando se empezó a desarrollar NextStep, pero actualmente la mayoría de las herramientas de programación que se están diseñando usan metodologías de programación orientadas a objeto.

Una apreciación curiosa, como consecuencia de esta clara orientación a objetos, y de la reducción del coste de desarrollo que esta orientación a objetos implica, es que en el mundo de Mac OS X la mayoría de las aplicaciones están siendo desarrolladas por programadores individuales, a diferencia de los grandes equipos de trabajo que suelen desarrollar las aplicaciones más conocidas en otros entornos.

Lenguajes de programación

En Mac OS X, aunque da soporte a muchos lenguajes de programación, los lenguajes más usados para trabajar directamente con su API son dos: Objective-C y Java.

Objective-C es un superconjunto de C que amplía a este para convertirle en un lenguaje orientado a objetos. Es decir, tiene la misma raíz que tuvo C++, pero incluye conceptos más avanzados que C++ como son los protocolos o interfaces, y es mucho más dinámico que C++, en el sentido de que toda la toma de decisiones se realiza en tiempo de ejecución y se dejan pocas decisiones para el compilador. Esto da al programador mucha más flexibilidad en la creación de estructuras de datos dinámicas y de objetos polimórficos.

Aunque no formaba parte del NextStep original, Apple ha introducido un segundo lenguaje mucho más popular: Java. En principio, la función de Java no es la programación de aplicaciones en red como podría pensarse, ya que Objective-C permite programar las mismas aplicaciones, sino la adopción de estándares y la posibilidad de exportar e importar aplicaciones a otros entornos fácilmente.

A diferencia de otros sistemas operativos Mac OS X trae instalado Java “de fábrica” con lo cual siempre podemos ejecutar una aplicación Java sin necesidad de instalar previamente la máquina virtual.

Cocoa

La API de programación de Mac OS X se llama Cocoa (chocolate, suponemos que para complementar el café de que tomaban los programadores de Java) y como dijimos antes es una API totalmente orientada a objetos, es decir formada básicamente por clases. A está API se la considera un framework en el sentido de que sus clases ayudan al programador a montar el esqueleto de su aplicación.

Una característica importante de esta API es que es accesible tanto desde Objetive-C como desde Java, lo cual es muy útil ya que reduce considerablemente el tiempo de aprendizaje del framework. Hay que tener en cuenta que en la actualidad las librerías de programación son tan grandes, que su aprendizaje nos lleva mucho más tiempo que el aprendizaje del lenguaje de programación en sí.

La librería Cocoa está dividida en dos kits:

Application Kit Este kit contiene todas las clases relacionadas con la interfaz gráfica (ventanas, botones cajas de texto, etc.). Pero el Application Kit es mucho más que un conjunto de componentes de interfaz gráfica, también nos da acceso a OpenGL o tiene clases para gestión de documentos (mediante el patrón vista-documento usado también en otros muchos frameworks de programación), o por ejemplo, también trae clases que encapsulan fuentes, colores, impresión, corrección ortográfica o drag and drop.

Foundation Kit Este kit contiene todas las demás clases no visuales como son las clases de acceso a ficheros, de programación multihilo, de trabajo en red, de utilidad, de gestión de cadenas, etc.

Carbon

Carbon es el nombre de la API que mantiene compatibilidad con la antigua API de Mac. Para facilitar la migración al nuevo SO a las aplicaciones Mac actuales, Apple ha puesto esta API en Mac OS X. Se trata de un API programable basada en funciones C.

Los nuevos programadores que lleguen a Mac OS X no deben de estudiar esta API, ya que con el tiempo Apple acabará dejando de darla soporte y luego quitándola.

La estrategia es la misma que la que aplicó Microsoft cuando migro de Win16 a Win32, pero con la diferencia de que Win32 está hay para quedarse, y Carbon acabará siendo sustituida por Cocoa.

Java

Por un lado la máquina virtual de Apple dispone de todas las librerías estándar del Java 2 SDK 1.4.1 (AWT, Swing, Servlets, JSP, J2EE…) y de hecho está certificada por Sun como una máquina virtual 100% pure Java. Esto permite ejecutar aplicaciones Java, hechas en otros entornos, en Mac OS X y viceversa.

Pero además desde Java podemos acceder a todas las clases de la API Cocoa, lo cual permite realizar aplicaciones Java prácticamente tan rápidas como sus correspondientes aplicaciones Objective-C. 

De todos es conocida la lentitud que caracteriza a las aplicaciones gráficas hechas con Swing. Pero este problema desaparece al utilizar Cocoa, la API nativa de Mac OS X.

No sólo las aplicaciones Java sobre Cocoa se ejecutan muy rápidamente, sino que además la implementación de la máquina virtual de Apple está mucho más optimizada que en otros SO, como Windows o Linux, esto es debido a que la máquina virtual de Apple accede directamente a las capas de rederning del SO también llamadas Core Services, (p.e. el window server), que son capas del SO a las que el programador de aplicaciones no accede directamente, sino que accede siempre a través de la API del SO. Esta es una ventaja que se debe al hecho de que la máquina virtual de Apple este implementada por ingenieros de Apple. En otros SO como Windows, Sun tiene que conformarse con acceder a los servicios de Windows a través de la API de Win32.

No sólo las librerías de interfaz gráfica son más rápidas, sino que también el acceso a ficheros o a red está optimizado, ya que la máquina virtual Java de Apple no utiliza los Core Services para realizar esta tarea, sino que accede directamente al núcleo del SO para solicitar estos servicios.

Objective-C++

Objective-C++ es un lenguaje que surgió en los tiempos de NextStep. Este lenguaje permite mezclar código fuente C++ y Objective-C en el mismo fichero, así como llamar a objetos C++ desde Objective-C y viceversa. Esto permite al programador Objective-C utilizar todas las librerías de C++ existentes, y al programador C++ acceder a toda la libraría de Cocoa. Los ficheros Objective-C++ llevan la extensión .mm ó .M (extensión antigua que se mantiene por compatibilidad).

Aunque inicialmente el compilador de Mac OS X no soportaba Objective-C++, a partir de Septiembre del 2001 Apple, tras las continuas peticiones recibidas por parte de los desarrolladores, anunció que lo incluiría y así lo hizo metiéndolo como parte del gcc a partir del gcc 2.95.2, que venía con Mac OS X 10.1

 

Continúa …….

Madrid, Julio 2004
Fernando López Hernández
fernando@macprogramadores.org

About Jordi Llorente

Extraño cocktail, un poco de ciencia, un poco de arte, y mucha pasión.