• ベストアンサー

大規模プラグラムへの取り組み方について

大規模プラグラムへの取り組み方について よろしくお願いします。 大きなプログラムへの取り組み方を教えて欲しいのです。 目的のアプリケーションを作成するために、誰かが作ったライブラリを利用することになりました。 各クラスの説明やメソッドの説明は記述してあるのですが、色んなところに派生していて、コードを追っていっても途中でわからなくなってしまいます。 私が未熟なのは重々承知していますが、このようなプログラムを理解するためのポイントやアドバイスがあれば教えて欲しいです。 何か読んだほうが良い本があるのでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.2

質問が「他人の作ったライブラリを使うときの方法」なら1の方の回答の通り。 例えばCでプログラミングするとき、printfのソースを読まないでprintfを使うのが普通です。 質問が「大きなプログラムのソースを読んで理解したいときの技法」ということだと、「コードリーディング」が検索キーワードになるでしょう。そのものズバリの本もあります。http://www.amazon.co.jp/dp/4839912653

totogege
質問者

お礼

回答ありがとうございます。 色々あるんですね。 早速読んでみます。

その他の回答 (4)

回答No.5

No.4 訂正です。 メンバ関数のオーバーロード → メンバ関数のオーバーライド です。

totogege
質問者

お礼

回答ありがとうございます。

回答No.4

もともとのライブラリがどの程度きれいに書かれているかにもよりますが、C++なら、(バグ修正は別として)機能の追加や(修正ではく)変更であれば、ライブラリのソースを変更せずに対応する方法がいくつかあります。 継承による機能追加や、メンバ関数のオーバーロードによる機能変更など、そういう方面で対応する方が、(可能であれば)安全です。

noname#140925
noname#140925
回答No.3

>機能の追加や修正が必要となったときに中がわからないでは先に進まないのです。 必要になった時点で、初めて中を解析すれば、それで十分だと思いますが。 まぁ、仕事でやってるんじゃなさそうなので、趣味なら好きに中を覗いていくのも良いと思いますが・・・ コードを順に追いながら、フロー図なり、padなりを書いてみれば理解出来るのでは? ちなみに、サブルーチン等が出てきた時に、馬鹿正直にサブルーチンへ飛んで追いかけてたんじゃ理解出来ないと思いますよ。 一つのファンクションの中だけを追いかけてください。 で、そこが終わったら、そこから呼ばれていたファンクションの中を追いかける。 そうすりゃ一通りのフロー図なりpadなりが出来るから、それを見れば理解できますよね。 未熟なのを自覚しているのなら、自覚しているなりに、手間を惜しまず図にしましょう。 急がば回れ、ですから。

totogege
質問者

お礼

なるほど、ファンクション全体のイメージを理解してから細かいところまで追っていくんですね。 図を作ってみます。 ありがとうございます。

noname#140925
noname#140925
回答No.1

通常ライブラリの中まで見ないでしょ。 ライブラリなんてのは、それが何を行うための物で、引数と戻り値が何なのかが判れば良いのであって、中の処理がどうなっていようが気にする必要はありません。

totogege
質問者

補足

回答ありがとうございます。 仰るとおりなんですが、今回相手にしているライブラリは自作(私が作ったのではありませんが)で、機能の追加や修正が必要となったときに中がわからないでは先に進まないのです。

関連するQ&A

  • C#のクラスライブラリでメッセージボックスを表示

    VisualStudio2010でVisualC#のクラスライブラリやコンソールアプリケーションでメッセージボックスを表示させたいのですが、 Windowsフォームアプリケーションでは MessageBox.Show("メッセージ本文","タイトル",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); で表示させることができたのですが、 クラスライブラリやコンソールアプリケーションでの中から表示する仕方が分かりません。(OS WindowsXP VisualStudio2010) 1) VisualC#のクラスライブラリでメッセージボックスを表示させるには public class Class1 { }   の中にどのようなコードを記述すればよいのでしょうか。 2) VisualC#のコンソールアプリケーションでメッセージボックスを表示させるには static void Main(string[] args) { }   の中にどのようなコードを記述すればよいのでしょうか。 よろしくお願いします。

  • ViualC++でのクラスライブラリの使い方がわかりません

    VisualC++(CLR)でクラスライブラリを作っています。 始め、やり方がわからないので、ひとまず 「Initメソッドを呼び出したらメッセージボックスを表示する」 と、したかったのですが、 System:: までアクセスできるものの、 System::Windows にアクセスできませんなぜでしょう? 更に、始めクラスライブラリを生成したときに //TODO メソッドはここに記述してください と書かれているのですが、そこ以外に記述していけないんでしょうか? わかる方お願いします

  • ライブラリの一覧について

    java勉強中で、学習環境はeclips ver3.4.0、JDKTM 6 ドキュメントをダウンロード済みで、軽く一通り目を通した程度です。 数多くの標準ライブラリがありますが、これらの「一覧表」みたいな資料があれば教えて下さい。 入門書の末尾にそれらしい記載のある書物もありましたが、一部のライブラリだったり詳細説明に欠けていたりと、内容的に満足できませんでした。 例えば、 メソッド名 → クラス名 → 機能説明 → inportファイル名 → 記述例 や 機能検索 → クラス名 → メソッド名 → inportファイル名 → 記述例 みたいにメソッド名から調べるパターンと、希望する機能からメソッドに辿り着けるパターンがあれば分かり易いと思います。 宜しくお願いします。

    • ベストアンサー
    • Java
  • javaのメソッド呼び出し

    javaで質問があります。メソッドを呼び出すとき、 クラス.メソッド(引数)だと思いますが、 「.」が2つあるものがあります。 どういったものでしょうか? あるプログラムに Code.PerComFlag.ReCom.equals(atmlogDTO.getatmComFlg()) のがありました。 また、javaの本に System.out.println(・・・) という記述もあります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 仮想関数名をすり替える。

    こんばんわ。 意味不明なタイトルで申し訳ありません。 ライブラリAからライブラリBへの切り替えの仕事を請け負いました。 可能な限りソースコードはいじらないでほしいということで困っています。 メンバー関数は互換性があるので問題ないとのことでした。 以下のような基底クラスと派生クラスがあったとします。 class A を class B に切り換えたいとのことです。 ----------------------- class A { virtual create() ; } ----------------------- class B { virtual Create() ; } class C : public A { virtual create() ; } まず class C の派生元を以下のように typedef B A ; と記述した共通ヘッダーを用意して class C にincludeしてすり替えることができました。 ところが困ったのがcreate関数で関数名の先頭文字がライブラリAが小文字で、ライブラリBが大文字になっていました。 これをうまくすり替えたいのですが手段が思いつきません。class C 側に #ifdef _NEWLIB virtual Create() ; #else virtual create() ; #endif 記述するしか思いつきませんでした。ただ問題は class A から派生しているクラスが結構あるのですべてにifdef ディレクティブを記述するのは結構な作業なのと、なにより記述ミスが怖いです。 何か良い手段はないものでしょうか?

  • VC++2010の簡潔なマニュアルありますか?

    VC++2010ExpressのWindowsアプリケーションを使って、仕事に必要な簡単なツール等を作っているのですが、Form上に配置するコントロールその他(ツールボックスの中身)や基本的なクラスライブラリの使い方などが一覧になったものがなくて困っています。 書店で売られている入門書等では「~プログラムを作ってみよう」のようなものが多く、その中で使うものの使い方は説明されていても、全般的な説明が見当たりません。 たとえば、とっさにプログレスバーを使おうと思ってもその使い方を探すのが大変で、いちいちネットで検索している次第です。また、たとえばStringクラスにはどんなメソッドがあるのか(String::Format()等)などもすぐには分かりません。 ご存知の方がいらっしゃたら、宜しくお願いいたします。

  • C#で自作ライブラリの使用方法について

    仮に、Nameと言う名前空間のClsと言うクラス内にMtdと言うメソッドが存在するライブラリを作成したとします。(Cls.dll) このライブラリをMainProgと言う別プログラムから使用したいのですが、ソリューションエクスプローラの参照設定でCls.dllを設定しても、MainProgのメソッド内の「Name.Cls.Mtd();」記述部分について 「名前'Name'は現在のコンテキスト内に存在しません」のエラーが出て、ライブラリが認識されません。 尚、その他の標準ライブラリは問題なく使えます。 何が間違っているのか教えて頂けないでしょうか。 宜しくお願いします。

  • Visual C++のアプリケーションクラス

    void CDlgTestApp::OnAppExit() { // TODO: ここにコマンド ハンドラ コードを追加します。 CDialog endDialog(IDD_DLG_EXIT); // CEndDlgの基本クラスを初期化 if(endDialog.DoModal()==IDOK){ CWinApp::OnAppExit(); // 基本クラスの公開メンバー関数(このアプリケーション自体がCWinAppクラスの派生クラスのオブジェクト(theApp)) } } 「アプリケーションを終了しますか?」というダイアログのOKボタン(OKかキャンセルボタン)を押したときに、アプリケーションを終了させたいのですが、↑をDlgTestというアプリケーションのアプリケーションクラスのコマンドハンドラとして記述したところ、ちゃんとした動作(アプリの終了)をしています。 ここで質問ですが、 (1)CEndDlgという、ダイアログクラスがありながら、なぜわざわざ、その基本クラスのCDialogクラスのオブジェクトを作成しているのか。CEndDlg endDialog(IDD_DLG_EXIT); じゃだめなのか。 (2) CDlgTestAppというクラスののコマンド(イベント)ハンドラのなかで、その基本クラスのCWinApp::OnAppExit(); と、コードしているのか。こう記述しないとアプリそのものを終了させることは できないのでしょうか。 その2点がわかりません。(ちなみに上のコードはテキストを参照したのですが) ご回答、どうぞよろしくお願いします。

  • VB.NET クラス内でプログラムを終了するには?

    VBAでは、エラーでプログラムを終了する時には Endステートメントを記述していましたが、 このVBAをVB.NET(クラスライブラリ、DLL)に 書き換えていますが VB.NETでClass1クラスの中にtest()メソッドを作って この中にEndステートメントを記述すると 「クラスライブラリプロジェクトで  Endステートメントを使用することができません。」 というメッセージが表示されますが エラーでプログラムを終了するには どのように記述すればいいのでしょうか。 Public Class Class1  Public Sub test(ByVal a As String)   If a = "" Then    MsgBox("致命的なエラーです")    End <===エラー発生   End If  End Sub End Class よろしくお願いします。(WindowsXP,VS2010)

  • SQLiteについて

    SQLiteのサンプルに、以下のような記述がありましたが extends(派生クラス) ということは元の基本クラスの記述があるということなのでしょうか? https://www.php.net/manual/ja/sqlite3.open.php /** * SQLite3 クラスを継承して __construct を変更し、 * open メソッドで DB を初期化します */ class MyDB extends SQLite3 {

    • ベストアンサー
    • MySQL

専門家に質問してみよう