![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
こんにちわ。
Java(というか全般的に??)ではフレームワークが花盛りですが、フレームワークとクラスライブラリの明確な違いってなんでしょうか。
私個人としては以下のように解釈してます。
・フレームワークとは使う上でのメリットはあるが、規約を強制するもの。人が仕組みにあわせて設計・プログラミングする。
・ライブラリは使う上でのルール(使い方)はあるものの、人が好きなように使える便利ツール集。
ただこの観点でいくとO/Rマッピングなどは・・・?
作る側としてはライブラリは結構気軽に作っていけるものの、フレームワークは何よりも思想が大事なのかな、と思っています。
皆さんのご意見をお聞かせください。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
フレームワーク呼ばれることがあるものを列挙してみます
(1)部分的な機能(コレクションフレームワーク:List, Map, Set)
(2)O/Rマッパー(Hibernate)
(3)(一般的な)フレームワーク(Struts, Spring)
(4)プロジェクト毎独自作成の(自称)フレームワーク
基本的には作った人がフレームワークと呼びたいか、フレームワークのつもりで作ったかどうかで、フレームワークと呼ばれるかどうかが決まると思います。その意味では上記の全てがフレームワークです。
私の個人的な意見では、記述を劇的に変更させるほどの仕組みがフレームワークだと思います。もう少し詳しく言うと、記述を簡素にするだけなのは共通部品で、記述そのものをしなくてよくなるのがフレームワークといえると思います。
その意味で、コレクションフレームワークが提供された事により、配列の追加の際にnewして配列をつくり直す記述をしなくなってよくなった意義はきわめて大きく、これはフレームワークといえます。O/RマッパーもSQLを記述しなくてもよくなった点や、(一般的な)フレームワークでサーブレットを記述しなくてよくなったという観点から、両者はフレームワークといえます。
微妙なのはプロジェクト毎独自作成(自称)フレームワークで、これはただの機能を提供しているだけなのにフレームワークと呼ぶ場合があります。この中での切り分けは、例えばログを出力するメソッドを提供するだけというのはただの共通部品もしくはライブラリ、一方、BLやDAOのメソッドの呼び出しと終了時に自動的にログを出力する仕組みを提供するのがフレームワークだと思います。
>フレームワークのことを部品、部品と呼ぶ人たちがいますが
というのは、ただの共通部品にすぎないのにフレームワークと呼んでいるものがあるからなのではないかと思います。
結論としてNo.2さんの
>フレームワークとはある特定の処理を自動的に処理してくれる枠組みと考えてみてはどうでしょうか。
や、No.3さんの
>ライブラリは「機能」を提供するものであり、フレームワークは「仕組み」を提供するものである
と同じですね…。
思想や規約をフレームワークである程度規定することはできると思いますが、それはフレームワークの本来の役割ではないと思います。思想や規約はPJ毎に定めるコーディング規約に盛り込むべきだと思います。
No.4
- 回答日時:
仕事でフレームワークの設計をしました。
フレームワークとライブラリの違いはNo.3の方と同じ意見です。
「フレームワークは思想が大事」という点ですが、これはフレームワーク作成者としても悩みどころで、
「そのフレームワークを適用することで、どれくらい工数が削減できるの?」
と質問されたことがあり、その質問をした人は80%程度をフレームワークで実装してて残り20%の実装だけで済むというのを期待していたようですが
「80%程度をフレームワークで実装してしまうとそのフレームワークはあまり汎用的には作られていないということだし、おおくのアプリケーションに適用できるような汎用的なフレームワークは10%程度しか工数を削減できないかもしれない」
と説明したところ
「10%の工数削減のために『フレームワーク作成』に何人もの人をアサインしてコストをかける価値があるのか?」
と言われました。
もちろん1つのプロジェクトだけに適用するとフレームワーク作成のほうがコストは大きいですが、いくつものプロジェクトに適用することでフレームワーク作成のコストは徐々に償却されていくはずです。
ただ、フレームワークの実装を(アプリケーション全体の)何%になるように設計するかというのはまさに思想レベルで、正解はないと思います。
実際、Strutsのように10%未満程度の工数削減にしかならないフレームワークでも使われまくったりしてますから。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_03.png?5a7ff87)
No.3
- 回答日時:
フレームワークの定義で必ず登場するのが、「ハリウッド原則」というやつです。
「私を呼ばないで! 私があなたを呼ぶから」
(Don't call me! I will call you)
基本的に、「プログラマが自分で呼び出し使うもの」が普通のライブラリであるのに対し、フレームワークは、フレームワークのほうが必要に応じてプログラマの作ったプログラムを呼び出します。その点が一番大きな違いでしょう。ライブラリは「機能」を提供するものであり、フレームワークは「仕組み」を提供するものである、という認識は正しいと思います。
そういう点からいえば、ORMもフレームワークだと思いますよ。ただし、システム全体を構築するためのフレームワークではありませんから用途的には限定された形になります。それで、フレームワークっぽくない感じがするのでしょう。
けれど、たとえばHibernateでは、データベースのデータをマッピングするためのクラスやマッピングファイルなどの定義をHibernateの指示に従って記述しておくと、必要に応じてそれらの情報やクラスが呼び出され適切な形にデータがマッピングされ返されます。プログラマが自分でマッピングファイルを読み込み、それをもとにデータベースから取得したデータをマッピングクラスのインスタンスとして変換する処理を呼び出しているわけではありません。となると、これは機能限定的ではあるけれど、れっきとしたフレームワークといってよいのではないでしょうか。
ハリウッド原則って私も聞いたことあります!
自分はフレームワーク≒コントローラってイメージですね。
あくまでも呼び出されるロジック、パーツをプログラムして、フレームワーク側には呼び出し方を設定ファイルで定義する、みたいな。
んで、フレームワークは定義された設定に従って処理を呼んでいくという。
それにしてもフレームワークの設定ファイルと記述内容の多さには軽く閉口気味です(-_-;)
No.2
- 回答日時:
よくフレームワークのことを部品、部品と呼ぶ人たちがいますが、ちょっと違う気がします。
フレームワークとはある特定の処理を自動的に処理してくれる枠組みと考えてみてはどうでしょうか。
わたしはよく、VBの作成画面がフレームワークだと説明しています。
ボタンのクリックイベントに処理をコーディングするだけで、クリックされたらその処理が呼び出される・・・
つまり、フレームワークがその処理(呼び出す処理)を行っているのだと。
参考までに。
フレームワークを部品と呼ぶのは私は抵抗ありますね。どちらかというとライブラリの方が部品ぽいような・・・(^_^;)
VBですか、私は使ったことないのですがやはりフレームワークは自分で呼び出すのではなく呼び出されるといった感じですね
No.1
- 回答日時:
フレームワーク・ライブラリという言い方もありますが(^-^;)
ライブラリは良く使うプログラム部品を集めたもの。
フレームワークはアプリケーションの枠組みですね。
オブジェクト指向以前では個別の機能部品はライブラリにできても枠組みをライブラリとして提供するのは難しかったのです。
オブジェクト指向でポリモフィズムを利用することにより枠組みをライブラリとして提供しやすくなりフレームワーク・ライブラリが作られるようになりました。
フレームワークは大きな部品なので「規約を強制」「思想が大事」と思うかもしれませんが、仕様を理解していないと正しく使えないという点ではライブラリもフレームワークも大差ないと思いますよ。
なるほど、フレームワークはオブジェクト指向の産物なのですね。
だから、Cではあまりフレームワークって単語を聞かなかったりするんですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Python Java,Springフレームワークの習得 1 2023/08/02 15:28
- PHP クラス 1 2022/08/08 15:12
- その他(プログラミング・Web制作) .netに近いjsフレームワークは何ですか 2 2022/05/12 22:28
- iPhone(アイフォーン) 「ライブラリ」ってどこの事ですか? ※ 英語の勉強のために Amazon で買物をしたいのですが、「 2 2023/07/14 22:04
- Visual Basic(VBA) フレームワーク「4.8.1」で、[Sub Main]が動かない。助けて下さい 3 2022/11/14 15:40
- 写真・ビデオ iPhoneのプライバシーとセキュリティの写真の項目について 2 2023/06/24 23:11
- iPhone(アイフォーン) iPhoneのプライバシーとセキュリティの写真の項目について 1 2023/06/24 20:25
- C言語・C++・C# ペーパーマリオみたいにドット絵でない2Dのイラストを作ったりするには何のソフトを使えばいいでしょうか 2 2023/05/29 11:28
- その他(プログラミング・Web制作) Pythonのライブラリをダウンロード済みかどうか簡単にチェックできますか? 3 2023/06/24 10:48
- IT・エンジニアリング 企業におけるデータ管理方法についてみなさまのお考えを教えてください。 1 2023/04/15 22:34
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseソース開発画面の行番号...
-
文字列に半角スペースがあるか...
-
この便利な時代に開発環境すら...
-
C言語の次のステップは?
-
プログラムの開発環境について
-
今でも、TomcatとApacheの連結...
-
MacでJavaを…
-
Javaって何を使って開発するの...
-
JavaBeans,JSP, Servlet(MVC)の...
-
フレームワーク設計
-
開発ツールについてEclipseとWT...
-
フリーソフトの作成言語
-
今のJavaの業務開発はどんな感...
-
javaフレームワークの入門とし...
-
Javaでバッチ処理
-
iPodでゲームソフトを製作する方法
-
How to import HorizontalGridV...
-
プログラミング開発経験とは?
-
プログラミングの役立て方?使...
-
vba クリップボードクリアにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseソース開発画面の行番号...
-
「C#ができればJavaもできる」...
-
プログラミング開発経験とは?
-
オブジェクト指向について
-
プログラミング言語について
-
この便利な時代に開発環境すら...
-
文字列に半角スペースがあるか...
-
フリーソフトの作成言語
-
JAVAを使って管理システムを構...
-
TOMCATとANDROIDSTUDIOの違い
-
WeblogicでStrut...
-
JavaMailを使う前のTomcatの設定
-
PowerBuilderの知識が必要です。
-
今でも、TomcatとApacheの連結...
-
iPodでゲームソフトを製作する方法
-
AndroidとJavaの違いについて
-
プリクラの様な画像処理(webカ...
-
android開発環境アンインストール
-
コマンドボタンの文字が消える!
-
Javaでバッチ処理
おすすめ情報