モジュラープログラミング

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

モジュールは、あるソフトウェア設計の機能分離強調技術プログラムを独立した、交換可能にモジュール各々は所望の機能の一つの態様を実行するために必要なすべてを含むように、。

モジュールインターフェイスは、モジュールによって提供および必要とされる要素を表現します。インターフェイスで定義された要素は、他のモジュールによって検出可能です。実装は、要素に相当するが、インタフェースで宣言されていること動作するコードが含まれています。モジュラープログラミングは、構造化プログラミングオブジェクト指向プログラミング密接に関連しており、分解によって大規模なソフトウェアプログラムやシステムの構築を容易にするという同じ目標を持っています。細かく分割され、すべて1960年代頃に始まりました。これらの用語の歴史的な使用法には一貫性がありませんでしたが、「モジュラープログラミング」とは、プログラム全体のコードを断片に高レベルで分解することを指します。構造化プログラミングから、構造化制御フローの低レベルコード使用、およびオブジェクト指向です。オブジェクトデータ使用、一種のデータ構造への指向プログラミング

オブジェクト指向プログラミングでは、モジュールを構築するためのアーキテクチャパターンとしてインターフェイスを使用することは、インターフェイスベースのプログラミングとして知られています[要出典]

用語

この用語は、アセンブリ(のような.NET言語などのC# F#またはVisual Basic .NETの)またはパッケージ(のようにダート移動またはJavaの)時々の代わりに使用されるモジュール他の実装では、これらは別個の概念です。中にはPythonにしながら、パッケージには、モジュールの集合であるJavaの9の導入新しいモジュールコンセプト(拡張アクセスコントロールとパッケージのコレクション)実装されました。

さらに、「パッケージ」という用語は、ソフトウェアで他の用途があります(たとえば、.NET NuGetパッケージ)。コンポーネントは、同様の概念であるが、一般的により高いレベルを指します。コンポーネントはシステム全体の一部であり、モジュールは個々のプログラムの一部です。「モジュール」という用語の規模は、言語によって大きく異なります。Pythonではそれは非常に小規模であり、各ファイルはモジュールですが、Java 9では大規模であることが計画されており、モジュールはパッケージのコレクションであり、パッケージのコレクションであり、ファイルのコレクションです。

モジュールの他の用語にはパスカル方言で使用される単位が含まれます

言語サポート

モジュールの概念を正式にサポートする言語には、AdaAlgolBlitzMaxC ++C#ClojureCOBOLCommon_LispDDarteCErlangElixirElmFF#FortranGoHaskellIBM / 360 アセンブラーが含まれます。制御言語(CL)、IBM RPGJava[a] MATLABMLModulaModula-2Modula-3、Morpho、NEWPOberonOberon-2Objective-COCamlPascalのいくつかの派生物Component PascalObject PascalTurbo PascalUCSD Pascal)、PerlPL / IPureBasicPythonRRuby[2] RustJavaScript[3] Visual Basic.NETおよびWebDNA

モジュールのサポートがない言語の顕著な例はCであり、元の形式ではC ++とPascalでしたがCC ++ではヘッダーファイルを使用して個別のコンパイルインターフェイスと宣言型インターフェイスを指定できます。モジュールはiOS7(2013)のObjective-Cに追加されました。 C ++とC ++ 20[4]とパスカル開始からのモジュール、およびモジュールを含んで種々の誘導体が含まのModulaとオベロン、取って代わられました。JavaScriptには、ECMAScript2015以降のネイティブモジュールがあります

モジュラープログラミングは、プログラミング言語に名前付きモジュールをサポートするための明示的な構文機能がない場合でも実行できます。たとえば、Cの場合などです。これは、既存の言語機能を、コーディング規約プログラミングイディオム、物理コード構造。IBM iは、Integrated Language Environment(ILE)でプログラミングするときにもモジュールを使用します

重要な側面

モジュラープログラミングで、モジュールが論理的に離散した機能を実行し、明確に定義されたインターフェイスを介して相互作用するように、関心の分離が行われます。多くの場合、モジュールは有向非巡回グラフ(DAG)を形成します。この場合、モジュール間の循環依存関係は、これらが単一のモジュールであることを示していると見なされます。モジュールがDAGを形成する場合、それらは階層として配置できます。最下位のモジュールは他のモジュールに依存せずに独立しており、上位のモジュールは下位のモジュールに依存します。特定のプログラムまたはライブラリは、それ自体の階層の最上位モジュールですが、上位レベルのプログラム、ライブラリ、またはシステムの下位レベルのモジュールと見なすことができます。

モジュラーシステムを作成する場合、モノリシックアプリケーション(最小のコンポーネントが全体である)を作成する代わりに、いくつかの小さなモジュールが別々に記述されるため、それらを一緒に構成すると、実行可能なアプリケーションプログラムが構築されます。通常、これらも個別にコンパイルされ、個別のコンパイルを介して、リンカーによってリンクされますジャストインタイムコンパイラはで、「オン・ザ・フライ」このような構成の一部を行うことができる実行時間

これらの独立した機能は、通常、プログラム制御機能または特定のタスク機能のいずれかに分類されます。プログラム制御機能は、1つのプログラムで機能するように設計されています。特定のタスク機能は、さまざまなプログラムに適用できるように綿密に準備されています。

これにより、モジュール式に設計されたシステムは、正しく構築された場合、従来のモノリシック設計よりもはるかに再利用可能になります。これは、これらのモジュールのすべて(または多く)が他のプロジェクトで(変更なしで)再利用できるためです。これにより、プロジェクトをいくつかの小さなプロジェクトに「分割」することも容易になります。理論的には、モジュール化されたソフトウェアプロジェクトは、チームメンバーがシステム全体を作成したり、システム全体について知る必要がないため、大規模なチームがより簡単に組み立てることができます。彼らは割り当てられた小さなタスクだけに集中することができます(これは、[誰が? ]と主張しThe Mythical Man Monthの主要な仮定に反し、実際には、後から作成することなく、後期のソフトウェアプロジェクトに開発者を追加することを可能にします) 。

歴史

サブシステム(特にI / O用)およびソフトウェアライブラリの形式のモジュラープログラミングは、コードの再利用に使用されていた初期のソフトウェアシステムにまでさかのぼりますモジュラープログラミング自体は、モジュール性を目的として、1960年代後半から1970年代に、構造化プログラミング(1960年代)の概念のより大規模なアナログとして開発されました「モジュラープログラミング」という用語は、少なくとも1968年7月にラリーコンスタンチンによって情報システム研究所で開催されたモジュラープログラミングに関する全国シンポジウムにまでさかのぼります。他の重要な概念は、情報隠蔽(1972)と関心の分離(SoC、1974)でした。

モジュールは、ALGOL 68(1968)の元の仕様には含まれていませんでしたが、初期の実装であるALGOL 68-R(1970)およびALGOL 68C(1970)の拡張機能として含まれ、後に正式化されました。[5]モジュラープログラミングのために最初から設計された最初の言語の1つは、Niklaus Wirthによる短命のModula(1975)でした。別の初期のモジュラー言語でしたメサによって(1970)、ゼロックスPARC、およびワースは、その後継者、元のModulaだけでなく、メサの上に描いたのModula-2 特にその後継を通じて、後で言語に影響を与え(1978)、のModula-3(1980年代)。モジュールからオブジェクトを参照するなど、Modulaのドット修飾名の使用は、レコードのフィールドにアクセスするための表記と一致し(オブジェクトの属性またはメソッドについても同様)、C#、Dart、Go、とりわけ、Java、Python。モジュラープログラミングは1980年代から普及しました。元のPascal言語(1970)にはモジュールが含まれていませんでしたが、後のバージョン、特にUCSD Pascal(1978)とTurbo Pascal(1983)には、Pascalと同様に「ユニット」の形式でモジュールが含まれていました。 -影響を受けたエイダ(1980)。 Extended Pascal ISO 10206:1990規格は、モジュラーサポートにおいてModula2に近づきました。Standard ML(1984)M.aaM[6]に、モジュール間でマッピングするファンクター(パラメーター化されたモジュール)を含む、最も完全なモジュールシステムの1つがあります。

1980年代と1990年代には、特にC ++とJavaの人気により、モジュラープログラミングはオブジェクト指向プログラミングによって影が薄くなり、しばしば混同されていました。たとえば、Cファミリの言語は、C ++(元々はC with Classes、1980)およびObjective-C(1983)のオブジェクトとクラスをサポートしていましたが、30年以上後のモジュールのみをサポートしていました。 Java(1995)は、パッケージの形式でモジュールをサポートしていますが、コード編成の主要な単位はクラスです。ただし、Python(1991)は、モジュールとオブジェクトの両方を最初から目立つように使用し、モジュールをコード編成の主要な単位として使用し、「パッケージ」をより大規模な単位として使用していました。そしてPerlの5(1994)から利用可能であるモジュールの膨大なアレイを有するモジュールとオブジェクトの両方のためのサポートを含みますCPAN(1993)。

モジュラープログラミングは現在広く普及しており、1990年代以降に開発されたほぼすべての主要言語で使用されています。モジュールの相対的な重要性は言語によって異なり、クラスベースのオブジェクト指向言語では、編成とカプセル化の単位としてのクラスとの重複と混乱が依然としてありますが、これらは両方とも別個の概念として確立されています。

も参照してください

注意事項

  1. ^ 「パッケージ」という用語は、JLSのモジュールのアナログに使用されます。[1] —Javaパッケージを参照してくださいパッケージの一種であるモジュール」は、 ProjectJigsawの一部としてJava9で計画されていますこれらは以前は「スーパーパッケージ」と呼ばれ、Java7用に計画されていました。

参考文献

  1. ^ James Gosling、Bill Joy、Guy Steele、Gilad Bracha、 The Java Language Specification、第3版 ISBN  0-321-24678-0、2005。はじめに、「第7章では、プログラムの構造について説明しています。 Modulaのモジュールと同様のパッケージに編成されています。」「モジュール」という言葉は、Javaでは特別な意味はありません。
  2. ^ [1]
  3. ^ ECMAScript®2015言語仕様、15.2モジュール
  4. ^ 「N4720:ワーキングドラフト、モジュール用のC ++の拡張」(PDF)
  5. ^ Lindsey、Charles H.(1976年2月)。「ALGOL68のモジュール施設の提案」(PDF)ALGOL Bulletin(39):20–29。2016年3月3日にオリジナル(PDF)からアーカイブされまし取得した2014年12月1日を
  6. ^ David MacQueen(1984年8月)。「標準MLのモジュール、LISPおよび関数型プログラミングに関する1984年ACMシンポジウムのLFP '84議事録」:198–207。 Cite journal requires |journal= (help)

外部リンク