SSブログ

BackupControlクラスのメンバ関数仕様検討 [Qt]

大体の機能分担を決めたので、それに従って実装して行きたいと思います。BackupControlは以前作成したので、BackupMainも作成しておきます。こちらは、QThreadの派生クラスとします。

*

まずは、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++入門




   

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

ブログを作る(無料) powered by SSブログ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。