Objeto de valor

El objeto de valor (también objeto de valor ) se emplea en patrones de diseño de desarrollo de software . Los objetos de valor son objetos inmutables que representan un valor especial. Si se va a cambiar el valor, se debe generar un nuevo objeto. El patrón de diseño se utiliza para relacionar las comparaciones de objetos con sus valores de atributo en lugar de la identidad del objeto.

Explicación

Para valores especiales, puede tener sentido usarlos como objetos de su propia clase. Este patrón de diseño se usa a menudo, por ejemplo, para cantidades de dinero o fechas. Con estos tipos de datos más complejos, las clases respectivas pueden recibir sus propios métodos y propiedades desde el principio, lo que simplifica el trabajo posterior con el objeto de valor.

Según la definición de Eric Evans, los objetos de valor tienen tres propiedades fundamentales:

  • Los objetos de valor no tienen identidad
  • Los objetos de valor no se pueden cambiar
  • Los objetos de valor siempre se crean en un estado válido

Ejemplos

fecha

La clase "Date" tiene los métodos "getYear ()" y "getEuropeanDate ()", que facilitan el manejo de objetos del tipo "Date".

Ejemplo (Java)

  • Clase de objeto de valor Dinero
import java.math.BigDecimal;
import java.util.Currency;
import java.util.Objects;

public final class Money {
	private final BigDecimal amount;
	private final Currency currency;

	public Money(BigDecimal amount, Currency currency) {
		Objects.requireNonNull(amount, "amount should be not null");
		Objects.requireNonNull(currency, "currency should be not null");
		this.amount = amount;
		this.currency = currency;
	}
	public BigDecimal getAmount() {
		return this.amount;
	}
	public Currency getCurrency() {
		return this.currency;
	}
	public Money add(Money other) {
		if (other == null || other.currency != currency) throw new IllegalArgumentException("Can't add " + other);
		return new Money(amount.add(other.amount), currency);
	}
	@Override
	public boolean equals(Object obj) {
		if (obj == null || getClass() != obj.getClass())
			return false;
		Money other = (Money) obj;
		return amount.equals(other.amount) && currency.equals(other.currency);
	}
}

enlaces web

Evidencia individual

  1. 4.4 Clases de valores y clases de objetos. Computación Rheinwerk - libro práctico sobre orientación a objetos; consultado el 31 de agosto de 2015
  2. ^ Karl Eilebrecht, Gernot Starke: Patrones compactos . 4ª edición. Springer Vieweg Verlag, Berlín 2013, ISBN 978-3-642-34717-7 , pág. 195-197 .
  3. heise.de - Cumplimiento de invariantes con el Patrón de objeto de valor. Consultado el 28 de marzo de 2016.