【コラム】

ダイナミックObjective-C

49 デザインパターンで読み解くCocoa

    木下誠  [2006/09/13]

    本連載も開始から一年が過ぎ、次回で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本と呼んだりもする。

    この連載で取り上げるのも、もちろん、このデザインパターンである。

    Objective-Cによる実装

    GoF本では、23のパターンが紹介されている。そして、それぞれ実装例が、C++で記述されている。これらを、Objective-Cで実装し直してみよう。

    もっとも、デザインパターンを他の言語で実装するという試みは、とりたてて新しいものではない。多くの言語で、すでに行われていることだ。しかし、だからこそ、Objective-Cによるパターンを加える事で、他の言語と比較しやすくなるだろう。

    実際、動的な型を持つ言語での記述は、C++やJavaなどのものとは、大きく異なることになる。主な違いは、静的なクラス継承を重視する言語では、ある機能を持つかどうかをクラス(またはインタフェース)の継承で表すのに対して、動的なObjective-Cでは、メソッドの有無を利用するところになる。この例は、これからたくさん紹介できるだろう。

    デザインパターンで読み解くCocoa

    デザインパターンを取り上げるのには、もう1つ理由がある。すでに、ある程度の市民権を得ている技術を使って、別の技術を説明する足がかりにしようというものだ。つまり、デザインパターンを使って、Cocoaを読み解く、ということを試みてみる。

    Cocoaフレームワークは、デザインパターンの実例の宝庫だ。多くの箇所で、様々なパターンの応用を見つけることができる。そこで、Cocoaのどのクラスが、どのようにパターンを利用しているか、具体的に説明していこう。

    また、Cocoaをデザインパターンの実用的な応用例として見ることもできる。デザインパターンを学習したが、その利点がいまひとつ理解できないといった場合に、具体的な例をお見せすることになるだろう。

    もっとも、正確に言えば、Cocoaがデザインパターンを応用しているのではなく、デザインパターンがCocoaをもとにして作られた訳だが。GoF本では、パターンの実例として、Cocoaの前身である、NEXTSTEPが何度も取り上げられている。また、パターンの1つであるChain of Responsibilityという名前は、明らかにAppKitのResponder Chainから取られていると考えられる。

    Appleからも、Cocoaで使われているデザインパターンを解説するドキュメントが公開されている(「Cocoaにおけるデザインパターンの応用 」)。このドキュメントも参考にしながら進めていく。

    では、次回から、パターンを1つずつ取り上げていこう。

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン