stringtranslate.com

Cacao (API)

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 marcos Foundation Kit , Application Kit y Core Data , incluidos en el Cocoa.harchivo de encabezado, y las bibliotecas y marcos incluidos en ellos, como la biblioteca estándar C y el tiempo de ejecución Objective-C. [1]

Las aplicaciones Cocoa generalmente se desarrollan utilizando las herramientas de desarrollo proporcionadas por Apple, específicamente Xcode (anteriormente Project Builder ) e Interface Builder (ahora parte de Xcode), utilizando los lenguajes de programación Objective-C o Swift . Sin embargo, se puede acceder al entorno de programación Cocoa utilizando otras herramientas. También es posible escribir programas Objective-C Cocoa en un editor de texto simple y compilarlos manualmente con GNU Compiler Collection (GCC) o Clang desde la línea de comandos o desde un archivo MAKE .

Para los usuarios finales , las aplicaciones Cocoa son aquellas escritas utilizando el entorno de programación Cocoa. Estas aplicaciones suelen tener una apariencia familiar, ya que el entorno de programación Cocoa proporciona muchos elementos de interfaz de usuario comunes (como botones, barras de desplazamiento, etc.) y automatiza muchos aspectos de una aplicación para cumplir con las pautas de interfaz humana de Apple .

Para iOS , iPadOS , tvOS y watchOS , existe una API similar, llamada Cocoa Touch , que incluye reconocimiento de gestos , animación y un conjunto diferente de elementos de control gráfico . Se utiliza 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 se puso a trabajar en el sistema operativo Rhapsody , que sería el sucesor directo de OpenStep. Se suponía que tenía una base de emulación para aplicaciones clásicas de Mac OS , denominada 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. Así, las clases Cocoa comienzan con las letras NS , como NSString o NSArray. Estos representan el término propietario original para el marco OpenStep, NeXTSTEP. [2]

Gran parte del trabajo realizado para desarrollar 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 utilizaron Display PostScript para la visualización en pantalla de texto y gráficos, mientras que Cocoa depende de Apple's Quartz (que utiliza el modelo de imagen en formato de documento portátil (PDF), pero no su tecnología subyacente). Cocoa también tiene un nivel de soporte de Internet, incluidas las clases HTML NSURL y WebKit , y otras, mientras que OpenStep solo tenía soporte rudimentario para conexiones de red administradas a través de clases NSFileHandle y sockets Berkeley .

El marco de software resultante recibió el nombre de Cocoa por razones de conveniencia, porque el nombre ya había sido registrado por Apple. Durante muchos años antes de este uso actual del nombre, la marca Cocoa de Apple se había originado como el nombre de una aplicación de diseño de proyectos multimedia para niños. La aplicación se desarrolló originalmente en Apple Advanced Technology Group con el nombre KidSim , y luego se le cambió el nombre y se registró como "Cocoa". El nombre, acuñado por Peter Jensen, quien fue contratado para desarrollar Cocoa para Apple, pretendía evocar "Java para niños", ya que se ejecutaba integrado en las páginas web. [3] La marca, y por tanto el nombre "Cocoa", se reutilizó para evitar el retraso que se habría producido al registrar una nueva marca para este marco de software. El programa original "Cocoa" fue descontinuado en Apple en una de las racionalizaciones que siguieron al regreso de Steve Jobs a Apple. Luego se concedió la licencia a un tercero y se comercializó como Stagecast Creator hasta 2014.

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 se derivan la mayoría de las clases, tanto de proveedor como de usuario, implementa un esquema de recuento de referencias para la gestión de memoria. Los objetos que se derivan de la clase raíz NSObject responden a un retainmensaje releasey mantienen un recuento de retención. Existe un método titulado retainCount, pero, contrariamente a su nombre, normalmente no devolverá el recuento de retención exacto de un objeto. Se utiliza principalmente para fines a nivel de sistema. Apple no recomienda invocarlo manualmente.

Un objeto recién asignado creado con alloco copytiene un recuento de retención de uno. Enviar un retainmensaje a ese objeto incrementa el recuento de retención, mientras que enviarle un releasemensaje disminuye el recuento de retención. Cuando el recuento de retención de un objeto llega a cero, se desasigna mediante un procedimiento similar a un destructor de C++ . deallocNo se garantiza que se invoque.

A partir de Objective-C 2.0, el tiempo de ejecución de Objective-C implementó un recolector de basura opcional , que ahora está obsoleto y en desuso a favor del conteo automático de referencias (ARC). En este modelo, el tiempo de ejecución convirtió las operaciones de recuento de referencias de Cocoa , como "retener" y "liberar", en no operativas . El recolector de basura no existe en la implementación iOS de Objective-C 2.0. La recolección de basura en Objective-C se ejecutó en un subproceso en segundo plano de baja prioridad y puede detenerse en los eventos de usuario de Cocoa, con la intención de mantener la experiencia del usuario receptiva. El recolector de basura heredado todavía está disponible en Mac OS X versión 10.13, pero ninguna aplicación proporcionada por Apple lo utiliza.

En 2011, el compilador LLVM introdujo el conteo automático de referencias (ARC), que reemplaza el recolector de basura convencional al realizar un análisis estático del código fuente de Objective-C e insertar 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 marcos son funcionalmente similares a las bibliotecas compartidas , un objeto compilado que se puede cargar dinámicamente en el espacio de direcciones de un programa en tiempo de ejecución, pero los marcos agregan recursos asociados, archivos de encabezado y documentación. Los marcos Cocoa se implementan como un tipo de paquete que contiene los elementos antes mencionados en ubicaciones estándar.

Una parte clave de la arquitectura Cocoa es su modelo de vistas integral. Está organizado según líneas convencionales para un marco de aplicación, pero se basa en el modelo de dibujo en formato de documento portátil (PDF) proporcionado por Quartz . Esto permite crear contenido de dibujo personalizado utilizando comandos de dibujo similares a PostScript , lo que también permite la compatibilidad con impresoras automáticas, etc. Dado que el marco Cocoa gestiona todos los recortes, desplazamientos, escalas y otras tareas de dibujo de gráficos, el programador se libera de implementar la infraestructura básica y puede concentrarse en los aspectos únicos del contenido de una aplicación.

Modelo-vista-controlador

Los equipos de Smalltalk en Xerox PARC finalmente adoptaron una filosofía de diseño que condujo a un desarrollo sencillo y una alta reutilización de código. El concepto, denominado modelo-vista-controlador (MVC), divide una aplicación en tres conjuntos de clases de objetos que interactúan:

El diseño de Cocoa es una aplicación justa, pero no absolutamente estricta, de los principios de MVC. En OpenStep, la mayoría de las clases proporcionadas eran clases de Vista de alto nivel (en AppKit) o ​​una de varias clases de modelo de nivel relativamente bajo como NSString. En comparación con sistemas MVC similares, OpenStep carecía de una capa de modelo sólida. Por ejemplo, ninguna clase de acciones representaba un "documento". Durante la transición a Cocoa, la capa de modelo se amplió enormemente, introduciendo una serie de 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 del controlador. Estas clases se consideran parte del sistema Cocoa Bindings, que también hace un uso extensivo de protocolos como Key-Value Observing y Key-Value Binding. El término "vinculación" se refiere a una relación entre dos objetos, a menudo entre una vista y un controlador. Los enlaces permiten al desarrollador centrarse más en las relaciones declarativas en lugar de orquestar un comportamiento detallado.

Con la llegada de Mac OS X 10.4, Apple amplió aún más esta base al introducir el marco Core Data , que estandariza el seguimiento de cambios y la persistencia en la capa del modelo. De hecho, el marco simplifica enormemente el proceso de realizar cambios en los datos de la aplicación, deshacer los cambios cuando sea necesario, guardar datos en el disco y volver a leerlos.

Al proporcionar soporte de marco para los tres dominios MVC, el objetivo de Apple es reducir la cantidad de código repetitivo o "pegamento" que los desarrolladores tienen que escribir, liberando recursos para dedicar tiempo a funciones específicas de la aplicación.

Encuadernació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 la memoria. Esto restringe el diseño de una aplicación, ya que se necesitan clases de manejo de comandos específicas , generalmente organizadas según el patrón de cadena de responsabilidad . Si bien Cocoa conserva este enfoque en su mayor parte, el enlace tardío de Objective-C abre una mayor flexibilidad.

En Objective-C, los métodos están representados por un selector , una cadena que describe el método a llamar. Cuando se envía un mensaje, el selector se envía al tiempo 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 son datos de texto, esto permite guardarlos en un archivo, transmitirlos a través de una red o entre procesos, o manipularlos de otras maneras. La implementación del método se busca en tiempo de ejecución, no en tiempo de compilación. Hay una pequeña penalización de rendimiento por esto, [5] pero el enlace tardío permite que el mismo selector haga referencia a diferentes implementaciones.

De manera similar, Cocoa proporciona un método generalizado de manipulación de datos llamado codificación de valores clave (KVC). [6] Esto permite buscar o cambiar un dato o propiedad de un objeto en tiempo de ejecución por su nombre. El nombre de la propiedad actúa como clave para el valor. En los idiomas 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; sin embargo, cualquier propiedad de ese objeto se puede descubrir utilizando KVC. Además, al ampliar este sistema utilizando algo de observación de valores clave (KVO) en términos de Cocoa, se proporciona soporte automático para deshacer y rehacer .

La vinculación estática tardía es una variante de vinculación en algún lugar entre la vinculación estática y dinámica. La vinculación de nombres antes de ejecutar el programa se llama estática ( temprana ); Los enlaces realizados 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, considere 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 funciones tipográficas profesionales completas , como interletraje , ligaduras y desplazamiento de texto alrededor de formas arbitrarias. , rotación , compatibilidad total con Unicode y representación de glifos suavizados . El diseño del párrafo puede ser controlado automáticamente o por el usuario, utilizando un objeto " regla " incorporado que se puede adjuntar a cualquier vista de texto. La revisión ortográfica es automática y utiliza un conjunto de diccionarios de idiomas para todo el sistema. Se incluye soporte ilimitado para deshacer/rehacer. Usando solo las funciones integradas, se puede escribir una aplicación de edición de texto en tan solo 10 líneas de código. Con nuevos objetos de controlador, esto puede caer hacia cero. Cuando se necesitan extensiones, el uso de Objective-C por parte de Cocoa hace que esta sea una tarea sencilla. Objective-C incluye el concepto de "categorías", que permite modificar clases existentes "in situ". La funcionalidad se puede lograr en una categoría sin ningún cambio en las clases originales en el marco, o incluso acceso a su fuente. En otros lenguajes comunes, esta misma tarea requiere derivar una nueva subclase que admita las características agregadas y luego reemplazar todas las instancias de la clase original con instancias de la nueva subclase.

Implementaciones y enlaces

Los marcos Cocoa están escritos en Objective-C . Los enlaces de Java para los frameworks Cocoa (denominados puente Java ) también estuvieron disponibles con el objetivo de reemplazar Objective-C con un lenguaje más popular [7] pero estos enlaces eran impopulares entre los desarrolladores de Cocoa y la semántica de paso de mensajes de Cocoa no se traducía bien a un lenguaje de tipo estático como Java. [8] La necesidad de Cocoa de vincularse 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 quedaría obsoleto, lo que significa que las funciones 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 pretende reemplazar a Objective-C. [9]

AppleScriptObjC

Originalmente, AppleScript Studio podía usarse para desarrollar aplicaciones Cocoa más simples. [10] Sin embargo, a partir de Snow Leopard, ha quedado obsoleto. Fue reemplazado por AppleScriptObjC, que permite programar en AppleScript , mientras se utilizan marcos Cocoa. [11]

Otras fijaciones

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.

Los enlaces de terceros disponibles para otros lenguajes incluyen AppleScript , Clozure CL , Monobjc y NObjective ( C# ), Cocoa# (CLI), Cocodao y D /Objective-C Bridge, [12] [13] LispWorks , Object Pascal , CamelBones ( Perl) . ), PyObjC ( Python ), FPC PasCocoa ( Lazarus y Free Pascal ), RubyCocoa ( Ruby ). [14]

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 usa el modelo de objetos Objective-C directamente y, por lo tanto, puede usar los marcos Cocoa sin necesidad de un vinculante.

Otras implementaciones

También existen implementaciones de código abierto de partes importantes del marco Cocoa, como GNUstep y Cocotron, [15] que permiten el desarrollo de aplicaciones Cocoa multiplataforma para apuntar a otros sistemas operativos, como Microsoft Windows y Linux .

Ver también

Referencias

  1. ^ ab Descripción general de la tecnología Mac: marcos OS X. Desarrollador.apple.com. Recuperado el 18 de septiembre de 2013.
  2. ^ Amit Singh (19 de junio de 2006). Componentes internos de Mac OS X: un enfoque de sistemas. ISBN 0-321-27854-2. El cacao es una herencia importante de NeXT, como lo indica... el prefijo "NS"
  3. ^ Mardesich, Jodi (14 de abril de 1997). "Una nota amarga en Rhapsody de Apple. Los escritores de software que alguna vez fueron leales desconfían del nuevo sistema operativo a medida que se avecina una conferencia crucial". No. Final de la mañana. Noticias de San José Mercury. Archivado desde el original el 6 de marzo de 2016 . Consultado el 13 de agosto de 2015 .
  4. ^ Mundo híbrido. Cilindro.be. Recuperado el 18 de septiembre de 2013.
  5. ^ Wikilibros: algunas ventajas de Objective-C
  6. ^ "Guía de programación de codificación de valores clave" . Consultado el 27 de septiembre de 2021 .
  7. ^ Steve Klingsporn (2003). "Escribir aplicaciones Cocoa en Java". MacTech . 19 (12).
  8. ^ "Uso del puente Java" (PDF) . Apple Inc. Debido a que Java es un lenguaje fuertemente tipado, requiere más información sobre las clases e interfaces que manipula en el momento de la compilación. Por lo tanto, antes de utilizar clases de Objective-C como Java, se debe escribir y compilar una descripción de las mismas.
  9. ^ "El lenguaje Swift ultrasecreto de Apple surgió del trabajo para sostener Objective-C, que ahora pretende reemplazar".
  10. ^ "Guía de programación de AppleScript Studio (no recomendada): acerca de AppleScript Studio". Apple Inc . Consultado el 20 de noviembre de 2013 .
  11. ^ "Notas de la versión de AppleScriptObjC". Apple Inc . Consultado el 20 de noviembre de 2013 .
  12. ^ Cocodao, puente para crear aplicaciones Cocoa en lenguaje D.
  13. ^ D/Objective-C Bridge, un mecanismo de enlace de lenguaje para Cocoa.
  14. ^ lista más extensa de implementaciones
  15. ^ Cocotron, implementación de software libre de Cocoa.

Bibliografía

enlaces externos