7

私はC ++を初めて使用し、モジュラープログラミング関数指向プログラミングの違いについて混乱しています。モジュラープログラミングを行ったことがないので、定義によりモジュールに関数が含まれていることを知っているだけです。指向言語) とモジュラー プログラミング?よろしくお願いします。

EDIT:私はC ++のOOPについて読んでいました.それは、非構造化プログラミングと は何か、構造化プログラミングについての基本的な考え方、モジュラープログラミング、そして最後にOOP .

4

3 に答える 3

4

モジュラー プログラミングは、主にカプセル化によって、コンピューター プログラム内の結合を減らすための戦略です。

モジュラー プログラミングの前は、コードのローカルな一貫性は構造化プログラミングによって保証されていましたが、グローバルな一貫性は欠けていました。スペル チェック辞書を赤黒ツリーとして実装すると決めた場合、この実装は他のすべての人に公開されていました。これにより、たとえばテキスト レンダリングに取り組んでいるプログラマーは、赤黒ツリー ノードにアクセスして、意味のあることを行うことができます。

もちろん、辞書の実装を変更する必要が生じると、他のプログラマーのコードも修正する必要があるため、これは地獄です。

さらに悪いことに、実装の詳細にグローバル変数が含まれている場合、誰がどの順序でそれらを変更したかについて非常に注意する必要がありました。そうしないと、奇妙なバグが発生する可能性があります。

モジュラー プログラミングでは、実装 (モジュールに対してプライベート) をインターフェイス (プログラムの残りの部分が使用できるもの) から分離することにより、これらすべてにカプセル化を適用しました。したがって、辞書モジュールは、 などのモジュール関数を介してのみアクセスできる抽象型を公開できますfindWord(word,dictionary)。辞書モジュールに取り組んでいる人は、誰かが実装の詳細を使用しているかどうかを確認するためにそのモジュールの外をのぞく必要はありません。

于 2011-01-22T11:02:14.240 に答える
3

どちらもコードを構造化する方法です。関数指向プログラミングに興味があり、それをもう少しよく理解したい場合は、Lisp を見てみましょう。すべての関数は値を返す必要があるため、C++ は真の関数指向ではありませんが、C++ 関数は void を返すことができるため (関数ではなくプロシージャになります)、その意味では真の関数型プログラミング言語ではありません。

「私はモジュラープログラミングをしたことがないので、モジュールには関数が含まれていることを定義上知っているだけです」.

モジュールは関数よりも上位のレベルです。

それは良いスタートです。関数は、何かを行う作業の単位と考えてください。特定の方法でグループ化できる関数がいくつかある場合は、それらをモジュールに入れます。そのため、string.h には文字列を操作するための関数がたくさんありますが、ヘッダーを含めるだけで、これらすべての関数に直接アクセスできます。これらのモジュールは、以前に既に使用していたモジュールを他のプロジェクトで再利用でき、(おそらく) デバッグおよびテストされており、人々が車輪を再発明するのを防ぎます。要点は、蓄積された経験から利益を得るということです。

希望するプロジェクトを考えて、いくつかの関数を作成し、別の開発者が使用できるようにコードをどのように編成するかを検討することをお勧めします。

これがあなたに役立つことを願っています。

于 2011-01-22T10:34:11.343 に答える