¿Qué son los objetos de valor?

Un objeto de valor en realidad casi no es un objeto: es un valor * de * un objeto, por ejemplo, una persona (un objeto “real”) puede tener una fecha de nacimiento (un objeto de valor). Esta puede ser una instancia de una Fecha de clase, pero no hay un comportamiento real conectado a este objeto (en otras palabras: no tiene responsabilidades) excepto una interfaz de consulta de Fecha (como cuántos días entre la fecha de nacimiento y otra fecha).
Además: los objetos de valor no cambian, en otras palabras: son inmutables. Si un objeto necesita cambiar (debería ser la excepción), simplemente se intercambia con otro.
Dado que un objeto de valor es un miembro del objeto “real” (el que * tiene * responsabilidades en su dominio) generalmente está protegido: no expone directamente el objeto al mundo exterior. Esto implica que no crea un método de acceso ni lo convierte en una propiedad. La interfaz de Person podría tener algo como:
daysBetweenBirthDates: (Person *) anotherPerson
que, por supuesto, usa el Objeto de valor de fecha, pero no lo expone. Por supuesto, este también es un ejemplo de encapsulación.
Value Object también es un patrón en DDD (Diseño controlado por dominio).

Esta respuesta está tomada de 1. ¿Qué son los objetos de valor? ¿Por qué necesitamos objetos de valor?