[Php-objetos] Juan Marcos - Entrega Práctico 1

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Dom Feb 15 00:48:49 ART 2009


Hola Juan,

	Acá va la corrección:

**	Nota: El enunciado al generarse ambiguedades según el contexto voy a
explicar los criterios que
**	tomé en cuenta para realizar el programa:

	Muy bueno lo de explicar asumciones que tomaste, así el código queda
mejor contextualizado.

**	1) El combustible al tener sólo nombre y precio, interpreto que se
refiere a la clase de	
**		combustible que utiliza el auto y sus caracteristicas, de modo que
si dos autos utilizan
**		el mismo combustible (por ejemplo "Gasoil" que sale $x) tengan la
posibilidad de referenciar
**		el mismo objeto, de esa forma si se actualiza el precio del gasoil,
automáticamente todos los
**		que usan éste tipo de combustible calcularian el consumo con el
precio actualizado.

	Vale como tu asumción.
	No es una asumción que tomarían muchos, porque el sentido común dice
que si ya tenés nafta en el tanque, por más que el precio en el surtidor
cambie, tu vehículo no gastará esa nafta al precio actualizado, sino al
que la pagaste.
	También comentábamos hoy que esta asumción implica que todos los
vehículos cargaron combustible al mismo precio/estación/lugar para
pagarla lo mismo, y que si en Shell sube también subió en YPF.
	Insisto, vale como tu asumción, y es muy bueno que la aclares en tanto
tiene estas particularidades.

**	2) Si bien el cálculo del consumo tiene similitudes (consumoPorKm x
valor del combustible)
**		elegí no llamar a parent::calcularConsumo() en la función porque si
bien es un cambio en
**		el comportamiento como señalabas en la clase, se está dividiendo en
dos funciones una fórmula
**		matemática, que en el caso de ser mas compleja se complique al
momento de entenderla.

	Es una pésima elección.
	Coregí esto.
	El error que tiene esta forma de implementar es que tenés código
duplicado, lo que significa una dificultad mayor a la hora de mantener,
de testear y de entender lo que pasa.
	No se está dividiendo en 2 la fórmula, sino detectando comportamiento
común y poniéndolo en un solo lugar.
	Tampoco comparto (esta parte es más personal) en que una fórmula grande
sea más fácil de entender que 2 pequeñas.

**	Nota2: Probé utilizar el try y catch en el momento que se calcula el
combustible por si no hay
**	un combustible asignado y no me funcionó, pero aparentemente por lo
que investigué un poco por
**	internet no está mal escrito. ¿Por que puede ser?.

	Lo que te pasa acá es que estás usando al revés la idea.
	Por una parte, 3 * null no falla en PHP. Devuelve cero y listo.
	Lo que tu método tendría que hacer es validar que los valores
necesarios estén asignados, y si la validación falla, GENERAR una
excepción, para que tu código principal pueda manejar el error.

	Otra: esta línea está perfecta:

$auto1 = new Auto( new Combustible("GNC", 50), 4, 10, 4);

	Pero por las primeras 6 clases prefieron que hagan:

$combustible = new Combustible("GNC", 50);
$auto1 = new Auto( $combustible, 4, 10, 4);

	porque si no no se ve que la ventaja de usar una agregación es que NO
HAY que volver a crear el elemento agregado.
	Esta idea se ve mejor con un ejemplo más largo:

$auto1 = new Auto( new Combustible("GNC", 50), 4, 10, 4);
$auto2 = new Auto( new Combustible("GNC", 50), 2, 12, 4);

	en la que creé 4 objetos, versus:

$combustible = new Combustible("GNC", 50);
$auto1 = new Auto( $combustible, 4, 10, 4);
$auto1 = new Auto( $combustible, 2, 12, 4);

	En la que creo solamente 3.

	Además, tu uso de las clases no es consistente con tu asumción de que
"si cambia un combustible, lo cambio para todos", porque al construir
los autos de esta manera te es imposible cambiar el combustible si no es
a través del vehículo que lo tiene.

	En el ejemplo de la clase de hoy, de las películas y los directores, te
quedás forzado a cambiar un director a través de la película en vez de
directamente, lo cual decíamos y estábamos de acuerdo en que no tiene
sentido.

	Mejoralo y reentregalo.
	Seguimos!
-- 
Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-objetos