De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

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 Data , tal como se incluyen 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 de Objective-C. [1]

Las aplicaciones Cocoa se desarrollan típicamente usando las herramientas de desarrollo proporcionadas por Apple, específicamente Xcode (anteriormente Project Builder ) e Interface Builder (ahora parte de Xcode), usando los lenguajes de programación Objective-C o Swift . Sin embargo, se puede acceder al entorno de programación Cocoa utilizando otras herramientas, como Clozure CL , LispWorks , Object Pascal , Python , Perl , Ruby y AppleScript con la ayuda de mecanismos puente como PasCocoa , PyObjC, CamelBones , RubyCocoa y un puente D / Objective-C. Una implementación de 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 se puede usar con Cocoa sin puente. También es posible escribir programas Objective-C Cocoa en un editor de texto simple y construirlo 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 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 iPhone , iPod Touch , iPad , Apple TV y Apple Watch .

Historia [ editar ]

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. Debía haber tenido 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. Estos representan el término propietario original para el 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 usaron 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 imagen Portable Document Format (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 otros, 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 Cocoa en aras de la conveniencia, porque el nombre ya había sido registrado por Apple. Durante muchos años antes de este uso actual del nombre, la marca comercial 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 fue desarrollada originalmente en el Grupo de Tecnología Avanzada de Apple con el nombre de KidSim , y luego fue renombrada y registrada como "Cocoa". El nombre, acuñado por Peter Jensen, quien fue contratado para desarrollar Cocoa para Apple, tenía la intención de evocar "Java para niños", ya que se ejecutaba incrustado en páginas web. [3] La marca, y por lo 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" se suspendió en Apple en una de las racionalizaciones que siguieron al regreso de Steve Jobs a Apple. Luego se le otorgó la licencia a un tercero y se comercializó como Stagecast Creator a partir de 2011 .

Gestión de la memoria [ editar ]

Una característica del entorno Cocoa es su facilidad para administrar la memoria asignada dinámicamente. La clase NSObject de Foundation Kit , de la que se derivan la mayoría de las clases, tanto del proveedor como del 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 retainy un releasemensaje y mantienen un recuento de retención. Un método titulado retainCountexiste, pero al contrario de su nombre, por lo general no devolverá el recuento exacto de retención de un objeto. Se utiliza principalmente para fines de nivel de sistema. Apple no recomienda invocarlo manualmente.

Un objeto recién asignado creado con alloco copytiene un recuento de retención de uno. El envío de un retainmensaje a ese objeto aumenta el recuento de retención, mientras que el envío de un releasemensaje reduce 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-ops . El recolector de basura no existe en la implementación de iOS de Objective-C 2.0. La recolección de basura en Objective-C se ejecutó en un subproceso de fondo 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 usa.

En 2011, el compilador LLVM introdujo el conteo automático de referencias (ARC), que reemplaza al 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 [ editar ]

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 frameworks Cocoa se implementan como un tipo de paquete , que contiene los elementos antes mencionados en ubicaciones estándar.

  • Foundation Kit ( Foundation ), apareció por primera vez en Enterprise Objects Framework en NeXTSTEP 3. [4] Se desarrolló como parte del trabajo de OpenStep y, posteriormente, se convirtió en la base del AppKit de OpenStep cuando ese sistema se lanzó en 1994. En macOS, Foundation es basado 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 constantesen el marco, proviene de la herencia OPENSTEP de Cocoa, que fue desarrollada conjuntamente por NeXT y Sun Microsystems .
  • El kit de aplicación ( AppKit ) desciende directamente del kit de aplicación NeXTSTEP original. Contiene programas de código que se pueden utilizar para crear e interactuar con interfaces gráficas de usuario . AppKit está construido sobre Foundation y usa 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 clave de la arquitectura Cocoa es su modelo de vistas integral. Esto está organizado según las líneas convencionales para un marco de aplicación, pero se basa en el modelo de dibujo Portable Document Format (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 la impresora, etc. Dado que el marco de Cocoa gestiona todos los recortes, desplazamientos, escalas y otras tareas de dibujar 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 [ editar ]

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

  • Las clases modelo representan operaciones y datos del dominio del problema (como listas de personas / departamentos / presupuestos; documentos que contienen secciones / párrafos / notas al pie de texto estilizado).
  • Las clases de visualización implementan representaciones visuales y prestaciones para la interacción persona-computadora (como cuadrículas desplazables de íconos con subtítulos y menús emergentes de posibles operaciones).
  • Las clases de controlador contienen lógica que muestra los datos del modelo como representaciones de vista, asigna las acciones del usuario iniciadas por la oferta para las operaciones del modelo y mantiene el estado para mantener los dos sincronizados.

El diseño de Cocoa es una aplicación justa, pero no absolutamente estricta, de los principios MVC. En OpenStep, la mayoría de las clases proporcionadas eran clases de 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. Ninguna clase de acciones representaba un "documento", por ejemplo. Durante la transición a Cocoa, la capa del modelo se expandió en gran medida, introduciendo una serie de clases preinstaladas para proporcionar 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 "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. En efecto, el marco simplifica enormemente el proceso de realizar cambios en los datos de la aplicación, deshacer los cambios cuando es necesario, guardar los 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 "adhesivo" que los desarrolladores tienen que escribir, liberando recursos para dedicar tiempo a funciones específicas de la aplicación.

Encuadernación tardía [ editar ]

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 de acuerdo con 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 más 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 formas. 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 para 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 de manipulación de datos generalizado llamado codificación de valor 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 lenguajes tradicionales, esta vinculación tardía es imposible. KVC conduce a una gran flexibilidad de diseño. No es necesario que se conozca el tipo de un objeto, pero cualquier propiedad de ese objeto se puede descubrir utilizando KVC. Además, al extender este sistema usando algo que Cocoa denomina observación de valor-clave (KVO), se proporciona soporte automático para deshacer-rehacer .

El enlace estático tardío es una variante del enlace en algún lugar entre el enlace estático y dinámico. El enlace de nombres antes de que se ejecute el programa se llama estático ( temprano ); Los enlaces realizados mientras se ejecuta el programa son dinámicos ( tardíos o virtuales ).

Objetos ricos [ editar ]

Una de las características más útiles de Cocoa son los poderosos 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 columnas, con características de tipografía profesionales completas como kerning , ligaduras , correr texto alrededor de formas arbitrarias , rotación , soporte completo de Unicode y anti-alias glifo de renderizado. El diseño de los párrafos puede ser controlado automáticamente o por el usuario, usando una " regla incorporada"objeto que se puede adjuntar a cualquier vista de texto. La revisión ortográfica es automática, utilizando un conjunto de diccionarios de idiomas en todo el sistema. Se incluye soporte ilimitado para deshacer / rehacer. Con 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 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 ningún cambio en las clases originales en el marco, o incluso el acceso a su fuente. En otros lenguajes comunes, esta misma tarea requiere derivar un nuevo subclase que admite las características agregadas y luego reemplaza todas las instancias de la clase original con instancias de la nueva subclase.

Implementaciones y vinculaciones [ editar ]

Los marcos de Cocoa están escritos en Objective-C y, por lo tanto, es el lenguaje preferido para desarrollar aplicaciones de Cocoa. [ cita requerida ] 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 [7] pero estos enlaces no eran populares entre los desarrolladores de Cocoa y la semántica de paso de mensajes de Cocoa sí no se traduce bien a un lenguaje de tipo estático como Java. [8]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 de Java quedaría en desuso, 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 está destinado a reemplazar Objective-C. [9]

AppleScriptObjC [ editar ]

Originalmente, AppleScript Studio podrí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 la programación en AppleScript , mientras se utilizan los marcos Cocoa. [11]

Otras fijaciones [ editar ]

Los enlaces de terceros disponibles para otros lenguajes incluyen Clozure CL , Monobjc y NObjective ( C # ), Cocoa # (CLI), Cocodao y D / Objective-C Bridge, [12] [13] LispWorks , CamelBones ( Perl ), PyObjC ( Python ), FPC PasCocoa ( Lazarus y Free Pascal ), RubyCocoa ( Ruby ). [14] Nu usa el Objective-C modelo de objeto directamente y, por lo tanto, puede utilizar los frameworks Cocoa sin necesidad de un enlace.

Otras implementaciones [ editar ]

También hay implementaciones de código abierto de las principales partes 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 [ editar ]

  • Carbono (API)
  • GNUStep
  • C objetivo
  • Xcode
  • SDK de iOS
  • Constructor de interfaces
  • Aqua (interfaz de usuario)
  • Rosetta (software)
  • XNU
  • Cuarzo (capa de gráficos)
  • X11
  • Dibujo rapido
  • Swift (lenguaje de programación)

Referencias [ editar ]

  1. ^ Un b Mac Descripción de la tecnología: OS X Marcos . Developer.apple.com. Consultado el 18 de septiembre de 2013.
  2. ^ Amit Singh (19 de junio de 2006). 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" (Final matutino). Noticias de San José Mercury . Consultado el 13 de agosto de 2015 .
  4. ^ HybridWorld . Cilinder.be. Consultado 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: Introducción
  7. ^ Steve Klingsporn (2003). "Escribir aplicaciones de Cocoa en Java" . MacTech . 19 (12).
  8. ^ "Uso del puente de Java" (PDF) . Apple Inc. Dado que Java es un lenguaje fuertemente tipado, requiere más información sobre las clases y las interfaces que manipula en tiempo de compilación. Por lo tanto, antes de usar clases de Objective-C como clases de Java, se debe escribir y compilar una descripción de ellas.
  9. ^ "El lenguaje Swift ultrasecreto de Apple pasó del trabajo a sustentar Objective-C, que ahora pretende reemplazar" .
  10. ^ "Guía de programación de AppleScript Studio (no recomendado): 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 , unmecanismo de enlace de lenguaje para Cocoa.
  14. ^ lista más extensa de implementaciones
  15. ^ Cocotron , implementación de software libre de Cocoa.

Bibliografía [ editar ]

  • Aaron Hillegass : Cocoa Programming para Mac OS X , Addison-Wesley, tercera edición 2008, rústica, ISBN 0-321-50361-9 . 
  • Stephen Kochan : Programación en Objective-C , Sams, 1st Edition 2003, Paperback, ISBN 0-672-32586-1 . 
  • Michael Beam , James Duncan Davidson : Cocoa in a Nutshell , O'Reilly, 1st Edition 2003, Paperback, ISBN 0-596-00462-1 . 
  • Erick Tejkowski : Cocoa Programming for Dummies , 1st Edition 2003, Paperback, ISBN 0-7645-2613-8 . 
  • Simson Garfinkel , Michael K. Mahoney : Creación de aplicaciones de cacao: una guía paso a paso , O'Reilly, primera edición 2002, rústica, ISBN 0-596-00235-1 . [1] 
  • Paris Buttfield-Addison , Jon Manning : Aprendiendo el cacao con Objective-C , O'Reilly, tercera edición 2012, rústica, ISBN 978-1-4493-1849-9 . 
  • Scott Anguish , Erik M. Buck , Donald A. Yacktman : Cocoa Programming , Sams, 1st Edition 2002, Paperback, ISBN 0-672-32230-7 . 
  • Erik M. Buck , Donald A. Yacktman : Cocoa Design Patterns , Addison-Wesley Professional, primera edición 2009, rústica, ISBN 978-0321535023 
  • Bill Cheeseman : Recetas de cacao para Mac OS X , Peachpit Press, primera edición 2002, rústica, ISBN 0-201-87801-1 . 
  • Andrew Duncan: Objective-C Pocket Reference, O'Reilly , primera edición 2002, rústica, ISBN 0-596-00423-0 . 

Enlaces externos [ editar ]

  • Sitio web oficial [ enlace muerto ]
  • Biblioteca de desarrolladores de Mac, Cocoa Layer , documentación de Apple
  • iDevApps , foro de programación de Mac
  • Central de desarrollo de cacao
  • Desarrollador de cacao
  • Desbordamiento de pila: Cocoa
  1. ^ Garfinkel, Simson; Mahoney, Michael K. (2002). Creación de aplicaciones de cacao: una guía paso a paso . O'Reilly.