« Tea Bag | メイン | The Face Tracker »
2006年11月01日
汎化と特化
ソフトウェアを作成するとき、強く意識するのが「汎用性」に関する問題です。
ある環境で動作したプログラムであっても、別の環境で動作するという保証はありません。 しかし、例えば、Windows上で動く便利なアプリケーションがあれば、当然「他のOS (Linux, Mac OS等) でも動かしたい」という要望が出てきます。
そこで、プログラムを別のプラットフォームで動作するよう手を加える (移植する) 必要が出てくるわけですが、大抵の場合一筋縄ではいきません。 最初から作り直したほうが早い、なんてことになることもしばしば。
この厄介さこそが、「最初から移植をしやすいようにプログラムを組むことが大切」と言われる理由です。
ある環境で動作したプログラムであっても、別の環境で動作するという保証はありません。 しかし、例えば、Windows上で動く便利なアプリケーションがあれば、当然「他のOS (Linux, Mac OS等) でも動かしたい」という要望が出てきます。
そこで、プログラムを別のプラットフォームで動作するよう手を加える (移植する) 必要が出てくるわけですが、大抵の場合一筋縄ではいきません。 最初から作り直したほうが早い、なんてことになることもしばしば。
この厄介さこそが、「最初から移植をしやすいようにプログラムを組むことが大切」と言われる理由です。
移植性の高いプログラムを書くための第一原則は、「標準 (多くのプラットフォームで共通採用されている)」機能だけを使うようにすることですが、現実にはこれだけで実用的なアプリケーションを作ることが困難です。
そのため、次善の策として、一般的には「非標準」機能の使用は最小限に抑え、それを利用した部分は他の部分から切り離し可能 (replacable) となるよう設計を行うという手法がとられます。
ただし、「非標準」機能の使用が悪いことばかりかと言うとそうではありません。あるプラットフォームに固有の機能は、その環境での動作に特化しているが故に、動作が高速だったり、肌目 (きめ) 細かな制御が可能だったりと、「標準」の機能よりも優れた点を多く持っている場合が多いからです。
そんなわけで、ソフトウェア設計者は「プログラムをどこまで汎化/特化させるか」というジレンマと日々闘っています。
(この記事も、「どこまで一般的/専門的な内容にするか」というジレンマと闘いながら書かれていたりします。)
担当: 成田 (外はカリカリ、中はモチモチ。)
投稿者 beko : 2006年11月01日 16:03
|
トラックバック
このエントリーのトラックバックURL:
http://aizu.nowhere.co.jp/mt/tkevn244.dir/4108

