きりかノート 3冊め

おあそびプログラミング

いまさらレビュー「MacOS X プログラミング入門 Objective-C」(広文社版)

通称「荻原本」こと、荻原剛志さんの「MacOS X プログラミング入門 Objective-C」がソフトバンククリエイティブから復刊(加筆あり)されるとのこと。4/7発売とあるにもかかわらず、表紙が NOW PRINTING! だったり、Amazon でも目次がなかったりと、なんだか不安なんですけど…

どのくらい内容が変わるのかわかりませんが、広文社のほうを持っているので参考までにレビューを書いておきます。

はじめに

日本語で出版された MacOS X での Cocoa/Objective-C でのプログラミングの書籍としては、もっとも早い時期(2001年)に刊行されたもののひとつです。そのため Cocoa バインディングや CoreData などの近年の技術はカバーされていませんが、Cocoa/Objective-C プログラミングにおけるエバーグリーンな内容が中心なので、現在読んでも内容が古いと感じることはあまりありません。刊行からだいたい5年たっていますが、これから5年後に読んでもそんな感じでしょう。

タイトルには「入門」とありますが、プログラミング経験のない人が「MacOS X には Xcode が付属してるし、ちょっとやってみたいな」と思ったときに1冊めに買う本とするには、読み方を工夫しないと厳しいでしょう。なんせ、全19章の構成で Interface Builder がでてくるのが14章です。AppKit についての説明はかなりあっさりなので、他の書籍やネット上、ADC のサンプル・リファレンスなどで情報をとれる状態でないと、いざ何かをつくろうと思ったときに実現方法の見当もつかないということもありえます。(まあ自分はそのおかげで ADC の英語がそれなり読めるようになったとも言えなくもないですが)

自分の経験や Cocoa 勉強会での雑談、ネット上での評判としても「ある程度 Cocoa プログラミングの経験を経たあとで、あらためて読むと発見があちこちに」というタイプの書籍です。まちがいなく良書なので、ある程度 Cocoa をやるつもりなら買っておいて損はないでしょう。ちょっと高いですけどね。

じゃ、これ以降は目次に沿って内容を紹介していきます。

オブジェクト指向と Objecitve-C 言語(1〜4章)

第1章「オブジェクトに基づくソフトウェアの作成」では、オブジェクト指向とそこで使われる用語について説明されています。1.2の内容はデザインに関するやや抽象的な話題で、ソフトウェア設計やオブジェクト指向になじみの少ない人にはいくらか難しいかもしれません。

第2章「Objective-C のプログラム」では、Objective-C の基本的な構文とファイル分割についての説明がされています。この段階(2.4)で、非公開のメソッド(ヘッダファイルで宣言しない)や、C の関数の混在、static 変数の扱いにまで言及しているあたりが本書らしいと思います。

第3章「継承とクラス」では、クラスの継承やメソッドのオーバーライド、イニシャライザ(initXXX メソッド)など、サブクラスの実装に関するトピックです。self と super の振る舞いに関する例は、なかなか面白いので自分で試してみることをおすすめします。

第4章「クラスと動的結合」では、Objective-C の動的な側面にスポットを当てています。コンパイラによる型チェックや、nil の振る舞い、アクセサの定義など柔軟なプログラムを作るためのポイントについて説明されています。また、クラスオブジェクト(Class 型)やクラスメソッドに関する記述もあり、読み物的に、序盤ではとくに面白い章なのですが、読み飛ばしても問題ありません。4.4.6 の init の返り値の型はなぜ id なのか?だけは読んでおくとよいかもしれません。

Objective-C Cocoa プログラミング基礎(5〜10章)

第5章「メモリ管理とオーナーシップ」では、Objective-C の特徴でもあるリファレンスカウントによるメモリ管理について説明しています。この章は必読です。はじめのうちは retain や autorelease すべきかどうか迷うケースがあると思います。そんなときは、5.4.1 オーナーシップ・ポリシーが指針になります。(実際には、Cocoa倶楽部(仮称)のCocoaのメモリ管理(3)の retain/release/autoreleaseの適用方針 がいちばん参考になります)

第6章「NSObject クラスとランタイムシステム」では、6.1と6.2ではルートクラスである NSObject を題材に、Cocoa のクラス/オブジェクトの一般的な振る舞いについて説明しています。6.3でフレームワークがでてくるのは、ちょっと不自然な気もしますが、章立ての構成上、ここに入れるしかないのでしょうね。

第7章「Foundation フレームワークの重要なクラス」では、mutable/immutable なオブジェクトについて説明した上で、Foundation フレームワークの以下のクラスについて説明しています。

  • 文字列: NSString, NSMutableString
  • データ: NSData, NSMutableData
  • 配列: NSArray, NSMutableArray と NSEnumerator
  • ディクショナリ: NSDictionary, NSMutableDictionary
  • 数値: NSNumber, NSValue

また、この章の最後では、プロパティリスト(plist)についてのあまりに簡単な説明があります。

第8章「例題:カードゲームのシミュレーション」では、トランプのババ抜きを例にObjective-C での設計と実装を行っています。ここでは、設計の比重がわりと高めです。

第9章「カテゴリ」では、Objective-C 言語のひとつの特徴でもあるカテゴリについてです。カテゴリの文法と、その用途である、インターフェイスの整理や既存クラスへのメソッドの追加、オーバーライドについて説明されています。また、いちばん多く使われているであろうプライベートメソッド的な利用についても、その問題点も含めて言及されています。

第10章「抽象クラスとクラスクラスタ」では、設計としての抽象クラスと、Foundation フレームワークにおけるクラスクラスタについて説明しています。この章は、後回しにしても差し支えありません。10.1 抽象クラスは、オブジェクト指向における一般的な話題です。10.2 クラスクラスタは、自分でサブクラスをつくるときになってはじめて意識すればよいと思うので、読みとばしても問題はありません。

AppKit プログラミング(11, 13〜14章)

ここからは AppKit に関する話題です。たぶん。

第11章「プロトコル」、第13章「デリゲートと通知」は AppKit でよく利用されるデリゲート + 非形式プロトコルと、通知(notification)の仕組みについてです。この2つは、AppKit を利用したデスクトップアプリケーションの Cocoa プログラミングでは多用されるテクニックなので、しっかり読んでおきましょう。また、13.3 メッセージの転送で forwardInvocation の説明がありますが、これはほとんど NSProxy でしか使わないので、分散オブジェクトの章を読むときまでほうっておいて良いでしょう。

第14章「例題:簡易画像ビューア」では、Cocoa アプリケーションの基本的な構成とInterface Builder を利用したプログラミングの具体例になります。responder chain については、もっと詳しく書いてほしかったなあと思うところ。

もっとくわしく(12, 15〜18章)

12章ではゾーンとオブジェクトコピー(NSCopying)、15章以降は例外処理、スレッド、分散オブジェクトに関する話題が続きます。説明がかなりていねいなので、他の言語でのこれらの経験がなくてもとくに問題はないでしょう。ここまでくれば、前から順にやるのも、興味のあるものからやっていくのも、とばすのも自由です。

意外と重要な「その他のトピックス」(19章)

最後にその他いろいろといった形になっていますが、19.1 アプリケーションラッパでは NSBundle とバンドルパッケージ、ローカライズについて書いてあります。他の書籍でこれらについて説明しているものを持っていなければ、必ず読んでおきましょう。デスクトップアプリケーションをつくるときには必須の知識です。

他には可変長引数をとるメソッドの書き方(va_start 他)や、アサーションマクロなどについての記述があります。

付録

付録として「Foundation フレームワークの概要」として簡易リファレンスと、「C 言語の復習」として ANSI C に関するちょっとした解説があります。「C は構文が分かるという程度」だった自分には、この付録はかなり役に立ちました。

裏表紙

内容には全然関係ありませんが、当時衝撃だったので。

広文社の他の書籍の広告。表3対向あたりならともかく、裏表紙に24冊も並んでるのは壮観。

(おわり)