|
|
Log In | Not a Member? |
Contact ADC |
| < Previous PageNext Page > |
Cocoaアプリケーションは、Mac OS Xの標準になりつつあります。たとえば、iPhotoはCocoaアプリケーションであり、SafariやMailアプリケーションも同様です。これらのアプリケーションの精巧な設計、豊富な機能群、魅力的なユーザインターフェイスは、批評家の方々からもかなりの賞賛をいただきました。しかし、これらのアプリケーションの設計段階から運用までが(典型的な開発サイクルと比較して)、どれほど短期間で達成されたかについては、一般のユーザの方にはあまり知られていません。アプリケーションであり開発環境としてのCocoaが、なぜCarbonに代わる有力で魅力ある選択肢になっているのでしょうか?
Cocoa入門
Mac OS XにおけるCocoaの位置付け
すべてのアプリケーション環境と同様に、Cocoaにもランタイムと開発という2つの側面があります。ランタイム面では、CocoaアプリケーションはAquaユーザインターフェイスを表示し、オペレーティングシステムのほかの可視部分(特にFinderやDockなどのアプリケーション)と密接に統合されています。ユーザエクスペリエンスを構成する要素の1つとしてシームレスに組み込まれることで、ランタイム面はそのすばらしさを発揮します。
しかし、それよりもプログラマにとって興味深いのは開発面です。Cocoaはオブジェクト指向ソフトウェアコンポーネント(クラス)の統合セットで、堅牢でフル機能を備えたMac OS Xアプリケーションを短期に作成できます。これらのクラスは再利用可能で適応性の高いソフトウェアビルディングブロックであるため、デベロッパはそのまま使用したり、独自の要件に合わせて拡張したりすることができます。Cocoaクラスには、ユーザインターフェイスオブジェクトからBonjourネットワークまで、開発に必要と考えられるものがほぼすべて揃っています。予想していなかった必要性が生じたときには、既存のクラスのサブクラスを簡単に作成して、その必要性に対応できます。
Cocoaはオブジェクト指向開発環境の中で、最も優れた血筋の1つを継承しています。1989年にNeXTSTEPとして発表されてから今日に至るまで、継続的に洗練され、テストされてきました(“「小さな歴史」”を参照)。そのエレガントでパワフルな設計は、アプリケーションだけでなく、コマンドラインツールやプラグイン、各種バンドルなど、いろいろなソフトウェアの短期開発に最適です。Cocoaはアプリケーションにたくさんの動作と外観を「無償で」提供しているため、デベロッパは独自の機能に取り組むためにより多くの時間を費やせます(Cocoaが提供するものの詳細については、“「Cocoaアプリケーションの機能」”を参照)。
Cocoaソフトウェアの開発には、複数のプログラミング言語を使用できます。主要な言語としては、Cocoa用の独自のランタイムを持つObjective-Cがあります。Objective-CはANSI Cのスーパーセットであり、オブジェクト指向プログラミングをサポートするために、(Smalltalkから派生した)構文とセマンティクスにかかわるいくつかの機能が拡張されています。追加された少数の規則は、シンプルで、学習や使用も簡単です。Objective-CはANSI Cに基づいているため、純粋なCコードとObjective-Cコードを自由に混在させることができます。また、CarbonやBSDなど、Cocoa以外のプログラムインターフェイスで定義した関数の呼び出しもできます。さらに、C++とCocoaのコードを組み合わせて、同じ実行可能ファイルにリンクすることもできます。最後に、Cocoaは同等のJavaのクラスのセット、およびJavaインターフェイスを対応するObjective-Cの実装にブリッジするメカニズムを通じて、Java言語もサポートします。CocoaのJava対応機能により、ネイティブのJavaオブジェクトとCocoaオブジェクトを(最大限まで)組み合わせることができます。
Important: Cocoa-Javaは、Java言語に精通しているデベロッパ向けの学習環境です。生産作業用にはお勧めしていません。Cocoa-Java APIとObjective-C APIは、後者が進化していく中で、現在は平行して維持されていません。
さらにPython/Objective-C間のブリッジであるPyObjCを使用して、Cocoa向けのプログラミングを行うことができます。PyObjCを使用すると、インタプリタ型でインタラクティブなオブジェクト指向言語であるPythonでCocoaアプリケーションを記述できます。PyObjCによって、Pythonオブジェクトは、Objective-Cオブジェクトに対してそれがPythonオブジェクトであるかのようにメッセージを送ることができ、Objective-CオブジェクトもまたPythonオブジェクトにメッセージを送ることができます。詳細については、Apple Developer Connection Webサイトの「Using PyObjC for Developing Cocoa Applications With Python」を参照してください。
コアとなるCocoaクラスライブラリは、FoundationとApplication Kitという2つのフレームワークにパッケージされています。すべてのフレームワークと同様に、これらにも動的に共有可能なライブラリ(または互換性を保持するためのライブラリ)と、ヘッダファイル、APIドキュメント、関連リソースが含まれています。Application KitとFoundationの2つに存在することは、Cocoaプログラムインターフェイスがグラフィカルユーザインターフェイスに関係のあるクラスとないクラスに分割されていることを反映しています。これら2つのフレームワークは、最終成果物がアプリケーションであるすべてのCocoaプロジェクトに必須です。また、Mac OS Xには、Cocoaプログラムインターフェイスを処理する小さなフレームワーク(Screen SaverやAddress Bookフレームワークなど)がいくつか付属しており、オペレーティングシステムには以降も追加がある予定です。詳細については、“「Cocoaフレームワーク」”を参照してください。
Figure 1-1は、Mac OS Xシステムアーキテクチャの簡単に図示したものです。
この構成図は、Mac OS Xに詳しくない方々に主要なコンポーネントとそれらの依存関係を分かりやすく示すために単純化したものです。しかし、その単純さの中で、重要な細部が省略されており、その他のことがあいまいになっています。そのような細部は、CocoaがMac OS X全体においてどのように位置付けられているのかを示す図の重要な部分を構成します。
Figure 1-2は、アーキテクチャにおけるCocoaの位置付けをより正確に示したものです。この構成図では、Mac OS Xを、基盤のDarwinから各種アプリケーション環境までの一連のソフトウェアレイヤとして示しています。その間に介在するレイヤは、Core ServicesとApplication Servicesという2つの主要な包括的フレームワークに含まれるシステムソフトウェアです。この構成図は、あるレイヤのコンポーネントが一般的にその下にあるレイヤに依存していることを示しています。
この構成図は、いくつかの点で上述の構成図に似ています。たとえば、Aquaユーザインターフェイスのレンダリングを主に受け持つシステムコンポーネント、Quartz(Core Graphicsフレームワークに実装)は、Application Servicesレイヤの一部です。また、アーキテクチャスタックのベースにはDarwinがあります。Mac OS Xのすべては、Cocoaも含めて、最終的にDarwinの機能に依存しているということです。
しかし、個々のCocoaクラスやそのグループ、そして包括的フレームワークの特定サブフレームワークをよく見ると、CocoaがMac OS Xのほかの部分に依存していることや、基盤のテクノロジがそのインターフェイスによって公開されていることが分かります。Figure 1-3は、これらの依存関係と公開の仕組みをいくつか示したものです。
注: Cocoaは一定のフレームワークに依存していますが、それらの上に単に「乗っている」だけではありません。場合によっては、Cocoaはほかのフレームワーク(Carbonなど)と対等であり、それらのフレームワークではできないことも実現します。Cocoaは、基盤のテクノロジーの上に乗っている単なるオブジェクト指向レイヤではないのです。
アップルは、Cocoaのプログラムインターフェイスのいくつかが、アプリケーションに通常必要となる基盤のテクノロジーの機能に対するアクセスを提供できるように、Cocoaを慎重に設計しました。しかし、Cocoaのプログラムインターフェイスを通じて公開されていない機能が必要な場合や、アプリケーションで起こることを細かく制御する必要がある場合は、基盤のフレームワークを直接使用できることもあります(代表的な例はCore Graphicsです。その関数やOpenGLの関数を呼び出すことにより、Cocoaの描画メソッドを使う場合よりも複雑で微妙なイメージを描画できます)。幸い、ほとんどの依存フレームワークのプログラムインターフェイスはObjective-C言語のスーパーセットである標準のANSI Cで書かれているため、このような低レベルのフレームワークを使用しても問題はありません。
注: アーキテクチャの概要を取り上げているのは、CocoaがMac OS Xのほかの部分に対して持っている依存関係やインターフェイスを示すためではありません。そうではなく、フレームワークのアーキテクチャに関する一般概念を把握できるように、中でも注目すべきものを概説しているのです。
Cocoaが依存したり、そのクラスとメソッドを通じて公開したりしている主要な基盤のフレームワークは、Core Foundation、Carbon、Core Graphics (Quartz)、Launch Services、Print Core(プリントサブシステム)です。
Core Foundation:Foundationフレームワークの多くのクラスは、対応するCore Foundationの不透過(opaque)型をベースとしています。この密接な関係が、「toll-free bridge」(互換性のあるCore Foundationの型とFoundationの型の間のキャスト変換)を可能にしています。同様に、Core Foundationの実装のいくつかは、DarwinレイヤのBSD部分をベースとしています。
Carbon:Cocoaは、提供するサービスの一部にCarbonを利用します。これは、さまざまなCarbonフレームワークが、Core ServicesとApplication Servicesのレイヤにシステム規模のサービスとして位置しているためです。その中でも、特に重要なフレームワークがCarbon Coreです。たとえば、Carbon CoreにはFile Managerがありますが、Cocoaはこれを使って各種のファイルシステム表現の変換を行います。
Core Graphics:Cocoaの描画とイメージングのクラスは(まったく自然なことですが)、Quartzとウインドウサーバを実装するCore Graphicsフレームワークに忠実に基づいています。
Launch Services:NSWorkspaceクラスは、Launch Servicesの基盤の機能を公開しています。また、CocoaはLaunch Servicesのアプリケーション登録機能を利用して、アプリケーションと書類に結び付いているアイコンを取得します。
Print Core:Cocoaのプリントクラスは、プリントサブシステムとのオブジェクト指向インターフェイスを提供します。
さらにCocoaは、いくつかの文字列エンコーディングの変換にCarbon環境のText Encoding Converterサービスを利用します。また、Cocoaのさまざまなメソッドも、パワーマネジメント用のI/O Kitフレームワーク、QuickDraw描画用のQuickDraw (QD)フレームワーク、Apple Event処理用のApple Event (AE)フレームワーク、フォントサポート用のATSフレームワークを公開しています。
参考資料: 『Mac OS X Technology Overview』に、Mac OS Xのフレームワーク、サービス、テクノロジー、他のコンポーネントの概要が述べられています。『Apple Human Interface Guidelines』には、Aquaヒューマンインターフェイスの外観と動作が規定されています。
| < Previous PageNext Page > |
Last updated: 2006-05-23
|
Get information on Apple products.
Visit the Apple Store online or at retail locations. 1-800-MY-APPLE Copyright © 2007 Apple Inc. All rights reserved. | Terms of use | Privacy Notice |