クラスの乗っ取り Objective-Cには、ポージングという機能がある。これは、一言でいうと、既存のクラスを「乗っ取る」ことができる機能だ。すでにあるクラスを、強引に自分のクラスで置き換えてしまう。 ポージングは、poseAsClass:というメソッドで行う。このメソッドが呼ばれたクラスは、引数で渡されたクラスのように振る舞うことになる。これは、具体的な例を見てもらうのが早いだろう。 例として、Cocoaでウィンドウを表すクラスであるNSWindowを継承した、TransparentWindowというクラスを作ってみた。クラスがランタイムに読み込まれたときに呼ばれる、loadメソッドの中で、poseAsClass:を呼んでいる。 // TransparentWindowクラスの宣言 @interface TransparentWindow : NSWindow {} @end /
前回は非形式プロトコルの説明をして、デリゲートでよく使われるという話をした。今回は、形式プロトコルと非形式プロトコルの違いを追求してみよう。 非形式プロトコルに対する、形式プロトコルの利点は、次の2つにある。 メソッドの実装をチェックして、コンパイル時に警告を出す conformsToProtocol:を使って、プロトコル準拠を調べることができる デリゲートに、この利点が有効かどうか、説明しよう。 デリゲートの設定はInterface Builderで Objective-Cを利用しているフレームワークであるCocoaでは、とても多くのクラスがデリゲート機能を提供している。特に、モデル・ビュー・コントローラ構造の、ビューにあたるクラスでは、基本的な動作の制御は、すべてデリゲートを通して行われる。フレームワークの設計の指針として、クラスの拡張は、できる限りデリゲートで行い、サブクラス化をなる
前回は、Objective-Cのプロトコルについて説明したが、その利点としてプロセス間通信の抑制という点を挙げた。だが、プロトコルは、もう一つの側面である「オブジェクトの振る舞いを表すメソッドの集合」をするもの、という文脈で語られることが多い。この説明を後回しにしたのは、この機能は「もう1つのプロトコル」で実現されることが多いからだ。今回は、このことを説明しよう。 非形式プロトコル 前回説明したように、プロトコルは「@protocol」という、特別な文法を導入している。だが、メソッドの集合を宣言するだけなれば、わざわざ新しい文法を使う必要はない。カテゴリを使えばよい。ただし、ちょっとコツがいる。Objective-Cのルートクラスである、NSObjectのカテゴリとして宣言するのだ。 実際の例を紹介しよう。Cocoaでは、テーブルビューを表示するために、NSTableViewというクラスが
前回と同様、Objective-Cでのメソッド宣言にまつわる話を続けよう。今回は、メソッドの集合を宣言するプロトコルだ。 プロトコルによるメソッドの集合の宣言 プロトコルは、オブジェクトの振る舞いを表すメソッドの集合を定義するものだ。@protocolという指示子で宣言する。 具体的な例を見てみよう。次のコードは、NSCodingというプロトコルを宣言するものだ。これは、オブジェクトをエンコード、デコードするためのメソッドを定義する。この2つのメソッドで、オブジェクトの保存/読み込み機能を実装する。 @protocol NSCoding - (void)encodeWithCoder:(NSCoder*)coder; - (id)initWithCoder:(NSCoder*)decoder; @end オブジェクトがこのプロトコルを採用することを、プロトコルに適合している、という。
メインウィンドウのクラス(あるいは制御クラス)のGGG4W、GGG4M、GGG4J(以下GGG4X)にはメインウインドウに配置したGUI部品の反応を作りこむのだが、検索にからみ検索を担当しているTGraphicSearchクラスから 1. いまどのファイルを処理しているか 2. 何がヒットしたか 3. 検索が終わった の3つを通知する方法が必要である。 一般的にコールバックと呼ばれており、古典的Cでは関数ポインタの登録という方法で行われている。GGG4Xクラス側の関数をTGraphicSearchクラスに登録して呼んでもらうのである。 C++ではメンバ変数のない多重継承を用意するのが正統かと思うが、GripGropではそのまま単にメインウィンドウのクラスを登録してメソッド呼び出しをしている(nfind.cppのNFind::DisplayInfo() など)。下が上の構造を知っているという
_ プログラミングの技をめぐる探究 Coders at Workをいただいたので、紹介します。 と言っても厚さが約600ページという分厚い(と言ってもうまく紙を選んでいるのでそんなに厚くはなく約2.5cm)本をもらったその日に紹介できるわけじゃない。レビューに参加させていただいたので、相当読んだからだ(でも、期間内に全部は読み切れなかった、すみません)。 これはオーム社同時代開発者叢書の白眉とでも言えるやつで、15人のすごいコーダー(コードを書く人)が、ピーター・サイベルというインタビュアー(追記:この人が実に良く、直前のインタビューイがくさしたものを次の人に弁護させたりする)に応えて、どうやってプログラミングを学んだとか、プログラミングってどんなものかとか、設計はとか、どんな本を読んだかとか(ほぼ全員がクヌースを挙げる。で、本書のトリはドナルド・クヌースなので、ちゃんとそれについてインタ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く