[Php-objetos] Delirium!
Juan Marcos
malditared en hotmail.com
Vie Feb 13 19:06:49 ART 2009
Mañana te lo voy a mostrar de todas formas, pero hice unos dibujos tratando de explicar la situacion:
Los objetos, en su constructor crean un objeto de tipo Combustible, para que este pueda tener las propiedades que necesite.
Si hicieramos:
$auto1 = new Auto();
$camion1 = new Camion();
representado un poco grotescamente quedaria algo asi:
Ahora, si hacemos esto:
$the_nafta = $auto1->getCombustible();
quedaria algo asi:
Y por ultimo, asignando
$camion1->setCombustible($the_nafta);
quedaria:
(La linea punteada es para representar que deja de apuntar ahi)
Es obvio que ésto no tiene que pasar, lo que yo consulto es, si deberiamos prever esto mediante la programación (por ejemplo, clonar el objeto Combustible antes de devolverlo, para devolver una instancia distinta) o está bien hecha la programación del objeto, pero el que tiene que tener precauciones para que esto no suceda es el programador. Confio en la 2da opción, pero quieria aclarar bien el tema por si no se entendía bien que es lo que estaba preguntando.
Preferí hacer los dibujitos porque lo importante es el concepto en realidad, no el código en si.
Esto al tener combustible dos propiedades solamente se podria haber solucionado con lo que seria en C un "Struct", que es una "variable compuesta" por asi decirlo, que simplemente la función la devolvería por valor, pero PHP por lo que investigué no tiene esto, y los objetos se pasan siempre por referencia.
Bueno, ya no jodo mas! mañana hablaremos del tema a ver si esta bien o no jeje, saludos!
- Juan Marcos.
---
> From: leonardot en pegasusnet.com.ar
> To: php-objetos en pato2.fi.mdp.edu.ar
> Date: Fri, 13 Feb 2009 15:14:07 -0200
> Subject: Re: [Php-objetos] Consultita Practico 1
>
> Hola Juan,
>
> creo que entiendo tu dilema.
>
> Para dilucidarlo falta ver en dónde hacés los new de cada objeto. Con
> esta porción de código no se aclara.
>
> Como planteás que si cambiás el combustible de un vehículo, pareciera
> que hacés en new afuera de la clase, y por eso los cambios en uno
> afectan al otro.
>
> Si es así, no tiene sentido, porque cada vehículo debe tener su tipo de
> combustible, y no compartirlo con el planeta. Por otra parte y como
> indicio, si la cosa se pone muy complicada hasta llegar al extremo de
> necesitar clonar un objeto... tal vez el modelo no sea el adecuado para
> resolver el problema.
>
> Tal y como descubriste, tu implementación hace que sea el MISMO
> combustible, lo cual no es el caso para este problema.,,,
>
> Espero haberte guiado un poco!
>
> El vie, 13-02-2009 a las 11:54 -0200, Juan Marcos escribió:
> > Jeje si me tomaran una evaluación con el enunciado del ejercicio yo
> > seria uno de esos que no paran de preguntar, y que al final te dicen
> > "el enunciado es asi, hacé lo que te parezca" jeje... Bueno, aca va mi
> > preguntita:
> >
> > Estoy haciendo el ejercicio de forma que en los vehículos, el
> > combustible es un objeto que se ingresa y se obtiene mediante un
> > $auto->setCombustible($fuel) y $fuel = $auto->getCombustible()
> > Funciona, hermoso, todo barbaro, ahora, mi consulta es: que se "debe"
> > devolver y/o ingresar, el objeto referenciado o un nuevo objeto?
> >
> > Por ejemplo:
> >
> > Supongamos que tenemos $auto1 y $camion1, y quiero tomar el
> > combustible del auto y setear el mismo en el camión, entonces hago:
> >
> > si mi codigo de set y put (simplificado y sin las excepciones) fuese:
> >
> > function putCombustible($combustible) {
> > $this->combustible = $combustible;
> > }
> >
> > function getCombustible() {
> > return $this->combustible;
> > }
> >
> > y en la implementación yo use:
> >
> > $the_nafta = $auto1->getCombustible();
> > $camion1->setCombustible($the_nafta);
> >
> > con esto bien tendriamos el mismo combustible en los 2 pero... seria
> > EL MISMO COMBSTIBLE!, es decir que si yo modifico combustible en
> > $auto1, como el objeto combustible es el mismo esto haria que el
> > camión tambien se modifique. Evidentemente es un error, y mi pregunta
> > es:
> >
> > ¿debo devolver una instancia nueva del objeto? (una copia) ¿o dejo que
> > el programador sea el que tenga esto en cuenta? y que por ejemplo use
> > algo asi como:
> >
> > $the_nafta = clone $auto1->getCombustible();
> > y ahi si:
> > $camion1->setCombustible($the_nafta);
> >
> >
> > Como dicen: No hay preguntas tontas, solo tontos (como yo ) que
> > preguntan...
> >
> > Saludos!
> >
> >
> > - Juan Marcos.
>
> --
> Leonardo Tadei
> leonardot en pegasusnet.com.ar
> http://blog.pegasusnet.com.ar
> Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
>
> _______________________________________________
> Php-objetos mailing list
> Php-objetos en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-objetos
_________________________________________________________________
Descargá GRATIS el poder del nuevo Internet Explorer 7.
http://optimized.msn.com/Default.aspx?mkt=es-ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://www3.fi.mdp.edu.ar/cgi-bin/mailman/private/php-objetos/attachments/20090213/c29a975b/attachment.htm
Más información sobre la lista de distribución Php-objetos