Buenas noches, estoy haciendo un ejercicio donde tengo que facturar la tarifa de un cliente que pide soda a domicilio. La tarifa por cliente es una tarifa base pero se modifica segun la zona del cliente y segun la cantidad de litros que se pide.
Tengo una clase que se llama Facturacion donde almaceno mis clientes (pertenecientes a la clase cliente) y un metodo de la clase llamado obtenerFacturacionDeCliente(cliente) que se comunica con una instancia de la clase cliente para invocar al metodo obtenerFacturacion.
Este ultimo metodo lo que hace es enviarle su tarifa base (atributo de la clase cliente) a una instancia de una clase llamada Zona (que tambien es un atributo de la clase cliente) para que esta instancia opere con la tarifa y devuelva la tarifa modificada en funcion de la zona en la que se encuentra el cliente.
Mi duda es hasta dónde esto viola el encapsulamiento o el principio de "Tell, dont ask" al darle a una instancia de la clase Zona la tarifa base de un cliente para que opere sobre ella y devuelva otra tarifa distinta. De violar este principio, que es lo mas recomendable para hacer en estos casos? O hasta qué punto debo delegar las responsabilidades para poder evitar estas situaciones?
Gracias.
Hola Lucas:
Habría que tener un poco más de información del contexto para poder analizar ventajas y desventajas de lo que proponés. Lo que proponés me parece una buena idea, aunque le modificaría un poco la semántica como para generalizarlo un poco más: en lugar de "pasarle la tarifa base" a la zona para que la utilice, lo que harías desde el cliente sería simplemente pedirle a la zona que aplique un ajuste a un precio que se le pasa por parámetro. Ese precio sería la misma tarifa base, o sea que, en esencia, es lo mismo que vos proponés pero con otro nombre. Esto me permitiría tener en la clase Cliente una colección de modificadores de precio, los cuales recorrería y les mandaría a todos el mismo mensaje de ajuste de precio y cada uno sabrá modificarlo de manera polimórfica. Incluso puede haber un objeto en esa colección que no modifique el precio en absoluto.Saludos,
Tomás
Genial, mi duda recaía en que pensaba que al pedirle al Cliente que me de la tarifa base estaba violando el encapsulamiento ya que la tarifa base es un atributo privado de la clase pero a su vez no encontraba otra forma de poder modificar el precio de la tarifa en función de la zona en que se encontraba el cliente.
Gracias por la respuesta!