MacApp fue Apple Computer 's orientado a objetos marco de aplicaciones para el Mac OS clásico . Lanzado en 1985, pasó de Object Pascal a C ++ en la versión 3.0 de 1991, que ofrecía soporte para gran parte de la nueva funcionalidad de System 7 . MacApp se utilizó para una variedad de aplicaciones importantes, incluidas Adobe Photoshop y SoftPress Freeway . El MFC de Microsoft y el OWL de Borland se basaron directamente en conceptos de MacApp.
Durante un período de diez años, el producto tuvo períodos en los que tuvo poco desarrollo seguidos de rachas de actividad. A través de este período, Symantec 's Piense biblioteca de clases / Think Pascal se había convertido en un serio competidor para MacApp, ofreciendo un modelo más simple de una forma mucho más alto rendimiento entorno de desarrollo integrado (IDE).
Symantec tardó en responder al cambio a la plataforma PowerPC a principios de la década de 1990, y cuando Metrowerks presentó por primera vez su sistema CodeWarrior / PowerPlant en 1994, rápidamente desplazó a MacApp y Think como las principales plataformas de desarrollo en Mac. Incluso Apple usó CodeWarrior como su principal plataforma de desarrollo durante la era Copland a mediados de la década de 1990.
MacApp tuvo un breve respiro entre 2000 y 2001, como un sistema para la transición al carbono del sistema en Mac OS X . Sin embargo, después de demostrar una versión en la Conferencia Mundial de Desarrolladores (WWDC) en junio de 2001, todo el desarrollo se canceló en octubre.
Historia
Versiones Pascal
MacApp era un descendiente directo de Lisa Toolkit , el primer esfuerzo de Apple en el diseño de un marco de aplicación orientado a objetos, dirigido por Larry Tesler . El equipo de ingeniería del kit de herramientas incluía a Larry Rosenstein, Scott Wallace y Ken Doyle. El kit de herramientas se escribió en un lenguaje personalizado conocido como Clascal , que agregó técnicas orientadas a objetos al lenguaje Pascal .
Inicialmente, el desarrollo para Mac se llevó a cabo utilizando un compilador cruzado en Lisa Workshop. A medida que las ventas de Mac terminaron efectivamente con las ventas de Lisa, se inició un esfuerzo para construir una nueva plataforma de desarrollo para Mac, que se convirtió en el Taller de Programadores de Macintosh , o MPW. Como parte de este proceso, Clascal se actualizó para convertirse en Object Pascal y Lisa Toolkit ofreció notas de diseño para lo que se convirtió en MacApp.
Escribir un programa para Mac sin un marco de aplicación no es una tarea fácil, pero en ese momento el campo de la programación orientada a objetos todavía era relativamente nuevo y muchos desarrolladores lo consideraban algo sospechoso. Los primeros marcos tendían a confirmar esta sospecha, ya que eran amplios, lentos y, por lo general, inflexibles.
MacApp fue quizás el primer marco realmente utilizable en todos los significados del término. Las aplicaciones compiladas eran bastante razonables en términos de tamaño y huella de memoria, y el rendimiento no era lo suficientemente malo como para que los desarrolladores se avergonzaran de ello. Aunque "demasiado simple" en sus primeros lanzamientos, varias versiones posteriores abordaron rápidamente los principales problemas. En ese momento, alrededor de 1987, el sistema había madurado hasta convertirse en una herramienta útil y varios desarrolladores comenzaron a utilizarlo en proyectos importantes.
Versiones C ++
En este punto, a finales de la década de 1980, el mercado se estaba moviendo hacia C ++ . Al mismo tiempo, Apple estaba profundamente comprometido con el lanzamiento del System 7 , que tenía varias características nuevas importantes. Se tomó la decisión de hacer la transición a una versión completamente nueva de MacApp, 3.0, que usaría C ++ en lugar de Object Pascal. Este movimiento fue objeto de un largo y acalorado debate entre los defensores de Object Pascal y C ++ en Usenet y otros foros. Sin embargo, 3.0 logró obtener un seguimiento razonable después de su lanzamiento en 1991, a pesar de que la suite de desarrolladores, MPW, se estaba volviendo obsoleta. Luego, Apple redujo el tamaño de todo el grupo de herramientas de desarrollo, dejando a MacApp y MPW con poco personal.
Una de las razones de esta reducción fue la larga saga de Apple de intentar introducir la "próxima gran plataforma" para el desarrollo, casi siempre en forma de un sistema multiplataforma de algún tipo. Su primer intento fue Bedrock , una biblioteca de clases creada en asociación con Symantec que se ejecutaba en Mac y Windows, que tuvo una muerte prolongada cuando ambas partes finalmente dejaron de trabajar con la otra. Una de las razones de sus problemas fue la creación de OpenDoc , que a su vez se convirtió en un sistema multiplataforma que competía directamente con Bedrock. Hubo algunos intentos de posicionar Bedrock como una plataforma OpenDoc, pero nunca salió nada de esto.
Mientras se llevaban a cabo estos desarrollos, MPW y MacApp fueron ignorados en gran medida. Era más importante poner esos recursos de desarrollador en estos nuevos proyectos para ayudarlos a llegar al mercado antes. Pero cuando Bedrock falló y OpenDoc encontró una recepción tibia, la Mac se quedó con herramientas que ahora tenían casi una década y no podían competir con los productos más nuevos de terceros. A principios de la década de 1990, los frameworks competidores se convirtieron en competidores reales de MacApp. Primero, TCL de Symantec obtuvo seguidores, pero luego PowerPlant de Metrowerks generalmente se hizo cargo de todo el mercado.
Muerte persistente
Los principales desarrolladores de MacApp continuaron trabajando en el sistema a un bajo nivel de actividad durante la década de 1990. Cuando todos los proyectos multiplataforma "oficiales" de Apple colapsaron, a fines de 1996 el equipo anunció que proporcionarían una versión multiplataforma de MacApp.
Poco después, Apple compró NeXT y anunció que OpenStep sería la principal plataforma de desarrollo de Apple en el futuro, bajo el nombre Cocoa . Cocoa ya era multiplataforma, en ese momento ya había sido portado a unas seis plataformas, y era mucho más avanzado que MacApp. Esto dio lugar a fuertes protestas de los programadores de Mac existentes que protestaron porque sus programas estaban siendo enviados a la " caja de penalización ", siendo efectivamente abandonados.
En WWDC'98, Steve Jobs anunció que los comentarios negativos sobre el cambio a Cocoa se estaban abordando mediante la introducción del sistema Carbon . Carbon permitiría que los programas Mac existentes se ejecutaran de forma nativa bajo el nuevo sistema operativo, después de alguna conversión. Metrowerks anunció que trasladarían su marco PowerPlant a Carbon, pero Apple no hizo ningún anuncio similar con respecto a MacApp.
A lo largo de este período, permaneció un núcleo de usuarios leales de MacApp que se frustraron cada vez más con el comportamiento de Apple. A fines de la década de 1990, durante la introducción de Cocoa, esto había crecido hasta el descarte absoluto del producto. Las cosas iban tan mal que un grupo de usuarios de MacApp llegó a organizar su propia reunión en la WWDC '98 con un nombre falso, para evitar que el personal de Apple les negara una sala para reunirse.
Este apoyo continuo se notó dentro de Apple, y a finales de 1999 un "nuevo" equipo de MacApp, formado por miembros que habían trabajado en él desde el principio, recibió la tarea de lanzar una nueva versión. Se incluyeron las nuevas Apple Class Suites (ACS), una capa más delgada de envoltorios de C ++ para muchas de las nuevas características de Mac OS que se introdujeron desde OpenStep. MacApp 3.0 Release XV fue lanzado el 28 de agosto de 2001 para el deleite de muchos. Sin embargo, en octubre, el producto fue eliminado una vez más, esta vez para siempre, y el soporte para las versiones existentes de MacApp terminó oficialmente.
El PowerPlant X compatible con Carbon no se envió hasta 2004, y hoy Cocoa es casi universal para la programación de MacOS e iOS.
MacApp hoy
MacApp se mantiene vivo gracias a un grupo dedicado de desarrolladores que han mantenido y mejorado el marco desde que Apple dejó de admitirlo en 2001. MacApp se ha actualizado para admitir completamente Carbon Events, Universal Binaries, Unicode Text, control MLTE, control DataBrowser, FSRefs Análisis de XML, controles personalizados, ventana compuesta, ventana de cajón, ventana HIView y ventanas personalizadas. MacApp también tiene clases contenedoras de C ++ para HIObject y HIView. También la versión de Pascal, basada principalmente en MacApp-2, se ha portado a Mac OS X y Xcode. Cuenta con nombres de archivo largos Unicode y documentos transmitidos con intercambio automático de bytes.
MacApp es compatible con Xcode IDE. De hecho, en la WWDC 2005 , después de que Apple anunciara la transición a las CPU Intel, un solo desarrollador tardó 48 horas en actualizar MacApp y las aplicaciones de ejemplo de MacApp para admitir los binarios universales.
Descripción
- Esta descripción se basa en MacApp 3.0, que tenía un modelo subyacente más avanzado que el 2.0 anterior y difería de muchas maneras significativas.
El propio Mac OS tiene un sistema de gestión de eventos muy simple. La estructura de eventos que se pasa del sistema operativo a la aplicación solo tiene un tipo de evento como "pulsación de tecla" o "clic del ratón", y los detalles de su ubicación y las teclas modificadoras que se mantienen presionadas. Depende de la aplicación decodificar esta simple información en la acción que realizó el usuario, por ejemplo, hacer clic en un comando de menú. Decodificar esto podría ser difícil, revisar listas de objetos en pantalla y verificar si el evento tuvo lugar dentro de sus límites.
MacApp proporcionó una solución a este problema utilizando el patrón de comando , en el que las acciones del usuario se encapsulan en objetos que contienen detalles del evento y luego se envían al objeto adecuado para llevarlas a cabo. La lógica de mapear el evento al "objeto adecuado" se manejó completamente dentro del marco y su tiempo de ejecución, disminuyendo en gran medida la complejidad de esta tarea. El papel de la maquinaria interna de MacApp es tomar los eventos básicos del sistema operativo, traducirlos en comandos semánticamente de nivel superior y luego enrutar el comando al objeto adecuado.
MacApp no solo liberó al autor de tener que escribir este código, que todo programa requiere, sino que también como efecto secundario, este diseño separó limpiamente el código en comandos , acciones de cara al usuario y sus controladores , el código interno que hizo el trabajo. . Por ejemplo, uno podría tener comandos para "Cambiar a verde" y "Cambiar a rojo", los cuales son manejados por una sola función ChangeColor()
. Un programa que separaba limpiamente los comandos y los controladores era conocido, en el lenguaje de Apple, factorizado .
La factorización de un programa fue particularmente importante en versiones posteriores de Mac OS, comenzando con System 7 . System 7 introdujo el sistema Apple Events , que expandió el sistema de eventos del Mac OS original con uno mucho más rico que podría enviarse entre aplicaciones, no solo desde el sistema operativo a una aplicación en particular. Esto se combinó con el sistema AppleScript que permitió que estos eventos se generaran a partir de código de secuencia de comandos. En MacApp 3.0, los eventos de Apple se decodificaron en los mismos comandos como si hubieran sido iniciados por acciones directas del usuario, lo que significa que el desarrollador no tuvo que escribir mucho código, si es que lo hubo, para manejar directamente los eventos de Apple. Este fue un problema importante para los desarrolladores que usaban sistemas anteriores, incluido MacApp 2.0, que no tenía tal separación y, a menudo, dejaba fuera el soporte de Apple Event.
De acuerdo con su función como marco de aplicación, MacApp también incluyó una serie de objetos pre-enrollados que cubren la mayor parte de la GUI básica de Mac: ventanas, menús, cuadros de diálogo y widgets similares estaban todos representados dentro del sistema. Desafortunadamente, Apple solía proporcionar envoltorios livianos sobre el código interno de Mac OS existente en lugar de proporcionar sistemas que se podían usar en el "mundo real". Por ejemplo, la TTEView
clase se ofreció como el widget de editor de texto estándar, pero la implementación subyacente de TextEdit estaba muy limitada y la propia Apple a menudo declaró que no debería usarse para aplicaciones profesionales. Como resultado, los desarrolladores a menudo se vieron obligados a comprar objetos complementarios para abordar este tipo de necesidades, o desarrollar los suyos propios. La falta de un conjunto de objetos GUI de calidad profesional puede considerarse uno de los mayores problemas de MacApp.
Este problema se ha solucionado con el lanzamiento de MacApp R16. MacApp R16 utiliza controles Carbon estándar para todos los objetos GUI de MacApp. Por ejemplo, Carbon introdujo el motor de texto multilingüe (MLTE) para soporte completo de texto Unicode y documentos largos. En R16, la TTEView
clase original ha sido reemplazada por TMLTEView
, que usa el control MLTE.
enlaces externos
- Guía del programador para MacApp : documentación completa de la serie Inside Macintosh