さて、これはばかげた質問かもしれませんが、フレームワークとAPIという用語は同じ意味で使用されることがあります。私が見る方法では、フレームワークは、さまざまなプログラミングタスク(.NET Frameworkなど)に使用できる多くのAPIを含む、より一般的なものです。APIはより小さく、より専門的です(たとえば、 Facebook API。)この問題についての洞察を共有したい人はいますか?
たとえば、Microsoftが.NETをフレームワークと呼んでいるのに対し、Sunは.NETをプラットフォームと呼んでいるとします。したがって、「ライブラリのコレクション」をどのように呼び出すかについて、ビジネス/マーケティングの決定になる可能性もあります。
デザインパターン 次の定義を提供します。
ここで重要なのは、ツールキット(API)が多くのドメインで役立つ一方で、フレームワークは特定のクラスの問題の問題を解決するように調整されていることです。 「フレームワークの抽象クラスのアプリケーション固有のサブクラスを作成することによって」カスタマイズされます。
さらに、おそらくもっと重要なこととして、「フレームワークがアプリケーションのアーキテクチャを決定する」:Inversion Of Controlは、フレームワークの特性の1つです(これについては Martin Fowlerを参照 );アプリケーションが特定のAPIを呼び出して特定の動作を実装するのではなく、コードを呼び出すのはフレームワークです。
フレームワークはすべて、内部コード、APIなどであるといつも思っていました。
APIは、フレームワークを利用したい場合に使用するビットです。
つまり、.NETフレームワークは.NETライブラリ、すべての言語などで構成されています。 APIは、関数を呼び出す方法にすぎません。
フレームワークは、 制御の反転 の概念を導入しています
(つまり、プログラム全体の制御フローは、呼び出し元によってではなく、フレームワークによって指示されます)
language frameworks(Java Framework or .Net Framework)など)を参照する場合、実際にはライブラリだけではなく、およびそれらのAPI(これらのライブラリが制御の反転を提供する場合、より制限されます Software Framework )
Language Frameworkには、開発環境と実行環境が含まれていますコードを呼び出す(コンパイルまたは実行するため)。
それが、.Net Frameworkが「フレームワーク」である理由です。
Javaは、そのフレームワーク(JDK、JRE)を「Javaプラットフォーム "その「プラットフォームに依存しない」プログラミング言語機能を強調するため。
から Javaテクノロジーについて について
プラットフォームは、プログラムが実行されるハードウェアまたはソフトウェア環境です。 (Microsoft Windows、Linux、Solaris OS、Mac OSを含む)。
ほとんどのプラットフォームは、オペレーティングシステムと基盤となるハードウェアの組み合わせとして説明できます。
Javaプラットフォームは、他のハードウェアベースのプラットフォームの上で実行されるソフトウェアのみのプラットフォームであるという点で、他のほとんどのプラットフォームとは異なります。Javaプラットフォームには2つのコンポーネントがあります:
- Java仮想マシン
- Javaアプリケーションプログラミングインターフェース(API)
その名前が示すとおり(アプリケーションプログラミングインターフェイス)、APIはフレームワークのインターフェイスにすぎません。
私の理解では、APIは基本的に既存のアプリ(Facebookなど)とインターフェースする方法ですが、フレームワークは基本的に独自のアプリをゼロから構築するためのツールです。
ソフトウェアフレームワーク:ソフトウェアシステム(またはサブシステム)の再利用可能な設計です。ソフトウェアフレームワークには、プログラム、コードライブラリ、スクリプト言語、その他のソフトウェアが含まれ、ソフトウェアプロジェクトのさまざまなコンポーネントの開発と接着に役立ちます。フレームワークのさまざまな部分がAPIを通じて公開されている可能性があります。
[〜#〜] api [〜#〜](アプリケーションプログラミングインターフェイス):彼の名前が意味するように、外部プログラムが直接アクセスせずに内部プログラムまたはライブラリと対話するためのインターフェイスです。たとえば、GoogleマップAPIとFacebook APIは、直接アクセスせずにプログラムやライブラリと対話するためのインターフェイスを提供します。
その一方で:
Framework:アプリケーションの構築に役立つライブラリのコレクションです。アプリケーションが「肉」を定義する「スケルトン」としてフレームワークを想像できるため、人間のスケルトンを使ってオードボディを構築することはできないため、プログラミングを開始する前に適切なフレームワークを選択する必要があります。これが私たちが言った理由です:ライブラリを呼び出します。フレームワークが呼び出します。
フレームワークは基本的に、開発プロセスを抽象化し、コードの再利用を促進するクラスのコレクションです。たとえば、構築しているアプリケーションに依存しないデータベース、セッション、ページネーションのクラスがある場合があります。ただし、APIはソースコードインターフェイスであり、異なるシステムの2つ以上のコンポーネントが相互作用することを可能にします。たとえば、Google Maps APIをWebサイトに追加します。あなたとGoogleは2つの異なるシステムです。Googleは、製品をWebサイトに組み込むための基本的なインターフェイスをコーディングしました/応用。全体として、システムを構築するときにフレームワークの作業を行い、FacebookやGoogleなどの他のユーザーに拡張機能を提供するときにAPIを開発します。
APIはフレームワークのサブセットであると考えたい
私の経験では、フレームワークには(少なくとも)単純なAPIにはない2つのものが含まれていることがよくあります。
拡張性:フレームワークコンポーネントを作成またはサブクラス化して、その機能を拡張またはカスタマイズできます。
アプリケーション開発に関連するコード生成、管理、または診断タスクのためのツール。
私はこれが古いスレッドであり、それが本当に問題ではないことを知っていますが、私は自分の意見を取り入れなければなりません。 API(デバイスドライバーAPI、Windows APIなど)は、プログラマーが自分の創造性を発揮してプラットフォームで何かを実行できるように、プラットフォームに基本的かつ不可欠な機能を提供します-はい、それを使用してフレームワークを構築することを含みます。フレームワークは機能と抽象化のレベルが高く、特定の一般的な属性を共有するアプリケーション(iPadアプリ、Webサービスなど)の開発を容易にするために、再利用可能で便利な機能/クラス/規則のセットを提供します
フレームワークはIoC(Inversion of Control)と呼ばれる非常に重要なオプションを実装します。つまり、コードが手短に言うと、コードはこれ以上ない)です。
APIでは、コードが他のコード(libraries)を呼び出しますが、特定のフレームワークを使用する場合、アプリケーションフローを制御しているのはフレームワークです。