- ベストアンサー
大規模プラグラムへの取り組み方について
大規模プラグラムへの取り組み方について よろしくお願いします。 大きなプログラムへの取り組み方を教えて欲しいのです。 目的のアプリケーションを作成するために、誰かが作ったライブラリを利用することになりました。 各クラスの説明やメソッドの説明は記述してあるのですが、色んなところに派生していて、コードを追っていっても途中でわからなくなってしまいます。 私が未熟なのは重々承知していますが、このようなプログラムを理解するためのポイントやアドバイスがあれば教えて欲しいです。 何か読んだほうが良い本があるのでしょうか。 よろしくお願いします。
- totogege
- お礼率79% (19/24)
- C・C++・C#
- 回答数5
- ありがとう数4
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
質問が「他人の作ったライブラリを使うときの方法」なら1の方の回答の通り。 例えばCでプログラミングするとき、printfのソースを読まないでprintfを使うのが普通です。 質問が「大きなプログラムのソースを読んで理解したいときの技法」ということだと、「コードリーディング」が検索キーワードになるでしょう。そのものズバリの本もあります。http://www.amazon.co.jp/dp/4839912653
その他の回答 (4)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
No.4 訂正です。 メンバ関数のオーバーロード → メンバ関数のオーバーライド です。
お礼
回答ありがとうございます。
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
もともとのライブラリがどの程度きれいに書かれているかにもよりますが、C++なら、(バグ修正は別として)機能の追加や(修正ではく)変更であれば、ライブラリのソースを変更せずに対応する方法がいくつかあります。 継承による機能追加や、メンバ関数のオーバーロードによる機能変更など、そういう方面で対応する方が、(可能であれば)安全です。
>機能の追加や修正が必要となったときに中がわからないでは先に進まないのです。 必要になった時点で、初めて中を解析すれば、それで十分だと思いますが。 まぁ、仕事でやってるんじゃなさそうなので、趣味なら好きに中を覗いていくのも良いと思いますが・・・ コードを順に追いながら、フロー図なり、padなりを書いてみれば理解出来るのでは? ちなみに、サブルーチン等が出てきた時に、馬鹿正直にサブルーチンへ飛んで追いかけてたんじゃ理解出来ないと思いますよ。 一つのファンクションの中だけを追いかけてください。 で、そこが終わったら、そこから呼ばれていたファンクションの中を追いかける。 そうすりゃ一通りのフロー図なりpadなりが出来るから、それを見れば理解できますよね。 未熟なのを自覚しているのなら、自覚しているなりに、手間を惜しまず図にしましょう。 急がば回れ、ですから。
お礼
なるほど、ファンクション全体のイメージを理解してから細かいところまで追っていくんですね。 図を作ってみます。 ありがとうございます。
通常ライブラリの中まで見ないでしょ。 ライブラリなんてのは、それが何を行うための物で、引数と戻り値が何なのかが判れば良いのであって、中の処理がどうなっていようが気にする必要はありません。
補足
回答ありがとうございます。 仰るとおりなんですが、今回相手にしているライブラリは自作(私が作ったのではありませんが)で、機能の追加や修正が必要となったときに中がわからないでは先に進まないのです。
関連する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) { } の中にどのようなコードを記述すればよいのでしょうか。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- ViualC++でのクラスライブラリの使い方がわかりません
VisualC++(CLR)でクラスライブラリを作っています。 始め、やり方がわからないので、ひとまず 「Initメソッドを呼び出したらメッセージボックスを表示する」 と、したかったのですが、 System:: までアクセスできるものの、 System::Windows にアクセスできませんなぜでしょう? 更に、始めクラスライブラリを生成したときに //TODO メソッドはここに記述してください と書かれているのですが、そこ以外に記述していけないんでしょうか? わかる方お願いします
- 締切済み
- C・C++・C#
- ライブラリの一覧について
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 ディレクティブを記述するのは結構な作業なのと、なにより記述ミスが怖いです。 何か良い手段はないものでしょうか?
- 締切済み
- C・C++・C#
- VC++2010の簡潔なマニュアルありますか?
VC++2010ExpressのWindowsアプリケーションを使って、仕事に必要な簡単なツール等を作っているのですが、Form上に配置するコントロールその他(ツールボックスの中身)や基本的なクラスライブラリの使い方などが一覧になったものがなくて困っています。 書店で売られている入門書等では「~プログラムを作ってみよう」のようなものが多く、その中で使うものの使い方は説明されていても、全般的な説明が見当たりません。 たとえば、とっさにプログレスバーを使おうと思ってもその使い方を探すのが大変で、いちいちネットで検索している次第です。また、たとえばStringクラスにはどんなメソッドがあるのか(String::Format()等)などもすぐには分かりません。 ご存知の方がいらっしゃたら、宜しくお願いいたします。
- ベストアンサー
- C・C++・C#
- C#で自作ライブラリの使用方法について
仮に、Nameと言う名前空間のClsと言うクラス内にMtdと言うメソッドが存在するライブラリを作成したとします。(Cls.dll) このライブラリをMainProgと言う別プログラムから使用したいのですが、ソリューションエクスプローラの参照設定でCls.dllを設定しても、MainProgのメソッド内の「Name.Cls.Mtd();」記述部分について 「名前'Name'は現在のコンテキスト内に存在しません」のエラーが出て、ライブラリが認識されません。 尚、その他の標準ライブラリは問題なく使えます。 何が間違っているのか教えて頂けないでしょうか。 宜しくお願いします。
- 締切済み
- C・C++・C#
- 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点がわかりません。(ちなみに上のコードはテキストを参照したのですが) ご回答、どうぞよろしくお願いします。
- ベストアンサー
- C・C++・C#
- 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)
- ベストアンサー
- Visual Basic
- SQLiteについて
SQLiteのサンプルに、以下のような記述がありましたが extends(派生クラス) ということは元の基本クラスの記述があるということなのでしょうか? https://www.php.net/manual/ja/sqlite3.open.php /** * SQLite3 クラスを継承して __construct を変更し、 * open メソッドで DB を初期化します */ class MyDB extends SQLite3 {
- ベストアンサー
- MySQL
お礼
回答ありがとうございます。 色々あるんですね。 早速読んでみます。