--------------------
◆ ライブラリとフレームワークの違いってヤツ

--------------------

プログラミングをしていて、ふと疑問が浮かんだ。
と言っても、コーディングに支障をきたすような類ではない。
実に些細な問題である。

「ライブラリ」と「フレームワーク」の違いとは何か。

これらの単語は、プログラミングに携わる人間なら少しは耳にしているだろう。
C/C++だけでなく、様々なところで聞く言葉だ。
何となく分かってはいるつもりだが、改めて説明せよと言われたら困るに違いない。
まずはアスキーデジタル用語辞典で単語の意味を調べてみる。
【ライブラリ】 ( library )
複数のソフトウェアで使用する汎用性のある関数やデータの集まり。
【フレームワーク】 ( framework )
直訳的には、「枠組み」「骨組み」といった意味になる。文脈によってさまざまな内容を指し示す便利な言葉である。
IT関連で使われる場合には、あるサービスの土台の部分を構成するソフトウェアシステムやアーキテクチャのことを言うことが多い。

…だそうだ。

Google先生に尋ねてみても、なかなか上手い返事は貰えない。
外来語、すなわちカタカナとして珍しくない単語だというのもあるだろうし、IT関係に限って検索したとしても、JavaやらC#やらプロジェクトマネジメントやらの用語だったりと、目的の解答を探すのは大変である。
というわけで、素直に2chで聞いてみることに。

247 名前:デフォルトの名無しさん
英語だめぽだが、あえてぐぐってみた たとえば、こんなん見せたら会得するかな
http://www.crystalclearsoftware.com/about/LibraryFrameworkDev.html
漏れも助言請う スパッと答えて、エロい人!
249 名前:デフォルトの名無しさん
ライブラリ⊇フレームワーク
250 名前:デフォルトの名無しさん
ライブラリ 単なる関数やクラスとかの集まり
フレームワーク 複数のクラスを所定のルールに従って使用しないと動かないもの。
251 名前:デフォルトの名無しさん
明確な差はない。
もっとも普遍的だと思われる定義は、アプリケーションの流れまで管理して
ユーザーコードをライブラリ側が呼び出して使うものをフレームワーク
(イベントドリブンなアーキテクチャでユーザーは各イベントの応答部分を実装等)、
逆にアプリケーションアーキテクチャに依存せずユーザーがライブラリコードを
呼び出して使うものをライブラリと認識しているはず。(DirectX、STL、Boost等)

しかし前者に当てはまるBorlandのVCLはVisualComponentLibraryだし、
大手企業でもかなり適当に命名してる気がする。
252 名前:デフォルトの名無しさん
そう言われてみれば、アプリケーション全体構造を規定し、プログラマは(全体でなく)残りを実装して作るような
ライブラリを、漏れもフレームワークって呼んでるかもですね…
254 名前:デフォルトの名無しさん
○フレームワークの例
Appache Struts
JSF(Java Server Faces)
EJB + Servlet + JSP

これらはMVCフレームワークを用いている。

デザインパターンやアーキテクチャパターンを
駆使しているものが多く、このクラスを継承してあのクラスを委譲して集約して
あれこれしないと使えない、というものが多い。

Hibiernate, Cayenne
これはとくに後者は微妙なところではあるが
O-Rマッピングツールであり、コードを自動生成した後は
ライブラリのように手軽に使えるともいえるしHibernateは使い方次第ではフレームワーク
だともいえる。

フレームワークは、単にimport(あるいはusing, include)しただけでは使えないケースが多い。

○ライブラリの例
クラスリストがあるだけ
入力と出力が決まった典型的な関数リストがあるだけ、
それをimport, あるいはusing, includeするだけ
なものが多い。
本当に単純に、誰かが作ったクラスや関数を呼び出すだけ、みたいな。
255 名前:デフォルトの名無しさん
Javaのjava.util.Collectionインターフェースを実装している
クラス、インターフェース群は コレクションフレームワークと呼ばれている。
なぜなら、複数のコレクション系クラスが複雑に絡み合ってできているから。

GoFデザインパターンの一つIteratorパターン, Obeserverパターン
のIterator, Observerに相当するインターフェースIterator, Observerというものなどが存在している。

何かしらオブジェクト指向が関与しているものがフレームワークともいえる。

これらのコレクション系クラスはたとえばリスト構造を使いたければListインターフェースと
ArrayListクラスが必要だ。ここでリストに溜めたオブジェクトを
ループで効率良く展開したい場合はIteratorインターフェースを使う。
//こんな感じ 
List list = new ArrayList();
list.add("test");
list.add("abc");
Iterator iterator = list.iterator();
String sult = null;
while(iterator.hasNext()){
result = iterator.next();
//(ry
}

ほかにもLinkedList, Set. SortedSet, HashSet, TreeSet, Map, SortedMap, HashMap, LinkedHashMap,
TreeMap. LinkedListなどがある。
ほかに、Jakarta CommonsというAPIにはJakarta Common CollectionsというAPIがあり、
Java標準でついてくるコレクションフレームワークよりもより細かいことができるものがある。
Bag, 二次元ハッシュキーとして使えるMultiKey, HashとListを一緒にしたコレクション系など....
261 名前:デフォルトの名無しさん
割といつでも好きなように使えるのがライブラリ。
処理の準備、開始、後始末等、あらかじめコンテクストが決められているのがフレームワーク。


・・・些細な疑問だったはずなのに、けっこうな数のレス。多謝。

正直、自分の実力ではサッパリな内容もあったりするが。
とりあえず、自分の今までの認識が間違っていなかっただけでも良しとしよう。
[PR]
R.F.D. | by odprfd | 2005-08-19 22:14 | 情報技術

--------------------

<< DirectX9勉強再開 | なのはな体操と落花生とMAXコ... >>