Cocoa es la interfaz de programación de aplicaciones (API) nativa orientada a objetos de Apple para su sistema operativo de escritorio macOS .
Cocoa consta de los frameworks Foundation Kit , Application Kit y Core Data , incluidos en el Cocoa.harchivo de cabecera, y las bibliotecas y frameworks incluidos por estos, como la biblioteca estándar de C y el entorno de ejecución de Objective-C. [ 1 ]
Las aplicaciones Cocoa se desarrollan normalmente con las herramientas de desarrollo de Apple, concretamente Xcode (antes Project Builder ) e Interface Builder (ahora integrada en Xcode), utilizando los lenguajes de programación Objective-C o Swift . Sin embargo, también se puede acceder al entorno de programación Cocoa con otras herramientas. Asimismo, es posible escribir programas Cocoa en Objective-C con un editor de texto sencillo y compilarlos manualmente con GNU Compiler Collection (GCC) o Clang desde la línea de comandos o desde un archivo makefile .
Para los usuarios finales , las aplicaciones Cocoa son aquellas escritas con el entorno de programación Cocoa. Estas aplicaciones suelen tener una apariencia familiar, ya que el entorno de programación Cocoa proporciona muchos elementos comunes de la interfaz de usuario (como botones, barras de desplazamiento, etc.) y automatiza muchos aspectos de la aplicación para cumplir con las directrices de interfaz humana de Apple .
Para iOS , iPadOS , tvOS y watchOS , están disponibles API similares a Application Kit, llamadas UIKit y WatchKit; estas incluyen reconocimiento de gestos , animación y un conjunto diferente de elementos de control gráfico diseñados para adaptarse a las plataformas específicas a las que se dirigen. Foundation Kit y Core Data también están disponibles en esos sistemas operativos. Se utilizan en aplicaciones para dispositivos Apple como el iPhone , el iPod Touch , el iPad , el Apple TV y el Apple Watch .
Historia
Cocoa continúa el linaje de varios marcos de software (principalmente App Kit y Foundation Kit ) de los entornos de programación NeXTSTEP y OpenStep desarrollados por NeXT en las décadas de 1980 y 1990. Apple adquirió NeXT en diciembre de 1996 y posteriormente comenzó a trabajar en el sistema operativo Rhapsody , que sería el sucesor directo de OpenStep . Este sistema iba a tener una base de emulación para aplicaciones clásicas de Mac OS , llamada Blue Box . La base de bibliotecas y soporte binario de OpenStep se denominó Yellow Box . Rhapsody evolucionó a Mac OS X, y Yellow Box se convirtió en Cocoa. Por lo tanto, las clases de Cocoa comienzan con las letras NS , como NSString o NSArray. Estas representan el término propietario original del marco OpenStep, NeXTSTEP. [ 2 ]
Gran parte del trabajo dedicado al desarrollo de OpenStep se aplicó al desarrollo de Mac OS X, siendo Cocoa la parte más visible. Sin embargo, existen diferencias. Por ejemplo, NeXTSTEP y OpenStep utilizaban Display PostScript para la visualización de texto y gráficos en pantalla, mientras que Cocoa depende de Quartz de Apple (que utiliza el modelo de imágenes PDF, pero no su tecnología subyacente). Cocoa también cuenta con cierto nivel de compatibilidad con la World Wide Web, incluyendo las clases HTML NSURL y WebKit , entre otras, mientras que OpenStep solo ofrecía una compatibilidad rudimentaria con las conexiones de red gestionadas mediante las clases NSFileHandle y los sockets de Berkeley .
La caja de herramientas API se llamaba originalmente "Yellow Box" y se renombró a Cocoa, un nombre que Apple ya había registrado como marca. La marca Cocoa de Apple se originó como el nombre de una aplicación de diseño de proyectos multimedia para niños. El nombre pretendía evocar "Java para niños", ya que se ejecutaba integrado en páginas web. [ 3 ] El programa original "Cocoa" se descontinuó tras el regreso de Steve Jobs a Apple. En ese momento, Java era un área de gran importancia para la empresa, por lo que "Cocoa" se usó como el nuevo nombre para "Yellow Box" porque, además del uso nativo de Objective-C, también se podía acceder a él desde Java a través de una capa puente. [ 4 ] Aunque Apple descontinuó el soporte para el puente Cocoa Java, el nombre continuó y se usó incluso para la API Cocoa Touch .
Gestión de la memoria
Una característica del entorno Cocoa es su facilidad para gestionar la memoria asignada dinámicamente. La clase NSObject de Foundation Kit , de la que derivan la mayoría de las clases, tanto de proveedor como de usuario, implementa un esquema de conteo de referencias para la gestión de memoria. Los objetos que derivan de la clase raíz NSObject responden a retainun releasemensaje y mantienen un contador de retención. retainCountExiste un método llamado , pero, a pesar de su nombre, normalmente no devuelve el contador de retención exacto de un objeto. Se utiliza principalmente para fines del sistema. Apple no recomienda invocarlo manualmente.
Un objeto recién asignado creado con alloco copytiene un contador de retención de uno. Enviar un retainmensaje a ese objeto incrementa el contador de retención, mientras que enviarle un mensaje lo decrementa. Cuando el contador de retención de un objeto llega a cero, se desasigna mediante un procedimiento similar a un destructorrelease de C++ . No se garantiza que se invoque.dealloc
A partir de Objective-C 2.0, el entorno de ejecución de Objective-C implementó un recolector de basura opcional , que ahora está obsoleto y desaconsejado en favor del Conteo Automático de Referencias (ARC). En este modelo, el entorno de ejecución convirtió las operaciones de conteo de referencias de Cocoa , como "retain" y "release", en operaciones nulas . El recolector de basura no existe en la implementación de Objective-C 2.0 para iOS . La recolección de basura en Objective-C se ejecutaba en un hilo en segundo plano de baja prioridad y podía detenerse ante eventos de usuario de Cocoa, con el fin de mantener una experiencia de usuario receptiva. El recolector de basura heredado todavía está disponible en Mac OS X versión 10.13, pero ninguna aplicación de Apple lo utiliza.
En 2011, el compilador LLVM introdujo el Conteo Automático de Referencias (ARC), que reemplaza al recolector de basura convencional mediante el análisis estático del código fuente de Objective-C y la inserción de mensajes de retención y liberación según sea necesario.
Marcos principales
Cocoa consta de tres bibliotecas de objetos Objective-C llamadas frameworks . Los frameworks son funcionalmente similares a las bibliotecas compartidas , es decir, objetos compilados que se pueden cargar dinámicamente en el espacio de direcciones de un programa en tiempo de ejecución. Sin embargo, los frameworks añaden recursos asociados, archivos de cabecera y documentación. Los frameworks de Cocoa se implementan como un tipo de paquete , que contiene los elementos mencionados en ubicaciones estándar.
- Foundation Kit ( Foundation ), apareció por primera vez en Enterprise Objects Framework en NeXTSTEP 3. [ 5 ] Fue desarrollado como parte del trabajo de OpenStep, y posteriormente se convirtió en la base de AppKit de OpenStep cuando ese sistema fue lanzado en 1994. En macOS, Foundation se basa en Core Foundation . Foundation es una biblioteca genérica orientada a objetos que proporcionamanipulación de cadenas y valores, contenedores e iteración , computación distribuida , bucles de eventos (bucles de ejecución) y otras funciones que no están directamente vinculadas a la interfaz gráfica de usuario. El prefijo "NS", utilizado para todas las clases y constantes en el marco, proviene de la herencia de OPENSTEP de Cocoa, que fue desarrollado conjuntamente por NeXT y Sun Microsystems .
- El Application Kit ( AppKit ) deriva directamente del Application Kit original de NeXTSTEP. Contiene código que los programas pueden usar para crear e interactuar con interfaces gráficas de usuario . AppKit está construido sobre Foundation y utiliza el mismoprefijo NS .
- Core Data es el marco de persistencia de objetos incluido con Foundation y Cocoa y que se encuentra en Cocoa.h. [ 1 ]
Una parte fundamental de la arquitectura Cocoa es su completo modelo de vistas. Este se organiza siguiendo las convenciones de un framework de aplicaciones, pero se basa en el modelo de dibujo PDF ( Portable Document Format ) proporcionado por Quartz . Esto permite crear contenido gráfico personalizado mediante comandos de dibujo similares a PostScript , lo que también posibilita la impresión automática, entre otras funciones. Dado que el framework Cocoa gestiona el recorte, el desplazamiento, el escalado y demás tareas relacionadas con el dibujo de gráficos, el programador queda liberado de la implementación de la infraestructura básica y puede concentrarse en los aspectos únicos del contenido de la aplicación.
Modelo-vista-controlador
Los equipos de Smalltalk en Xerox PARC finalmente se decantaron por una filosofía de diseño que facilitó el desarrollo y permitió una alta reutilización del código. Este concepto, denominado modelo-vista-controlador (MVC), divide una aplicación en tres conjuntos de clases de objetos que interactúan entre sí:
- Las clases de modelos representan datos y operaciones del dominio del problema (como listas de personas/departamentos/presupuestos; documentos que contienen secciones/párrafos/notas a pie de página de texto estilizado).
- Las clases de vista implementan representaciones visuales y funcionalidades para la interacción persona-ordenador (como cuadrículas desplazables de iconos con leyendas y menús emergentes con posibles operaciones).
- Las clases de controlador contienen lógica que expone los datos del modelo como representaciones de vista, asigna las acciones del usuario iniciadas por las funcionalidades a las operaciones del modelo y mantiene el estado para mantener ambos sincronizados.
El diseño de Cocoa es una aplicación bastante estricta, aunque no del todo, de los principios MVC. En OpenStep, la mayoría de las clases proporcionadas eran clases de vista de alto nivel (en AppKit) o clases de modelo de nivel relativamente bajo, como NSString. En comparación con sistemas MVC similares, OpenStep carecía de una capa de modelo robusta. Por ejemplo, no existía una clase estándar que representara un "documento". Durante la transición a Cocoa, la capa de modelo se amplió considerablemente, introduciendo varias clases predefinidas para proporcionar funcionalidades comunes a las aplicaciones de escritorio.
En Mac OS X 10.3, Apple introdujo la familia de clases NSController, que proporciona un comportamiento predefinido para la capa de controlador. Estas clases forman parte del sistema Cocoa Bindings , que también utiliza ampliamente protocolos como Key-Value Observing y Key-Value Binding . El término «binding» se refiere a una relación entre dos objetos, generalmente entre una vista y un controlador. Los bindings permiten al desarrollador centrarse más en las relaciones declarativas que en la gestión de comportamientos complejos.
Con la llegada de Mac OS X 10.4, Apple amplió aún más esta base al introducir el marco de trabajo Core Data , que estandariza el seguimiento de cambios y la persistencia en la capa del modelo. En efecto, este marco de trabajo simplifica enormemente el proceso de modificar los datos de la aplicación, deshacer los cambios cuando sea necesario, guardar los datos en el disco y volver a cargarlos.
Al proporcionar soporte de marco para los tres dominios MVC, el objetivo de Apple es reducir la cantidad de código repetitivo o de "conexión" que los desarrolladores tienen que escribir, liberando recursos para dedicar tiempo a funciones específicas de la aplicación.
Unión tardía
En la mayoría de los lenguajes orientados a objetos, las llamadas a métodos se representan físicamente mediante un puntero al código en memoria. Esto limita el diseño de una aplicación, ya que se necesitan clases específicas para el manejo de comandos , generalmente organizadas según el patrón de cadena de responsabilidad . Si bien Cocoa conserva este enfoque en gran medida, el enlace tardío de Objective-C ofrece mayor flexibilidad.
En Objective-C, los métodos se representan mediante un selector , una cadena que describe el método a llamar. Cuando se envía un mensaje, el selector se envía al entorno de ejecución de Objective-C, se compara con una lista de métodos disponibles y se llama a la implementación del método . Dado que el selector es un dato de texto, esto permite guardarlo en un archivo, transmitirlo a través de una red o entre procesos, o manipularlo de otras maneras. La implementación del método se consulta en tiempo de ejecución, no en tiempo de compilación. Esto conlleva una pequeña penalización en el rendimiento, [ 6 ] pero el enlace tardío permite que el mismo selector haga referencia a diferentes implementaciones.
De manera similar, Cocoa proporciona un método de manipulación de datos generalizado llamado codificación clave-valor (KVC). [ 7 ] Esto permite buscar o modificar un dato o propiedad de un objeto en tiempo de ejecución mediante su nombre. El nombre de la propiedad actúa como clave del valor. En los lenguajes tradicionales, esta vinculación tardía es imposible. KVC ofrece una gran flexibilidad de diseño. No es necesario conocer el tipo de un objeto, pero cualquier propiedad de ese objeto puede descubrirse mediante KVC. Además, al extender este sistema utilizando lo que Cocoa denomina observación clave-valor (KVO), se proporciona soporte automático para deshacer/rehacer .
El enlace estático tardío es una variante del enlace que se sitúa entre el enlace estático y el dinámico. El enlace de nombres antes de que se ejecute el programa se denomina estático ( temprano ); los enlaces que se realizan mientras se ejecuta el programa son dinámicos ( tardíos o virtuales ).
objetos ricos
Una de las características más útiles de Cocoa son los potentes objetos base que proporciona el sistema. Como ejemplo, consideremos las clases Foundation NSStringy NSAttributedString, que proporcionan cadenas Unicode , y el sistema en AppKit, que permite al programador colocar objetos de cadena en la GUI.NSText
NSTexty sus clases relacionadas se utilizan para mostrar y editar cadenas. La colección de objetos involucrados permite que una aplicación implemente cualquier cosa, desde un simple campo de entrada de texto de una sola línea hasta un esquema completo de diseño de texto de varias páginas y varias columnas, con características de tipografía profesional completas como kerning , ligaduras , texto corrido alrededor de formas arbitrarias , rotación , compatibilidad total con Unicode y representación de glifos suavizados . El diseño de párrafo se puede controlar automáticamente o por el usuario, utilizando un objeto " regla " incorporado que se puede adjuntar a cualquier vista de texto. La corrección ortográfica es automática, utilizando un conjunto de diccionarios de idiomas a nivel de sistema. Se incorpora soporte ilimitado para deshacer/rehacer. Utilizando solo las características integradas, se puede escribir una aplicación de editor de texto en tan solo 10 líneas de código. Con los nuevos objetos de controlador, esto puede reducirse a cero. Cuando se necesitan extensiones, el uso de Objective-C por parte de Cocoa hace que esta tarea sea sencilla. Objective-C incluye el concepto de " categorías ", que permite modificar clases existentes "en el lugar". La funcionalidad puede lograrse en una categoría sin modificar las clases originales del framework, ni siquiera acceder a su código fuente. En otros lenguajes comunes, esta misma tarea requiere crear una nueva subclase que admita las características añadidas y, posteriormente, reemplazar todas las instancias de la clase original con instancias de la nueva subclase.
Implementaciones y enlaces
Los frameworks Cocoa están escritos en Objective-C . También se pusieron a disposición enlaces Java para los frameworks Cocoa (denominados puente Java ) con el objetivo de reemplazar Objective-C con un lenguaje más popular [ 8 ] , pero estos enlaces no fueron populares entre los desarrolladores de Cocoa y la semántica de paso de mensajes de Cocoa no se tradujo bien a un lenguaje de tipado estático como Java. [ 9 ] La necesidad de Cocoa de un enlace en tiempo de ejecución significa que muchas de las características clave de Cocoa no están disponibles con Java. En 2005, Apple anunció que el puente Java sería descontinuado, lo que significa que las características agregadas a Cocoa en versiones de macOS posteriores a la 10.4 no se agregarían a la interfaz de programación Cocoa-Java.
En la Conferencia Mundial de Desarrolladores de Apple (WWDC) 2014, Apple presentó un nuevo lenguaje de programación llamado Swift , que está destinado a reemplazar a Objective-C. [ 10 ]
AppleScriptObjC
Originalmente, AppleScript Studio se podía usar para desarrollar aplicaciones Cocoa más sencillas. [ 11 ] Sin embargo, a partir de Snow Leopard, quedó obsoleto. Fue reemplazado por AppleScriptObjC, que permite programar en AppleScript , utilizando los frameworks de Cocoa. [ 12 ]
Otras encuadernaciones
Se puede acceder al entorno de programación Cocoa utilizando otras herramientas con la ayuda de mecanismos puente como PasCocoa , PyObjC , CamelBones , RubyCocoa y un puente D /Objective-C.
Entre los enlaces de terceros disponibles para otros lenguajes se incluyen AppleScript , Clozure CL , Monobjc y NObjective ( C# ), Cocoa# (CLI), Cocodao y D /Objective-C Bridge, [ 13 ] [ 14 ] LispWorks , Object Pascal , CamelBones ( Perl ), PyObjC ( Python ), FPC PasCocoa ( Lazarus y Free Pascal ), RubyCocoa ( Ruby ). [ 15 ]
Apple desarrolló anteriormente una implementación del lenguaje Ruby llamada MacRuby , que elimina la necesidad de un mecanismo puente, mientras que Nu es un lenguaje similar a Lisp que utiliza directamente el modelo de objetos de Objective-C y, por lo tanto, puede usar los marcos de trabajo de Cocoa sin necesidad de una vinculación.
Otras implementaciones
También existen implementaciones de código abierto de partes importantes del marco Cocoa, como GNUstep y Cocotron, [ 16 ] que permiten el desarrollo de aplicaciones Cocoa multiplataforma para otros sistemas operativos, como Microsoft Windows y Linux .
Véase también
Referencias
- 1 2 Descripción general de la tecnología Mac: Marcos de trabajo de OS X. Developer.apple.com. Consultado el 18 de septiembre de 2013.
- ↑ Amit Singh (19 de junio de 2006). Mac OS X Internals: A Systems Approach . Addison-Wesley Professional. ISBN 0-321-27854-2Cocoa
es una herencia importante de NeXT, como lo indica el prefijo "NS".
- ↑ Mardesich, Jodi (14 de abril de 1997). "Una nota amarga en la rapsodia de Apple: escritores de software que antes eran leales desconfían del nuevo sistema operativo mientras se acerca una conferencia crucial" . N.° Morning Final. San Jose Mercury News. Archivado del original el 6 de marzo de 2016. Recuperado el 13 de agosto de 2015 .
- ↑ Apple Inc. (10 de mayo de 1999), WWDC 1999 , consultado el 27 de abril de 2024
- ↑ HybridWorld . Cilinder.be. Consultado el 18 de septiembre de 2013.
- ↑ Wikibooks - Algunas ventajas de Objective-C
- ↑ "Guía de programación de codificación clave-valor" . Consultado el 27 de septiembre de 2021 .
- ↑ Steve Klingsporn (2003). "Escribiendo aplicaciones Cocoa en Java" . MacTech . 19 (12).
- ↑ "Uso del puente Java" (PDF) . Apple Inc.
Dado que Java es un lenguaje fuertemente tipado, requiere más información sobre las clases e interfaces que manipula en tiempo de compilación. Por lo tanto, antes de usar clases de Objective-C como si fueran de Java, es necesario escribir y compilar una descripción de las mismas.
- ↑ "El lenguaje Swift, ultrasecreto de Apple, surgió del trabajo para dar soporte a Objective-C, al que ahora pretende reemplazar" . 4 de junio de 2014.
- ↑ "Guía de programación de AppleScript Studio (no recomendada): Acerca de AppleScript Studio" . Apple, Inc. Consultado el 20 de noviembre de 2013 .
- ↑ "Notas de la versión de AppleScriptObjC" . Apple, Inc. Consultado el 20 de noviembre de 2013 .
- ↑ Cocodao , puente para crear aplicaciones Cocoa en lenguaje D.
- ↑ Puente D/Objective-C , un mecanismo de enlace de lenguaje para Cocoa.
- ↑ Lista más extensa de implementaciones
- ↑ Cocotron , implementación de software libre de Cocoa.
Bibliografía
- Aaron Hillegass : Programación Cocoa para Mac OS X , Addison-Wesley, 3.ª edición, 2008, tapa blanda, ISBN 0-321-50361-9.
- Stephen Kochan : Programación en Objective-C , Sams, 1.ª edición, 2003, tapa blanda, ISBN 0-672-32586-1.
- Michael Beam , James Duncan Davidson: Cocoa in a Nutshell , O'Reilly, 1.ª edición, 2003, rústica, ISBN 0-596-00462-1.
- Erick Tejkowski : Programación en Cocoa para principiantes , 1.ª edición, 2003, tapa blanda, ISBN 0-7645-2613-8.
- Garfinkel, Simson ; Mahoney, Michael K. (2002). Building Cocoa Applications: A Step by Step Guide (1.ª ed.). O'Reilly Media . CiteSeerX 10.1.1.394.3248 . ISBN 0-596-00235-1.
- Paris Buttfield-Addison , Jon Manning : Aprendiendo Cocoa con Objective-C , O'Reilly, 3.ª edición, 2012, tapa blanda, ISBN 978-1-4493-1849-9.
- Scott Anguish , Erik M. Buck , Donald A. Yacktman : Cocoa Programming , Sams, 1.ª edición, 2002, rústica, ISBN 0-672-32230-7.
- Erik M. Buck , Donald A. Yacktman : Patrones de diseño de cacao , Addison-Wesley Professional, 1.ª edición, 2009, tapa blanda, ISBN 978-0321535023
- Bill Cheeseman : Recetas de cacao para Mac OS X , Peachpit Press, 1.ª edición, 2002, tapa blanda, ISBN 0-201-87801-1.
- Andrew Duncan: Objective-C Pocket Reference, O'Reilly , 1.ª edición, 2002, rústica, ISBN 0-596-00423-0.
Enlaces externos
- Biblioteca para desarrolladores de Mac, Cocoa Layer , documentación de Apple
- iDevApps , foro de programación para Mac
- Centro de desarrollo de Cocoa
- Cocoa Dev
- Stack Overflow: Cocoa
- API de macOS
- Apple Inc. desarrolló marcos de trabajo