Используя среды исходного приложения OS X

OS X включает три высокоуровневых собственных среды разработки, которые можно использовать для графического интерфейса пользователя приложения: Углерод, Какао и Java. Эти среды являются полнофункциональными средами разработки самостоятельно, и можно записать законченные приложения в любой из этих сред.

В дополнение к этим технологиям можно также использовать OpenGL, X11, QT, Tcl/Tk, wxWidgets, и много других традиционных технологий графики UNIX при записи приложений для OS X. В каждом случае существуют компромиссы. Эта глава объясняет эти компромиссы и показывает, как они влияют на Вас как на программиста, а также Ваших пользователей.

Выбор среды исходного приложения

В контексте этого документа Углерод, Какао и Java представлены как способ записать обертку GUI для основанного на UNIX инструмента.

Запись в эти среды позволяет Вам создать приложение, которое неотличимо от любого другого собственного приложения Mac. Java или платформы Какао являются, вероятно, средами, которые Вы будете использовать в подаче приложений UNIX к OS X, несмотря на то, что платформы Углерода используются некоторыми разработчиками. Следующие разделы обрисовывают в общих чертах все три.

Хорошее общее правило состоит в том, что, если Вы решаете портировать свое приложение от X11 до собственной среды GUI, Углерод является хорошим выбором для C и других процедурных приложений X11, в то время как Какао является хорошим выбором, если Ваше приложение использует высокоуровневые инструментарии, такие как Tcl/Tk, или спокойное Какао является также хорошим выбором для обертывания приложений командной строки с GUI.

  Технологии Высококачественной графики рисунка 4-1
High-level graphics technologies

Если Вы решаете портировать свое межплатформенное приложение на собственный OS X среда GUI, необходимо тщательно рассмотреть, как лучше всего сделать этот порт в пути, который удобен в сопровождении. Для некоторых полезных подсказок необходимо также считать (Ре) разработку для Мобильности.

Какао

Какао является объектно-ориентированной платформой, включающей многие самые большие сильные места OS X. На основе весьма уважаемых платформ OpenStep это допускает быструю разработку и развертывание и с его объектно-ориентированным проектом и с интеграцией со средствами разработки OS X. Какао разделено на две главных части: Основа и Набор Приложения. Основа обеспечивает фундаментальные классы, определяющие типы данных и наборы; это также обеспечивает классы информации о базовой системе доступа как даты и коммуникационные порты. Набор Приложения основывается на этом путем предоставления Вам классов, необходимо реализовать графические событийно-управляемые пользовательские интерфейсы.

Какао также обеспечивает абстракцию файловой системы, делающую вещи, такие как файловые браузеры, похожи, что пользователи Mac ожидают. При разработке коммерческого применения необходимо использовать их. Если Вы разрабатываете внутреннее приложение, которое будет в основном использоваться людьми, знакомыми с UNIX, расположение может сбить с толку, таким образом, этот APIs может не быть надлежащим. Посмотрите, что Файл Представления Открывает и Сохраняет Диалоговые окна для получения дополнительной информации.

Родной язык для Какао является Objective C, обеспечивающим объектно-ориентированные расширения стандарта C и Objective C ++. Язык программирования Objective C описывает грамматику Objective C и представляет понятия позади него. Objective C поддерживается в gcc 2.95 и 3. Большая часть Какао API также доступна через Java. Какао является также основанием для AppleScript Studio, средой приложения для основанной на сценарии разработки GUI.

Дополнительная информация о Какао, включая пример кода, может быть найдена в http://developer .apple.com/. Документация какао включая учебные руководства доступна в http://developer .apple.com/.

Преимущества разработки какао

  • Среда быстрой разработки

  • Объектно-ориентированный проект платформы

  • Превосходная интеграция с инструментами разработчика OS X

  • Очень устойчивый набор функций

  • Может использовать в своих интересах существующий C, C++, Objective C и код Java

  • Подобный уровень абстракции к инструментариям высокого уровня, таким как QT, Tcl/Tk, и т.д.

Недостатки разработки какао

  • Межплатформенное развертывание требует наличия отдельной, кодовой базы некакао для части GUI

  • Требует интегрирующегося Java, Objective C или Objective C ++ в Вашу кодовую базу для уровня GUI

  • Требует знания Java, Objective C или Objective C ++

  • Совсем другой уровень абстракции от необработанного программирования X11

  • Потенциальные потери производительности, если используется неправильно

Пример: вызов C или код C++ с какао

При разработке приложения с нуля в Какао, Вы находитесь в объектно-ориентированной среде. Можно также использовать в своих интересах объектно-ориентированный характер Какао при преобразовании существующий ранее код, поскольку можно использовать платформы Какао для обертывания функциональности кода C++ или C.

Язык Objective C был расширен для понимания C++. Часто это вызывают Objective C ++, но функциональность остается в основном тем же. Поскольку Какао понимает Objective C ++, можно вызвать собственный компонент К и код C++ от Какао. Это - один пример того, как можно использовать в своих интересах кодовую базу при добавлении фронтэнда Macintosh. Пример предоставлен ниже того, как Objective C переносится вместе C, C++ и Objective C ++ функциональность. Перечисление 4-1 показывает Objective C основной класс.

Перечисление 4-1  main.m

#import <AppKit/AppKit.h>
 
int main(int argc, const char *argv[]) {
    return NSApplicationMain(argc, argv);
}

Когда пользователь дважды щелкает по значку приложения, это запустило все. Вызов тогда отправляется для вызова a HelloController объект NIB, файл, содержащий интерфейсную информацию. Списки для HelloController.m и HelloController.h следовать.

Перечисление 4-2  HelloController.m

#import "HelloController.h"
 
@implementation HelloController
 
- (void)doAbout:(id)sender
{
    NSRunAlertPanel(@"About",@"Welcome to Hello World!",@"OK",NULL,NULL);
}
 
- (IBAction)switchMessage:(id)sender
{
        int which=[sender selectedRow]+1;
        [helloButton setAction:NSSelectorFromString([NSString stringWithFormat:@"%@%d:",@"message",which])];
}
 
- (void)awakeFromNib
{
    [[helloButton window] makeKeyAndOrderFront:self];
}
 
@end
 

Перечисление 4-3  HelloController.h

#import <AppKit/AppKit.h>
 
@interface HelloController : NSObject
{
    id helloButton;
    id messageRadio;
}
- (void)doAbout:(id)sender;
- (void)switchMessage:(id)sender;
@end

Коммуникация между C, C++ и кодом Objective C обрабатывается как показано в Перечислении 4-4. Заголовочный файл SayHello.h показан в Перечислении 4-5.

Перечисление 4-4  SayHello.mm

#import "SayHello.h"
#include "FooClass.h"
#include <Carbon/Carbon.h>
 
@implementation SayHello
 
- (void)message1:(id)sender
{
    NSRunAlertPanel(@"Regular Obj-C from Obj-C",@"Hello, World! This is a regular old NSRunAlertPanel call in Cocoa!",@"OK",NULL,NULL);
}
 
- (void)message2:(id)sender
{
    int howMany;
    NSString *theAnswer;
    Foo* myCPlusPlusObj;
    myCPlusPlusObj=new Foo();
    howMany=myCPlusPlusObj->getVariable();
    delete myCPlusPlusObj;
    theAnswer=[NSString stringWithFormat:@"Hello, World! When our C++ object is queried, it tells us that the number is %i!",howMany];
    NSRunAlertPanel(@"C++ from Obj-C",theAnswer,@"OK",NULL,NULL);
}
 
- (void)message3:(id)sender
{
    Alert(128,NULL); //This calls into Carbon
}
 
@end
 

Перечисление 4-5  SayHello.h

#import <AppKit/AppKit.h>
 
@interface SayHello : NSObject
{
}
 
- (void)message1:(id)sender;
- (void)message2:(id)sender;
- (void)message3:(id)sender;
@end

Класс C++, обернутый этими, которые вызывает Какао, показан в Перечислении 4-6. Заголовочный файл, FooClass.h, показан в Перечислении 4-7.

Перечисление 4-6  FooClass.cpp

#include "FooClass.h"
Foo::Foo()
{
 variable=3;
}
 
int Foo::getVariable()
{
 return variable;
}

Перечисление 4-7  FooClass.h

class Foo {
public:
    Foo();
    int getVariable();
    void * objCObject;
private:
    int variable;
};

Необходимо быть осторожными при записи кода с помощью Какао, потому что те же конструкции, упрощающие для разработчика, имеют тенденцию ухудшать производительность, когда злоупотребили. В частности интенсивное использование передачи сообщений может привести к вялому приложению.

Идеальное использование Какао как тонкий слой поверх существующего приложения. Такой проект дает Вам не только хорошую производительность и простоту проекта GUI, но также и минимизирует сумму расхождения между Вашей кодовой базой UNIX и Вашей кодовой базой OS X.

Углерод

Углерод является средой, разработанной для подачи существующих приложений Mac OS к OS X. Это может использоваться для подачи приложения X11 к собственной среде OS X, так как основные примитивы получения на подобном уровне абстракции.

Углерод также предлагает относительно прямой файловый ввод-вывод с несколькими улучшениями, которые недоступны через POSIX APIs, таковы как псевдонимы (которые ведут себя как пересечение символьной ссылки и жесткой ссылки). Углерод представляет файловую систему по-другому пользователю, чем приложения UNIX. Это - расположение, которое пользователи Mac привыкли видеть, и таким образом необходимо использовать его если возможный при разработке коммерческого применения для развертывания широкого масштаба.

Однако, если Ваши пользователи являются преимущественно пользователями UNIX (например, если Вы - внутренний разработчик в корпоративной среде), использование файла Углерода, API может не быть надлежащим, так как объемы появляются, как они делают в Средстве поиска, вместо того, чтобы быть организованными согласно иерархии файловой системы.

Преимущества разработки углерода

  • Хорошо задокументированный набор функций

  • Интеграция с инструментами разработчика OS X

  • Очень устойчивый набор функций

  • Простой C и интеграция C++

  • Подобный уровень абстракции к X11

  • Процедурный проект, а не объектно-ориентированный

Недостатки разработки углерода

  • Никакое межплатформенное развертывание без отдельной кодовой базы неуглерода

  • Немного больше усилия, требуемого использовать в своих интересах собственные технологии OS X

  • Процедурный проект, а не объектно-ориентированный

В случае, если Вы задаетесь вопросом, это не опечатка. Процедурный проект в GUI может быть и преимуществом и недостатком.

Процедурный проект может быть преимуществом с точки зрения способности легко интегрироваться в любую среду, независимо от языка. Это - также преимущество, потому что это соответствует многим стилям графического программирования хорошо.

Процедурный проект может быть недостатком, однако, при контакте с более сложными проектами GUI, где было бы более удобно связать методы более близко с данными, на которые они воздействуют.

Lower-Level Graphics Technologies

С некоторым кодом просто абстрагировать код дисплея от базового вычислительного механизма, но часто это не имеет место. Специально для интенсивных графикой приложений можно хотеть использовать в своих интересах прямой вызов базовой графической функциональности предназначенной операционной системы. Все еще необходимо обернуть эту функциональность в высокоуровневый API, чтобы вывести на экран его на экран и позволить взаимодействие с пользователем, но в течение многих времен, где необходимо продвинуть пиксели в очень особенных методах, OS X предлагает Вам доступ к трем первоклассным графическим технологиям: Кварц, OpenGL и QuickTime.

  Технологии Низкокачественной графики рисунка 4-2
Low-level graphics technologies

Кварц

Кварц является графической системой, формирующей основу модели обработки изображений для OS X. Кварц дает Вам основанную на стандартах модель получения и выходной формат. Кварц обеспечивает и двумерный механизм получения и оконную среду OS X. Его механизм получения эффективно использует Portable Document Format (PDF), получающий модель для обеспечения получения профессиональной силы. Службы работы с окнами обеспечивают низкоуровневую функциональность, такую как буферизация окна и обработка событий, а также полупрозрачность. Кварц покрыт более подробно в Технологическом Обзоре Mac и в (http://developer .apple.com/).

Преимущества использования Кварца

  • Подобные постскриптуму функции получения

  • ОСНОВАННЫЙ НА PDF

  • Включенные инструменты управления цветом

  • Объединенная печать и модель обработки изображений

Недостатки к использованию Кварца

  • Никакое межплатформенное развертывание

OpenGL

OpenGL является промышленным стандартом 2D и 3D графическая технология. Это обеспечивает функциональность для рендеринга, отображения текстур, специальных эффектов и других функций визуализации. Это - фундаментальная часть OS X и реализовано на многих других платформах.

Учитывая его интеграцию во многие современные графические чипсеты и видеокарты, это особенно интересно для программ, требующих сложного графического манипулирования. Домашняя страница OpenGL дает больше информации о технологии в целом в http://www .opengl.org.

Страница OpenGL Apple, в https://developer.apple.com/devcenter/mac/resources/opengl/, дает больше информации о том, как это интегрируется в OS X и объясняет улучшения, которые обеспечивает OS X реализация OpenGL.

Преимущества использования OpenGL

  • Межплатформенная технология

  • Собственная интеграция OS X

  • Включенный с каждой установкой OS X

  • Очень устойчивый набор функций для обработки графики

Недостатки к использованию OpenGL

  • Некоторый уровень интеграции на прикладном уровне требуется

QuickTime

QuickTime является мощной мультимедийной технологией для управления, улучшения, хранения и поставки графики, видео и звука. Это - межплатформенная технология, обеспечивающая поставку на Mac OS, а также Windows. Больше информации о технологии может быть найдено в http://developer .apple.com/quicktime/.

Преимущества использования QuickTime

  • Устойчивый набор функций для управления звуком и видео

  • Кросс-платформенная разработка

Недостатки к использованию QuickTime

  • Не поддерживаемый в других основанных на UNIX системах.

Обратите внимание на то, что, в то время как сам QuickTime не поддерживается в основанных на UNIX системах, формат файла QuickTime поддерживается различными сторонними утилитами.