【コラム】
本連載も開始から一年が過ぎ、次回で50回目を迎える。正直、Objective-Cだけでこれだけ続いたのは、驚きである。振り返ってみると、ランタイムAPIを直接呼び出したり、実装のソースコードの中に潜ったりしていたので、通常の言語紹介とは趣が違うところはあったと思う。だが、それもObjective-Cの素顔に触れるには欠かせぬため、と思えばこそである。
さて、連載の当初の目的である、Objective-Cの「動的な特性」を紹介することは、かなり達成できたのではないかと思う。Objective-Cでは、実行中のランタイムをいろいろ操作できること、それを実現しているのがメッセージ送信の仕組みであることを、いろいろな実例を挙げ、ソースコードの中に踏み込みながら、説明してきた。
ならば、次に進むべきは、「なぜ動的が大事なのか」ということであろう。「動的」を強調するからには、「静的」があるはずである。静的な言語と目されるC++やJavaと比較して、何が違うのか、どこが利点なのか、というところに踏み込んでいきたい。
さらに、実例ももっと豊富に紹介したい。これは筆者の持論だが、プログラミングにおいては、プログラミング言語とフレームワークとが、車の両輪であると思う。いかに言語が優れていても、それを活かすフレームワークがなければ、それまでである。そして、Objective-Cには、Cocoaフレームワークがある。Cocoaは、商業ベースの多くのアプリケーションに使われており、かつ現在最高度の洗練を誇る。本連載では、これまでObjective-Cという言語のみにフォーカスを当ててきたが、これをCocoaにも広げていきたい。
この2つを満たすために、話の叩き台として、デザインパターンを取り上げようと思う。
デザインパターンという言葉は、オブジェクト指向技術言語に興味のある方ならば、耳にしたことがあるだろう。ソフトウェアを設計する際に、繰り返し出てくる構造を「パターン」として定義したものだ。このパターンをカタログ的に集めて整理したものが、いくつかある。
一番有名なパターンは、Erich Gamma/Richard Helm/Ralph Johnson/John Vlissidesによる、デザインパターンであろう。これは、「オブジェクト指向における再利用のためのデザインパターン」という名の本にまとめられた。この4人は、the Gang of Four、またはGoFとも呼ばれるので、この本のことを、俗にGoF本と呼んだりもする。
この連載で取り上げるのも、もちろん、このデザインパターンである。
GoF本では、23のパターンが紹介されている。そして、それぞれ実装例が、C++で記述されている。これらを、Objective-Cで実装し直してみよう。
もっとも、デザインパターンを他の言語で実装するという試みは、とりたてて新しいものではない。多くの言語で、すでに行われていることだ。しかし、だからこそ、Objective-Cによるパターンを加える事で、他の言語と比較しやすくなるだろう。
実際、動的な型を持つ言語での記述は、C++やJavaなどのものとは、大きく異なることになる。主な違いは、静的なクラス継承を重視する言語では、ある機能を持つかどうかをクラス(またはインタフェース)の継承で表すのに対して、動的なObjective-Cでは、メソッドの有無を利用するところになる。この例は、これからたくさん紹介できるだろう。
デザインパターンを取り上げるのには、もう1つ理由がある。すでに、ある程度の市民権を得ている技術を使って、別の技術を説明する足がかりにしようというものだ。つまり、デザインパターンを使って、Cocoaを読み解く、ということを試みてみる。
Cocoaフレームワークは、デザインパターンの実例の宝庫だ。多くの箇所で、様々なパターンの応用を見つけることができる。そこで、Cocoaのどのクラスが、どのようにパターンを利用しているか、具体的に説明していこう。
また、Cocoaをデザインパターンの実用的な応用例として見ることもできる。デザインパターンを学習したが、その利点がいまひとつ理解できないといった場合に、具体的な例をお見せすることになるだろう。
もっとも、正確に言えば、Cocoaがデザインパターンを応用しているのではなく、デザインパターンがCocoaをもとにして作られた訳だが。GoF本では、パターンの実例として、Cocoaの前身である、NEXTSTEPが何度も取り上げられている。また、パターンの1つであるChain of Responsibilityという名前は、明らかにAppKitのResponder Chainから取られていると考えられる。
Appleからも、Cocoaで使われているデザインパターンを解説するドキュメントが公開されている(「Cocoaにおけるデザインパターンの応用 」)。このドキュメントも参考にしながら進めていく。
では、次回から、パターンを1つずつ取り上げていこう。
【コラム】ライトニングJava 第63回 Servletプログラミング(3) - Webアプリケーションの初期値、サーブレットの初期値
【コラム】ライトニングJava 第62回 Servletプログラミング(2) - GET/POST、日本語の扱いについて
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
ソニエリ、「Xperia NX」の展示イベント開催 - 東京・名古屋・大阪で実施 [21:40 2/10] 携帯 |
|
【レポート】CP+2012 - 「EOS-1D X」展示や吉高由里子のトークショーに人だかりが - キヤノン [21:35 2/10] 家電 |
|
MEDIAS LTE購入者向けキャンペーン - 先着5,000名にモバイル充電器を提供 [21:31 2/10] 携帯 |
|
ドコモ、「GALAXY S II LTE」のバージョンアップを2月13日に実施 [21:26 2/10] 携帯 |
|
レノボ・ジャパン、ウェブ広告モデルを一般公募 - 新生活キャンペーンの一環で [21:21 2/10] パソコン |