• ベストアンサー

VC++でモジュール化

こんばんは。以前先生からVC++でモジュール化せよ、といわれましたが、いまいちなにをすればいいかわかりません。先生いわく、スタックやキューを別ファイルにして、あるプログラムで必要ならそれを呼び出して使う、汎用性のある美しいプログラムを作るためにモジュール化が必要ということなのですが、いったいどういうことなのでしょうか? あまりに抽象的な質問なのかもしれませんが、これができないと非常に危ないのでよろしくお願いします!!

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.8

>そのヘッダーファイルをインクルードしてビルドしてもできません。 それを、聞いてみたところで、私にはどうにもできません。 >スタックならスタックのモジュール化というのは、どの程度難しいのでしょうか? スタックには、どのような機能が必要でどのように呼び出すのが適当かとか、考えもしないで、どの程度難しいなどといっても始まりません。 簡単なpush、popするだけのものなら、それほど難しくはありません。色んな実現方法があり、なんとでもなると思います。 STLのソースに stack.h があるとあると思いますが、(テンプレートクラスですが)見れば、どのように実現されているのか参考になると思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.7

>VC++でモジュール化というのは、どういうことなんでしょうか?? VC++ということであれば、 C++の範囲でと言うことになりますね。 (Vが付くかどうかはモジュール化云々とは直接関係ないですね)CやC++でどうすればいいかわかっているなら、別段変わりはない(クラスの作り方のヘルプでも見ましょう)ですが、 せっかくC++を使うというのであれば、 クラスを機能単位としてモジュール化をするということになろうかと思います。 クラスでモジュール化をどうするかというと、 今までのことを踏まえて 何をpublicにして何をprivateにするかとか そういうことになろうかと思います。

ikecchi
質問者

お礼

ありがとうございます。 クラスを機能単位としてモジュール化するのですが、ヘッダーファイルを作って、それをインクルードしてソースファイルを作り、それをコンパイルしたのですが、テストプログラムでそのヘッダーファイルをインクルードしてビルドしてもできません。 また、素朴な疑問ですが、このスタックならスタックのモジュール化というのは、どの程度難しいのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • Broner
  • ベストアンサー率23% (129/554)
回答No.6

 ただCやC++では別ファイルにスタックならスタックの部分を書いて保存して、それをインクルードすればいいのでしょうが、それをVC++ではどのようにやればいいのでしょうか?お願いします。  とのことですが、それは、モジュール化を超えて、VC++のプログラミングの問題です。  「猫でもわかるWindowsプログラミング」粂井康孝著ソフトバンク出版を参考してください。

全文を見る
すると、全ての回答が全文表示されます。
  • Broner
  • ベストアンサー率23% (129/554)
回答No.5

 「モジュール」って、部品が組み合わさった状態を言います。要するにプログラミングの構造化のことです。  初期のプログラムはプログラムの先頭からプログラムの末尾まで飛んで処理するプログラムを作っていました。プログラムの中を処理行き交いディバックがパニックになることが多かったのです。  そこで登場するのが構造化プログラムです。プログラムのモジュール化とも言います。  その内容は、簡単なプログラムだと入力、計算処理、出力と三つのサブプログラム(プロシージャ)に分けることが出来ます。そして、この分けたサブプログラムのそれぞれの入り口(入力)、出口(出力)を規格化するのです。規格化するということはデータの数、並び、単位を一定にすることです。これにより、処理は、そのサブプログラムの中だけで行き交うことになり、ディバックが簡単になります。  結果として、それぞれのサブプログラムが部品として組み合わさった状態になります。複雑なプログラムでは、入力、計算処理、出力サブプログラムが幾つも分かれた状態となります。  このような形で必要ならそれを呼び出して使う、汎用性のある美しいプログラムとするのです。

ikecchi
質問者

お礼

丁寧でわかりやすいありがとうございます。ただCやC++では別ファイルにスタックならスタックの部分を書いて保存して、それをインクルードすればいいのでしょうが、それをVC++ではどのようにやればいいのでしょうか?お願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>インターフェースやDLL,LIBの意味がまずわかりません 例えば、C言語では、ソートする関数として qsortというのがあります。 配列へのポインタ、配列になっているデータのサイズ、配列のサイズ、比較関数 などを渡すようになっていて、 #include <stdlib.h> とかすれば使えるようになっていますね。 こういう、何を渡せばいいか、何を値として返すのかというのがインターフェースということになります。 上記で言えば、データのサイズはintで、昇順に整列するだけの機能を実現するなら、その項目はいらないことになりますね。より汎用に使えるためにそういう項目があるわけですが、逆に、そういう項目で指定できることで、この中で扱うデータがintであるとかいう情報がいらないとも言えます。 同じソースの中でプログラムを書いているなら、そうしたインターフェースは、ソースを見たら何をしているか見えるし、必要に応じてソースを変更したりしてもいいわけですが、ソースで機能を提供するとどうしても、そうした変更したい、とか、その中でこういうふうに処理してるなら、こういうようにできるだろうということで変更されたりする場合がでてきます。 そういうことが無いように、機能だけを提供し、中身がブラックボックスのままにするために(というわけでもないか)普通、ソースで機能を提供するのでなく、あらかじめコンパイルしたオブジェクトの形で提供されます。そのオブジェクトもいちいちどの機能のオブジェクトとかやっていると大変なので、オブジェクトのかたまり(アーカイブ)したものをlibとかいって、コンパイル時に静的にリンクをして使います。 逆に、そういうように、リンクしてだけ使える機能というのは、関数での引数や関数の名前だけをたよりに使うものですから、モジュール化されていると言えると思います。逆に、ある関数を使いたい時に、この関数があらかじめ使えるようになってないといけないとか他に依存する部分が多いとそれは、モジュール化されていない(依存する部分全部まとめてモジュールにしている場合は別)と言えるでしょう。 DLLは、そうしたリンクをコンパイル時ではなくて 実行時にするもので基本的には同じと考えて良いです。(メモリの扱いなどに違いはあるかもしれないですが)

ikecchi
質問者

お礼

丁寧な解説、ありがとうございます。なんとなくですがわかりました。ただ、実際にVC++でモジュール化というのがわかりません。Cでなら別ファイルに作ってそれをインクルードするんですよね。VC++でモジュール化というのは、どういうことなんでしょうか??プロジェクトにどうやって挿入すればよいのでしょうか??それとも全く違った概念なのでしょうか??

全文を見る
すると、全ての回答が全文表示されます。
  • Rossana
  • ベストアンサー率33% (131/394)
回答No.3
全文を見る
すると、全ての回答が全文表示されます。
noname#30727
noname#30727
回答No.2

>先生いわく、スタックやキューを別ファイルにして 先生が言われているように、別ファイルにするというのがモジュール化の基本です。 スタックであれば、stack.cをプロジェクトに追加し、stack.hをインクルードするだけで使えるように、ある機能をファイル単位で独立させるという事です。 LIBやDLLにする事もあります。 C++であればクラスを作成する方が一般的ですし、STLのようにインクルードするだけで使えるようにしたり、テンプレートを使って汎用化させるのもいいと思います。 さらに、概念や呼び出し手順のドキュメントを作成しておくといいと思います。

ikecchi
質問者

お礼

ありがとうございます!! ただ私は最近VC++を始めたばかりで、それまでCをたしなんだ程度です。だから、LIBやDLLなどの用語もわかりませんし、テンプレートやSTLがなんなのかさっぱりわかりません。もしよろしければ、モジュール化の意味をもう少し分かりやすく教えていただけないでしょうか??

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

他のプログラムとの結合度合いを疎にする、依存度を少なくする、独立で動くようにする というような意味合いだと思います。 そうすることで、使い回しが利くということでしょうね。 言うのは簡単ですが、機能の切り分けとか実際のところはなかなか難しいと思います。 具体的には、 関数などのインターフェースをうまく決めてそれだけで使えて、その中身について考慮しなくても使えるようなもの、たとえばDLLやLIBを作るというような方向でいいと思います。

ikecchi
質問者

お礼

ありがとうございます。 ただ私は最近VC++を始めたばかりで、インターフェースやDLL,LIBの意味がまずわかりません。よろしければ教えていただけないでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • モジュールのメリット、デメリットについて

    Rubyでいろいろなツールを作っているのですが、共通するプログラムを抜き出して別のファイルにしようとしています。 今までは、xxx.rbに共通するプログラムを集めてrequireで読み込んでいたのですが、 webとか「たのしいRuby」を調べていたらモジュールとかがあるのがわかりました。 それで、モジュールを使って(モジュールにまとめて)みようと思ったのですが、 何か、メリットやデメリットはあるのでしょうか?

    • ベストアンサー
    • Ruby
  • VC#とVC++の両方を使いたいんですが・・・

    今まではMicrosoft Visual C# 2008 Express Edition(以下VC#)だけである程度の開発を進めてきましたが、今後はOpenCVをC#で使いたいと考えています。 OpenCVに関する本やWebページを見ても、Microsoft Visual C++ 2008 Express Edition(以下VC++)を例にするものしかありませんでした。 Webページで、VC++を使って、ビルドしたあとdllファイル(?)をC#に読み込むことで、C#でOpenCVを使えるという記述を見つけたため、VC++もインストールしました。 しかしVC++をインストールする際、以下のようなコメントが出てきました。 --- コンポーネントが既に別の場所に保存されているか、別の場所に保存されたファイルに依存しているため、このコンポーネントまたはサブコンポーネントの場所を変更できません。 以下のプログラムが原因でファイルが統合されようとしています: Microsoft Visual C# 2008 Express Edition with SP1 - JPN ファイル パスを変更するには、上の一覧にあるプログラムをアンインストールしてから、Visual Studio と共有しているファイルを格納する場所に再インストールしてください。 --- もしかしたらSP1はインストールしなかったのかもしれません(チョット記憶が曖昧ですみません)。 実際、VC++でOpenCVを使ったプログラムを書いた際、ビルドは出来るものの、デバッグすると以下のようなコメントが出てしまいます。 アプリケーションを正しく初期化できませんでした(0xc0150002)。[OK]をクリックしてアプリケーションを終了してください。 これはSP1が使える状態になっていない(インストールされていない)ということなのでしょうか? 先ほども書いたとおり、VC#である程度の開発が進んでいるため、アンインストールをしてプログラムが使用不可能になってしまうことを恐れ、アンインストールをためらっています。 アンインストールと再インストールをしたとして、どこの設定を変えれば再度使えるようになるのかを教えていただけますか? あまりパソコンやVC++、VC#を詳しく知らないので、詳しく教えていただけると嬉しいです。

  • モジュールを使うときの負荷

    変な質問かも知れませんが宜しくお願いします。 CGIを作り、改良や新機能を追加するごとにスクリプトが膨らみ ファイルサイズが大きくなってしまいます。 その負荷を抑えるために、よく、 if分岐で必要に応じたパーツをrequireで読み込んで使っています。 これはとても効果があって本当に頻繁に使うのですが、 今回、モジュールを使いたいと思っています。 しかし、モジュールを使うときには、 useで宣言するのですよね? これでモジュールをインクルード出来る。と本には説明されています 問題はこのとき、結構な容量のあるモジュールをuseで宣言すると、 例えば、50kbの本体プログラムで 100kbのモジュールを使うと 宣言すると、もれなく150kb分のプログラムを動かしている状態に なってしまうのでしょうか? データベースなどを取り扱いたいのですが、use宣言しただけで 大きなモジュール分の負荷がかかるのであれば、悩みます。 どなたかお教え下さい。 また、こういう場合でも動作を軽くする方法があれば、そちらもお教え下さい。 データベースを使って処理するのと、面倒でも1ファイルずつOPEN、closeで split処理してデータを取るのとどちらが良いかかなり悩んでいます。 今回扱うデータがかなりの大きさになるもので・・・^^;; 変な質問ですが宜しくお願いします。

    • ベストアンサー
    • Perl
  • VCの使い方

    tororinnと申します。 現在、C言語の勉強をしております。 以前まではボーランド社の無償コンパイラを利用していたのですが、最近、VCを利用しております。 さて、質問ですが、 簡単に申しますとVCの使い方がわかりません。 以前、学校でVCを使っていたのですが、やり方をすっかり忘れてしまいました。 要は、ボーランドでやっていた時のように、 シンプルにコンパイラ(ビルド)をおこなった際に、 プロンプトに実行結果が出力されるのが、ベストです。 いろいろサイトを見て回って、 [新規作成]-「プロジェクト」-「win32 Application」 を選択して、 簡単な"hello"などを出力するだけのプログラムを試しに作ったのですが、 ビルドではエラーがないのに対し、 実行すると、「プログラムを実行できません」というメッセージが出てきます。 なにとぞ、よろしくお願い申し上げます。

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

    モジュールとは具体的には何を指しているのか、をお聞きします。 手元のカタカナ語辞典では 「プログラムを、それぞれ特有の機能を持ついくつかの基準単位に分割すること。また、その基準単位。」 と書いてありました。 そうすると、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のことを指しているようです。

  • VC++のコーディングについて

    VC++初心者です。 VC++のWindowsフォームアプリケーションを使用してテストプログラムを作ってみようと思っています。 初歩的な質問ですみません。 VC++でWindowsフォームアプリケーションを作成する場合、 フォームのヘッダーファイル(Form.h)にコーディングしていくものなのでしょうか? ボタンクリック処理など、ヘッダーファイルに作成されてしまいます。 私の先入観で、cppファイルにコーディングするものだと思っていたのですが、 VC++のWindowsフォームアプリケーションとは、こういうものでしょうか? ヘッダーファイルにコーディングするという感覚が何だか気持ち悪いです。 また、VC++を使用してWindowsアプリケーションを作る勉強がしたいのですが、 「初心者でも分かる+オススメの参考書籍」がありましたら、教えていただけると幸いです。 基本的な質問で意味不明かもしれませんが、ご回答いただけると助かります。 よろしくお願いします。

  • VC++2005 ファイル読み込み

    現在VC++2005でプログラムをしています。 そこで質問があるのでよろしくお願いします。 PCに保存してあるテキストファイルをプログラムで読み込み、その中のテキストからいろいろな判断をするというようなプログラムを作りたいと考えています。 そこでファイルのオープンなでは理解できたのですが、ファイルの中のテキストを読み判断するという方法がよくわからず質問しました。 また、テキストファイルの中身は数字と文字列になっています。 下にその例を書きます。 7,000 ディスプレイ 5,000 ゲーム などです。 そこで6,000以上なら高いというような判断を行いラベルに表示するというような形です。 説明が下手かもしれませんがよろしくお願いします。

  • VC++のDLLファイルをVBで読み出せません。

    お世話になります。 プログラムをやり始めて3か月の初心者です。仕事で以下のような事をしていますが、うまくいかず悩んでいます。 プログラム(1):VB 2008年版 メインプログラム プログラム(2):C言語 2006年版 プログラム(3):VC++ VISUAL STUDIO2012 EXPRESSを使用 ■今のプログラム (2)のdllファイルを(1)で呼び出しています。問題なく動きます。 ■やりたい事 (2)のプログラム内容を変更したのが(3)です。そのdllファイルを(1)で呼び出したいです。 ⇒しかし、(3)のdllファイルを読み込むことができません。((3)のdllファイルは作れました。) (3)はVC単独では正しく動作します。 (1)のプログラムに、(2)を呼び出すときと同じように(3)用のプログラムを追加しました。作った(3)のdllファイルは指定したフォルダにきちんと入れています。 コンピューターに詳しい先輩が時間をかけてみてくれたのですが、結局わからずじまいでした。 ■質問 VBの型が古い、EXPRESSを使っているからできないのでしょうか? VCでdllを作って、VBで呼び出すまでの流れをわかりやすく紹介した書籍やWEBなどあればご教示頂けませんでしょうか? よろしくお願いいたします。

  • モジュールの開発方法について

    どなたかご教授ください。 現在、 メインウィンドウにて操作した内容(マウスのクリックなど)をメインウィンドウとは別のウィンドウに詳細を表示するといったモジュールの開発が必要となっているのですが、開発初心者であり、どのような開発を行えばよいかわからない状況です。 機能として必要な内容としては、下記のようなものとなります。 ・exeファイルではなくdllファイルなどのモジュール ・開発環境はVisual studio 2010で言語はC# ・メインウィンドウ操作で行った内容をモジュールで開発した別ウィンドウに詳細を表示するため、  GUI付きのモジュール開発が必要  (例:マウスクリックの座標位置をモジュール上で開発したラベルなどに表示させる) つきましては、どなたか開発のためのアドバイスや、参考サイト・書籍がありましたら、ご教授いただければ幸いと存じます。

  • 【VC++2005(CLR)】ファイルが他で使用されていると、落ちてしまう

    VC++初心者です。 現在、VC++2005 express edition、CLRプロジェクトでコーディングしております。 質問のタイトルをもう少し具体的に説明しますと、 あるファイルを開きっぱなしにして、 そのファイルを読みにいこうとするとプログラムが落ちてしまいます。 これを回避するにはどうしたら宜しいでしょうか? もし、読みたいファイルが使用中でも、使用終了されたら、 すぐにそのファイルを読みに行くことは可能でしょうか? お手数ですが、よろしくお願いします。