C++は設計上の健全な考え方をサポートする!
「IT談話館」第1回連載8回目の今回も前回に引き続き次の公開論文を精読していきます。
第1回連載資料論文
今回は、「2.2 Design Principles」節の中の、Design-support Rules(デザインサポート規則)部分の意味を考えます。論文内には、Design-support Rulesが次のように定義されています。
・C++は設計上の健全な考え方をサポートする
・C++はプログラムを組織化する機能を提供する
・Say what you mean.
・All features must be affordable.
・C++は有益な機能であれば、危険ではあっても提供する
・C++は独立して開発された部品を合成する機能を提供する
ご覧のように、2つの項目は英文のままになっています。これまでの連載で何度も触れている1994年発行の書籍「D&E」には、これら2つの項目の詳しい説明が載っています。「Say what you mean」の意味を簡単に説明すれば、マシン概念(ビット、バイト、ポインタ)より人間を優先する(データの抽象化)、ということです。「All features must be affordable」は、一握りの上級先端開発者や高価な環境ユーザではなく(elegance)、平均的な開発者を考慮する(efficiency)、ということです。この2つの規則は、Stroustrup氏の人生経験にその根を持っていると思います。"C++言語を使用すれば、平均的なマシン環境でアセンブラーなどの機械語を使用することもなく、効率的にプログラムが作れますよ、"という考え方を表明しているわけです。
Stroustrup氏は、"自分は裕福な家庭に生まれたわけではない"、とあるインタービュー記事の中で述べています。また、母国デンマークから英国のケンブリッジ大学に移った当時、それまで使用したことがなかったような高級マシンを使用できるようになり、"マシン性能の差"というものにかなり驚かされたようです。こうした経験から、Stroustrup氏は、すべての平均的な開発者が望みの高級マシンを入手できるわけではない、と考えたものと思います。この配慮は、筆者のような貧乏人には、たいへんありがたいものです。
今回は、「C++は設計上の健全な考え方をサポートする」と「C++はプログラムを組織化する機能を提供する」の2点に焦点を当てます。
プログラミング学習を始めたばかりの方や、これらプログラミングを学んでみようと考えられている方は、Design-support Rules(デザインサポート規則)という表現を実感をもって理解することはできないと思います。ほとんどのプログラミング入門書は、サンプルプログラムとそこで使用されている構文の説明が中心となり、Design、つまり、プログラムをどのように作るか、という議論はほとんど行っていないのが普通です。これは一見すると不親切に見えますが、読者に不要な混乱を避ける意味では好ましいものといえなくもありません。しかし、"何を、どのようにプログラムとして表現するか?"という説明の流れはきわめて重要です。しかし、たいへん不幸なことに、このような構成を持つ入門書籍はめったに存在しません。存在したとしても、たいへん難しい抽象論になってしまっているのが現状のようです。こうしたこともあり、Stroustrup氏は、2008年8月にこのような入門書を発表しています。
「C++は設計上の健全な考え方をサポートする。」とは、"何を、どのようにプログラムとして表現するか?"の"何を"に関係しています。"何を"を自分なりに整理していなければ、よいプログラムを作ることはできません。"健全な考え方"というのは、"何を"の「間違いのない分析の結果」ということになります。
たとえば、ある人の人柄や特徴を作文に書く場合、偏見などにとらわれていては、どのような美辞麗句を並べようとも、その人を正しく描くことはできません。"健全な"というのは、正しい分析、物事を正確に理解する、ということです。表現を変えれば、分析結果が正しければ、それはC++プログラムとして表現できる、ということになります。「C++は設計上の健全な考え方をサポートする。」という一文は、きわめてありふれた表現ですが、たいへん重要な意味を持っています。「間違いのない分析の結果」を表現しているプログラムは、"分かりやすい"プログラムとなっているはずです。筆者は、たとえば、ある特定のWindows機能などを検討するとき、"それは分かりやすいか?"という視点を設定することにしています。
「C++はプログラムを組織化する機能を提供する。」とは、"何を、どのようにプログラムとして表現するか?"の"どのようにプログラムとして表現するか"に関係しています。C++では名前空間、変数、関数、クラス、構造体などの多数の機能をサポートしていますが、それらの機能を思いつきで使っていたのでは分かりやすいプログラムを作り上げることはできません。特に、ソフトウェア開発をビジネスとして行っている場合、納品・出荷後のメンテナンス問題やバグ除去などが重要になります。このような作業はいずれも経費がかかりますから、下手をすると、赤字になったり、対応が遅れれば、信用問題に発展してしまいます。さらにいえば、新機能を追加する場合、クラスや関数が乱雑に記述されているのでは、いったいどこをどのように改善してよいのか分からなくなってしまいます。"何を、どのようにプログラムとして表現するか?"というのは、このようにとても大切なことなのです。皆さん、Microsoft社はセキュリティ問題を解決するコード(パッチ)をすばやく提供していますが、めちゃくちゃなコードしかない場合(つまり、何をどのようにプログラミングするかに時間をかけていない場合)、どのような事態が発生すると思いますか?パッチの提供が遅れれば、私たちWindowsユーザは不平不満を大声で言うはずです。"何を、どのようにプログラムとして表現するか"は、このようにとても大切なことなのです。
前へ |
次へ
Copyright©豊田孝 2004-
2008
本日は2008-12-04です。