Eyes, JAPAN Blog > 汎化と特化

汎化と特化

beko

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

ソフトウェアを作成するとき、強く意識するのが「汎用性」に関する問題です。

ある環境で動作したプログラムであっても、別の環境で動作するという保証はありません。
しかし、例えば、Windows上で動く便利なアプリケーションがあれば、当然「他のOS (Linux, Mac OS等) でも動かしたい」という要望が出てきます。
そこで、プログラムを別のプラットフォームで動作するよう手を加える (移植する) 必要が出てくるわけですが、大抵の場合一筋縄ではいきません。
最初から作り直したほうが早い、なんてことになることもしばしば。
この厄介さこそが、「最初から移植をしやすいようにプログラムを組むことが大切」と言われる理由です。

移植性の高いプログラムを書くための第一原則は、「標準 (多くのプラットフォームで共通採用されている)」機能だけを使うようにすることですが、現実にはこれだけで実用的なアプリケーションを作ることが困難です。
そのため、次善の策として、一般的には「非標準」機能の使用は最小限に抑え、それを利用した部分は他の部分から切り離し可能 (replacable) となるよう設計を行うという手法がとられます。
ただし、「非標準」機能の使用が悪いことばかりかと言うとそうではありません。あるプラットフォームに固有の機能は、その環境での動作に特化しているが故に、動作が高速だったり、肌目 (きめ) 細かな制御が可能だったりと、「標準」の機能よりも優れた点を多く持っている場合が多いからです。

そんなわけで、ソフトウェア設計者は「プログラムをどこまで汎化/特化させるか」というジレンマと日々闘っています。
(この記事も、「どこまで一般的/専門的な内容にするか」というジレンマと闘いながら書かれていたりします。)

担当: 成田 (外はカリカリ、中はモチモチ。)

  • このエントリーをはてなブックマークに追加

Comments are closed.