- ベストアンサー
VC++でモジュール化
こんばんは。以前先生からVC++でモジュール化せよ、といわれましたが、いまいちなにをすればいいかわかりません。先生いわく、スタックやキューを別ファイルにして、あるプログラムで必要ならそれを呼び出して使う、汎用性のある美しいプログラムを作るためにモジュール化が必要ということなのですが、いったいどういうことなのでしょうか? あまりに抽象的な質問なのかもしれませんが、これができないと非常に危ないのでよろしくお願いします!!
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
>そのヘッダーファイルをインクルードしてビルドしてもできません。 それを、聞いてみたところで、私にはどうにもできません。 >スタックならスタックのモジュール化というのは、どの程度難しいのでしょうか? スタックには、どのような機能が必要でどのように呼び出すのが適当かとか、考えもしないで、どの程度難しいなどといっても始まりません。 簡単なpush、popするだけのものなら、それほど難しくはありません。色んな実現方法があり、なんとでもなると思います。 STLのソースに stack.h があるとあると思いますが、(テンプレートクラスですが)見れば、どのように実現されているのか参考になると思います。
その他の回答 (7)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>VC++でモジュール化というのは、どういうことなんでしょうか?? VC++ということであれば、 C++の範囲でと言うことになりますね。 (Vが付くかどうかはモジュール化云々とは直接関係ないですね)CやC++でどうすればいいかわかっているなら、別段変わりはない(クラスの作り方のヘルプでも見ましょう)ですが、 せっかくC++を使うというのであれば、 クラスを機能単位としてモジュール化をするということになろうかと思います。 クラスでモジュール化をどうするかというと、 今までのことを踏まえて 何をpublicにして何をprivateにするかとか そういうことになろうかと思います。
- Broner
- ベストアンサー率23% (129/554)
ただCやC++では別ファイルにスタックならスタックの部分を書いて保存して、それをインクルードすればいいのでしょうが、それをVC++ではどのようにやればいいのでしょうか?お願いします。 とのことですが、それは、モジュール化を超えて、VC++のプログラミングの問題です。 「猫でもわかるWindowsプログラミング」粂井康孝著ソフトバンク出版を参考してください。
- Broner
- ベストアンサー率23% (129/554)
「モジュール」って、部品が組み合わさった状態を言います。要するにプログラミングの構造化のことです。 初期のプログラムはプログラムの先頭からプログラムの末尾まで飛んで処理するプログラムを作っていました。プログラムの中を処理行き交いディバックがパニックになることが多かったのです。 そこで登場するのが構造化プログラムです。プログラムのモジュール化とも言います。 その内容は、簡単なプログラムだと入力、計算処理、出力と三つのサブプログラム(プロシージャ)に分けることが出来ます。そして、この分けたサブプログラムのそれぞれの入り口(入力)、出口(出力)を規格化するのです。規格化するということはデータの数、並び、単位を一定にすることです。これにより、処理は、そのサブプログラムの中だけで行き交うことになり、ディバックが簡単になります。 結果として、それぞれのサブプログラムが部品として組み合わさった状態になります。複雑なプログラムでは、入力、計算処理、出力サブプログラムが幾つも分かれた状態となります。 このような形で必要ならそれを呼び出して使う、汎用性のある美しいプログラムとするのです。
お礼
丁寧でわかりやすいありがとうございます。ただCやC++では別ファイルにスタックならスタックの部分を書いて保存して、それをインクルードすればいいのでしょうが、それをVC++ではどのようにやればいいのでしょうか?お願いします。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>インターフェースやDLL,LIBの意味がまずわかりません 例えば、C言語では、ソートする関数として qsortというのがあります。 配列へのポインタ、配列になっているデータのサイズ、配列のサイズ、比較関数 などを渡すようになっていて、 #include <stdlib.h> とかすれば使えるようになっていますね。 こういう、何を渡せばいいか、何を値として返すのかというのがインターフェースということになります。 上記で言えば、データのサイズはintで、昇順に整列するだけの機能を実現するなら、その項目はいらないことになりますね。より汎用に使えるためにそういう項目があるわけですが、逆に、そういう項目で指定できることで、この中で扱うデータがintであるとかいう情報がいらないとも言えます。 同じソースの中でプログラムを書いているなら、そうしたインターフェースは、ソースを見たら何をしているか見えるし、必要に応じてソースを変更したりしてもいいわけですが、ソースで機能を提供するとどうしても、そうした変更したい、とか、その中でこういうふうに処理してるなら、こういうようにできるだろうということで変更されたりする場合がでてきます。 そういうことが無いように、機能だけを提供し、中身がブラックボックスのままにするために(というわけでもないか)普通、ソースで機能を提供するのでなく、あらかじめコンパイルしたオブジェクトの形で提供されます。そのオブジェクトもいちいちどの機能のオブジェクトとかやっていると大変なので、オブジェクトのかたまり(アーカイブ)したものをlibとかいって、コンパイル時に静的にリンクをして使います。 逆に、そういうように、リンクしてだけ使える機能というのは、関数での引数や関数の名前だけをたよりに使うものですから、モジュール化されていると言えると思います。逆に、ある関数を使いたい時に、この関数があらかじめ使えるようになってないといけないとか他に依存する部分が多いとそれは、モジュール化されていない(依存する部分全部まとめてモジュールにしている場合は別)と言えるでしょう。 DLLは、そうしたリンクをコンパイル時ではなくて 実行時にするもので基本的には同じと考えて良いです。(メモリの扱いなどに違いはあるかもしれないですが)
お礼
丁寧な解説、ありがとうございます。なんとなくですがわかりました。ただ、実際にVC++でモジュール化というのがわかりません。Cでなら別ファイルに作ってそれをインクルードするんですよね。VC++でモジュール化というのは、どういうことなんでしょうか??プロジェクトにどうやって挿入すればよいのでしょうか??それとも全く違った概念なのでしょうか??
- Rossana
- ベストアンサー率33% (131/394)
>先生いわく、スタックやキューを別ファイルにして 先生が言われているように、別ファイルにするというのがモジュール化の基本です。 スタックであれば、stack.cをプロジェクトに追加し、stack.hをインクルードするだけで使えるように、ある機能をファイル単位で独立させるという事です。 LIBやDLLにする事もあります。 C++であればクラスを作成する方が一般的ですし、STLのようにインクルードするだけで使えるようにしたり、テンプレートを使って汎用化させるのもいいと思います。 さらに、概念や呼び出し手順のドキュメントを作成しておくといいと思います。
お礼
ありがとうございます!! ただ私は最近VC++を始めたばかりで、それまでCをたしなんだ程度です。だから、LIBやDLLなどの用語もわかりませんし、テンプレートやSTLがなんなのかさっぱりわかりません。もしよろしければ、モジュール化の意味をもう少し分かりやすく教えていただけないでしょうか??
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
他のプログラムとの結合度合いを疎にする、依存度を少なくする、独立で動くようにする というような意味合いだと思います。 そうすることで、使い回しが利くということでしょうね。 言うのは簡単ですが、機能の切り分けとか実際のところはなかなか難しいと思います。 具体的には、 関数などのインターフェースをうまく決めてそれだけで使えて、その中身について考慮しなくても使えるようなもの、たとえばDLLやLIBを作るというような方向でいいと思います。
お礼
ありがとうございます。 ただ私は最近VC++を始めたばかりで、インターフェースやDLL,LIBの意味がまずわかりません。よろしければ教えていただけないでしょうか?
お礼
ありがとうございます。 クラスを機能単位としてモジュール化するのですが、ヘッダーファイルを作って、それをインクルードしてソースファイルを作り、それをコンパイルしたのですが、テストプログラムでそのヘッダーファイルをインクルードしてビルドしてもできません。 また、素朴な疑問ですが、このスタックならスタックのモジュール化というのは、どの程度難しいのでしょうか?