ライブラリーvsフレームワークvs API?[閉まっている]


33

ライブラリ、フレームワーク、APIの違いは何ですか?それらはすべて私には同じように見えます。これについて人々の考えを聞きたいです。





2
@Jorg:これを回答として提出してください。現状では、それは境界線スパムであり、ページを詰まらせています。

2
@Sergio-JörgW Mittagには、SOに関する1171の思慮深く、好評の回答があります(ここでは42の思慮深く好評の回答)。彼は難しくなろうとはしていません。彼は、この質問がどれほど不必要であるかを示すことでP.SEを改善しようとしています(ここでの答えはまだフレームワークの際立った特徴に言及していないことは言うまでもありません)。
コービン

回答:


35

ライブラリは、特定の目的を果たす関数/オブジェクトのコレクションです。さまざまなプロジェクトでライブラリを使用できます。

フレームワークは、アプリケーションの構築に役立つパターンとライブラリのコレクションです。

APIは、他のプログラムが直接アクセスせずにプログラムと対話するためのインターフェースです。

別の言い方をすれば、ライブラリをアプリケーションのアドオン/ピース、フレームワークをアプリケーションのスケルトン、APIをアプリケーションの外向きの部分と考えてください。


7
それはフレームワークの非常に良い定義ではありません。私は本当に「のパターンとライブラリのコレクション」任意のフレームワークを呼び出すことはありません
TheLQ

フレームワークは、構築する環境に似ています。それ以外の+1
クライム

ええ、私はその言葉に少し迷いました。誰にも良い提案がありますか?それ以外の場合は、自由に編集してください。私は、フレームワークと呼ばれるウィキペディアに目を向けました。ヘルプよりもこの質問のコンテキスト。
GSto

3
ライブラリは、コードが担当するとき(コードは「ライブラリを使用する」)であり、フレームワークは、担当するとき(フレームワークは「コードを実行する」)です。たとえば、フレームワークは、物事が発生しなければならない順序(Swing、サーブレット)を指示しますが、ライブラリでは、いつ、どのように使用されるか(イメージ変換、暗号化)を決定します。APIは、呼び出すことができる一連の関数の単なる定義であり、ライブラリとフレームワークの両方の一部です。
マーティンウィックマン

14

これまでのところ良い答えですが、1つの重要なポイントを見逃しています-フレームワークはIoCを使用しています。コードはフレームワークに囲まれています。それはその中に住んでいます。これとは対照的に、あなたのコードは、単に使用して、ライブラリやAPIを。それは外に住んでいます。IoCは違いです。


必ずしもそうではありません。フレームワークはIoCを使用でき、アプリケーションはフレームワーク内に配置できますが、必須ではありません。愚かなことに、フレームワークのウィキペディアのエントリは、これをフレームワークの「識別機能」としてリストし、この論文「dirkriehle.com/computer-science/research/dissertation/…」を参照していますが、論文自体には「反転」というフレーズは含まれていません'または' ioc 'で、実際には「通常、アプリケーションは1つのフレームワークだけでなく複数のフレームワークを使用します」と述べています。(p26、ref p9)
カークブロードハースト

11
@Kirk Broadhurst- Martin Fowlerのことを実際に考えていました:「コントロールの反転は、フレームワークをライブラリとは異なるものにする重要な部分です(...)サブクラス化するか、独自のクラスをプラグインすることにより、フレームワークのさまざまな場所に動作を挿入する必要があります。フレームワークのコードはコードを呼び出します... "IoCが顕著な機能ではないと結論付けた場合際立った特徴-それらはすべて同じであり、それは楽しいことではありません。
スキャントロジャー

@ ScantRoger、Java Collections FrameworkはIoCを使用していますか?そうは思われない.......
Pacerier 14

3

ライブラリは、一般的なタスクを実行するために構築されたコードのコレクションです。ライブラリコードは比較的安定しており、バグがない傾向があります。適切なライブラリを使用すると、記述する必要があるコードの量を減らすことができます。アプリケーションのコード行数を減らす傾向があり、機能が提供されるレートが増加します。ほとんどの場合、独自のコードを記述するよりもライブラリルーチンを使用する方が適切です。

API(アプリケーションプログラミングインターフェイス)は、アプリケーションが利用可能な機能にアクセスできるようにするいくつかの機能へのインターフェイスです。APIは、インターフェイスと呼ばれる場合があります。APIは、システム、ライブラリ、フレームワーク、プログラム、およびアプリケーションを含む多くのレベルで存在します。APIは、それらを実装するコードを実装する前に定義する必要があります。

APIは安定している必要がありますが、APIの一部はさまざまな理由で非推奨になります。APIをより広く使用するほど、変更が難しくなります。多くのメソッドが非推奨になっていますが、Java 1.0 APIのすべてではないにしても、ほとんどが利用可能です。

フレームワークは、アプリケーションの構築をより簡単にするために設計されたAPIのコレクションです。フレームワークは、再利用可能なコンポーネントの実装を提供します。良いフレームワークは、アプリケーションに特化する傾向があります。

Java Collections Frameworkは、コレクションの処理に使用できるさまざまなタイプのオブジェクトに対するAPIのコレクションです。APIの階層をさまざまなコレクションに提供します。Java Collections FrameworkのSortedSetインターフェイスはSetインターフェイスを拡張し、SetインターフェイスはCollectionインターフェイスを拡張します。これらのAPIは抽象インターフェースであり、実際の実装には異なる名前が付いています。コレクションフレームワークにより、コレクションの実装が簡単になり、開発中の実装の変更が簡単になります。

J2EE開発を対象としたJava Spring Frameworkに見られるように、フレームワークはより小さなフレームワークで構築できます。Springは12を超えるフレームワークで構成されており、その多くは単独で使用することも、他のフレームワークで置き換えることもできます。

適切なライブラリ、API、およびフレームワークを使用すると、開発を簡素化できます。これらのコンポーネントは一般的な問題を処理し、開発チームがアプリケーション固有の問題に集中できるようにします。


2

フレームワークは、ライブラリからのステップアップです。ツールボックスがライブラリの場合、ワークショップはフレームワークになります。

ウィキペディアによると

APIは、ソフトウェアシステムのコンポーネントで使用される一連の機能との相互作用のためのインターフェイスを記述する抽象概念です。

APIとユーザーインターフェイスの重要な違いは、APIにより、他のソフトウェア/サービスがプログラムでソリューションと対話できることです。

APIは、アプリケーション(dllまたはプラグインを介して)またはWebサイトとサービス(RESTおよびwebservicesを介して)の両方に対して構築できます。


いい例え
...-sunwukung

1

APIは、ソースから使用できるオブジェクトとメソッドに関して、他の何かの使用方法を定義します。たとえば、TwitterまたはFacebookをサイトに統合するには、TwitterまたはFacebookのAPIを使用して、適切なデータが更新されるようにします。

フレームワークは、時には独自の言語を形成することがあるため、ある意味で少し大きくなる傾向があります。jQueryは、独自の構文を持ち、ある意味でコードに入るという点でもう少し重要なフレームワークの例です。フレームワークは、ある意味でAPIに似たプラットフォームにすることもできます。たとえば、Win32APIまたは.Net Frameworkにはそれぞれ、アプリケーションを構築するための多数のメソッドがあります。

ライブラリは、APIまたはフレームワークを実装するバイナリファイルである傾向があるため、場合によってはAPIまたはフレームワークを使用する必要があるビットです。少なくともそれが、これらの用語とそれらの違いの見方です。


1

図書館に行き、本を読み始めます。あなたがアプリケーションである場合、書籍のコレクションは図書館です。棚、食器棚、およびこれらすべてを収容するコンパウンドがフレームワークを構成します。本を読むタスクを実行しているときに連絡を取るのはすべてAPIです。


これは素晴らしい答えです。
メイガス14

0

ライブラリは、一般的なタスクを簡素化するために使用されるコードのコレクションです。クラス、関数、または言語やプラットフォームに固有のものであれば何でもかまいません。良い例としては、一般的なタスク(文字列の作成、分割、検索、並べ替えなど)のヘルパーを提供する文字列操作ライブラリがあります。

API(アプリケーションプログラミングインターフェース)は、別のアプリケーション、システム、またはテクノロジーとの連携方法の定義(「インターフェース」)です。基本的に、他のシステムと対話するために使用できる操作を定義します。API ライブラリにすることできます(APIはライブラリまたはクラスのセットにラップされることを意味します)が、APIは常にデータベース、Webサービス、別のアプリケーション、またはオペレーティングシステムなどの外部システムを参照します自体。

フレームワークはより大きな概念であり、通常、一般的なタスクを実行するための多くのライブラリとAPIが含まれます。より高い概念レベルで存在します-それは単なるツールのコレクションではなく、設計パターン、ベストプラクティス、および方法論のコレクションでもあります。ソフトウェアフレームワークは、一般的なフレームワークの拡張です。その意味には、物事の基盤となる基盤、サポートと構造の提供、要件へのガイダンスと定義の提供が含まれます。


0

アプリケーションは、フレームワークに基づいたライブラリを使用して開発され、APIを介して通信します。

オンライン画像処理アプリケーションと言うアプリを作成する場合、

  • 事前に作成されたいくつかの画像処理ライブラリを使用できます。
  • アプリケーションを構築するためのガイドとなるフレームワーク上で。
  • あなたは、外の世界と対話する何らかの方法でアプリケーションを提供することになります。

アプリケーションに電話がかかってきたとき

  • フレームワークのガイダンスを使用して設計した方法で処理されます
  • ライブラリによって運ばれる呼び出しの処理
  • これらの関数には、外部のAPIからアクセスします

呼び出し元に

これらが存在する理由:

  • ライブラリ:車輪の再発明からあなたを救います
  • フレームワーク:フレームワーク自体に欠陥がない限り、システム設計と処理の予期しないトラップからあなたを救います
  • API:コアを実世界のアクセスから接続することにより、アプリケーションのセキュリティを確保します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.