ソフトウェアフレームワーク
ソフトウェアフレームワーク（）とは、プログラミングにおいて、アプリケーションソフトウェア等の実装に必要となる一般的な機能や定型コードを、ライブラリとしてあらかじめ用意したものである。例えば、Javaなどのオブジェクト指向言語向けのクラスライブラリとして実装されている場合は、再利用可能なソフトウェア部品（ソフトウェアコンポーネント）として用意されているクラスのインスタンスを自由に組み合わせたり、基本的な機能を持つ基底クラスを継承した派生クラスをユーザープログラマーが定義し、仮想メソッドによって公開されているカスタマイズポイントを選択的に上書きしたり特化させたりする。言語によってはコールバック関数やデリゲートを利用するなど、他にもさまざまな形態がある。文脈から明確な場合は単に「フレームワーク」としたり、特にアプリケーションソフトウェア開発向けであることを明確にした「アプリケーションフレームワーク」など、前後に別の語をつなげた複合語を使ったりすることもある。
ソフトウェアフレームワークは、明確に定義されたAPIを持ち、具体的な実装を再利用可能な形で隠蔽しているという点でライブラリとよく似ている。両者の間に明確な境界は無いし、分類のための明確な基準も無い。観点のひとつとしては、いわゆる「メインループ」あるいは「イベントループ」をアプリケーション側が持つか否か、という分類がある。メインループをアプリケーション側が持っていてそこから呼び出される形態のものがライブラリであり、一方フレームワークではメインループはフレームワーク側にあり、アプリケーションはそちら側から呼ばれるイベントハンドラによって駆動される（これについて「制御の反転」という語で説明されることがある）。
しかしこの分類は、両者を特徴づけるはっきりした分類というわけではない。アプリケーションのcodice_1関数はランタイムライブラリ中のスタートアップルーチンから呼び出される。また、広く使われているようなフレームワークでは、たいていはメインループをアプリケーション側が持つことができるようなメカニズムが用意されている。
ソフトウェアフレームワークは、最終的にアプリケーションソフトウェアにリンクされるライブラリコードだけでなく、開発に必要となる各種プログラミングツールも含んでいることがある。また、統合開発環境 (IDE) に組み込まれたプロジェクトテンプレートやソースコードジェネレータを活用した自動プログラミングの仕組みが用意されていることもある。