バイト3日目の hashidume です。
これからよろしくお願います。

まずは java で演習用(?)のプログラムを作っています。
そこで理解したことのメモです。

1日目  List から subList の作成

課題: 要素に name と age を持つ Person の List からいろいろな条件でsubList を作成する。

まずは条件ごとにメソッドを作りました。
これを1つのメソッドでということで、条件が比較的少ないんで全ての条件を満たす引数を考えつづけて…
結局思いつかず、ヒント(というか答え)をもらって書き直しました。

「List の全ての要素に対して条件が合うかどうか調べて、真ならば subListに追加する」という処理は、「条件が合うか調べて」の部分以外は共通なので、条件を調べるだけの機能のインターフェイスを作成し、その実装を引数として渡せば良い。

このときに「調べる」部分の共通する入出力を考えインターフェイスのメソッドの入出力にする。
今回の場合、入力は1つのPersonのインスタンスで出力は真偽値になります。

答え:Compositeパターンを使う。

2日目 CSV ファイルの処理

課題:CSVファイルを読み込み、これを表示する。

まずは、ファイルから1文字ずつ読みながら、1文字ずつ判定&表示。
これはフィールドの処理もできないので、全てのレコードとフィールドを ArrayList にしてから表示するようにしました。
これだと、CSVが大きいとメモリ使用量も大きくなるので、それを少しのメモリでも動くようにとのことでした。

Iteratorの実装っぽい感じで hasNext() と next() を使ってが答えでした。

Iterator を使うと(たぶん一般的に)メモリの消費量が少なく、全てを取り出すことなく1要素ずつ処理することもできるので一括処理するより効率的になるとのことでした。
でも、どうしてもランダムアクセスする必要がある場合は使えないのでしょうが。

ということで、バイト3日目の開始です。

カテゴリー: 技術情報

1件のコメント

yamaguchi · 2008-03-23 17:16

1日目の課題の答えの本質は「コンポジット」ではなく「手続のパラメータ化」です。

「手続のパラメータ化」とよく組み合わせられるテクニックとして「コンポジット」があります。この課題のでは、絞込条件をパラメータ化された手続のコンポジットとして表現しています。

現在コメントは受け付けていません。