The distinction between objects and values in structured and object-oriented programming was first spelled out in the seminal article by MacLennan
Mac82. It has taken a while, but with the new breed of object-oriented programming languages like X10
IBM05 and Fortress
SUN06, first-class value types seem to finally have arrived.
The most widely known uses of the Value Object pattern can probably be found in the Java JDK implementations. The String, Integer, and Float classes are close-to-the-system Value Object implementations. Further and somewhat cleaner examples are the BigInteger and BigDecimal classes, which are in fact implemented as immutable classes, with some caching for common numbers (e.g. values between -10 and +10). The JValue Value Object framework provides more examples: Hierarchical names, URLs, monetary amounts, UML datatypes, and others
Rie99.
As a pattern, Value Object has first been described by Cunningham
Cun95 and later by Fowler
Fow02 and Evans
Eva04. We provide a lengthy discussion of Value Object design and implementation considerations in traditional programming languages in
BRSetal98.
Next