viva Cocoa Objective-C 入門 第1章 学習をはじめるにあたって
ホーム メール
 
目次 次ページ >

学習をはじめるにあたって

 本書は、プログラミング言語“Objective-C”の基礎を学習する本です。
Objective-Cは、オブジェクト指向プログラミング言語です。オブジェクト指向は、Smalltalk という言語において世界で初めて採用されました。その機能をC言語に追加したものが、Objective-Cです。
 Objective-Cは、C言語でできることもすべてできます。本書はC言語の基本的な記述方法をすでにご存知の方を対象読者としていますが、C言語に精通している必要はありません。実際にC言語でコーディングする場合とObjective-Cでコーディングする場合ではかなり感覚の違うものになります。

 なお本書ではソースおよびソースコードをコードと呼ぶことに統一しています。またプログラミングを文脈によってはコーディングと呼ぶこともあります。

学習をはじめるにあたって

■ 本書の構成

 本書では、“MyClip”という簡単なメモアプリケーションを作成していきます。そして、その作成の過程で必要となってくるObjective-Cの概念・文法・デザインパターンなどを説明していきます。本書はObjective-Cというプログラミング言語の入門書ではありますが、それぞれの文法事項をカテゴリ別に分けて順次説明していくという方法は採用していません。その代わりにサンプルアプリケーションのMyClipを構築していくうえで次に読者が(プログラマが)アプリケーションに搭載したいであろうと思う機能を構築し、その点についてのObjective-Cという言語的側面を説明していくようにしています。このようにしたのは、このような形で学習を進めていくほうが読者の興味と集中力を維持でき効率的ではないだろうかと考えたからです。

 カテゴリ別に分けた学習では、どうしても不要不急のことについての説明が学習の途中で登場してくることになります。そのことは学習者にとっては辛い学習を強いられることになります。

 また本書の12章までは、iPhone OSが新しいプラットフォームとして世界中で受け入れられていることを考え、今後読者がiPhone OSでの開発に移行しやすいようにあえてObjective-C 2.0の新機能である“ガベージコレクション”を使わずにObjective-C 1.0から伝統的に使われているメモリ管理方式によって学習をすすめています。iPhone OSではCPUパワーの関係でガベージコレクションが使えないからです。

 そしてMyClipの次には、“MyClip”を拡張した“MyNote”というメモ帳を作成していきます。ここではコレクションクラス・ドキュメントベースドアプリケーションなどのさらに発展的なObjective-Cの学習をいたします。なお本書のサンプルアプリケーションの全プロジェクトはウェブサイトからダウンロードすることができます。

■ Objective-Cの学習をはじめるにあたって

 Objective-C言語の学習は、ほかのオブジェクト指向プログラミング言語(次からはオブジェクト指向プログラミングの原語であるObject Oriented Programmingを略したOOPという呼び方をする場合もあります)を学習された方にとっても意外と苦労するものであろうと思います。その原因としては

  1. Objective-Cではデザインパターン(設計様式)を上手く組み合わせることによって言語仕様(決まりごとや文法)を小さくしている。
  2. したがって学習者は、はじめから比較的高度なデザインパターンを覚えていかなければならない。
という点が大きいと思います。

 デザインパターンは当然のことながら各言語で共通しているということはありません。仮に、「これはJavaのインタフェースに相当する技術(デザインパターン)だな」ということが分かったとしても実際のコーディングはまったく違うものになります。

 また、他の言語では比較的やさしい技術だけでもアプリケーションを構築することもできると思いますが、Objective-Cではそういう方法もとりにくくなっています。言い換えれば、
一通りのデザインパターンを習得してObjective-Cの全体を把握しておかないとプログラミングするのが難しい面がある」ということになります。

 このことは、Objective-Cを知ろうと思えば一つ一つの技術(デザインパターンや概念)のことを知っておかなければならず、一つ一つの技術のことを知ろうと思えばObjective-C全体のことを知っておかなければならないという関係になっているとも言えます。

ただし、このたとえは、かなりおおげさな話しです。あまり真剣にとらえて「Objective-Cは難しい」と思い込む必要はありません。最初に厳しいことを言っておけば後が楽かな?というこちらの思惑もあるのですから :-)

 このようにObjective-Cは、はじめはとっつきにくい言語かもしれませんが、ムダな部分をなくすように徹底的に考え抜かれた非常にコンパクトな言語仕様になっています。結果としてプログラマが学習しなければならないことは少なくてすみ、そのコンパクトな言語仕様を使って、短時間でソフトウェアが構築できるようになっています。

■ デザインパターン

 では、さきほどからデザインパターンと言っているものは一体何なのでしょうか。ソフトウェア開発における Design pattern を日本語に意訳すると「ソフトウェア開発のための型紙」あるいは「設計パターン」「設計仕様」などと言えます。Objective-Cではこのデザインパターンを多用するかたちでプログラミングしていきます。本書はあくまでもObjective-Cの基礎編として書かれていますが、それでも次のようなデザインパターンが登場してきます。

モデル・ビュー・コントローラ
シングルトン・アプリケーション
ターゲット・アクション
デリゲート
プロトコル
データソース
キー・バリュー・コーディング
ドキュメント・ベースド・アプリケーション
 おそらく他の言語の入門書に比べると圧倒的に多数のデザインパターンが出てくると思います。しかし比較的に分かりやすいものや知っておかなければソフトウェアの構築が無理であろうと思われるものだけを本書に集めました。そして当然のことですが慣れてくればこれらのデザインパターンを使いこなすことが心地よくなってくることでしょう。

 これらのデザインパターンは先達のプログラマたちが作り上げてきたものです。繰り返しになりますが、Objective-Cではデザインパターンを密接に組み合わせて贅肉をそぎ落とし、他のオブジェクト指向プログラミング言語に比べてきわめて小さな規模の言語仕様でオブジェクト指向プログラミングを実現しています。つまり学習の最初の段階では難しいかもしれませんが、結果的には覚えなければならないことや理解しなければならないことは他の言語に比べると圧倒的に少量で済むということになります。そして覚えてしまえば自分の手足のように思いのままコーディングすることができるようになることでしょう。

「デリゲートで挫折した」
「プロトコルで挫折した」
「ドキュメント・ベースド・アプリケーションで挫折した」
 とデザインパターン関係で挫折したという言葉をよく見聞きします。本書を通してその壁を乗り越えていただければ幸いだと思います。

プログラミングが始めての方へ
 近年のパソコンの普及によりプログラミングの敷居は低くなりつつあると言えます。しかしやはりプログラミングの学習は大変難しいものです。

などの気楽なスタンスでプログラミング言語と付き合っていくというのも一つの考え方だと思います。「継続は力なり」です。ぜひ一緒に頑張りましょう。

Objective-Cの歴史

■ Objective-Cの歴史

 1973年アメリカのゼロックス社(現在ではコピー機の会社として有名) で“ALTO”というコンピュータが開発されました。世界初のグラフィックユーザインタフェースとマウスを持つコンピュータでした。グラフィックユーザインタフェースについては技術書などではウィンドウシステムと呼ばれることもあります。そしてこのALTOコンピュータでグラフィックユーザインタフェースを持つアプリケーションプログラムを開発するために使われたのが Smalltalk と呼ばれる世界初のオブジェクト指向プログラミング言語でした。またこの時にMVCというデザインパターンも提唱されました。MVCについては後ほどあらためて説明いたします。しかしこのALTOは数千万円という価格と専門のメンテナンスを必要とするというとてもパーソナル(個人用)と呼べるようなものではありませんでした。
 そこでアップルの二人の創業者スティーブ・ジョブスとスティーブ・ウォザニックはこのウィンドウシステムとマウスを持つコンピュータを100万円台という価格とメンテナンス不要というかたちに開発して Macintosh という名で 1984 年に販売を開始しました。マックの誕生です。同じころブラッド・J・コックスという人物は当時流行り始めていたC言語にALTOで使われていたSmalltalkのオブジェクト指向の機能を組み合わせたObjective-Cというプログラミング言語の開発に取り組み始めていました。

 アップルコンピュータは大成功をおさめましたが、一方で独断的な性格を疎まれたスティーブ・ジョブスは閑職に追われ、やがて自らが作ったアップル社を退職することになりました。しかしスティーブはすぐに NeXT 社という少数精鋭の会社を作り、新しいコンピュータの販売を開始いたしました。OS は BSD をベースにし、主力開発言語としてブラッド・J・コックス氏からObjective-C言語を買い取り、素晴らしいモニタに素晴らしいプリンタも開発しました。この革新的なコンピュータは、コンピュータ・ユーザーのあいだでは注目の的にはなりましたが、実際にこのコンピュータを買うことは極まれでした。一方、ジョブスが退職したアップル社では次期 OS の開発に行き詰まっていました。そこでアップル社は次期OSの自社開発をあきらめて他社から買い取ることにしました。候補にあがったのはスティーブ・ジョブスのNeXTSTEPと、同じくアップル社の元役員だったジャン=ルイ・ガセー氏が作ったBeOSでした。この頃にはNeXT社は売れないハードウェアの販売をとりやめNeXTSTEPという名前でOSのみの販売に切り替えていました。当然アプリケーションの開発言語としてObjective-Cが付属していました。この時のアップル社の次期OSの本命はどちらかといえばBeOSだったとの話しもあります。しかしスティーブ・ジョブスはいつもどおりの見事なプレゼンテーションを行い NeXTSTEP に決まったという逸話が残っています。

 NeXTSTEP の権利がアップル社に移る時に開発言語のObjective-Cの権利もアップル社に移りました。そしてこのNeXTSTEPが現在のMac OS Xのベースになりました。また今から学習をはじめるObjective-Cには“NS”という文字で始まるクラスや関数が多数存在しています(クラスについては後の章で説明いたします)。このNSはNeXTSTEPの略称です。また Cocoa 開発環境ではグラフィックユーザインタフェースの部分をまとめてアーカイブしますがこのアーカイブファイルにも最近までは“nib”という拡張子が付いていました。このnibという拡張子も NeXT Interface Builder から名付けられていました。しかしXcode3.xからはこのnibという拡張子は廃止されxibという拡張子に変わりました。またiPhone SDKでもバージョン3.0 からxibに変わりました。なお、アーカイブとは直訳すれば書庫という意味になりますがObjective-Cではオブジェクトをバイナリデータ化することを表します。このアーカイブについても後の章で説明しています。

 NeXTSTEPがなぜベースとしてLinuxではなくBSDを採用したのかについては諸説がありますが、単に時代的な関係だったのではないだろうかと思います。LinuxがBSDを追い抜いてナンバーワンUnixとなったのはちょうど2000年ぐらいのことでした。またNeXTが主力開発言語として C++ではなくてObjective-Cを採用したのも時代的なことが理由だったのではないかと思います。当時はまだC++は実際に使い物になるかどうか半信半疑の目で見られていました。それに対して Objective-C は実績のある Smalltalk の直系子孫という感じがあったので安心して採用することができたのでしょう。

 その後、時代はLinuxとC++に、そしてさらにJavaへと、NeXT社の思惑とは反対の方向に向かって行きましたが、そのことで Objective-C と Cocoa はかえって多勢に巻き込まれることなく落ち着いた環境で自己の開発環境の整理と発展を繰り返すことができたのではないかと思います。そしてそれはやがて Mac OS X と Xcode という個性的で強力な開発環境として結実し、さらに iPhone OS として他に類をみない斬新なプラットフォームへと発展しました。

■ コンピュータの起源

 以上がObjective-Cにまつわる歴史です。しかしそもそも最初のコンピュータはいつ登場したのでしょうか。それには諸説がありますが大きく分けると次の2つに分かれると思います。

 まず、コンピュータ関係者以外にも一般的に良く知られているのが、第二次世界大戦下のイギリスで敵国ドイツのエグニマ暗号を解読するために開発された電子計算機です。しかしこの電子計算機は計算方法を変更するためには配線をつなぎ変えなければなりませんでした。つまり使用するプログラムを変更するためにはそのたびに配線を変えなければならなかったわけです。
 そこで戦争が終わってからアメリカの学者によって「電子計算機に複数のプログラムが入っている記憶装置を接続しておき、使用するプログラムの変更を簡単に行えるようにするべきだ」と提唱されました。この時は提唱されただけで記憶装置を持つ電子計算機はまだ存在していませんでしたが、この提唱をコンピュータ誕生の時とする意見もあります。やがて記憶装置は実現されプログラムを保存するだけではなくプログラムによって得られたデータも保存されるようになりました。現在ではデータを記憶できないコンピュータというものは考えられません。諸説がいろいろとあるとは思いますが、このあたりが本格的なコンピュータの幕開けでしょう。なおここで言っている記憶装置とは現在で言うところの補助記憶装置のハードディスクなどのことを指しています。主記憶装置のメインメモリのことではありません。

 そして本書ではこの記憶できるということ。つまりデータの保存と呼び出しが出来て、アプリケーションによってデータを継続的に、かつ変更を加えながら使用できるということを大切なことだと考えて、解説に多くのページを割いています。このデータの読み込みと書き込み(保存)のことをプログラミング用語ではファイル入出力と呼んでいます。

Cocoaフレームワーク

 前項の「Objective-Cの歴史」にCocoaという言葉が出てきました。また読者もMac OS X や iPhone OSのソフトウェア開発を勉強されようとしたときにCocoaという言葉を何度も見聞きされていることでしょう。本項ではそのCocoaとは何なのかを説明していきます。

■ API

 C言語を勉強されたことを前提にお話ししますが、もしあなたが勉強された本が純粋なC言語の本であればあるほど、いくら勉強されてもウィンドウを表示することはできなかったことと思います。
 なぜならウィンドウなどのグラフィックユーザインタフェースの部品は通常はプログラミング言語側に用意されているのものではなくプラットフォーム側、つまり OS 側に独自で用意されています。独自にというのは Mac と Windows の場合では同じプログラミング言語を使っていてもウィンドウを表示させるコードは違うということです。
 このようにプラットフォーム側でそのプラットフォーム用のプログラムを記述するために用意されているコードを API ( Application Programming Interface ) と呼びます。Objective-C というのはプログラミング言語で、Cocoa というのはこの API です。そして通常 API はひとつの決まった言語を使ってコード化されています。Cocoa の場合は当然Objective-C でコード化されています。もちろん Objective-C は通常の C言語のすべてをも含んでいますのでC言語でコーディングされているAPIもCocoaの中には多数存在しています。

■ フレームワーク

 前段落で説明したAPIを目的別ごとに集めたもの(まとめたもの)をフレームワークと呼びます。前段落ではCocoaはAPIであると説明しましたが正確にはCocoaはフレームワークになります。しかもCocoaプログラミングの中でのCocoaフレームワークとは目的別ごとに分類されている各フレームワークの総称あるいは頂点に立つフレームワークという位置づけになっています。Cocoaフレームワークの中で代表的かつ多数のAPIを含んでいるフレームワークはFoundationフレームワークとAppKitフレームワークになります。Foundationフレームワークは文字列操作、データ構造、ファイル入出力などのプログラムの基礎的な部分のAPIが集まっています。一方AppKitはウィンドウ、ボタン、テキスト入力フィールドなどのGUIを担当するAPIが集まっています。GUIとはグラフィックユーザインタフェースの略称です。

図 Cocoaフレームワーク

 一方、iPhoneプログラミングの場合には頂点に立つフレームワークはCocoa Touchと呼ばれています。そしてCocoa Touchフレームワークに含まれる代表的なフレームワークはFoundationフレームワークになります。Cocoa TouchでのFoundationフレームワークはMac OS XのCocoaフレームワークでのFoundationと同じくプログラムの基礎的な部分の担当ということになります。なおCocoaのAppKitに相当するCocoa Touchでの明確なフレームワークは存在しませんが、あえて言えばUIViewクラスがそれにあたるでしょう。

 なお本書ではiPhoneプログラミングについての説明はいたしておりません。しかしMac OS XプラットフォームでObjective-CとCocoaフレームワークの学習をしていればCocoa Touchを理解することはスムーズにすすむでしょう。実際にCocoa TouchはCocoaフレームワークよりもさらにコンパクトな設計になっています。



目次 次ページ >


Copyright 2006 - 2010 viva Cocoa. All Rights Reserved.