[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