Apple Developer Connection
Advanced Search
Member Login Log In | Not a Member? Contact ADC

< Previous PageNext Page >

Cocoaフレームワーク

プログラムをCocoaプログラムたらしめているものは何でしょうか?Cocoa開発ではさまざまな言語を使用できるので、言語ではありません。Cocoaアプリケーションは(複雑で時間のかかる作業にはなりますが)コマンドラインから作成できるので、開発ツールでもありません。すべてのCocoaプログラムに共通している(それらを特徴付けている)ことは、Cocoaプログラムが最終的にはルートクラスであるNSObjectを継承するオブジェクトで構成されていることと、最終的にObjective-Cランタイムがベースになることです。すべてのCocoaフレームワークについても同じことが言えます。

注: この説明には、いくつか補足も必要です。第1に、CocoaはNSProxyというもう1つのルートクラスを提供します。ただしNSProxyはCocoaプログラミングではめったに使用されません。第2に、デベロッパ独自のルートクラスを作成することもできます。しかし、それは大変な作業になり(Objective-Cランタイムとやり取りするコードを記述する必要があります)、おそらく時間をかけるだけの価値はないでしょう。

Mac OS XにはいくつかのCocoaフレームワークが含まれており、アップルとサードパーティベンダが絶えずフレームワークをリリースしています。このように多数のCocoaフレームワークがある中で、突出しているのがFoundationとApplication Kitの2つであり、これらがコアCocoaフレームワークです。Application Kitにリンクし、そのクラスを使用しない限り、Cocoaアプリケーションを開発することはできません。また、Foundationフレームワークにリンクして、そのクラスを使用しない限り、Cocoaソフトウェアを開発することはできません(Cocoaのアンブレラフレームワークにリンクすると、これらのフレームワークへ自動的にリンクします)。FoundationおよびApplication KitフレームワークはCocoa開発に必須で、それ以外はすべて二次的なものであり、必須ではありません。

次のセクションでは、コアとなる2つのCocoaフレームワークの機能とクラスを詳しく見ていき、さらに二次的なフレームワークについても簡単に説明します。これらの大きなフレームワークに馴染みやすくなるように、FoundationとApplication Kitフレームワークの説明では、各階層にある多数のクラスを機能グループに分類します。これらのグループ分けには確固たる論理的基準がありますが、ほかの方法でクラスをうまくグループ分けすることもできます。

In this section:

Foundation
Application Kit
その他のフレームワークとCocoa API


Foundation

Foundationフレームワークは、すべての種類のCocoaプログラムに使用できるクラスの基本レイヤを定義しています。FoundationのクラスをApplication Kitのクラスから区別する基準はユーザインターフェイスです。オブジェクトがユーザインターフェイスに表示されない場合や、ユーザインターフェイスのサポート専用に使用されない場合、そのクラスはFoundationに属します。Foundation以外のフレームワークを使用しないCocoaプログラムを作成できます。たとえば、コマンドラインツールやインターネットサーバなどです。

Foundationフレームワークは、次のようにいくつかの目標を考慮して設計されました。

Cocoaアプリケーションは、定義上はApplication Kitにリンクし、必ずFoundationフレームワークにもリンクしなければなりません。クラス階層は、NSObjectという同じルートクラスを共有します。Application Kitのメソッドと関数は、大部分ではないにしても、その多くが、パラメータまたは戻り値としてFoundationオブジェクトを使用します。いくつかのFoundationクラスはアプリケーション向けに設計されているように見えるかもしれませんが(たとえば、NSUndoManagerNSUserDefaults)、これらはユーザインターフェイスに関連のない用途も考えられるため、Foundationに含まれています。

Foundationのパラダイムとポリシー

一定の状況下で、プログラムのオブジェクト間での一貫した動作と予測を確実なものとするために、Foundationでは、Cocoaプログラミングに対して次のようにいくつかのパラダイムとポリシーを導入しています。

Foundationクラス

Foundationクラス階層は、(NSObjectおよびNSCopyingプロトコルとともに)基本的なオブジェクトの属性と動作を定義している、NSObjectクラスをルートに持ちます。NSObjectと基本的なオブジェクトの動作の詳細については、“「ルートクラス」”を参照してください。

Foundationフレームワークの残りは、いくつかの関連のあるクラスのグループと、若干の個別クラスで構成されます。文字列やバイト配列などの基本的なデータ型を表すクラス、ほかのオブジェクトを格納するためのコレクションクラス、日付などのシステム情報を表すクラス、ポート、スレッド、プロセスなどのシステムエンティティを表すクラスがあります。Figure 1-6Figure 1-7Figure 1-8クラス階層チャートは、これらのクラスが形成する論理グループとそれらの継承関係を示します。


Figure 1-6  Foundationクラス階層—Objective-C(パート1)

Figure 1-6 Foundationクラス階層—Objective-C(パート1)


Figure 1-7  Foundationクラス階層—Objective-C(パート2)

Figure 1-7 Foundationクラス階層—Objective-C(パート2)


Figure 1-8  Foundationクラス階層—Objective-C(パート3)

Figure 1-8 Foundationクラス階層—Objective-C(パート3)

上の図は、Foundationフレームワークのクラスを、次のカテゴリで(ここに記したその他の関連性とともに)論理的にグループ化しています。

Application Kit

Application Kitは、グラフィカルなイベント駆動型のユーザインターフェイス(ウインドウ、ダイアログ、ボタン、メニュー、スクローラ、テキストフィールドなど)を実装するのに必要なオブジェクトをすべて含んでいるフレームワークです。Application Kitは、画面上に効率よく描画したり、ハードウェアデバイスやスクリーンバッファと通信したり、描画の前に画面の領域をクリアしたり、ビューをクリップするために、あらゆる細部を処理します。Application Kitのクラスの数に、初めは圧倒されるかもしれません。しかし、Application Kitクラスのほとんどは、間接的に使用するサポートクラスです。また、Application Kitを使用するレベルも選択できます。

Application Kitの概要

Application Kitは、125以上のクラスとプロトコルで構成されています。どのクラスも最終的には、FoundationフレームワークのNSObjectクラスを継承します。Figure 1-9Figure 1-10の図は、Application Kitクラスの継承関係を示します。


Figure 1-9  Application Kitクラス階層—Objective-C(パート1)

Figure 1-9 Application Kitクラス階層—Objective-C(パート1)


Figure 1-10  Application Kitクラス階層—Objective-C(パート2)

Figure 1-10 Application Kitクラス階層—Objective-C(パート2)

見て分かるとおり、Application Kitの階層ツリーは多岐にわたっていますが、かなり浅くなっています。この階層で最も深いクラスでも、ルートクラスからスーパークラスがわずか5階層離れているだけで、ほとんどのクラスはもっと近いところにあります。この階層ツリーの主要なブランチのいくつかは、特に興味深いものです。

Application Kitの最大のブランチのルートには、NSResponderクラスがあります。このクラスはレスポンダチェーン、すなわちユーザイベントに応答する一連の順序付けされたオブジェクトを定義します。ユーザがマウスボタンをクリックしたときや、キーを押したときにイベントが生成され、それに応答できるオブジェクトを求めてレスポンダチェーンに渡されます。イベントを処理するオブジェクトは、NSResponderクラスを継承している必要があります。コアとなるApplication Kitクラス、すなわちNSApplicationクラス、NSWindowクラス、およびNSViewクラスはNSResponderを継承しています。これらのレスポンダの詳細については、“「コアアプリケーションアーキテクチャ」”を参照してください。

Application Kitで2番目に大きなクラスブランチはNSCellを起点とするブランチです。このクラスのグループについて注目すべき点は、それらがNSView、さらにNSControlを継承するクラスとほぼ同等のクラスがあることです。ユーザのアクションに応答するユーザインターフェイスオブジェクトについては、Application Kitは作業をコントロールオブジェクトとセルオブジェクトに分担するようなアーキテクチャを使用しています。NSControlNSCellクラス、およびそのサブクラスは、ボタン、スライダ、ブラウザなど、ユーザがアプリケーションの何らかの機能を画面上で操作して制御できるユーザインターフェイスオブジェクトの共通セットを定義しています。ほとんどのコントロールオブジェクトは、描画とイベント処理の細部を実装する1つ以上のセルオブジェクトに結び付いています。たとえば、ボタンはNSButtonオブジェクトとNSButtonCellオブジェクトで構成されています。詳細については、“「コントロールおよびセルのアーキテクチャ」”を参照してください。

コントロールとセルは、Application Kitの重要なデザインパターンであるターゲット/アクションメカニズムを実装しています。1つのセルには、ユーザがセルをクリック(またはほかの操作を実行)したときに特定のオブジェクトに送信するメッセージを識別する情報を保持できます。ユーザがコントロールを操作すると(たとえば、その上でマウスポインタをクリックするなど)、コントロールはそのセルから必要な情報を抽出し、ターゲットオブジェクトにアクションメッセージを送信します。ターゲット/アクションにより、ターゲットオブジェクトや呼び出されるべきメソッドを指定することで、ユーザアクションに意味を持たせることができます。一般に、Interface Builderを使ってこのようなターゲットとアクションを設定するには、コントロールオブジェクトからアプリケーションやほかのオブジェクトにControlキーを押しながらドラッグします。また、プログラムでターゲットとアクションを設定することもできます。

Application Kitのもう1つの重要なデザインパターンはデリゲートです。テキストフィールドやテーブルビューなど、ユーザインターフェイスの多くのオブジェクトはデリゲートを定義しています。デリゲートは、デリゲート元のオブジェクトに代わって、またはそれと連携して機能するオブジェクトです。このため、アプリケーション固有のロジックをユーザインターフェイスの操作に伝えることができます。デリゲート、ターゲット/アクション、Application Kitのその他のパラダイムとメカニズムの詳細については、“「オブジェクトとの通信」”を参照してください。これらのパラダイムとメカニズムがベースとしているデザインパターンの詳細については、“「Cocoaのデザインパターン」”を参照してください。

次のセクションでは、Application Kitの機能とアーキテクチャ面、およびそのクラスとプロトコルについて簡単に説明します。Figure 1-9およびFigure 1-10に示したクラス階層の図に従ってクラスをグループ分けします。

一般的なユーザインターフェイスクラス

ユーザインターフェイス全般の機能について、Application Kitは次のクラスを用意しています。

テキストとフォント

NSTextFieldクラスはシンプルな編集可能テキスト入力フィールドを実装し、NSTextViewクラスはより大きなテキスト本文に対する包括的な編集機能を提供します。

NSTextViewはNSText抽象クラスのサブクラスで、拡張されたテキストシステムとのインターフェイスを定義します。NSTextViewは、リッチテキスト、添付(グラフィックやファイルなど)、入力管理とキーの割り当て、マーク付きテキストの属性をサポートしています。NSTextViewは、フォントウインドウとフォントメニュー、ルーラと段落スタイル、サービス機能、ペーストボード(クリップボード)と連携します。また、NSTextViewは委任と通知によるカスタマイズが可能であるため、NSTextViewをサブクラス化する必要はめったにありません。NSTextFieldNSFormNSScrollViewなど、Interface Builderのパレット上にあるオブジェクトにはすでにNSTextViewオブジェクトが含まれているため、NSTextViewのインスタンスをプログラムで作成することもめったにありません。

NSTextStorageNSLayoutManagerNSTextContainer、および関連クラスを使用すると、さらにパワフルでクリエイティブなテキスト操作(円の中にテキストを表示するなど)もできます。Cocoaのテキストシステムは、リスト、テーブル、非連続選択もサポートしています。

NSFontクラスとNSFontManagerクラスは、フォントファミリ、サイズ、バリエーションをカプセル化して管理します。NSFontクラスは、フォントごとに1つのオブジェクトを定義しています。効率のために、これらのオブジェクトは大量のデータを表すことができ、アプリケーションのすべてのオブジェクトで共有されます。NSFontPanelクラスは、ユーザに表示するフォントウインドウを定義しています。

グラフィックとカラー

NSImageクラスとNSImageRepクラスはグラフィックスデータをカプセル化し、ディスク上のファイルに保存されたイメージや画面に表示されたイメージに簡単かつ効率的にアクセスできるようにします。NSImageRepサブクラスは、それぞれが、特定の種類のソースデータからイメージを描画する方法を認識しています。NSImageクラスは、1つのイメージの複数の表現を提供するほか、キャッシングなどの動作も提供します。Cocoaのイメージングと描画の機能は、Core Imageフレームワークに統合されています。

カラーは、NSColorNSColorSpaceNSColorPanelNSColorListNSColorPickerNSColorWellの各クラスによってサポートされています。NSColorNSColorSpaceは、カスタムのものも含め、豊富なカラー形式と表現をサポートしています。他のクラスはほとんどインターフェイスクラスです。これらのクラスは、ユーザがカラーを選択して適用できるパネルとビューを定義し、提供します。たとえば、ユーザはカラーウインドウのカラーを任意のカラーウェルにドラッグできます。NSColorPickingプロトコルでは、標準のカラーウインドウを拡張できます。

NSGraphicsContextNSBezierPathNSAffineTransformクラスはベクトル描画を支援し、拡大縮小、回転、変換などの図形の変形をサポートします。

プリントとファックス

NSPrinterNSPrintPanelNSPageLayoutNSPrintInfoの各クラスは、連携して機能し、アプリケーションのウインドウとビューに表示される情報の、プリントやファックス送信を行う手段を提供します。NSViewのPDF表現を作成することもできます。

ドキュメントとファイルシステムサポート

NSFileWrapperクラスは、ディスク上のファイルやディレクトリに対応するオブジェクトを作成するのに使用します。NSFileWrapperは、ファイルの内容を表示、変更、または別のアプリケーションへ送信できるように、その内容をメモリ内に保持します。また、ファイルをドラッグしたり、添付ファイルとして表示したりするためのアイコンも用意されています。FoundationフレームワークのNSFileManagerクラスは、ファイルやディレクトリの内容にアクセスして列挙するのに使用します。NSOpenPanelクラスおよびNSSavePanelクラスも、ファイルシステムに対する使いやすく馴染みやすいユーザインターフェイスを提供します。

NSDocumentControllerNSDocument、およびNSWindowControllerの各クラスは、ドキュメントベースのアプリケーションを作成するためのアーキテクチャを定義しています(NSWindowControllerクラスは、クラス階層図のユーザインターフェイスグループのクラスに表示されています)。このようなアプリケーションは、完全に同じように含まれているけれどもそれぞれが独自に組み立てられたデータを生成し、ファイルに保存できます。アプリケーションは、これらのドキュメントに対して保存、開く、元に戻す、閉じる、管理の操作を行うための組み込み機能や簡単に取得できる機能を備えています。

国際化と文字入力サポート

アプリケーションを世界の複数の地域で使用する場合は、そのリソースを言語、国、または文化圏に合わせてカスタマイズしたり、ローカライズする必要がある場合もあります。たとえば、アプリケーションが日本語、英語、フランス語、およびドイツ語版の文字列、アイコン、nibファイル、またはコンテキストヘルプを持たなければならない場合もあります。特定の言語に固有のリソースファイルは、バンドルディレクトリのサブディレクトリ(.lproj拡張子の付いたディレクトリ)にまとめられています。通常は、Interface Builderを使ってローカリゼーションリソースファイルをセットアップします。Cocoaの国際化機能の詳細については、“「nibファイルその他のアプリケーションリソース」”を参照してください。

NSInputServerクラスおよびNSInputManagerクラスはNSTextInputプロトコルと連携して、アプリケーションからテキスト入力管理システムにアクセスできるようにします。このシステムは、さまざまな国際キーボードが生成するキーストロークを解釈し、テキストビューオブジェクトに適切なテキスト文字やControlキーイベントを送ります(一般的にはこれらのクラスはテキストクラスが処理するため、何もする必要はありません)。

オペレーティングシステムサービス

次のApplication Kitクラスは、アプリケーションにオペレーティングシステムサポートを提供します。

Interface Builderのサポート

抽象クラスであるNSNibConnectorと、2つの具象サブクラスであるNSNibControlConnectorNSNibOutletConnectorは、Interface Builderにおいて接続を表します。NSNibControlConnectorはInterface Builderにおいてアクション接続を管理し、NSNibOutletConnectorはアウトレット接続を管理します。

その他のフレームワークとCocoa API

標準的なMac OS Xインストールの一部として、アップルは(FoundationとApplication Kitに加えて)Cocoaプログラムインターフェイスを供給するフレームワークをいくつか盛り込んでいます(それらは、Carbonやほかのプログラムインターフェイスもベンドします)。このような二次的なフレームワークは、必須ではありませんが、必要な機能をアプリケーションに提供します。主な二次的なフレームワークとしては、次のものがあります。



< Previous PageNext Page >


Last updated: 2006-05-23




Did this document help you?
Yes: Tell us what works for you.

It’s good, but: Report typos, inaccuracies, and so forth.

It wasn’t helpful: Tell us what would have helped.
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