[Php-objetos] Andrés Re: Envio Ejercicio 1
Andres Manuel
andresmdiaz7 en gmail.com
Mar Feb 24 09:16:02 ARST 2009
Leonardo Tadei - Pegasus Tech Supply escribió:
> Hola Andrés,
>
> El lun, 23-02-2009 a las 14:16 -0200, Andres Manuel escribió:
>
>> Aqui el ejercicio numero uno, tarde pero seguro, BETA por las dudas, jajaja
>>
>
> Está bastante bien hecho.
>
> Una corrección y dos observaciones:
>
> Corrección: hacés
>
> $auto=new Auto('Gasoil',1.88,3,8,66);
> $auto->combustible->setTipo('gassss');
> $auto->combustible->setValor(12.44);
>
> Lo que significa que para el constructor de Auto, pasás valores del
> Combustible en el mensaje, pero después permitís usar el objeto
> Combustible directamente.
> O una cosa, o la otra, las dos no, porque el código queda incoherente.
> O repetís la interfaz del Combustible como métodos propios del Auto para
> definirlo y ponerle un valor, o le pasás al constructor un objeto
> Combustible.
>
Leo lo habia hecho de la segunda manera y me habias dicho que estaba
mal, por eso lo cambie.
Habia hecho metodos propios para modificar los valores de combustible:
$auto->setCombustibleValor($valor);
Estos modificaban el objeto 'Combustible'. Me dijiste que no debia
hacerlo asi, por que no era el comportamiento esperado.
que era como repetir un metodo por que ese metodo hacia lo mismo que
$combustible->setValor($valor);
entonces me dijiste que lo implemente de la siguiente manera:
$auto->combustible->setValor($valor);
Ahora tengo un hermoso merengue en la cabeza, pense que ya lo entendia,
hasta que llego este mail.
> (la segunda opción es más corta de escribir y más entretenida de
> usar...)
>
>
> Observación: tenés en varios métodos cosa de la forma
>
> if (is_int($valor)){
> $this->plazas=$valor;
> }else{
> throw new Exception("El valor de plazas debe ser de tipo entero.");
>
> y lo mismo para los string.
>
> Lo que me preocupa es que sigas adelante pensando que la idea de
> preguntar IF (get_class() == Pirulo) para saber si lo que recibís es de
> una clase dada. Necesitar hacer esta pregunta siempre es por un error de
> diseño.
>
>
Quisiera que me explicaras como validar esos tipos haciendo lo correcto,
busque en www.php.net pero no encuentro la solución,
y no me imagino tampoco, pero quisiera aprender, para no errar en lo
mismo. Aun que sea pasame un dato en donde pueda leer.
Thanks
> Además, tu código permite para la pickup y el camión que
> calcularConsumo() funcione mal sin que se generen esa excepciones....
>
> La otra observación es que en auto tu implementación de
> calcularConsumo() es:
>
> function calcularConsumo(){
> return parent::calcularConsumo();
> }
>
> su la clase Auto no tuviera un calcularConsumo() todo funciona igual.
> Entendés por qué? Qué razón tenés para escribir esa implementación?
>
Si este lo reconosco, hermoso error tuve. corrigiendooooo
> Seguimos!
>
> PD: no dejes que Gonzalo se copie! El es capaz, solo tiene que ponerse
> con ganas y dedicarle unas horas.
>
Más información sobre la lista de distribución Php-objetos