タブつき撮影情報リストだよ
2008/06/24 21:09 PhotoMaster
ファイルの整理に入る前に、ささっと撮影情報リストを作ってみました。
コントロールをEditFieldからListBoxに変更して、タブで内容を切り替えるようにしました。 今回の撮影情報リストの特徴は、タブの状態を共有プロパティを使って一元管理していることです。 共有プロパティというのは、Javaでいうところの静的変数ですね。 撮影情報は、複数のウインドウに表示する可能性があるので、どれかひとつのタブを切り替えたら、それ以外のタブも同時に切り替わるようにしようというわけです。
撮影情報リストのコンストラクタが呼び出されたら、共有プロパティの配列に、自分自身を登録するようにします。 タブが切り替えられたら、共有メソッドでその値を共有プロパティに保存してから、配列に登録されているインスタンスの全てに、リストを更新するように指示するわけです。 もしかしたら、撮影情報リストは、フローティングウインドウでひとつだけしか表示しないかもしれませんが、この仕組みはとても便利ですね。
REALbasicでは、抽象メソッド自体は扱えるものの、残念ながら抽象メソッドを明示的に宣言することができません。 なので、メソッドが増えると、どれが抽象メソッドかの判断がつきにくくなってしまいます。 でも、イベントを抽象メソッド的に使えることに気がつきました。 スーパークラスで、外部との窓口となるパブリックメソッドと、サブクラスとの窓口になるイベントを用意します。 後は、サブクラスを作成するだけで自動的にイベントが追加され、プライベートなメソッドと区別されるので、構造がとてもわかりやすくなります。
撮影情報は、TIFF、Exif、GPS、MakerNoteという4つに分類されますが、どれもIFDという同じ構造になっています。 そこで、IFDクラスを用意して、それぞれに対応する4つのインスタンスを作り、これにデータを格納します。 データ構造は同じでも、データの内容はそれぞれ異なるので、IFDAnalyzerクラスを用意して共通の処理を行い、それぞれに対応する4つのサブクラスを作り、そこで固有のデータの処理を行うわけです。 これまでも、データクラスの共用化はしていたわけですが、データ解析はひとつのクラスで力技でやっていたので、ずいぶんスッキリさせることができました。
オブジェクト指向プログラミングでは、データと処理でクラスを分けるというのが基本なんですが、その基本を知らなかったので、これまではずいぶん苦労していました。 PhotoMaster 1と比べると、PhotoMaster 2ではクラスの分化が進んでいたわけですが、それでもひとつひとつのクラスが巨大化していて、とても見苦しいコードになっていました。 PhotoMaster 3では、クラスをうまく分割することで、効率の良いコードにしていきたいですね。
要領が良くなると、負担が軽くなって、とても気持ち良くなりますね。







