|
|
Log In | Not a Member? |
Contact ADC |
| < Previous PageNext Page > |
ライブラリ関数を使用するプログラムに関数が課す制限事項はわずかです。ライブラリ関数は必要なときにいつでも呼び出せます。一方、オブジェクト指向のライブラリまたはフレームワークにあるメソッドは、クラス定義に結び付けられており、それらの定義にアクセスするオブジェクトを作成または取得しない限り、呼び出せません。そのうえ、ほとんどのプログラムでは、オブジェクトがプログラムネットワークの中で機能できるように、オブジェクトを別の少なくとも1つのオブジェクトに接続する必要があります。クラスではプログラムコンポーネントを定義しますが、そのサービスにアクセスするためには、アプリケーションの構造にコンポーネントを組み込む必要があります。
とは言うものの、フレームワークのクラスによっては、ライブラリ関数のセットとよく似た動作をするインスタンスを生成するものもあります。単純に、インスタンスを作成して初期化し、そのインスタンスにメッセージを送信して作業を達成するか、インスタンスをアプリケーションの待機スロットに挿入します。たとえば、NSFileManagerクラスを使用して、ファイルの移動、コピー、削除など各種のファイルシステム操作を実行できます。警告のダイアログを表示する必要があれば、NSAlertクラスのインスタンスを作成し、そのインスタンスに適切なメッセージを送ります。
しかし、一般に、Cocoaのような環境は、サービスを提供する個々のクラスを単に寄せ集めただけのものではありません。これらの環境は、オブジェクト指向フレームワーク、つまり問題領域を構造化し、問題に対する統合された解決策を提示するクラスの集まりで構成されます。必要に応じて利用できる個別のサービスを提供する関数ライブラリとは異なり、フレームワークはプログラムの構造全体(モデル)を明確化し、実装します。そして、プログラムのコードをそのモデルに合わせる必要があります。このようなプログラムモデルは汎用性があるため、個々のプログラムの要件に合わせてカスタマイズできます。ライブラリ関数を組み込むプログラムをデザインするのではなく、フレームワークが提供するデザインに自分のコードを組み込むのです。
フレームワークを使用するには、フレームワークが定義するプログラムモデルを受け入れ、フレームワークのクラスを必要なだけいくつでも利用およびカスタマイズして、自分のプログラムをそのモデルに合わせていく必要があります。クラスは相互に依存しており、単体ではなくグループとして提供されます。始めのうちは、自分のコードをフレームワークのプログラムモデルに合わせなければならないことに、制限を感じるかもしれません。しかし、実際にはまったく正反対です。フレームワークは、その汎用的な動作を変更または拡張できる数多くの手段を備えています。Cocoaプログラムはすべて同じプログラムモデルがベースとなっているので、すべてのCocoaプログラムが同一の基本的な方法で動作することを受け入れさえすればよいのです。
Cocoaフレームワークのクラスは、次の4つの方法を通じてサービスを提供します。
既製のオブジェクト。クラスによっては、そのまますぐに利用できる既製のオブジェクトが定義されています。必要に応じて、クラスのインスタンスを作成し、初期化するだけです。NSControlのサブクラスである、NSTextField、NSButton、NSTableView(関連するNSCellクラスも含む)などが、この部類に該当します。通常、既製のオブジェクトはInterface Builderを使用して作成し初期化しますが、プログラムから作成と初期化を行うこともできます。
舞台裏のオブジェクト。プログラムの実行中、Cocoaによって、“舞台裏”で動作するフレームワークオブジェクトが作成されることがあります。これらのオブジェクトは明示的に割り当てや初期化を行う必要はなく、自動的に実行されます。多くの場合、それらのクラスはプライベートですが、必要な動作を実装するために不可欠なものです。
汎用的なオブジェクト。フレームワーククラスによっては、汎用的または抽象的なものがあります。フレームワークによっては、汎用クラスの何らかの具象サブクラスを提供するものがあり、それらはそのまま使用できます。ただし、独自のサブクラスを定義して特定のメソッド実装をオーバーライドすることもでき、場合によってはそれが必要なこともあります。この種のクラスの例としては、NSView、NSDocument、NSFormatterなどがあります。
デリゲータとノティファイア。多くのフレームワークオブジェクトは、自身の動作をほかのオブジェクトに継続的に報告し、中には特定の動作をほかのオブジェクトに委任(デリゲート)するものまであります。このための情報を提供するためのメカニズムが委任と通知です。委任を行うオブジェクトは、簡易プロトコルと呼ばれるインターフェイスを公開します。クライアントオブジェクトは、まず自身をデリゲートとして登録し、それからこのインターフェイスのメソッドを1つ以上実装する必要があります。通知を行うオブジェクトは、ブロードキャストする通知のリストを公開します。これらの1つ以上の通知を、任意のクライアントで自由に監視できます。デリゲータクラスの例としては、NSApplication、NSText、NSWindowなどがあります。フレームワーククラスの多くは通知をブロードキャストします。
クラスによっては、ここに示した一般的なサービスを複数提供するものもあります。たとえば、既製のNSWindowオブジェクトをInterface Builderパレットからドラッグし、若干の初期化処理を加えるだけで使用できます。つまり、NSWindowクラスは、既製のインスタンスを提供します。しかし、NSWindowオブジェクトはそのデリゲートへのメッセージの送信も行い、各種の通知もポストします。また、角の丸いウインドウが必要であればNSWindowをサブクラス化することも可能です。
フレームワークが提供する構造にプログラム固有のコードを組み込む際に、最も多くの選択肢を提供するのは、Cocoaクラスの最後の2つの部類、つまり、汎用的なオブジェクトと、デリゲータまたはノティファイアです。“「Cocoaクラスからの継承」”では、フレームワーククラス(特に汎用クラス)のサブクラスを作成する方法について、その概要を説明します。プログラムネットワーク内のオブジェクトどうしでやり取りをするための、委任、通知、その他のメカニズムの詳細については、“「オブジェクトとの通信」”を参照してください。
| < 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 |