位置情報で子どもの居場所をお知らせ

プラグイン、ライブラリ、コンポーネント、モジュールの違いは?
プログラムを行っている人にとっては初歩的な質問かと思いますが、プログラム開発で出てくるプラグイン、ライブラリ、コンポーネント、モジュールのそれぞれの違いってなんでしょうか?
いずれも、あるプログラムをまとめたプログラムであると思っているのですが、何をどういう基準で分ければいいのかと疑問に思ってしまいました。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

実はとても良い質問だと思います。



おそらく、明確に答えられるプログラマはあまりいない (特にコンポーネントとモジュールの違いが) と思います。

順に説明していきましょう。

プラグインはあるソフトウェアを拡張するためのプログラムです。
プラグインは単体では動きません。
プラグインは「ソフトウェアを使用する人間が入れ替え可能なプログラムの一部のこと」と言えるでしょう。

プラグインで最も有名なソフトウェアとして、Mozilla Firefox を挙げます。
このソフトウェアの使用者は、Firefox のプラグインとして、各種拡張を自由に追加・入れ替え・削除が行えます。
(firefox では、「拡張」と例えば Adobe Flash Player のようなファイルの種類に応じて呼び出される別のプログラムという2種類のプラグインが存在しているので、注意してください)


ライブラリは有用で汎用性の高い関数・クラス・その他を再利用可能な形でひとまとめにしたものです。
たいていの場合、ライブラリ単体では動きません。
プラグインとの違いは汎用性が挙げられます。
あるソフトウェアを対象として書かれたプラグインと違い、ライブラリは特定のソフトウェアを対象としてかかれていません。

誤解が生じかねないので具体例を挙げます。
例えば、Windows Media Player で YouTube を見られるようにするためのプログラムを書いた場合、それは Windows Media Player のプラグインと言えるでしょう。
一方、YouTube を見られるように、手続きを行う関数・クラスをひとまとめにしたプログラムを書いた場合、それはライブラリです。
この場合、ライブラリがアクセスするソフトウェアは固定ですが、ライブラリを使うソフトウェアは特定のモノが対象となっていないことに注意してください。


コンポーネントはソフトウェアの部品で、モジュールもソフトウェアの部品です。

モジュールはある手続き (関数やメソッド) とデータ構造をひとまとめにした部品です。
大抵の場合、モジュール単体でコンパイル可能ですが、動作はしません。
この説明だけだと、クラスとモジュールの違いがわからなくなりますが、一番大きな違いは、クラスはインスタンスとしてオブジェクトを生成しますが、モジュールは生成しない点でしょう。

コンポーネントはある機能を持ったプログラムの部品です。
大抵の場合、コンポーネント単体では動作しません。
非常に漠然とした回答で申し訳ないですが、モジュールを複数組み合わせた位のモノがコンポーネントと思っていただければありがたいです。
粒度的には
プログラム (←これ単体でやっと動く) > コンポーネント > モジュール > クラス
です。


さて、ココまでの回答ですが、全てちゃぶ台をひっくり返してしまいます。

業務のドメインや会社・組織、部署、チーム、はてはプロジェクトごとに、
コンポーネント、モジュール、その他もろもろの定義はぜんぜん違います。

はっきり言ってしまえば、どんなにえらい先生、専門家、スーパーエンジニアでも、これらの定義はまちまちです。

例えば、IT用語辞典 e-word において「コンポーネント」は「基本的に単体では使用できず」と書いてありますが、世界で始めて「コンポーネント」という概念を実装したのは Unix のパイプとフィルタであり、
当たり前ですが、ここで用いられている Unix の各種プログラムは単体で使用可能です。


ですので、実際のところは、あなたがこれくらいかなと思ったものがコンポーネントであり、モジュールです。


実のところ、勉強すればするほどわからなくなっていくお話ですが、漫然と過ごしてしまうと、このようなハードな疑問を抱けなくなってしまうかと思います。
どうか、これからも疑問を抱き続けてください。


最後に、まったくどうでもいい知識ですが、
世の中には Component Plugin Module というモジュールが存在しています。
    • good
    • 4
この回答へのお礼

S_Katsuyamaさん

素晴らしい回答ありがとうございます!
この様な回答をお待ちしていました。

> 実のところ、勉強すればするほどわからなくなっていくお話ですが、

そうなんです。
プログラムを書けば書くほど疑問が大きくなり、何が何なのかわからなくなってしまったので質問させて頂きました。

この様な回答を書ける方であれば、きっと素晴らしいプログラマかと思います。
一緒に仕事をしている人がうらやましいぐらいです。

> 世の中には Component Plugin Module というモジュールが存在しています。

そんな物があるんですね。知りませんでした。

いずれにしても本当にありがとうございました。

お礼日時:2010/07/20 08:08

ここに質問する前にネットで検索してね!



プラグインとは
コンポーネントとは
モジュールとは
ライブラリとは

のキーワードで検索すれば説明サイトが見れます。それでわからない部分を聞いてください。、そうずれば

>いずれも、あるプログラムをまとめたプログラムであると思っているのですが

と言うアホナ質問にならないと思いますよ。コンピューター関係の用語は、学校で国語とか漢文とか英語とか習うのと一緒で、まず辞書で調べましょう。

例: 授業で

This is a pen.

と黒板にかかれたら、penとは何ですか? と質問する人はいますかね?


ちなみに、それぞれ全く違う意味です。それぞれ元の意味があり、コンピューターの用語としては、このような意味になります。と言う説明になります。

例えば「ライブラリ」ですが「図書館」ですね。コンピューター用語としては、メインのプログラムから呼び出されるソフトの集合場所や、ソフトそのものを指します。

しかし、違う意味でも使われます。写真や動画の集めたフォルダーやアルバムを指します。これは、絵画や歴史的な資料をそろえている会館やオフィスなども指しますね。前後の文脈が重要ということですね。

>何をどういう基準で分ければいいのかと

と言う事でこの質問は的を得て質問されていないので、「それぞれ意味が違います」と言う回答が正しかと思いますよ。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

Qオープン系、汎用系とは?

職を探すときに、オープン系システム開発とか汎用系システム開発という言葉が使われますが、オープン系・汎用系とはそもそもどーいう意味なんでしょうか?

どなたか、よろしくお願いします!

Aベストアンサー

オープン系とは、Unix,WS(+PC)をベースにした所謂「クライアント・サーバーシステム」を前提にしているようです。各WSやPCは、「通信」で結ばれます。文字どおり、個々の機種への依存性を極力排し、自由に結合できるのが特徴です。

汎用系とは、汎用大型機を前提としており、今でも金融系や移動通信の制御などに用いられています。(E)WS+Unixが出てくるまでは事実上これしかありませんでした。(他にもスパコンとかミニコンはあったが、基本は同じ)

これ以上詳しく言うとボロがでるので、あとは、専門家の方に任せます。

Qモジュールとは何ですか

モジュールとは具体的には何を指しているのか、をお聞きします。

手元のカタカナ語辞典では
「プログラムを、それぞれ特有の機能を持ついくつかの基準単位に分割すること。また、その基準単位。」
と書いてありました。

そうすると、1つ1つのソースファイルを指しているように思えてきます。

いままで私が人がしゃべっているのを聞いてきたところでは、Windowsでいうところの、exeファイルやdllファイルを指しているような気がします。

「モジュール」という言葉は gooの新語辞典にも載っています。
また、コンピュータ用語辞典のようなサイトも見てみました。
それらによると、「ソフトウェア・ハードウェアの部品」だそうです。
しかし、例えば何のことをいっているのかが、分からないのです。

#ファイルなら何でもいいのだろうか。

この言葉の用例を教えていただきたいのです。

============================
過去の質問と回答より。


http://oshiete1.goo.ne.jp/kotaeru.php3?q=302590
回答No.1の補足より。
>モジュールはAccessの標準モジュールのことです

わたしはAccessのことをほとんど知らないので、ハテナです。


http://oshiete1.goo.ne.jp/kotaeru.php3?q=293234
こちらのNo.2の回答では、
dllとは「共通モジュール=ライブラリ」である、
という使い方ですので、例えばdllのことを指しているようです。

モジュールとは具体的には何を指しているのか、をお聞きします。

手元のカタカナ語辞典では
「プログラムを、それぞれ特有の機能を持ついくつかの基準単位に分割すること。また、その基準単位。」
と書いてありました。

そうすると、1つ1つのソースファイルを指しているように思えてきます。

いままで私が人がしゃべっているのを聞いてきたところでは、Windowsでいうところの、exeファイルやdllファイルを指しているような気がします。

「モジュール」という言葉は gooの新語辞典にも載ってい...続きを読む

Aベストアンサー

「モジュール」と言う言葉には「ソフトウェアの部品」という以上の共通概念はありません。
よって、使用される文章の前後関係によって微妙に意味合いが変ってきます。

1.関数、手続き
「mainモジュール」など
2.機能単位でまとめられたライブラリのメンバー
「標準関数ライブラリ(UNIXならlibc.a)に含まれるstdio関係の関数群」など
3.実行ファイルを構築するための個々の素材ファイル
「ソースファイル」、「オブジェクトファイル」、「ライブラリファイル」など
4.実行環境を構成する個々の実行可能ファイル
「exeファイル」、「dllファイル」など
5.(オブジェクト指向型言語において)クラス

モジュールは機能で分類されていると言う保証はありません。
「stdioを構成する個々の関数」を関数モジュールと言う場合もあります。

モジュールと言う単語を使い場合、「関数モジュール」とか「ライブラリモジュール」と言うように、モジュールと言う言葉の曖昧さを保管するような単語と組み合わせて使う用に心がけた方が安全です。

Q