[Php-objetos] Nueva entrega de ejercicio 1.

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Lun Feb 16 15:10:01 ART 2009


Hola Juan,

El lun, 16-02-2009 a las 13:15 -0200, Juan Marcos escribió:
> Corregí lo que habiamos charlado (esta todo explicado en el comentario
> de la cabecera del programa). Implementé lo de "Casting" de clases que
> mandaste, anda fantástico (si hubiese sabido que se llamaba así me
> hubiese ahorrado bastante tiempo jeje). Espero que esta vez cumpla con
> las espectativas. Saludos!.

	Cumple con mis expectativas, porque lo que espero es que trabajen estos
conceptos.

	Ya estás usando correctamente el tema de las excepciones y la herencia
aplicada al método calcularConsumo.
	Respecto a tu código, tiene un error conceptual grande todavía.
	Decís:

**	Según lo conversado con Leonardo, corrijo dos conceptos (ambos fueron
malentendidos en la
**	entrega anterior): 
**
**	1) Cáda coche debe tener su combustible. En este caso seria una
relación de Composición según
**	lo que vimos escrito en una relacion 1 a 1. Lo que me genera otro
dilema, debo...?:

	Correcto: es mejor una composición. Sin embargo con tu explicación
anterior, con la salvedad de que era "rara" no había problemas. La idea
es concebir una solución y ser consistente con su impementación.

**	a) ¿Crear el objeto Combustible dentro del constructor de vehículo,
tomando a través de éste
**	los parámetros iniciales?

	Bueno, así se implementa una composición: creando un Combustible dentro
del constructor del auto...

** La contra es que si debo modificar los parámetros del constructor
**	de Combustible, voy a tener que corregirlos en Vehículo, lo que rompe
el encapsulamiento de
**	Vehículo.

	Esto no viola el encapsulamiento de ninguna manera!
	No me doy cuenta en qué estás pensando cuando decís que se viola el
encapsulamiento... podrías pasar un ejemplo?

**	b) ¿Esperar que el Combustible sea creado fuera del Vehículo, y luego
insertado en el mismo?.
**	De ésta forma, Vehículo no tendria conocimeinto innecesario alguno
sobre la composición de
**	Combustible, sólo usaría los comportamientos que necesita para
interactuar con éste.

	Una composición conoce siempre a los Objetos de los que forman parte,
si no no los puede crear... es la relación más fuerte entre los objetos.

**	Creo que la mejor opción es el caso "b", que tomo como referencia a
partir de ahora. El código
**	no varía prácticamente de la versión anterior, solo el concepto, pero
hay que	tenerlo en claro 
**	para seguir la línea de diseño y contemplarlo en futuras
actualizaciones.

	Nooo! el código sí varía!

	Tu decisión es hacer una composición, pero tu código es de una
agregación.
...
$c2 = new Combustible("GNC", 50);
$pickup1 = new Pickup($c2, 4, 20, 3000);
$consumoPickup = $pickup1->calcularConsumo();
print("Y su consumo es de: $$consumoPickup.");
// Funciona como se espera.... pero
$c2->setTipo("GNC2");
$c2->setValor(75);
$consumoPickup = $pickup1->calcularConsumo();
print("Y su consumo es de: $$consumoPickup.");
// devuelve otro valor.
...
	Cambia el resultado, con lo cual queda demostrado que tu implementación
es una agregación, en lugar de una composición...

	Creo que crees que tus opciones a) y b) son excluyentes en vez de
complementarias...

	Bueno, quedo a la espera de la respuesta a tu pregunta de más arriba, y
luego, de nuevo código.
	
-- 
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