【コラム】
CocoaはObjective-Cを用いてAPIが提供されている。だが、この非常にマイナーな言語だけでは辛いと思ったのか、JavaによるAPIも存在する。つまり、JavaとObjective-Cをつなぐブリッジを実現したのだ。ともにオブジェクト指向言語であるこの2言語だが、当然いろいろな違いもある。
その違いを吸収するために、Cocoa-Javaブリッジでは様々な工夫が行われている。特に苦心の跡が見られるのは、前回説明したターゲット/アクションパラダイムのJava実装だ。今回は、ここを詳しく解説しよう。動的なObjective-Cと、静的な言語の考え方の違いが明瞭に現れているポイントだ。
Cocoaのターゲット/アクションパラダイムとは、一言で言えば、任意のオブジェクトの任意のメソッドを呼び出すもの。つまり、オブジェクトとメソッドを表す変数を指定し、それを呼び出すことができれば実現できることになる。
Objective-Cでは、オブジェクトを表すのにid型を、メソッドを表すのにセレクタを利用している。これらを使えば、次のようにアクションを呼び出すことができる。
この呼び出し方は、JavaのリフレクションAPIに似ていることに気づくだろう。リフレクションには、メソッドを表すMethodオブジェクトがある。これを利用することはできないだろうか。次のような感じでだ。
なるほど。たしかにセレクタと似ている。だが実は、両者には決定的に違うところがある。それは、Methodオブジェクトが特定のクラスに結びついているという点だ。Methodは、次のようにメソッド名と引数の型を指定してClassから取得する。
Classから取り出す、ということに注目してほしい。つまり、このMethodオブジェクトはこのクラス専用であり、他のクラスに適用することができない。クラスAから取得したMethodオブジェクトは、たとえ同名のメソッドがあったとしても、クラスBに適用することはできない。
また、存在しないメソッドのためのMethodオブジェクトを作ることもできない。getMethodを呼び出す時点で存在がチェックされ、例外が発生してしまう。
ターゲット/アクションパラダイムでは、ターゲットとアクションを切り離して指定するところが肝である。Methodオブジェクトでは、そのまま利用することはできない。そこでCocoa-Javaでは、新たにNSSelectorというクラスを導入することにした。
NSSelectorは、JavaでObjective-Cのセレクタ機能を擬似的に実現するためのクラスである。次のように使うことになる。
メソッド名と引数を指定してインスタンスを作り、invokeメソッドを使って呼び出すところなどはMethodと同じである。違いは、インスタンスを作成するときに、メソッドが所属するクラスを指定しないところだ。NSSelectorは、特定のクラスからは独立して作られる。また、例外が発生しないところも注目だ。この時点では、メソッドの存在は特にチェックされていないことを意味している。
このような機能を満たすための、NSSelectorのinvokeのコードを、擬似的に想像してみよう。次のようなコードで実現できるだろう。
つまり、呼び出し自体は、Methodオブジェクトを使ったものと変わらない。違いは、Methodの取得を実行時に行っている、という点だ。
ここに、動的な言語と静的な言語の思想の違いを見ることができるだろう。Javaでは、コンパイルの時点でできだけ物事を決定しておきたい。メソッドは、あるクラスに存在するものからのみ、取得することができる。それに対してObjective-Cでは、できるだけ評価を後にのばす。セレクタは実装と独立した形で取得でき、呼び出す時点で初めて評価される。
この2つの言語をつなぐには、今回解説したような工夫が必要になるのだ。
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
[9nine]制服姿見納め? セーラー服で登場も川島海荷「4人はコスプレ」 [19:15 5/27] エンタメ |
|
「NO.6」4巻は書き下ろしドラマCD付、木乃のサイン会も [18:49 5/27] ホビー |
|
[今週の新刊]マンガ大賞3回ノミネート「アイアムアヒーロー」 カープ愛「球場ラヴァーズ」も [18:33 5/27] ホビー |
|
「ゆりてつ」サイン会は作者と都電に揺られるツアー仕立て [17:45 5/27] ホビー |
|
【ネタバレもありの徹底解明コラム】『サザエさん』タマの意外な事実 [17:30 5/27] ホビー |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。