somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【パターン】バリューオブジェクト

TDD入門3章に出てきた「バリューオブジェクト」についてのまとめ。

 

バリューオブジェクトとは?

オブジェクトを値として使用できる オブジェクトのメンバ変数の値は、設定後に変化しないようにする

プリミティブ型な値を参照型のように実現し、 実現されたバリューオブジェクト同士を区別するためなのかなと思いました。 JavaC#といったプリミティブと参照が存在する言語では、 IntegerやInt32などのラッパーや 意識せずにデータ型として生成しているStringが バリューオブジェクトにあたります。 完全オブジェクト指向の場合、内部的にはどう考えているかが気になります。

 

 

値を変更するには?

バリューオブジェクトが値を変更する操作があった場合、 その操作の実態は自身の値を変更するのではなく、 継続して参照型として扱うために、変更後の値をもったオブジェクトを新しく生成するようです。 Javaの「+演算子」によるコストが言語からではなく、パターンによってわかりました。

 

値を比較するには?

バリューオブジェクトの値を比較するためにequalsメソッドを実装します。 比較対象を 「バリューオブジェクトのみにするのか、nullはどうするのか」 といった問題は必要になった場合に考えるようです。 意味のあるプリミティブ型の値で、 その値が元の値を変更して表現するものではないときに使えたらいいなと思います。 今回のような総額の場合、 数値的に意味で無く、$10は、$5を2倍したものではなく、$10として扱うからだと思いました。

 

http://www.atmarkit.co.jp/im/carc/serial/jobjmdl05/jobjmdl05_1.html http://www.atmarkit.co.jp/im/carc/serial/jobjmdl06/jobjmdl06_1.html

[オブジェクト指向プログラミング][実装パターン]Value Object(バリューオブジェクト) 実装パターン