BackupControlクラスのメンバ関数仕様検討 [Qt]
大体の機能分担を決めたので、それに従って実装して行きたいと思います。BackupControlは以前作成したので、BackupMainも作成しておきます。こちらは、QThreadの派生クラスとします。
*
まずは、BackupControlに以前検討したメソッドを追加しようと思いましたが、自作のクラスは自分でソースを編集する必要がありそうですね・・。クラスエディタとかがあればいいのに。
さて、コードを書こうと思いましたが、よく考えたら引数とかを全く決めてませんでした。そこから始めないといけませんね。
引数を参照渡しにするかポインタ渡しにするか悩みましたが、いくつかサイトを検索して、おおよそ下記の方針で使い分けることにしました。
getSourceDirs() で、クラスのオブジェクトを返す時にどうするか悩みました。値で返すのか、ポインタで返すのか・・。自分で作ったクラスを返す時は注意する必要がある(コピーコンストラクタを作る?)が、Qtで用意されているクラスならそのまま値返しができそうな雰囲気です。ちょっと不安なんですが、まあ、今回は試しに値返しにしてみることにしました。何か不具合が出たら、それはそれでいい勉強になるでしょう。今回、色々悩んでて、クラスに対する代入演算子や初期化演算子の動きがよくわかってい無かったことが判明しましたね・・。理解できたんかなぁ・・。
スレッド実行中の処理について、排他処理を行う必要がありますね・・。うまくいくんかな・・。やり方が間違っているか・・?
さて、以下は signal です。とりあえずは、QThreadが元から持っているsignalは出てくるとして、他に何かいりますかね?と思ったら、以前検討してました。全部いるかな・・?
今、思いついた関数仕様はこんなところでしょうか。実装する前に、ちゃんと動作を検討しとく必要がありますね・・。
つづく。
【参考】
・参照とポインタ - Gulf of St.Lawrence
・ポインタと参照の使い分け - thinkin’ in the brain
・オブジェクトを返す関数 - C++ Builder / Turbo C++ 質問の木
・C++編(言語解説) 第16章 コピーコンストラクタ
・C++ クラス設計に関するノート - オブジェクトの広場
・C++ で関数から object をどう返すか - KBDAHOLIC - やぬすさんとこ
・C++ クラス設計に関するノート
・コピーコンストラクタ - C++入門
*
まずは、BackupControlに以前検討したメソッドを追加しようと思いましたが、自作のクラスは自分でソースを編集する必要がありそうですね・・。クラスエディタとかがあればいいのに。
さて、コードを書こうと思いましたが、よく考えたら引数とかを全く決めてませんでした。そこから始めないといけませんね。
addSourceDir() | |||
引数 | QString &dir | 転送元ディレクトリ | |
戻り値 | int | ディレクトリ登録の成否。下記の値のいずれかを返す。 | |
AddSrcSuccess | 追加成功 | ||
AddSrcDuplicate | 追加済みディレクトリ | ||
AddSrcBackupProceeded | バックアップ中 | ||
AddSrcFail | 追加失敗 | ||
処理 | 引数で与えられたディレクトリを転送元ディレクトリとして追加する。追加失敗は、存在しないディレクトリ名の指定を想定。「AddSrcBackupProceeded」はUI的に発生しない様にする予定。 |
delSourceDir() | |||
引数 | QString &dir | 削除対象ディレクトリ | |
戻り値 | int | ディレクトリ削除の成否。下記のいずれかを返す。 | |
DelSrcSuccess | 削除成功 | ||
DelSrcBackupProceeded | バックアップ処理中 | ||
DelSrcFail | 削除失敗 | ||
処理 | 引数で指定されたディレクトリを転送元ディレクトリから削除する。削除失敗は、指定されたディレクトリが転送元として追加されていない場合を想定。「DelSrcBackupProceeded」はUI的に発生させないようにする予定。 |
backup() | |||
引数 | なし | ||
戻り値 | int | バックアップ開始結果。下記のいずれかを返す。 | |
BackupStartSuccess | バックアップ開始成功 | ||
BackupStartNotSetSrc | バックアップ元ディレクトリ未設定 | ||
BackupStartNotSetDest | バックアップ先ディレクトリ未設定 | ||
BackupStartBackupProceeded | バックアップ中 | ||
BackupStartFail | バックアップ開始失敗 | ||
処理 | BackupMainに転送元ディレクトリリストと転送先ディレクトリを渡し、BackupMainの処理を開始する。バックアップ開始失敗はThread開始失敗を想定。「BackupStartBackupProceeded」はUI的に発生させないようにする予定。 |
setDestinationDir() | |||
引数 | QString &dir | 転送先ディレクトリ | |
戻り値 | int | 転送先ディレクトリ設定結果。下記のいずれかを返す | |
SetDestSuccess | 転送先ディレクトリ設定成功 | ||
SetDestDuplicate | 設定済み転送先ディレクトリ | ||
SetDestDuplicate | 設定済み転送先ディレクトリ | ||
SetDestBackupProceeded | バックアップ中 | ||
SetDestFail | 転送先ディレクトリ設定失敗 | ||
処理 | 引数で指定されたフォルダを転送先フォルダとして設定する。設定失敗は指定されたフォルダが存在しない場合を想定。「SetDestBackupProceeded」はUI的に発生させない予定。 |
getSourceDirs() | ||
引数 | なし | |
戻り値 | QStringList | 設定されている転送元ディレクトリのリスト |
処理 | 設定されている転送元ディレクトリのリストをまとめて返す。 |
getDestinationDir() | ||
引数 | なし | |
戻り値 | QString | 設定されている転送先ディレクトリ |
処理 | 設定されている転送先ディレクトリを返す。何も設定されていない場合は、空文字列を返す(isEmpty()でtrueになる)。 |
stop() | |||
引数 | なし | ||
戻り値 | int | バックアップ停止結果。下記を返す。 | |
BackupStopSuccess | バックアップ停止成功 | ||
BackupStopNotProceed | バックアップ処理中でない | ||
BackupStopFail | バックアップ停止失敗 | ||
処理 | 実行中のバックアップ処理を停止させる。処理停止のフラグでも立てるか?そうすると、バックアップの実行中にフラグチェックの処理がいりますね。QThread::terminate()は使いません。 |
引数を参照渡しにするかポインタ渡しにするか悩みましたが、いくつかサイトを検索して、おおよそ下記の方針で使い分けることにしました。
- ポインタ渡し - 引数を変更する可能性がある場合、NULLの引数を許容する場合
- 参照渡し - 引数を変更しない場合、NULLの引数を許容しない場合
getSourceDirs() で、クラスのオブジェクトを返す時にどうするか悩みました。値で返すのか、ポインタで返すのか・・。自分で作ったクラスを返す時は注意する必要がある(コピーコンストラクタを作る?)が、Qtで用意されているクラスならそのまま値返しができそうな雰囲気です。ちょっと不安なんですが、まあ、今回は試しに値返しにしてみることにしました。何か不具合が出たら、それはそれでいい勉強になるでしょう。今回、色々悩んでて、クラスに対する代入演算子や初期化演算子の動きがよくわかってい無かったことが判明しましたね・・。理解できたんかなぁ・・。
スレッド実行中の処理について、排他処理を行う必要がありますね・・。うまくいくんかな・・。やり方が間違っているか・・?
さて、以下は signal です。とりあえずは、QThreadが元から持っているsignalは出てくるとして、他に何かいりますかね?と思ったら、以前検討してました。全部いるかな・・?
finished() | ||
引数 | なし | |
戻り値 | なし | |
処理 | スレッドの実行完了時に発生。コピー処理終了のsignalとして利用可能かな。 |
started() | ||
引数 | なし | |
戻り値 | なし | |
処理 | スレッドの実行開始時に発生。バックアップ開始のシグナルとして利用可能かな。 |
terminated() | ||
引数 | なし | |
戻り値 | なし | |
処理 | スレッドがterminateされたときに発生。QThread::terminate()を使う予定はないので、これは発生しない想定。なので、利用しない。 |
stopped() | ||
引数 | なし | |
戻り値 | なし | |
処理 | バックアップ停止完了時に発生。 |
startBackupFile() | ||
引数 | QString &dir | バックアップ元ファイルフルパス |
戻り値 | なし | |
処理 | 1ファイルのバックアップ開始時に発生。引数はバックアップファイルのフルパス。 |
finishBackupFile() | ||
引数 | QString &dir | バックアップ元ファイルフルパス |
戻り値 | なし | |
処理 | 1ファイルのバックアップ完了時に発生。引数はバックアップ元ファイルのフルパス。 |
今、思いついた関数仕様はこんなところでしょうか。実装する前に、ちゃんと動作を検討しとく必要がありますね・・。
つづく。
【参考】
・参照とポインタ - Gulf of St.Lawrence
・ポインタと参照の使い分け - thinkin’ in the brain
・オブジェクトを返す関数 - C++ Builder / Turbo C++ 質問の木
・C++編(言語解説) 第16章 コピーコンストラクタ
・C++ クラス設計に関するノート - オブジェクトの広場
・C++ で関数から object をどう返すか - KBDAHOLIC - やぬすさんとこ
・C++ クラス設計に関するノート
・コピーコンストラクタ - C++入門
コメント 0