[解決済み] モジュール、ライブラリ、フレームワークの違いについて
質問
一般的なプログラミング用語として、これらの用語の違いと重複は何でしょうか?
私が見逃している関連用語があれば教えてください。
どのように解決するのですか?
3つとも機能を提供しています。
しかし、重要な違いがあります。
A ライブラリ は だけ 関連する機能の集合体です。それ以上でもなければ、それ以下でもありません。ライブラリの定義的な特徴は あなたが がコントロールできることです。 あなた はライブラリを呼び出します。
の決定的な特徴は フレームワーク は 制御の逆転 . フレームワークが呼び出す あなた を呼び出すのであって、その逆ではありません。(これは ハリウッドの原理 : "Don't call us, we'll call you.quot;として知られています)。フレームワークが制御している 制御の流れ、データの流れはフレームワークが管理する。
どちらの場合も、アプリケーションがあり、そのアプリケーションにはコードが抜けている穴があり、その穴を埋める必要がある、と考えることができます。ライブラリとフレームワークの違いは
- 誰がアプリケーションを書くか。
- 穴は何ですか?
- 誰がその穴を埋めるのか
図書館と あなた を省き、アプリケーションを書きます。 つまらない で埋められます。 ライブラリ .
フレームワークでは フレームワークライター はアプリケーションを記述し 面白い の詳細については あなた を入力します。
なぜなら、フレームワーク自身は、フレームワークの作者がライブラリで埋めたつまらない詳細を含んでいるかもしれないし、あなたが書く部分は、あなたがライブラリで埋めたつまらない詳細を含んでいるかもしれないし、フレームワークは、フレームワークとうまく動作するか、フレームワークと組み合わせてしばしば必要とされるバンドルライブラリのセットを提供するかもしれないからです。たとえば、Webフレームワークを使用してWebアプリケーションを書くとき、XML生成ライブラリを使用するかもしれませんし、そのXMLライブラリはフレームワークによって提供されているか、フレームワークの不可欠な部分であるかもしれません。
しかし、ライブラリとフレームワークの間に区別がないわけではありません。その区別は非常に明確で、制御の逆転がすべてなのです。
の決定的な特徴は モジュール は 情報隠蔽 . モジュールは インターフェース を持っています。これは、モジュールが提供する機能と、モジュールが依存する機能の両方を、明示的に、しかし抽象的に指定します。(しばしば エクスポートされた と インポート の機能を持つ) このインターフェースは の実装があります。 (実際には複数の実装) があり、モジュールのユーザから見るとブラックボックスです。
また、ライブラリは
コレクション
を提供するだけであるのに対し、モジュールは関連する機能の
単一機能
を提供するだけです。つまり、モジュールとライブラリの両方があるシステムの場合、ライブラリは通常複数のモジュールを含むことになります。たとえば、コレクション・ライブラリの中に
List
モジュールと
Set
モジュールと
Map
モジュールで構成されています。
モジュールシステム無しでも確かにモジュールは書けますが、理想を言えば、モジュールは別々にコンパイルでき(その概念が意味を持つ言語と実行環境の場合)、別々にデプロイでき、そしてモジュール合成は安全に行いたいものです(つまり、モジュールを合成すると、実行前に動作するかエラーが発生しますが、決して実行時のエラーや予期せぬ動作には至らない)。このためには、Racketのユニット、Standard MLのモジュールとファンクタ、Newspeakのトップレベルクラスのようなモジュールシステムが必要です。
では、おさらいです。
- ライブラリ : 関連機能集
- フレームワーク : 制御の逆転
- モジュール : 明示的にエクスポートとインポートを行う抽象的なインターフェースで、実装とインターフェースが分離しており、複数の実装が存在する可能性があり、実装は隠されています。
関連
-
[解決済み] フレームワークとライブラリの違いは何ですか?
-
[解決済み] Pythonモジュールをアンロード(再ロード)するにはどうしたらいいですか?
-
[解決済み] CommonJSとAMDとRequireJSの関係?
-
[解決済み] PythonモジュールとPythonパッケージの違いは何ですか?
-
[解決済み] クラスとモジュールの違い
-
[解決済み] Node.jsとES6におけるmodule.exportsとexport defaultの比較
-
[解決済み】ミドルウェアとは一体何ですか?
-
[解決済み】Spring、Struts、Hibernate、JavaServer Faces、Tapestryの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン