Implementation Patterns勉強会第3回

今回は5章ClassのImplementorから6章StateのExtrinsic Stateまで。

5章Class

  • オブジェクト指向言語Javaにも関わらず、まるでCのような手続き型プログラムを書く輩は結構多い。私はこういう奴を「なんちゃってJava野郎」と呼んでいる。
  • Inner Classってどんな時に使うのか?と議論した。私の場合はParameter ObjectとしてInner Classを利用することが多い。とはいえ、そんなに使うことはない。
  • 「Instance-Specific Behaviorってよく分からん」という意見をきっかけに議論した。ようは、インスタンスによって処理を変えるということであり、この後のConditonalからAnonymous Inner Classのイントロダクションとなっているということ。
  • Conditionalはリファクタリングでいうところの「不吉なにおい」の例といえる。
  • Pluggable Selectorはようはリフレクションのこと。参加者で「C++でPluggable Selectorもどきを作るようお願いしたところ、担当者から「Javaなら簡単なのに」と言われた」という人がいた。そりゃそうだろう。

6章State

  • StateといってもStateパターンのことではなくて、状態保持全般のことを指している。
  • Direct Accessの例で、doorRegister = 1;なんてのがあるが、ありえんでしょ、こりゃ。しかし、MESSAGE_NO245 = 245;なんて定数を見たことがある。定数にした意味ねえだろ!
  • Indirect Accessにおいてsetterのパラメータは1つだが、setter内では単にフィールドへのセットだけではなく、プラスアルファの処理をしている例があった。よくあるケースだが、"it is easy to forget to maintain the implied constraints"とある。うーん、確かに。
  • Indirect Accessメソッドが用意されていても、あえて使わないケースもあるだろうという意見。こんなときこそコメントの出番。あえて使わない理由を書かないと保守する人が困る。
  • Common Stateで"Sometimes I am tempted to introduce a field that is only used by a subset of the methods in an object..."とある。こういったケースでのフィールド使用は一種のグローバル変数だろう。
  • Variable Stateって使ったことない。サンプルコードではMap型のフィールドを用意して、そこに名称と対応する値を入れている。しかし、値の型がまちまちになっている。これってどうかね。値を使用する際にキャストしなければならないし。