stringtranslate.com

Cacao (API)

Cocoa es la interfaz de programación de aplicaciones (API) orientada a objetos nativa de Apple para su sistema operativo de escritorio macOS .

Cocoa consta de los marcos Foundation Kit , Application Kit y Core DataCocoa.h , tal como se incluyen en el archivo de encabezado, y las bibliotecas y marcos incluidos en ellos, como la biblioteca estándar C y el entorno de ejecución Objective-C. [1]

Las aplicaciones Cocoa se desarrollan normalmente 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 Cocoa Objective-C en un editor de texto simple y compilarlo manualmente con GNU Compiler Collection (GCC) o Clang desde la línea de comandos o desde un makefile .

Para los usuarios finales , las aplicaciones Cocoa son aquellas escritas utilizando el entorno de programación Cocoa. Estas aplicaciones suelen tener un aspecto 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 , están disponibles API similares a Application Kit, llamadas UIKit y WatchKit; incluyen reconocimiento de gestos , animación y un conjunto diferente de elementos de control gráfico que están 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 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 frameworks de software (principalmente App Kit y Foundation Kit ) de los entornos de programación NeXTSTEP y OpenStep desarrollados por NeXT en los años 1980 y 1990. Apple adquirió NeXT en diciembre de 1996 y, posteriormente, se puso a trabajar en el sistema operativo Rhapsody que iba a ser el sucesor directo de OpenStep. Iba a tener una base de emulación para aplicaciones clásicas de Mac OS , llamada Blue Box . La base de OpenStep de bibliotecas y soporte binario 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 para el framework OpenStep, NeXTSTEP. [2]

Gran parte del trabajo que se llevó a cabo 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 usaban Display PostScript para la visualización en pantalla de texto y gráficos, mientras que Cocoa depende de Quartz de Apple (que usa el modelo de imágenes del 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 un soporte rudimentario para conexiones de red administradas a través de clases NSFileHandle y sockets Berkeley .

La caja de herramientas API se llamó originalmente “Yellow Box” y luego se renombró como Cocoa, un nombre que ya había sido registrado por Apple. La marca registrada Cocoa de Apple se había originado 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 suspendió después del regreso de Steve Jobs a Apple. En ese momento, Java era un área de gran enfoque 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 desde Java a través de una capa de puente. [4] A pesar de que Apple suspendió el soporte para el puente Java de Cocoa, el nombre continuó e incluso se usó para la API Cocoa Touch .

Gestión de la memoria

Una característica del entorno Cocoa es su capacidad 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 la memoria. Los objetos que se derivan de la clase raíz NSObject responden a un mensaje retainy a un releasemensaje, y mantienen un recuento de retención. Existe un método titulado retainCount, pero al contrario de lo que sugiere 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 lo disminuye. 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 entorno de ejecución de Objective-C implementó un recolector de basura opcional , que ahora está obsoleto y en desuso 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 "retener" y "liberar", en operaciones sin efecto . 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 subproceso en segundo plano de baja prioridad y puede detenerse en los eventos de usuario de Cocoa, con la intención de mantener la respuesta de la experiencia del usuario. El recolector de basura heredado aún está disponible en la versión 10.13 de Mac OS X, pero ninguna aplicación proporcionada por Apple lo utiliza.

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

Una parte clave de la arquitectura de Cocoa es su modelo de vistas integral. Este está organizado de acuerdo con las líneas convencionales de un marco de aplicación, pero se basa en el modelo de dibujo de 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 automática con impresoras, etc. Dado que el marco de Cocoa administra todos los recortes, desplazamientos, escalas y otras tareas de dibujo de gráficos, el programador se libera de la implementación de la infraestructura básica y puede concentrarse en los aspectos únicos del contenido de una aplicación.

Modelo-vista-controlador

Los equipos de Smalltalk de Xerox PARC finalmente se decidieron por una filosofía de diseño que condujo a un desarrollo sencillo y a una alta reutilización del 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 bastante estricta, pero no del todo, de los principios MVC. En OpenStep, la mayoría de las clases proporcionadas eran clases View 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 estándar representaba un "documento". Durante la transición a Cocoa, la capa de modelo se amplió en gran medida, introduciendo una serie de clases predefinidas para proporcionar una funcionalidad común 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 "enlace" 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 de grano fino.

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

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

En Objective-C, los métodos se representan mediante un selector , una cadena que describe el método que se va 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 son datos de texto, esto permite guardarlos en un archivo, transmitirlos a través de una red o entre procesos, o manipularlos de otras formas. La implementación del método se busca en el entorno de ejecución, no en el de compilación. Esto conlleva una pequeña penalización de rendimiento, [6] pero la vinculación tardía 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 clave-valor (KVC, por sus siglas en inglés). [7] Esto permite que un fragmento de datos o una propiedad de un objeto se busque o se modifique en tiempo de ejecución por su nombre. El nombre de la propiedad actúa como una clave para el valor. En los lenguajes tradicionales, esta vinculación tardía es imposible. KVC conduce a una gran flexibilidad de diseño. No es necesario conocer el tipo de un objeto, pero se puede descubrir cualquier propiedad de ese objeto mediante KVC. Además, al extender este sistema mediante algo que Cocoa denomina observación de clave-valor (KVO, por sus siglas en inglés), se proporciona soporte automático para deshacer y rehacer .

La vinculación estática tardía es una variante de la vinculación que se encuentra entre la vinculación estática y la dinámica. La vinculación de nombres antes de que se ejecute el programa se denomina estática ( temprana ); las vinculaciones que se realizan mientras se ejecuta el programa son dinámicas ( tardías 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 visualizar 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 kerning , ligaduras , texto en movimiento alrededor de formas arbitrarias , rotación , soporte completo de Unicode y representación de glifos suavizados . El diseño de párrafos se puede controlar automáticamente o por el usuario, utilizando un objeto " regla " integrado que se puede adjuntar a cualquier vista de texto. La revisión ortográfica es automática, utilizando un conjunto de diccionarios de idiomas de todo el sistema. El soporte ilimitado de deshacer/rehacer está integrado. Usando solo las características integradas, uno 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 a cero. Cuando se necesitan extensiones, el uso de Objective-C de Cocoa hace que esta sea una tarea sencilla. Objective-C incluye el concepto de "categorías", que permite modificar la clase existente "en el lugar". La funcionalidad se puede lograr en una categoría sin realizar cambios en las clases originales del marco de trabajo, o incluso sin acceder a su código 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 frameworks Cocoa están escritos en Objective-C . Los enlaces Java para los frameworks Cocoa (denominados puente Java ) también se pusieron a disposición con el objetivo de reemplazar Objective-C con un lenguaje más popular [8] pero estos enlaces no eran populares entre los desarrolladores de Cocoa y la semántica de paso de mensajes de Cocoa no se traducía bien a un lenguaje de tipado estático como Java. [9] La necesidad de Cocoa de enlaces 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 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) de 2014, Apple presentó un nuevo lenguaje de programación llamado Swift , que pretende reemplazar a Objective-C. [10]

Objeto AppleScriptC

Originalmente, AppleScript Studio podía utilizarse 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 mientras se utilizan los frameworks 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.

Los enlaces de terceros disponibles para otros lenguajes 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]

Una implementación del lenguaje Ruby llamada MacRuby , que elimina la necesidad de un mecanismo de puente, fue desarrollada anteriormente por Apple, mientras que Nu es un lenguaje similar a Lisp que utiliza el modelo de objetos Objective-C directamente y, por lo tanto, puede usar los marcos Cocoa sin necesidad de un enlace.

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 apuntar a otros sistemas operativos, como Microsoft Windows y Linux .

Véase también

Referencias

  1. ^ Descripción general de la tecnología Mac: marcos de OS X. Developer.apple.com. Recuperado el 18 de septiembre de 2013.
  2. ^ Amit Singh (19 de junio de 2006). Mac OS X Internals: A Systems Approach. ISBN 0-321-27854-2El 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 la rapsodia de Apple Los escritores de software, una vez leales, se muestran cautelosos ante el nuevo sistema operativo a medida que se avecina una conferencia crucial". N.º Final matutino. San Jose Mercury News. Archivado desde el original el 6 de marzo de 2016. Consultado el 13 de agosto de 2015 .
  4. ^ Apple Inc. (10 de mayo de 1999), WWDC 1999 , consultado el 27 de abril de 2024
  5. ^ HybridWorld. Cilinder.be. Recuperado el 18 de septiembre de 2013.
  6. ^ Wikilibros - Algunas ventajas de Objective-C
  7. ^ "Guía de programación de codificación de valores clave" . Consultado el 27 de septiembre de 2021 .
  8. ^ Steve Klingsporn (2003). "Cómo escribir aplicaciones Cocoa en Java". MacTech . 19 (12).
  9. ^ "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 tiempo de compilación. Por lo tanto, antes de utilizar las clases Objective-C como si fueran Java, se debe escribir y compilar una descripción de las mismas.
  10. ^ "El lenguaje ultrasecreto Swift de Apple surgió a partir del trabajo para sustentar Objective-C, al que ahora pretende reemplazar".
  11. ^ "Guía de programación de AppleScript Studio (no recomendada): Acerca de AppleScript Studio". Apple, Inc. Consultado el 20 de noviembre de 2013 .
  12. ^ "Notas de la versión de AppleScriptObjC". ​​Apple, Inc. Recuperado el 20 de noviembre de 2013 .
  13. ^ Cocodao, puente para crear aplicaciones Cocoa en lenguaje D.
  14. ^ Puente D/Objective-C, un mecanismo de enlace de lenguaje para Cocoa.
  15. ^ lista más extensa de implementaciones
  16. ^ Cocotron, implementación de software libre de Cocoa.

Bibliografía

Enlaces externos