ソフトウェアフレームワーク

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

ソフトウェアフレームワーク: software framework)とは、プログラミングにおいて、一般的な機能をもつ共通コードをユーザーが選択的に上書きしたり特化させたりすることで、ある特定の機能をもたせようとする抽象概念のことである。単にフレームワークとも呼ばれる。

ソフトウェアフレームワークは、はっきり定義されたAPIを持ち、コードを再利用可能な形で隠蔽しているという点でライブラリとよく似ている。しかし、ライブラリでは呼び出し側がプログラム全体の制御構造を指定できないが、フレームワークでは可能である。この制御の反転がソフトウェアフレームワークの特筆すべき特徴である[1]

背景と批判[編集]

ソフトウェアフレームワークは、システム構築に必須な標準的かつ低レベルの詳細を設計者やプログラマが検討する時間を省き、要求仕様の実現に多くの時間を割けるようにし、ソフトウェア開発を容易にすることを目指している[2]。例えば、銀行のWebサイト構築にWebアプリケーションフレームワークを使っている開発チームは、要求処理や状態管理の機構を検討する時間を削減して、口座からの引き落としといった操作に注力できる。

批判としては、フレームワークはコードを肥大化させるという主張もある。これは複数のフレームワークで競合する部分や補い合う部分があり、APIも複雑に絡み合っているためでもある。

フレームワークの使い方を学ぶ時間がかかるという主張もある。ただし一度フレームワークを学べば、同じフレームワークであれば、次のプロジェクトからはより素早く完璧な応用が可能となる。

フレームワークは他のプラットフォーム製品(オペレーティングシステム、DBMSなど)と同様に、特定のフレームワーク・ベンダーや、特定のバージョンに依存(ロックイン)されるリスクがあるとの主張もある。このため機能内容や代替製品などの確認も必要である。

いずれにしても、適切なフレームワークの選定は特に重要である。開発途中で、選択したフレームワークが開発要件を満たさないと判明した場合や、そのフレームワークの開発・提供が打ち切られた場合などは、開発途中で別のフレームワークに移行して(場合によっては基本設計から)再開発する必要が発生するためである。

[編集]

ユーザーアプリケーションを立ち上げるのを助けるため、ソフトウェアフレームワークには一般にかなりの雑多なコードやユーティリティコードが含まれているが、全体としては特定の問題領域に注目した機能を提供している。以下に例を挙げる。

アーキテクチャ[編集]

Preeによれば[9]、ソフトウェアフレームワークには「凍った部分 (frozen spot)」と「熱い部分 (hot spot)」がある。「凍った部分」はソフトウェアシステム全体のアーキテクチャ(基本コンポーネント群とそれらの相互関係)を定義する。それらはそのフレームワークを使って何を実装した場合でも常に変化しない。一方、「熱い部分」はプログラマがプロジェクト固有の機能に対応したコードを追加できる部分である。

ソフトウェアフレームワークには、ソフトウェアアーキテクチャ内でアプリケーションプログラマが特定の機能に対応したコードを置ける場所(すなわち「熱い部分」)が定義してある。

オブジェクト指向環境では、フレームワークは抽象クラス具象クラスから成る。フレームワークのインスタンス化とは、それら既存クラスのコンポジションサブクラスの作成である[10]

具体的なソフトウェアシステムをソフトウェアフレームワークを使って開発する場合、開発者は「熱い部分」を使い、そのシステム固有の要求やニーズを満たす。ソフトウェアフレームワークは「電話してくるな、こちらから電話する」というハリウッドの原則に依存している[11]。すなわち、ユーザー定義の新しいクラス(フレームワーク提供クラスのサブクラス)は、既存のフレームワークのクラスからメッセージを受け取る。開発者は通常、スーパークラス抽象クラスを実装することでこれに対応する。

汎用フレームワークの一覧[編集]

関連項目[編集]

脚注・出典[編集]

  1. ^ Riehle, Dirk (2000), Framework Design: A Role Modeling Approach, Swiss Federal Institute of Technology, http://www.riehle.org/computer-science/research/dissertation/diss-a4.pdf 
  2. ^ Framework”. DocForge. 2008年12月15日閲覧。
  3. ^ Vlissides, J M; Linton, M A (1990), “Unidraw: a framework for building domain-specific graphical editors”, ACM Transactions of Information Systems 8 (3): 237-268 
  4. ^ Johnson, R E (1992), “Documenting frameworks using patterns”, Proceedings of The Conference on Object Oriented Programming Systems Languages and Applications (ACM Press): 63-76 
  5. ^ Johnson, R E; McConnell, C; Lake, M J (1992), Giegerich, R; Graham, S L, eds., “The RTL system: a framework for code optimization”, Proceedings of the International workshop on code generation (Springer-Verlag): 255-274 
  6. ^ Birrer, A; Eggenschwiler, T (1993), Proceedings of the European conference on object-oriented programming, Springer-Verlag, pp. 21-35 
  7. ^ Hill, C; DeLuca, C; Balaji, V; Suarez, M; da Silva, A (2004), “Architecture of the Earth System Modeling Framework (ESMF)”, Computing in Science and Engineering: 18-28 
  8. ^ Gachet, A (2003), “Software Frameworks for Developing Decision Support Systems - A New Component in the Classification of DSS Development Tools”, Journal of Decision Systems 12 (3): 271-281 
  9. ^ Pree, W (1994), “Meta Patterns-A Means For Capturing the Essentials of Reusable Object-Oriented Design”, Proceedings of the 8th European Conference on Object-Oriented Programming (Springer-Verlag): 150-162 
  10. ^ Buschmann, F (1996), Pattern-Oriented Software Architecture Volume 1: A System of Patterns. Chichester, Wiley, ISBN 0471958697 
  11. ^ Larman, C (2001), Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process (2nd ed.), Prentice Hall, ISBN 0130925691 

外部リンク[編集]