Entry

今日買った本 - 『Modern C++ Design』

2008年09月02日

この頃は,仕事でも趣味でも C++ づいてるもんで,あちこちに手を出しています。今回買ったのは『Modern C++ Design』。これで半年はオカズに困らなそうだなあ……。

Modern C++ Design―ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術 (C++ In‐Depth Series)
Modern C++ Design
posted with amazlet at 08.09.02
アンドレイ アレキサンドレスク
ピアソンエデュケーション
売り上げランキング: 105496
おすすめ度の平均: 5.0
5 必読
5 文句なしに良書です。しかし内容は難解です
5 テンプレートの威力
5 テンプレート
4 凄いのは分かった。でも、僕には使えません(泣

ここで改めて言うことでもないんですけれど,C++ ってのはかなり節操のないところがあって,演算子はオーバーライドできちゃうわ,テンプレートで抽象的な動きも定義できちゃうわ,多重継承もできれば,Boost 使って関数型プログラミングもなんぼのもんじゃいだったりします。

で,この節操のなさが原因で(多分),C++ は難しいってな話になるわけですけれど,もう少し具体的に考えると,これは言語そのものが難しいというよりは,各々のプログラミングパラダイムを理解するのが難しいだと思うんですね。オブジェクト指向プログラミングはもちろん,ここで話題になっているジェネリックプログラミングもしかり。

本書は一言で言うと,C++ のテンプレート機能を使ったジェネリックプログラミング本です。ジェネリックプログラミングってのは,型情報に縛られない汎用的な(genric)クラス定義なりクラス生成の機構をプログラムするテクニックです。まぁ,自分で言ってもよく分からんこと言ってるなぁとは思うんですが。

例えばですね。GoF のデザパタに Abstract Factory ってパターンがありますよね。いろいろな種類のインスタンスを作るファクトリクラスを抽象化して,具体的なファクトリクラスは Abstract Factory を継承しましょうってなパターンです。各種のハンドラを生成したり,GUI だったらウィジェットインスタンスを生成したりする仕組みで,Java ではかなり一般的なパターンだったりします。

一方,Java のデザパタ記事を見ていてもそうなんですけれど,Abstract Factory ってのは,発想の割には厄介で,苦労して作る割には,あまり効果を発揮しないことが,ままあります。特に問題となるのが,Abstract Factory 内部で泥臭く作らなくちゃいけない switch-文や if-文です(実装例の参照:矢沢久雄の早わかりGoFデザインパターン(3):ITpro)。新しく管理するファクトリクラスが増えるたびに,この switch-文なり if-文は,ずんずん伸びていってしまいます。こゆのは,せっかく OOP 言語を使っているのに,その意味があまりなくなってしまいます。

本書では,こうした問題について,芸術的とも言える解を与えます。ポイントはもちろん C++ のテンプレート機能です。Abstract Factory の製作を通じて,型情報の管理方法や,動的なインスタンスの生成方法など,基本的なテクニックが身に付くと思います。あたしゃまだ前半部と Abstract Factory の章を読んだだけなんですけれど,他にも Singleton や Visitor それに Functor と,おいしそうなオカズがてんこ盛りになっています。文章の構成も,問題の所在から,実装上の問題,それから解決方法へと,順を追って解説している点も分かりやすくてグッドです。

あたしの周りだけかもしれないけれど,C++ を使ったことがあるって人の中でも,テンプレートクラスを実装したことがある人ってのはあまりいなかったりします。MFC や STL のコンテナで,テンプレートの山括弧(<>)を使うことはあるけれど,「なんだかよく分からん機能」として扱っているプログラマ・設計者も多いんじゃないでしょうか。

テンプレートの使い方は知っていることが前提になっていますけど,もっと深い使い方を知りたい人には,ぜひともおすすめ。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN